Photon Fusion
Photon Fusion
- 멀티 플레이를 쉽게 구현하기 위한 라이브러리
- 20CCU(20명 동시 접속)까지 무료
- 서버 측에서 모든 데이터(렌더링, 동기화, 등등)을 처리해서 결과를 보내준다.
Installation
- Unity 2020.3 이상
- Project Settings > Editor > Asset Serialization, Mode = Force Text
com.unity.nuget.mono-cecil@1.10.2
패키지 설치
- Fusion(1.1.5) 패키지 설치
Photon Settings
- ‘관리화면으로 이동’ → ‘새 어플리케이션 만들기’
- Photon 종류 → Fusion 생성
- App ID 복사
- 유니티 메뉴 바 → Fusion → Fusion 허브에 App ID 입력

Usage
- Network 오브젝트 생성, NetworkRunner, NetworSceneManager Default 추가
- BasicSpawner 스크립트 생성, 추가, INetworkRunnerCallbacks 상속받고 인터페이스 구현
- 네트워크할 객체(플레이어)에 Network Object 추가
- Network Project Config에서 Sever Physics Mode - client / Simulation - Tick rate30
- WebGL의 경우 Network Project Config에 어셈블리 정의 파일 추가
- BasicSpawner.StartGame

- BasicSpawner.OnPlayerJoined

- Fusion에서는 호스트에서 플레이어를 모두 생성한다. 클라이언트에서 플레이어 수를 찍어도 0으로 나온다.
- 두개를 실행시키면 자동으로 생성됨.
- Player 스크립트 생성(스크립트 이름도 예약어), 플레이어 프리팹에 추가

- BasicSpawner

- NetworkInputData

- 플레이어 프리팹에서
- RigidBody, Collier 제거
- Character Controller 추가
- NetoworkCharacterControllerProtype 추가
Conclusion
- 서버에서 모든 데이터를 처리하기 때문에 서버리전에 따라서 latency 심함.
- 움직임이 CharacterController 기반으로 동작해서 물리연산을 실행하지 않음, 바닥에 닺기전까지 움직일 수 없다던가 움직임에 처리해야할 파라미터가 많음.
Warnings
- 공식 문서 자체가 수정이 안되고 있어서 튜토리얼을 따라해도 안된다.
runner를 생성하는 곳에서 SceneObjectProvider = GetComponent<NetworkSceneManagerDefault>()
가 없어도 정상작동.
[Reference]
https://doc.photonengine.com/ko-kr/fusion/current/fusion-100/fusion-101
https://note.com/takenokohal/n/n3d2072bce13b