Bolt에서 시작
소개
이 문서는 API 측면에서 Photon Bolt와 Photon Fusion의 주요 차이점과 Bolt로 작성된 게임의 섹션을 Fusion 프로젝트로 포팅 하는 방법에 대해 설명합니다.
볼트와 Fusion은 많은 개념을 공유하지만, 사용법, API, 그리고 주로 일반적인 동작들이 다릅니다.
차이점
다음은 Photon Bolt와 Photon Fusion의 주요한 차이점들입니다:
- Bolt에서는 일반 API를 정적 클래스인
BoltNetwork및BoltMatchmaking를 통해 접근할 수 있으나, Fusion에서는NetworkRunner의 인스턴스를 사용하여 처리됩니다. - Fusion은 동일한 실행 파일에서 여러 피어를 실행할 수 있지만, Bolt는 하나만 실행할 수 있습니다. 이것은 게임의 동일한 인스턴스에서 여러 클라이언트를 실행하는 것이 가능하다는 것을 의미합니다. 이 기능은 테스트 및 디버깅을 할 때 매우 유용합니다.
- 두 솔루션 모두
클라이언트-서버아키텍처를 지원하는 반면, Fusion은PUN의 동작 방식과 더 유사한공유 모드도 지원합니다. 또한 Fusion은델타 스냅샷과이벤트 일관성을 모두 지원하는 반면 Bolt는 후자만 지원합니다. - Fusion은 내장된
NetworkRigidbody및NetworkRigidbody2D컴포넌트를 사용하여 물리 예측 및 롤백을 완벽하게 지원하는 반면 Bolt는 개발자가 이를 처리/구현해야 합니다. 이 사항은캐릭터 컨트롤러를 다룰때도 동일하게 적용되며, Fusion에는 플레이어의 캐릭터를 움직이기 위해 기본 구현으로NetworkCharacterController를 바로 사용할 수 있으나, Bolt는 사용자 지정 구현이 필요합니다.
유사점
다음은 Photon Bolt 와 Photon Fusion의 주요 유사점들입니다:
- Fusion은 피어 간에 데이터를 동기화하는 데 사용되는 네트워크 속성을 가진 유니티
Game Object를 나타내는NetworkObject개념을 가지고 있으며, Bolt에는BoltEntity라는 이름으로 동일한 개념을 가지고 있습니다.NetworkObject의 상태는Networked속성을 사용하여 모든NetworkBehaviour에서 형성할 수 있습니다. Bolt에서 이를 수행하려면 Bolt 에셋 윈도우를 사용하여 상태 에셋을 생성/편집하는 속성을 만들고 구성해야 합니다. 추가 정보 - 모든 주요 SDK 이벤트들( 시작, 셧다운, 연결 해제 등)은 Bolt에서
GlobalEventListener의 인스턴스를 사용하여 처리되며, Fusion에서는NetworkRunner와 연결된INetworkRunnerCallbacks의 구현을 통해 이러한 종류의 이벤트를 나타냅니다. - Bolt에서는
Ownership및Control로 부르고 있으나, 두 SDK 모두State Authority및Input Authority개념이 있으며 동일한 의미입니다. 추가 정보 - Fusion 또한 Bolt와 유사한 예측 롤백 시스템입니다. Bolt에는
BoltEntity의Controller가 전송하는Command가 있으며, Fusion에서는Input Authority가 있는 피어에서NetworkObject를 통해NetworkInput을 전송하며, Bolt에서는 롤백(상태 재설정)이 수동(resetState = true로 하는ExecuteCommand내)으로 수행되는 반면, Fusion에서는FixedUpdateNetwork메소드의 호출 전에 새로운 프레임이 시작되는 시점에 자동으로 수행됩니다. - 제어된 모든
BoltEntity에 대해 Bolt는엔티티와 연결된 각EntityEventListener에서SimulateController메소드를 호출합니다. 네트워크 입력(Bolt의Command)의 여러 소스가 없고 모든NetworkObject에 대해 하나의 네트워크 입력만 특정프레임과 연결할 수 있으므로 Fusion에서는 다르게 수행됩니다. 이는INetworkRunnerCallbacks.OnInput의 구현을 통해 수행됩니다. 추가 정보 - Fusion에서 잘 알려진 원격 프로시저 호출(
RPC)은 Bolt에서는이벤트라고 합니다. 두개 모두 유사한 제어(전송할 수 있는 주체, 수신 받을 수 있는 주체 및 신뢰성)를 갖고 있으나, Bolt에서는Bolt 에셋창에서 설정이 필요하나 Fusion에서는 코드를 통해 직접 정의할 수 있습니다. 추가 정보 - Fusion에는 일반 데이터 타입의 동기화를 도와주는 매우 많은 내장 컴포넌트를 가지고 있는데, 이 예중의 하나는
NetworkTransform이며, 이것은 Bolt에서트랜스폼 속성에 매핑될 수 있습니다. 둘 다게임 객체의 위치와 회전을 동기화하는 동시에 스냅샷 간에 부드러운 전환을 제공하여 데이터 포인트 사이를 보간할 수 있습니다추가 정보. - Fusion은 또한
Area of InterestAPI를 사용하여NetworkObject의 원하는 집합만을 동기화할 수 있습니다추가 정보. - 두 SDK 모두
씬 객체라는 개념이 있는데, 이는 Scene과 연관된 사전 생성된NetworkObject입니다. 특정 씬이 로드되면 이러한 객체가 시뮬레이션에 자동으로 연결됩니다. - 두 SDK에 모두 구현된 또 다른 솔루션은 슈터와 목표물 간의 지연을 고려하여 레이 캐스트와의 충돌을 감지하는 데 주로 사용되는
지연 보상 물리 검사입니다추가 정보.
참조 표
| Bolt | Fusion | 설명 |
|---|---|---|
| BoltNetwork, BoltMatchmaking | NetworkRunner | 주요 API 진입점 |
| BoltEntity | NetworkObject | 네트워크 게임 객체를 나타냄 |
| BoltEntity 상태 속성 | Networked 속성 | 동기화된 속성의 집합 |
| GlobalEventListener | INetworkRunnerCallbacks | 일반적인 이벤트 처리 |
| EntityEventListener | NetworkBehaviour, SimulationBehaviour | 네트워크된 게임 객체 이벤트 처리 |
| BoltNetwork.Instantiate() | NetworkRunner.Spawn() | 네트워크 된 게임 객체 생성 |
| BoltNetwork.Destroy() | NetworkRunner.Despawn() | 시뮬레이션으로부터 네트워크된 게임 객체 제거 |
| BoltEntity.IsOwner | NetworkObject.HasStateAuthority | 피어가 네트워크 게임 객체의 상태를 수정할 수 있는지 여부 |
| BoltEntity.HasControl | NetworkObject.HasInputAuthority | 입력을 네트워크 게임 객체에 푸시할 수 있는 피어가 있으면 신호를 보냅니다. |
| Commands | NetworkInput | 클라이언트에서 예측하고 서버의 상태를 변경하는 데 사용되는 제어 구조체 |
| Objects | NetworkStructs | 네트워크 속성을 포함하고 둘 이상의 상태에서 사용할 수 있는 재사용 가능한 데이터 구조체 |
| Events | RPC | 시뮬레이션에 포함될 필요가 없는 정보를 전송하는 데 사용되는 통신 메소드 |
| Transform 속성 | NetworkTransform | 네트워크 게임 객체의 변환(위치 및 회전)을 동기화하는 기능이 내장 |
| BoltNetwork.LoadScene | NetworkSceneManager | 동기화된 방식으로 씬을 스위치/로딩용 API |