Version: 0.1.0
Object Visibility
Starting with MLAPI version 6.0.0, clients have no explicit knowledge of all objects or clients that are connected to the server.
This allows you to only show a subset of objects to any client at any given time. To allow this, a visibility API was introduced to the NetworkObject
component and consists of four parts.
The first part is a callback that gets invoked when new clients connect or when the object is about to get spawned. It asks whether the object should be shown to a specific client. If you don't register this callback, it will default to true, meaning visible.
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
{
// Dont show this object
return false;
}
});
To change the visibility during the game, you can use the following APIs:
NetworkObject netObject = GetComponent<NetworkObject>();
netObject.NetworkShow(clientIdToShowTo);
NetworkObject netObject = GetComponent<NetworkObject>();
netObject.NetworkHide(clientIdToHideFrom);