[Photon] Fusion

강상훈·2023년 2월 23일
0

Unity

목록 보기
5/11
post-custom-banner

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 입력

https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-18T02%3A44%3A50.021Z.%C3%A1%C2%84%C2%89%C3%A1%C2%85%C2%B3%C3%A1%C2%84%C2%8F%C3%A1%C2%85%C2%B3%C3%A1%C2%84%C2%85%C3%A1%C2%85%C2%B5%C3%A1%C2%86%C2%AB%C3%A1%C2%84%C2%89%C3%A1%C2%85%C2%A3%C3%A1%C2%86%C2%BA%202023-01-17%20%C3%A1%C2%84%C2%8B%C3%A1%C2%85%C2%A9%C3%A1%C2%84%C2%92%C3%A1%C2%85%C2%AE%201.49.51.png

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 https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-18T02%3A48%3A05.426Z.11123.png
    • Fusion에서는 호스트에서 플레이어를 모두 생성한다. 클라이언트에서 플레이어 수를 찍어도 0으로 나온다.
    • 두개를 실행시키면 자동으로 생성됨.

Transform 동기화

  • Player 스크립트 생성(스크립트 이름도 예약어), 플레이어 프리팹에 추가 https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-18T02%3A52%3A35.822Z.code-snapshot.png
  • BasicSpawner https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-18T02%3A53%3A07.776Z.code-snapshot.png
  • NetworkInputData https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-18T02%3A53%3A44.907Z.code-snapshot.png
  • 플레이어 프리팹에서
  • 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

profile
https://totohoon01.tistory.com/
post-custom-banner

0개의 댓글