유니티 Netcode for GameObject, Object Visibility

NetworkObject Visibility이란?

Object (NetworkObject) visibility는 Netcode에서 사용하는 용어로써, 하나 이상의 클라이언트들에게 보여지고 있는지 사용됩니다
 

Visibility사용하기

Visibility을 사용하는 한 가지 방법은 NetworkObject.CheckObjectVisibility callback을 등록하는 것입니다.
 
아래의 예시를 보면 콜백이 NetworkObject가 클라이언트에게 보이는지를 결정하기 위해 사용되는 파라미터로서 클라이언트 식별값(ClientID)을 포함하고 있는 것을 볼 수 있습니다.
 
보여지고 있는지 확인하는 방법으로는 NetworkObject.CheckObjectVisibility에 Callback을 등록하는 것입니다!

NetworkObject netObject = GetComponent<NetworkObject>();
netObject.CheckObjectVisibility = ((clientId) => {
    // return true to show the object, return false to hide it
    if (Vector3.Distance(NetworkManager.Singleton.ConnectedClients[clientId].PlayerObject.transform.position, transform.position) < 5)
    {
        // Only show the object to players that are within 5 meters. Note that this has to be rechecked by your own code
        // If you want it to update as the client and objects distance change.
        // This callback is usually only called once per client
        return true;
    }
    else
    {
        // Hide this NetworkObject
        return false;
    }
});

 
 
 

Additional Visibility Methods

NetworkObject netObject = GetComponent<NetworkObject>();
netObject.NetworkShow(clientIdToShowTo);

싱글 클라이언트에게만 보여지게 해줍니다

NetworkObject netObject = GetComponent<NetworkObject>();
netObject.NetworkHide(clientIdToHideFrom);

싱글 클라이언트에게만 안보이게 해줍니다

/// networkObjects is of type List<NetworkObject>
NetworkObject.NetworkShow(networkObjects, clientId);

싱글 클라이언트에게 몇 개의 NetworkObjects만을 보여지게 해줍니다

/// networkObjects is of type List<NetworkObject>
NetworkObject.NetworkHide(networkObjects, clientId);

싱글 클라이언트에게 몇 개의 NetworkObjects만을 안보이 해줍니다