Unity 매치메이커

이 가이드는 플레이어 간의 배포 및 연결을 자동화하기 위해 Edgegap의 고급 매치메이커 시스템을 사용하여 Unity 프로젝트를 만드는 데 도움을 줍니다.

이 가이드에서는 오픈 소스 샘플 프로젝트 Tanks,에서 이용 가능 Mirrorarrow-up-right 샘플의 Assets/Mirror/Examples/Tanks에 최종 샘플이 있습니다 GitHubarrow-up-right.

매치메이커 설정

구성 요소 생성

시작하려면 3개의 매치메이커 구성 요소를 생성해야 합니다. 이 프로젝트에서는 우리의 기본 구성 요소 튜토리얼을 따라 할 수 있습니다 여기.

triangle-exclamation

릴리스

로컬

매치메이커를 로컬 환경에서 테스트하려면 기본 구성 요소 튜토리얼 끝부분에 설명된 대로 Kubernetes 설정을 적용하면 됩니다. 그런 다음 프로젝트 설정.

Edgegap 사용 시

대신 Edgegap에서 매치메이커를 온라인 환경으로 테스트하려면 이전 튜토리얼의 구성 요소를 약간 수정해야 합니다. 일부 하드코딩된 값 대신 릴리스 시 주입되는 변수를 사용하게 됩니다. 변경 사항은 다음과 같아야 합니다:

디렉터

...
다음은 해당(문서에서 가져온) 일반적인 변경되지 않은 스크립트의 예입니다:

namespace director
{
  public static class Constant
  {
    static Constant()
    {
        OpenMatchMatchFunctionHost = Environment.GetEnvironmentVariable("OM_MMF_HOST");
        OpenMatchMatchFunctionPort = Int32.Parse(Environment.GetEnvironmentVariable("OM_MMF_HTTP_PORT"));
        OpenMatchBackendService = Environment.GetEnvironmentVariable("OM_BACKEND_HOST") + ':' + Int32.Parse(Environment.GetEnvironmentVariable("OM_BACKEND_HTTP_PORT"));
    }

    public static readonly string OpenMatchMatchFunctionHost;
    public static readonly int OpenMatchMatchFunctionPort;
    public static readonly string OpenMatchBackendService;

    ...
  }

  ...
}

프론트엔드

매치 함수

이 작업이 완료되면 Edgegap에 업로드한 다음 Edgegap 대시보드에서 매치메이커를 생성하고 릴리스하세요.

프로젝트 설정

다음으로, 매치메이커가 플레이어들을 연결하는 데 사용되도록 기본 Tank 프로젝트를 수정하고자 합니다. 이 샘플의 목적상 플레이어가 매치메이커 티켓을 생성하기 전에 어떤 매치 모드를 선택할지 고르도록 하여, 매치메이커가 동일한 모드를 선택한 2명의 플레이어를 자동으로 연결하게 하려 합니다.

circle-info

이전 튜토리얼로 생성된 기본 매치메이커 구성 요소로 사용 가능한 모드는 mode.casual, mode.rankedmode.private.

프로젝트에서 다음 경로에 있는 씬을 엽니다 Assets/Mirror/Examples/Tanks/Scenes네트워크 매니저 HUD 컴포넌트를 을(를) 선택하고 게임 오브젝트를 비활성화한 다음 플레이어가 게임 모드를 입력하고, 현재 매치에 있지 않을 때 티켓을 생성 및 삭제하며, 매치 중일 때 현재 매치에서 나갈 수 있도록 자체 HUD를 만드세요.

오프라인 HUD

온라인 HUD

그런 다음 프로젝트 내에 플레이어가 클릭하는 버튼에 따라 매치메이커에 어떤 요청을 보낼지 관리하는 새 스크립트를 생성해야 합니다. 요청 자체를 관리하는 코드 구조는 다음과 유사해야 합니다:

함수

클래스

HUD를 어떻게 관리하든, 반드시 MatchmakerManager 인스턴스를 당신의 Start() 함수에서 생성하여 코드가 제대로 작동하도록 하세요.

circle-info

플레이어가 티켓을 생성하면 두 티켓이 매치되자마자 해당 할당 정보를 얻기 위해 주기적으로 상태를 확인해야 합니다. 티켓은 이 값이 설정된 후 몇 분 내에 삭제되기 때문입니다. 할당얻은 후에는 플레이어를 매치에 연결할 수 있습니다.

옵션을 활성화해야 합니다.

이전 단계의 수정을 프로젝트에 모두 추가한 후에는 게임 서버를 빌드하고 컨테이너화해야 합니다. 먼저 을(를) 선택하고 게임 오브젝트에 다음 설정이 있는지 확인하세요:

  • 활성화 Auto Start Server Build 안의(in the) 을(를) 선택하고 구성 요소;

  • 다음을 설정하십시오: 포트 네트워크 주소 KcpTransport 구성 요소를 매치메이커의 GameServerPort Director 구성 요소에서 사용한 값과 동일하게 설정하세요.

circle-info

이 예에서는 두 값 모두에 `7777`을 사용했습니다.

이 작업이 완료되면 다음으로 이동하세요, 빌드 화면으로 이동하세요. Unity 에디터의 파일 -> 빌드 설정 상단 메뉴에서 확인할 수 있습니다. 사용 중인 Unity 버전에 따라 올바른 프리셋을 선택했는지 확인하세요.

  • 2021.2 버전 이전:

    • 다음으로 설정하세요 대상 플랫폼 에서 Linux;

    • 다음으로 설정하세요 아키텍처 에서 x86_64;

    • 다음 항목을 체크하세요 서버 빌드 옵션.

  • 그렇지 않은 경우:

    • 다음으로 설정하세요 플랫폼 에서 전용 서버;

    • 다음으로 설정하세요 대상 플랫폼 에서 Linux.

