유니티 Fusion2 Network Object에 대해 알아보기!
Network Object란?
Network Object는 Game Session안에서 단일 Network 객체를 나타냅니다.
Network Object 줄여서 NO는 Scene이 로드되거나 Spawning함수를 통해 만들 수 있습니다.
NO는 Game Session안에서 고유한 Network ID를 가지게 되는데, 이 ID는 Network 상에서 참조할 때 혹은 참조될 때 사용할 수 있습니다.
NetworkRunner.TryFindObject() 메서드를 이용하여 Network Id로 Network Object를 찾아낼 수 있습니다.
Network Object를 생성하는 방법
Network Object를 생성하는 방식에는 2가지가 있습니다.
- Runner.Spawn()
- 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들에게 복제해줍니다.
[Network Property]는 State Authority가 변경한 값만 다른 Client에게 전송합니다.
이 값을 State Authority를 가진 Client가 수정하면 다음 Tick때 복제해줍니다.