This document is about: FUSION 2
SWITCH TO

Bolt에서 마이그레이션

소개

이 문서에서는 API 측면에서 Photon BoltPhoton Fusion의 주요 차이점과 Bolt로 작성된 게임 섹션을 Fusion 프로젝트로 포팅 하는 방법에 대해 설명합니다. Bolt와 Fusion은 많은 개념을 공유하지만 사용법과 API, 그리고 주로 일반적인 행동이 다릅니다.

Fusion 모드

Bolt에서 Fusion으로 마이그레이션할 때 이해해야 할 매우 중요한 점은 Bolt가 서버/호스트 토폴로지만 제공하고, Fusion은 완전한 클라이언트 권한을 가진 추가적인 공유 모드를 제공한다는 것입니다(Photon 유니티 네트워킹과 유사함).

Bolt에 존재하는 대부분의 개념은 Fusion 호스트/서버 모드로 전환할 수 있지만 공유 모드로는 전환할 수 없습니다. 이 페이지에서는 Bolt 지식을 Fusion 서버/호스트 모드로 마이그레이션하는 방법에 대해 설명합니다.

차이점

다음은 Photon BoltPhoton Fusion의 주요 차이점들입니다:

  • 일반 API는 Fusion에서 정적 클래스인 BoltNetworkBoltMatchmaking을 통해 접근할 수 있으며, 이는 NetworkRunner의 인스턴스를 사용하여 수행됩니다.
  • Fusion은 동일한 실행 파일에서 여러 피어를 실행할 수 있는 반면, Bolt는 하나만 실행할 수 있습니다. 이는 동일한 게임 인스턴스에서 여러 클라이언트를 실행할 수 있음을 의미합니다. 이는 테스트 및 디버깅 목적으로 유용합니다.
  • Fusion은 NetworkRigidbodyNetworkRigidbody2D에 내장된 컴포넌트를 사용하여 물리 예측과 롤백을 전적으로 지원하고 있으므로 개발자가 이를 처리/실행해야 합니다. Character Controller를 다룰 때도 마찬가지이지만, Fusion은 기본적으로 사용자의 캐릭터를 이동시키기 위한 NetworkCharacterController를 기본적으로 갖추고 있지만, Bolt의 경우에는 개발자가 구현해야 합니다.

유사점