그런 다음 빌드 버튼을 눌러 새 빈 폴더 linux_server 을 파일 대상으로 사용하세요. 이 문서의 linux_server 폴더라고 부르겠습니다. [SERVER BUILD] 폴더를 전달하세요. 다음 Dockerfileboot.sh 파일을 [SERVER BUILD] 폴더에 추가하세요:

Dockerfile

생성된 파일의 이름으로 [GAME PORT] 이전과 동일한 포트 값으로 자리표시자를 교체하세요.

boot.sh

생성된 파일의 이름으로 [YOUR GAME] 생성된 파일의 이름을 가진 자리표시자입니다.

그런 다음 [SERVER BUILD] 폴더; 다음 Docker 명령을 실행하여 빌드 이미지를 생성하고 사설 레지스트리에 푸시하세요. Edgegap의 사설 레지스트리를 사용하려면 이 명령들 실행 후, Edgegap 컨테이너 레지스트리를 사용 중이라면 Edgegap 웹사이트에서 업로드된 이미지를 볼 수 있어야 합니다. Edgegap 레지스트리를 사용하려면arrow-up-right 을(를) 참조하세요.

를 참조하세요.

docker push <REGISTRY_URL>/<PROJECT_NAME>/<IMAGE_NAME>:<IMAGE_VERSION>

docker login -u <REGISTRY_USERNAME> <REGISTRY_URL>

를 참조하세요. 다른 개인 레지스트리를 사용할 수도 있습니다.

다음 설정으로 Edgegap 대시보드에 새 애플리케이션을 생성하세요:

  • 애플리케이션 이름 : 매치메이커의 Director 구성 요소에서 사용한 AppName 과 동일한 이름인지 확인하세요. 소문자여야 합니다.

  • 이미지 : 애플리케이션을 다른 항목들 사이에서 쉽게 식별하기 위해 사용하려는 특정 이미지일 수 있습니다.

  • 버전 이름 : 매치메이커의 Director 구성 요소에서 사용한 AppVersion 과 동일한 버전인지 확인하세요. 예: “demo”, “production”, “v1”, “v2”

  • 버전 이름: 배포하는 버전의 범위를 설명하기 위해 버전 이름을 사용할 수 있습니다. 예: “demo”, “production”, “v1”, “v2”

    • 컨테이너:

    • 레지스트리: “[URL]” — 여기서 [URL]은 컨테이너 리포지토리 페이지에서 표시되는 자격증명 값입니다.

    • 이미지 리포지토리: “[PROJECT]/[YOUR GAME]” — 여기서 [PROJECT]와 [YOUR GAME]은 도커 이미지를 푸시할 때 사용한 값입니다.

    • 태그: “[TAG]” — 여기서 [TAG]는 도커 이미지를 푸시할 때 사용한 값입니다.

    • “개인 리포지토리 사용”을 체크하세요.

    • 개인 레지스트리 사용자 이름: “[USERNAME]” — 여기서 [USERNAME]은 자격증명에 있는 값입니다.

    • 개인 레지스트리 토큰: “[TOKEN]” — 여기서 [TOKEN]은 자격증명에 있는 값입니다.

    • 요구사항: 그대로 두세요.

      • 포트: 새 포트를 추가하려면 + 포트 추가

        • [GAME PORT] - TCP/UDP - 검증 비활성화

        • - 검증 비활성화

circle-info

우리는 또한 애플리케이션에 게임 최대 지속시간(Game Max Duration) 을(를) 설정하는 것을 권장합니다. 이렇게 하면 매치메이커가 티켓을 매칭할 때 자동으로 새 배포를 생성하므로 배포가 몇 분 후에 자동으로 종료됩니다.

이는 빈 배포가 너무 오랫동안 실행되지 않도록 하기 위함입니다.

클라이언트 빌드를 사용한 테스트

매치메이커가 의도한 대로 작동하는지 확인하려면 게임을 서로 다른 두 클라이언트 인스턴스에서 실행하고 매치메이커 릴리스도 실행해야 합니다.

클라이언트 빌드를 생성하기 전에 게임 오브젝트의 Auto Start Server Build 옵션 선택을 해제했는지 확인하세요. 그런 다음 테스트 중인 매치메이커 릴리스 유형에 따라 을(를) 선택하고 MATCHMAKER_URL 을 다음으로 변경하세요: :다음으로 변경하세요 "

  • 로컬 http://localhost:51504:릴리스 활성화 후 Edgegap 대시보드에 표시된 값으로 변경하세요. 이 경우 포트를 지정할 필요가 없습니다."

  • Edgegap 사용 시 그런 다음 상단 메뉴에서

로 돌아가세요. 빌드 화면으로 이동하세요. Unity 에디터의 파일 -> 빌드 설정 플랫폼에서 Windows, Mac, Linux 를 선택하고 환경에 맞는 올바른 타겟 플랫폼 을 선택하세요. 그런 다음 빌드를 눌러 파일 대상에 새 빈 폴더를 client_build 라는 이름으로 선택하세요.

두 클라이언트(클라이언트 빌드의 두 창이든, 빌드 창 하나와 Unity 에디터 하나든)를 실행한 후 둘 다 동일한 게임 모드 을 선택하고 티켓을 생성하세요. 잠시 후 두 클라이언트는 새로 배포된 서버에 연결되며, 해당 서버의 상태는 Edgegap 대시보드에서 확인할 수 있습니다.

circle-exclamation

마지막 업데이트

도움이 되었나요?