This document is about: FUSION 2
SWITCH TO

네트워크 토폴로지

네트워크 토폴로지

Fusion은 세 가지 네트워크 토폴로지를 지원합니다:

Fusion Network Topologies
Fusion 네트워크 토폴로지.

전용 서버

서버 애플리케이션은 유니티 프로젝트에서 빌드 되어 헤드리스 유니티 빌드로 실행됩니다. 전용 서버는 모든 객체에 대해 완전하고 독점적인 상태 권한을 가집니다.

클라이언트는 입력을 서버로 보내 서버가 해당 입력에 반응하도록 하거나 RPC를 사용하여 변경을 요청함으로써만 네트워크 객체를 수정할 수 있습니다.

전용 서버는 일반적으로 공용 고정 IP에서 호스팅 되므로 UDP 홀 펀칭이나 네트워크 릴레이가 필요하지 않습니다.

전용 서버의 단점은 게임 세션마다 전체 유니티 인스턴스를 실행해야 하므로 비용이 증가한다는 점입니다.

플레이어 호스트 서버

플레이어 호스트 모드에서는 플레이어 중 한 명의 기기가 서버와 클라이언트 역할을 모두 수행합니다. 호스트는 로컬 플레이어를 가지고 있으며, 입력을 처리하고 렌더링을 클라이언트처럼 보간합니다.

플레이어 호스트 모드에는 내장된 UDP NAT 펀치 스루 기능이 있어 각 클라이언트와 플레이어 호스트 간의 직접 연결을 지원합니다. 이 기능이 실패하면 Fusion은 릴레이를 통해 연결합니다. 이는 약 10명 중 1명에게만 발생하는 드문 경우이며, 릴레이는 잠재적인 추가 지연 원인이 될 수 있지만 게임 플레이에 눈에 띄는 영향을 미치지는 않습니다.

결론적으로, 이 모드는 전용 서버와 동등하지만 서버 호스팅 비용이 발생하지 않아 더 저렴합니다. 그러나 상태 권한의 신뢰성에 대한 대가를 치러야 합니다. 부정직한 호스트는 치트 행위를 할 수 있습니다.

단일 플레이어

Fusion은 네트워크 코드를 로컬에서 변경 없이 실행할 수 있도록 지원합니다. 로직은 플레이어 호스트 서버 모드처럼 실행되지만 외부 네트워크 연결을 열지 않습니다. 게임은 코드의 변경이나 특별한 케이스 없이 실행됩니다.

공유 모드

공유 모드에서는 네트워크 객체에 대한 권한이 모든 클라이언트 간에 분배됩니다. 각 클라이언트는 자신이 생성한 객체에 대해 초기 상태 권한을 가지며, 해당 권한을 다른 클라이언트에게 양도할 수 있습니다. 선택적으로 클라이언트가 권한을 임의로 가져갈 수 있도록 설정할 수도 있습니다. Photon 룸은 상태 권한 변경을 제어하고 네트워크 상태의 전체 복사본을 보유합니다.

플레이어 호스트 모드와 공유 모드 비교

다음은 Photon Fusion의 다양한 기능에 대한 차이점을 보여주는 플레이어 호스트 모드와 공유 모드의 비교 차트입니다.

