Unity/Fusion2

유니티 Fusion2 Network Object에 대해 알아보기!

VR하는소년 2024. 11. 4. 08:00

Network Object란?

Network Object는 Game Session안에서 단일 Network 객체를 나타냅니다.

Network Object 줄여서 NO는 Scene이 로드되거나 Spawning함수를 통해 만들 수 있습니다.

 

NO는 Game Session안에서 고유한 Network ID를 가지게 되는데, 이 ID는 Network 상에서 참조할 때 혹은 참조될 때 사용할 수 있습니다.

Network ID를 이용해서 참조하기

 

NetworkRunner.TryFindObject() 메서드를 이용하여 Network Id로 Network Object를 찾아낼 수 있습니다.


Network Object를 생성하는 방법

Network Object를 생성하는 방식에는 2가지가 있습니다.

  1. Runner.Spawn()
  2. Scene에 미리 NO를 배치해놓기

NO를 생성할 때는 Host방식에서는 Server가 혹은 Shared Mode에서는 State Authroity를 가진 Client만이 NO를 Runner를 통해 생성시킬 수 있습니다.

 

Scene에 미리 배치된 NO들은 Scene이 로드되면 고유한 Network ID가 할당됩니다.

 


State Authority

각 NO에 대해 누가 해당 NO의 상태(State)를 제어하고 관리할 수 있는지, 즉 권한을 가지고 있는지 확인하는 용도로 State Authority를 사용합니다.

 

State Authority권한은 PlayerRef에 의해 지정되며 Server Mode에 따라 다릅니다.

 

- Server Mode : 항상 Server가 State 권한을 가지고 있으므로 서버 모드에서는 State를 다른 Peer에게 할당할 수 없습니다.

- Shared Mode : State Authority가 항상 유효한 PlayerRef값을 가집니다. PlayerRef를 통해 클라이언트는 특정 NO를 제어할 수 있습니다. RequestStateAuthority() 메서드를 통해 다른 Peer에게 State 권한 제어를 넘길 수 있습니다. IStateAuthorityChanged 인터페이스의 OnStateAuthorityChanged()콜백함수를 통해 State 변경을 감지할 수 있습니다.


Input Authority

해당 개념은 Served Mode에만 해당되며, Shared Mode에는 해당되지 않습니다.

Input Authority는 특정 Player의 Input이 어떤 오브젝트에 적용될 지 결정하는 역할을 합니다.


Replication

NO는 Attached된 이후부터는 각 틱(Tick)마다 시뮬레이션이 실행되며 State Authority를 가진 Peer가 (결과)상태를 다른 Client들에게 복제해줍니다.

 

 

Replication

 

[Network Property]는 State Authority가 변경한 값만 다른 Client에게 전송합니다.

이 값을 State Authority를 가진 Client가 수정하면 다음 Tick때 복제해줍니다.