Photon Fusion 1
Arbitrium의 Photon Fusion
이 가이드는 Unity 프로젝트에서 Edgegap에 헤드리스 서버를 생성하는 데 도움이 됩니다 Photon Fusion 을(를) 네트워킹 솔루션으로 사용합니다.
샘플 프로젝트 Photon Fusion의 Tanknarok 을(를) 예제로 사용합니다.
Edgegap은 모든 플레이어의 위치를 알 때 가장 잘 작동하므로(최적 위치의 서버를 선택할 수 있도록) Tanknarok 게임은 먼저 클라이언트-호스트 모드로 시작한 뒤 모든 플레이어가 참여하면 Edgegap 서버로 전환됩니다. 이는 Tanknarok에 매치 시작 전에 플레이어가 자유롭게 참여하고 떠날 수 있는 플레이 가능한 로비가 있기 때문입니다. 따라서 논리 흐름은 다음과 같습니다:
플레이어들은 같은 룸에 연결합니다
AutoHostOrClient모드로. 이 모드는 룸에서 첫 번째 플레이어를 자동으로 호스트로 선택합니다.모든 플레이어는 조인할 때 자신의 IP 주소를 호스트에게 보냅니다.
플레이어들이 준비되면, 호스트는 이러한 IP 주소들을 사용해 무작위 룸 코드(guid 사용)로 Edgegap 서버 버전의 게임을 시작합니다.
호스트가 Edgegap 인스턴스의 배포가 완료된 것을 확인하면, 다른 플레이어들에게 새로운 룸 코드에 대해 알립니다.
호스트를 포함한 모든 플레이어는 현재 룸에서 연결을 끊고 클라이언트 모드로 새로 Edgegap 서버가 호스팅하는 룸에 재접속합니다.
Edgegap 서버가 모든 예상 플레이어가 참여했음을 확인하면 매치를 시작합니다.
Edgegap 서버가 모두가 매치를 떠난 것을 확인하면 스스로 종료합니다.
계정 설정
이 애플리케이션을 실행하려면 Photon 계정과 Edgegap 계정이 모두 필요합니다. 먼저 Photon 대시보드에서 Fusion 앱을 만들고 앱 아이디를 PhotonAppSettings 스크립터블 오브젝트 파일에 설정해야 합니다. 그런 다음 대시보드에서 애플리케이션을 추가하고 API 토큰을 생성해야 합니다. 이 항목들은 EdgegapConfig 스크립터블 오브젝트 파일에 App Name, Version 및 Api Token을 설정하는 데 사용됩니다.
Edgegap 앱을 만들 때 이 프로그램은 512 CPU 단위와 512MB의 메모리를 필요로 합니다.
개발을 돕는 두 가지 플러그인도 있습니다: 더 나은 Json 직렬화를 위한 Newtonsoft Json과 ParrelSync 여러 Unity 에디터로 더 쉽게 테스트하기 위한 플러그인.
1단계: 서버 모드 설정
수정된 Tanknarok 프로젝트는 GitHub에서 가져올 수 있습니다. 또한 Photon Fusion SDK 를 프로젝트에 임포트해야 합니다.
Photon Fusion Tanknarok 프로젝트는 서버로 작동하도록 약간 수정되어야 했습니다. 주로 매치를 자동으로 시작하고 모드를 설정하는 작업이 포함됩니다.
수정된
GameLauncher.cs를 시작 시 실행하도록 변경하여GameMode.Server.수정된
FusionLauncher.cs가_spawnWorldCallback을(를) 게임이 실행될 때 호출하도록 변경했습니다. 이는InstantiatePlayer(서버에서는 플레이어가 인스턴스화되지 않기 때문에)에 의존하지 않기 위함입니다.서버인 경우 로비 씬을 건너뛰고 모든 플레이어가 참여하면 바로 매치로 이동합니다.
이는 이미 우리 수정된 Tanknarok 프로젝트에 반영되어 있으며, 해당 프로젝트는 GitHub.
Dockerfile
도커 파일은 꽤 기본적입니다. 우분투 베이스를 사용하고 컴파일된 리눅스 서버 빌드를 복사하고 파일 권한을 설정한 뒤 실행합니다.
2단계: 첫 번째 클라이언트
초기 클라이언트는 호스트 역할과 Edgegap 서버 관리를 맡습니다. 이는 EdgegapManager.cs 파일을 통해 수행되며, 이 파일은 다시 EdgegapAPIInterface.cs 파일을 사용합니다. 이 파일은 Edgegap과 상호작용하는 대부분의 기능을 래핑합니다.
파일 GameManager.cs에서, OnAllPlayersReady 호스트를 위한 함수는 매치를 시작하는 대신 Edgegap 서버를 배포합니다. 이는 모든 플레이어의 IP 주소에 기반해 수행됩니다. Unity 코루틴은 이러한 작업을 비동기적으로 수행할 수 있게 합니다. Deploy 메서드는 콜백 함수를 취하며, 이 콜백은 서버가 사용할 새 세션 이름을 전달받습니다. 모든 클라이언트에게 전환을 알리기 위해 Photon RPC 함수가 전송됩니다.
전환은 TransferringScene.
라는 빈 씬에서 일어납니다. 상태 EdgegapManager 내부에서 무작위 룸 코드가 생성되어 플레이어 수와 함께 환경 변수로 배포 API를 통해 새로 생성된 인스턴스에 전달됩니다. 이는 api 호출과 결합되어 인스턴스가 배포를 완료했는지 초당 한 번씩 확인하기 시작합니다. 또한 옵션.
OnDeployed(roomCode);
3단계: 플레이어 참가 새 Edgegap 서버로 전환하는 것 외에도, 참가하는 플레이어들은 자신의 IP 주소를 호스트에게 알려야 합니다. Photon은 이 정보를 제공하지 않으므로, GameManager 에서 ShareIpAddress 라는 RPC 호출이 Player.cs 클래스의 Spawned
메서드에서 호출됩니다.
break;
4단계: 정리 GameManager.cs 서버 측으로 돌아가서, 수정된
GameManager.playState = PlayState.TRANSITION;
마지막 업데이트
도움이 되었나요?