상태 권한: 네트워크 객체(NetworkObject)에 상태 권한(State Authority)을 가진 사용자는 NetworkProperty를 설정할 수 있으며, 이는 다른 클라이언트에 업데이트됩니다.
플레이어 호스트 모드 공유 모드
이 모드에서 플레이어 호스트는 모든 네트워크 객체에 대해 항상 상태 권한을 가집니다. 각 네트워크 객체는 한 번에 하나의 상태 권한만 가질 수 있지만, 세션 내에서 어떤 클라이언트가 가져갈 수 있습니다.
NetworkObject.ReleaseStateAuthority와 NetworkObject.RequestStateAuthority
플레이어 호스트 모드 공유 모드
이 모드에서는 상태 권한을 이전할 수 없습니다. 네트워크 객체의 설정에 따라 상태 권한을 이전할 수 있습니다.
INetworkRunner.OnInput
플레이어 호스트 모드 공유 모드
필수입니다. InputAuthority가 없으면 플레이어는 관련 네트워크 객체를 제어하려는 의사를 전달할 방법이 없습니다. 동작하지만 입력은 다른 플레이어나 서버로 전송되지 않습니다. 클라이언트는 상태 권한을 가지고 있으며 로컬 입력으로 네트워크 객체를 즉시 업데이트할 수 있으므로 필수는 아닙니다.
NetworkRunner.SetIsSimulated
플레이어 호스트 모드 공유 모드
이 모드에서 동작하며, 클라이언트가 네트워크 동작을 시뮬레이션하도록 합니다. 그러나 플레이어 호스트는 여전히 시뮬레이션된 객체의 네트워크 속성에 대한 상태 권한을 가집니다. 클라이언트는 자신이 상태 권한을 가진 네트워크 객체만 시뮬레이션할 수 있으므로, 공유 모드에서는 적용되지 않습니다. 이 메서드를 실행하면 아무 작업도 수행되지 않고 경고 메시지가 표시됩니다.
NetworkBehaviour.FixedNetworkUpdate
플레이어 호스트 모드 공유 모드
플레이어 호스트는 모든 네트워크 동작에 대해 이 메서드를 실행합니다. 추가적으로 InputAuthority를 가진 플레이어나 NetworkRunner.SetIsSimulated를 호출한 플레이어도 이 메서드를 실행하지만, 수행한 네트워크 속성 변경은 플레이어 호스트에 의해 덮어씌워집니다. 클라이언트가 네트워크 객체에 대해 상태 권한을 가지고 있을 때만 실행됩니다.
NetworkObject.Render
플레이어 호스트 모드 공유 모드
호스트 모드에서는 모든 시뮬레이션 단계 후에 실행되므로 더 신뢰할 수 있습니다. 실행되지만, MonoBehaviour.Update와 같은 Unity의 내장 함수로 시각적 변경을 렌더링 할 수 있으므로 필요하지 않습니다.
LagCompensation & HitboxManager
플레이어 호스트 모드 공유 모드
클라이언트가 시뮬레이션에서 네트워크 객체에 상태 권한을 가지지 않기 때문에, 이러한 기능은 충돌 테스트 및 기타 기능을 더 정확하게 만드는데 유용할 수 있습니다. 사용자가 관련 네트워크 객체에 대해 상태 권한을 가지므로 지연이 없으며, 따라서 지연 보상은 필요하지 않고 공유 모드에서 지원되지 않습니다.
호스트 마이그레이션
플레이어 호스트 모드 공유 모드
이 기능은 호스트 모드에만 적용됩니다. 공유 모드에서는 호스트가 없으므로 이 기능은 적용되지 않습니다.
SharedModeMasterClient
플레이어 호스트 모드 공유 모드
호스트 모드에는 SharedModeMasterClient가 없습니다. 플레이어 호스트는 SharedModeMasterClient와 동일하지 않습니다. SharedModeMasterClient는 공유 모드에서만 존재합니다. 일반적으로 가장 먼저 연결된 클라이언트가 해당되지만, SharedModeMasterClient가 연결을 끊거나 NetworkRunner.SetMasterClient가 실행되면 다른 클라이언트로 이전됩니다.
클라이언트 틱 속도, 클라이언트 전송 속도, 서버 틱 속도, 서버 전송 속도.
플레이어 호스트 모드 공유 모드
호스트 모드에서 설정할 수 있습니다. 공유 모드에서는 설정할 수 없습니다. 클라이언트 틱 속도는 항상 32이고, 클라이언트 전송 속도는 항상 16입니다. 서버 틱 속도와 전송 속도는 적용되지 않습니다.
관심 영역
플레이어 호스트 모드 공유 모드
반경, 셀 크기 및 그리드 크기를 조정할 수 있습니다(또는 네트워크 프로젝트 구성 설정에서 설정). 반경은 300을 초과할 수 없으며, 셀 크기는 항상 32이고, 그리드 크기는 항상 1024입니다.
Back to top