다음은 Photon BoltPhoton Fusion의 주요 유사점들입니다:

  • Fusion은 여러 피어 간에 데이터를 동기화하는 데 사용되는 네트워크 속성을 갖는 유니티 Game Object를 나타내는 NetworkObject의 개념을 가지고 있으며, Bolt는 BoltEntity라는 이름으로 동일한 개념을 가지고 있습니다. NetworkObject의 상태는 Networked 속성을 사용하여 모든 NetworkBehaviour에서 설명할 수 있으며, 이를 위해서는 상태 에셋을 생성/편집하는 Bolt Assets 창을 사용하여 속성을 생성하고 구성해야 합니다. 자세한 내용을 참고하세요.
  • 모든 주요 SDK 이벤트(시작, 종료, 연결 해제 등)는 GlobalEventListener의 인스턴스를 사용하여 Bolt에서 처리되며, Fusion은 NetworkRunner와 관련된 INetworkRunnerCallbacks를 구현하여 이와 같은 이벤트를 노출합니다.
  • 두 SDK 모두 상태 권한입력 권한이라는 개념을 가지고 있지만, Bolt에서는 OwnershipControl로 불리지만 정확히 같은 의미를 가지고 있습니다. 자세한 정보를 참고하세요.
  • Fusion 역시 Bolt와 마찬가지로 예측 롤백 시스템입니다. Bolt에는 BoltEntityController가 보내는 Command가 있지만 Fusion에서는 NetworkObject를 통해 입력 권한을 가진 피어의 NetworkInput을 보내는 방식이지만, FixedUpdateNetwork 메소드를 호출하기 전에 새 프레임의 시작 부분에 자동으로 롤백(resetState = true인 경우 실행 명령 내에서)이 수동으로 수행되는 Bolt와는 다릅니다.
  • 제어되는 모든 BoltEntity에 대해 Bolt는 엔티티와 연관된 각 EntityEventListener에서 SimulateController 메소드를 호출합니다. 이는 Fusion에서는 여러 개의 NetworkInput(BoltCommand) 소스가 존재하지 않으며 모든 NetworkObjects에서 특정 Frame에 연결할 수 있는 NetworkInput은 단 하나뿐이기 때문에 다르게 수행됩니다. 이는 INetworkRunnerCallbacks.OnInput 콜백을 구현하는 방식으로 수행됩니다. 자세한 정보를 확인하세요.
  • Fusion의 잘 알려진 원격 프러시저 호출(RPC)은 Bolt의 이벤트라고 합니다. Fusion의 코드를 통해 직접 정의할 수 있지만, Bolt의 경우에는 Bolt Assets 창을 사용하여 설정해야 합니다. 자세한 내용을 참고하세요.
  • Fusion에는 공통 유형의 데이터를 동기화하는 데 도움이 되는 많은 컴포넌트가 내장되어 있는데, 대표적인 예가 Bolt의 Transform Property에 매핑할 수 있는 NetworkTransform입니다. 둘 다 스냅샷 간의 위치와 회전을 동기화하는 동시에 데이터 포인트 간의 보간이 가능한 스냅샷 간의 원활한 전환을 제공하는 데 사용됩니다. 자세한 정보를 참고하세요.
  • Fusion은 관심 영역 API를 이용해 원하는 NetworkObject 세트만 동기화할 수도 있습니다. 상세 정보를 참고하세요.
  • 두 SDK 모두 씬과 연관된 NetworkObjectScene Object라는 개념이 있습니다. 이 오브젝트들은 특정 씬이 로드되면 자동으로 시뮬레이션에 연결됩니다.
  • 두 SDK 모두에서 구현된 또 다른 솔루션은 슈터와 표적 사이의 지연을 고려하여 레이캐스트와의 충돌을 탐지하는 데 주로 사용되는 래그 보상 물리 검사입니다. 자세한 정보를 참고하세요.

참고 테이블

Bolt Fusion 설명
BoltNetwork, BoltMatchmaking NetworkRunner 주요 API 진입점
BoltEntity NetworkObject 네트워크화된 게임 객체를 나타냄
BoltEntity 상태 속성 네트워크화된 속성 동기화된 속성들의 집합
GlobalEventListener INetworkRunnerCallbacks 일반 이벤트 처리
EntityEventListener NetworkBehaviour, 네트워크화된 게임 객체 이벤트 처리
BoltNetwork.Instantiate() NetworkRunner.Spawn() 새로운 네트워크화된 게임 객체 생성
BoltNetwork.Destroy() NetworkRunner.Despawn() 시뮬레이션으로부터 네트워크화된 게임 객체 제거
BoltEntity.IsOwner NetworkObject.HasStateAuthority 피어가 네트워크로 연결된 게임 개체의 상태를 수정할 수 있는지 여부에 대한 신호
BoltEntity.HasControl NetworkObject.HasInputAuthority 네트워크로 연결된 게임 객체에 입력을 푸시 할 수 있는 피어의 경우 신호
Commands NetworkInput 클라이언트에서 예측하고 서버의 상태를 변경하는 데 사용되는 제어 구조체
Objects NetworkStructs 네트워크화된 속성들을 포함하며 둘 이상의 상태에서 사용할 수 있는 재사용 가능한 데이터 구조체
Events RPC 시뮬레이션의 일부가 될 필요가 없는 정보를 전송하는 데 사용되는 통신 메소드
Transform Property NetworkTransform 네트워크 게임 객체의 변환(위치 및 회전) 동기화를 위한 내장 지원
BoltNetwork.LoadScene NetworkSceneManager 동기화된 방식으로 장면 전환/로딩을 위한 API
Back to top