https://docs.unity3d.com/Packages/[email protected]/api/Unity.Netcode.NetworkBehaviour.html

Unity에서 Server - Client 통신을 가능하게 해주는 모듈인 Netcode의 NetworkBehaviour를 상속한 클래스는 미리 정의된 많은 수의 Property를 상속하는데, 그 중에서는 ‘gameObject가 네트워크상에서 누구의 소유인지` 알 수 있는 것도 있다.

[Rpc(SendTo.ClientsAndHost)] void TestClientRpc(int value, ulong sourceNetworkObjectId) { Debug.Log($"Client Received the RPC #{value} on NetworkObject #{sourceNetworkObjectId}"); if (IsOwner) //Only send an RPC to the server on the client that owns the NetworkObject that owns this NetworkBehaviour instance { TestServerRpc(value + 1, sourceNetworkObjectId); } }

모든 클라이언트는 내가 Owner인 객체에 대해서만 서버에 전달을 해야 한다. 객체별로 순회하면서 함수를 호출할 때(위치 동기화를 위해 내 위치를 알려준다) 내가 Owner인 나의 객체에 대해서만 서버로 전달하고 모든 Client가 그렇게 한다면 서버는 동기화된 정보를 모든 client에게 내려주기만 하면 된다.

ex) 대전 게임의 Player Character는 2개 이상이다. 나의 PC와 replicated PC를 어떻게 구분할 것인가? 객체가 replication 될 때에, 내가 생성한 객체면 내꺼, 아니면 네꺼의 의미를 기록해두면 이 정보만으로 이용하기 편해진다. → 모든 객체에 대해 IsOwner를 두어 구분하자.