유니티 Netcode for GameObject, NetworkObject

Netcode를 사용하는 모든 게임 오브젝트는 아래 두 가지 컴포넌트를 가지고 있어야합니다!
 
1. NetworkObject
2. NetworkBehaviour



NetworkObject

Netcode 게임오브젝트는 반드시 NetworkObject 컴포넌트를 가지고 있어야 하며 적어도 NetworkBehaviour 컴포넌트를 하나 가지고 있어야 합니다
 
NetworkObject가 스폰될 때, 최초로 NetworkObjct.GlobalObjectIdHash 값이 정해집니다!


NetworkBehaviours

NetworkObject와 관련된 그들만의 커스튬 Netcode 로직을 만들기 위한 틀이라고 생각하시면 됩니다


Ownership

NGO는 서버권위적이므로, 서버가 Network Object의 Spawn & Despawn을 관리합니다!

GetComponent<NetworkObject>().Spawn();

 1. 기본적인 Spawn 함수입니다. 서버측에서 소유권을 얻습니다

GetComponent<NetworkObject>().SpawnWithOwnership(clientId);

2. 서버가 Spawn되는 Object의 소유권을 clientId에게 줍니다

GetComponent<NetworkObject>().ChangeOwnership(clientId);

3. 서버가 Netcode Object의 소유권을 clientId로 바꿔버립니다

GetComponent<NetworkObject>().RemoveOwnership();

4. 서버가 Obejct의 소유권을 없애버립니다
서버에게 다시 소유권이 돌아옵니다

GetComponent<NetworkObject>().SpawnAsPlayerObject(clientId);

5. 기본적인 PlayerObject를 만들어내는데 사용됩니다
 


 

NetworkBehaviour.IsOwner

1. 프로퍼티를 통해 로컬 클라이언트가 NetworkObject를 소유하는지 확인할 수 있습니다

NetworkBehaviour.IsOwnedByServer

2. 프로퍼티를 통해 서버가 NetworkObject를 소유하는지 여부를 확인할 수 있습니다
 
 


Finding PlayerObjects

특정한 Client ID의 PlayerObject를 알기 위해서는 

NetworkManager.Singleton.ConnectedClients[clientId].PlayerObject

를 사용하면 됩니다!


Player Prefab에 Prefab을 설정해두면 승인된 Client들이 Prefab을  Spawn하게 됩니다