Unity Mirror 샘플
Explore a deprecated sample project demonstrating Relay integration with the Mirror Networking API.
읽는 시간 3분최근 업데이트: 5일 전
Unity Mirror 샘플 프로젝트에 오신 것을 환영합니다. 이 프로젝트는 UTP(Unity Transport 패키지)와 Relay를 Mirror Networking API와 함께 사용하는 방법을 보여 줍니다.
- UTP(Unity Transport 패키지)는 로우레벨 네트워킹 라이브러리로, 안정성, 정렬, 단편화와 같은 추가적인 기능을 갖춘 UDP 소켓을 통해 연결 기반 추상화 레이어를 제공합니다.
- Relay는 전용 게임 서버나 P2P 커뮤니케이션 없이도 참여 코드를 사용하는 형태의 워크플로를 통해 여러 플레이어를 안전하게 연결할 수 있는 Unity 서비스입니다.
- Mirror는 Unity 플랫폼을 위한 하이레벨 네트워킹 라이브러리입니다.
Assets/UTPTransportAssets/Mirror요구 사항 및 제한 사항
Unity Mirror 샘플에는 다음과 같은 요구 사항이 있습니다.- 지원되는 Unity 에디터 버전. 샘플 프로젝트는 2020.3 버전 이상에서 지원됩니다.
- UGS(Unity Gaming Services) 계정
- Unity 서비스
- Unity Relay
- Unity Transport 패키지(Relay에 포함)
- Unity Jobs
- UAS(Unity Authentication 서비스)
- Mirror Networking API v67.1.0
제한 사항
이 샘플은 Game Server Hosting에서 바로 사용할 수 없습니다. 하지만 GSH(Game Server Hosting)에서 사용할 수 있게 샘플을 조정할 수 있습니다. GSH에서 사용할 수 있게 샘플을 조정하려는 경우, Relay는 P2P를 모방하는 솔루션으로 GSH와 동일한 역할을 한다는 점을 떠올려 보십시오. 따라서 Relay와 GSH를 함께 사용할 필요는 없습니다.필수 조건
계속하기 전에 샘플 프로젝트를 사용하기 위한 모든 필수 조건을 갖췄는지 확인하십시오.- Unity Dashboard 프로젝트 생성
- Relay 서비스 활성화
- Unity 에디터 설치(버전 2020.3 이상)
- Unity 에디터 로그인
- Unity 에디터에 Unity Dashboard 프로젝트 연결
샘플 아키텍처
Unity Mirror 샘플 프로젝트에는 다음 두 가지 컴포넌트가 있습니다. 게임 클라이언트와 게임 서버 컴포넌트는 Unity와 Mirror Networking API를 사용합니다.게임 클라이언트
게임 클라이언트는 플레이어가 게임 서버와 백엔드 서비스에 연결하기 위해 플레이어의 머신에서 로컬로 실행하는 실행 파일입니다. 게임 클라이언트를 Relay와 함께 실행할 수도 있고 Relay 없이 실행할 수도 있습니다.게임 서버
게임 서버는 게임 서버 프로세스를 실행하는 빌드 실행 파일입니다. 개발용으로 게임 서버 실행 파일을 로컬에서 실행하거나, 프로덕션용으로 Game Server Hosting 등의 서비스를 통해 호스팅할 수 있습니다.가이드
다음 섹션에서는 샘플 프로젝트와 상호 작용하고, 샘플 프로젝트를 테스트하고 조정하는 방법을 설명합니다.에셋 스토어에서 Mirror 샘플 설치
다음 단계를 완료하여 샘플 프로젝트의 UTP 전송 구현을 프로젝트에 설치할 수 있습니다. 샘플 프로젝트 코드는 GitHub 저장소에서도 받을 수 있습니다.- 에셋 스토어의 Mirror 페이지로 이동합니다.
- Add Mirror to My Assets를 선택합니다.
- Unity 에디터를 실행합니다.
-
-
패키지 관리자를 사용하여 Mirror를 임포트합니다.
- Window > Package Manager > Packages: My Assets > Mirror > Download/Import를 선택합니다.
-
패키지 관리자를 사용하여 Relay를 임포트합니다.
- Window > Package Manager > Add > Add package from git URL... > **"com.unity.services.relay@1.0.4"**를 선택합니다.
-
패키지 관리자를 사용하여 Jobs를 임포트합니다.
- Window > Package Manager > Add > Add package from git URL... > **"com.unity.jobs"**를 선택합니다.
-
샘플 프로젝트의 디렉토리를 프로젝트로 복사합니다.
Assets\UTPTransport -
컴포넌트를
Mirror.NetworkManager에 연결합니다.GameObject -
컴포넌트를
UTP.UtpTransport에 연결합니다.GameObject -
컴포넌트를
UTP.UtpTransport컴포넌트의Mirror.NetworkManager필드에 할당합니다.Transport -
Mirror에서 게임 오브젝트에 자동으로 연결한 컴포넌트를 제거합니다.
kcp2k.KcpTransport
-
패키지 관리자를 사용하여 Mirror를 임포트합니다.
샘플 프로젝트 테스트
테스트 목적으로 샘플 프로젝트의 인스턴스 두 개를 실행하려면, 다음 단계를 완료하십시오.
- Unity 에디터에서 샘플 프로젝트를 엽니다. 프로젝트는 Unity 2020.3 이상을 지원합니다.
- 에디터 드롭다운에서 ParallelSync > Clones Manager를 선택합니다. ParallelSync를 사용하면 같은 프로젝트로 여러 에디터 인스턴스를 실행할 수 있습니다.
- Add new clone을 선택합니다.
- 클론을 생성했으면 Open in New Editor를 선택합니다.
- 두 에디터 인스턴스에서 플레이 버튼을 선택합니다.
- 두 에디터 인스턴스에서 Auth Login을 선택합니다. 이 인증에는 Relay용 UAS(Unity Authentication 서비스)를 사용합니다.
- Standard Host를 선택하여 UTP 전송을 통해 서버를 실행합니다.
- **Client (without Relay)**를 선택하여 OTP 전송을 통해 서버에 연결합니다.
- Relay Host를 선택해서 Relay 서버를 할당합니다.
- **Client (with Relay)**를 선택해서 Relay 서버에 연결합니다.
Linux용 크로스 컴파일
다음과 같이 Unity 에디터를 사용하여 Linux용 게임 클라이언트와 게임 서버 실행 파일을 모두 크로스 컴파일할 수 있습니다.- Unity Hub를 실행하고 Installs를 선택합니다.
- 버전 2020.3.24f1 옆에 있는 기어를 선택합니다.
- Add modules를 선택합니다.
- Linux Build Support (IL2CPP and Mono) 모듈을 선택하고 Install을 선택합니다.
- Unity 에디터를 실행합니다.
- File > Build Settings를 선택합니다.
- Target Platform으로 Linux를 선택합니다.
- 서버 빌드를 패키징하려면 Server build를 선택합니다. 서버 빌드가 아닌 경우에는 Build를 선택하고 빌드 위치를 선택합니다.
게임 클라이언트 실행
게임 클라이언트 컴포넌트는 로컬에서 스탠드얼론 애플리케이션으로 실행하거나 Unity 에디터를 통해 실행할 수 있습니다. 게임 클라이언트를 스탠드얼론 애플리케이션으로 실행하려면 파일 탐색기나 커맨드 라인 인터페이스를 통해 게임 클라이언트 실행 파일을 선택합니다. Unity 에디터를 통해 게임 클라이언트를 실행하는 방법은 다음과 같습니다.- Unity 에디터(버전 2020.3 이상)에서 Unity Mirror 샘플 프로젝트를 엽니다.
- 플레이 버튼을 선택합니다.
게임 서버 실행
-server게임 클라이언트와 게임 서버 동시 실행
게임 클라이언트와 게임 서버 실행 파일을 하나는 스탠드얼론 애플리케이션으로, 다른 하나는 Unity 에디터를 통해 로컬에서 실행할 수 있습니다.
예를 들어 다음과 같이 게임 서버는 스탠드얼론 애플리케이션으로 실행하고 게임 클라이언트는 Unity 에디터를 통해 실행할 수 있습니다.
- 커맨드 라인 인터페이스를 통해 게임 서버를 시작합니다.
- 로그를 실시간으로 보려면 인수를 추가합니다.
-log - Unity 에디터에서 Start Client를 선택합니다.
샘플 프로젝트 조정
Unity Mirror 샘플 프로젝트는 다음 작업을 수행할 수 있는 샘플 코드를 제공합니다.Mirror 네트워크 관리자 초기화
Assets/Mirror/Runtime/NetworkManager.csNetworkManagerRelay 기능 추가
Assets/UTPTransport/RelayNetworkManager.csRelayNetworkManagerNetworkManager- 참여 코드를 사용합니다.
- Relay 서버 정보를 가져옵니다.
- 사용할 수 있는 Relay 지역을 확인합니다.
- 호스트 플레이어로 NetworkDriver를 시작합니다.
- Relay 서버에 참여합니다.
- 참여 코드를 사용하여 연결합니다.
UTP 기능 추가
Assets/UTPTransport/UtpTransport.csUtpTransportMirror.Transport- Relay 참여 코드로 클라이언트를 설정합니다.
- 참여 코드에서 할당을 가져옵니다.
- Relay 지역을 가져옵니다.
- Relay 서버를 할당합니다.
커스텀 네트워크 관리자 생성
Assets/Scripts/MyNetworkManager.csMyNetworkManagerRelayNetworkManager사용자 인터페이스 표시
Assets/Scripts/MenuUI.csMenuUIMyNetworkManager프로젝트에서 Mirror에 UTP 전송 사용
이 샘플에는 Mirror용 UTP(Unity Transport 패키지) 전송이 포함되어 있습니다. 다음 섹션의 지침에 따라 프로젝트에서 이 샘플의 코드를 사용할 수 있습니다.기존 전송을 UTP 전송으로 마이그레이션
이미 Mirror를 사용 중이고 빌트인 전송 중 하나에서 UTP 전송으로 마이그레이션하려는 경우 다음 단계를 완료하십시오.- Unity 에디터를 실행합니다.
- 컴포넌트가 포함된 씬을 찾아서 엽니다.
Mirror.NetworkManager - 컴포넌트를
UTP.UtpTransport에 연결합니다.GameObject - 컴포넌트를
UTP.UtpTransport컴포넌트의Mirror.NetworkManager필드에 할당합니다.Transport - 에서 기존
GameObject컴포넌트를 제거합니다.Mirror.Transport - 포트 및 로그 상세 구성과 같은 컴포넌트의 파라미터를 원하는 대로 설정합니다.
UTP.UtpTransport
UTP와 함께 Relay 사용
Relay를 사용하려면Mirror.NetworkManagerUTP.RelayNetworkManagerUTP.RelayNetworkManagerMirror.NetworkManager인증을 마치고 나면try{ await UnityServices.InitializeAsync(); await AuthenticationService.Instance.SignInAnonymouslyAsync(); Debug.Log("Logged into Unity, player ID: " + AuthenticationService.Instance.PlayerId);}catch (Exception e){ Debug.LogError(e);}
UTP.RelayNetworkManager