수정중인 페이지 입니다.
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 Interest
API를 사용하여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 |