Class NetworkBehaviour
The base class to override to write network code. Inherits MonoBehaviour.
Inherited Members
Namespace: Unity.Netcode
Assembly: Unity.Netcode.Runtime.dll
Syntax
public abstract class NetworkBehaviour : MonoBehaviour
Properties
HasAuthority
Determines if the local client has authority over the associated NetworkObject.
- In client-server contexts: returns true if `IsServer` or `IsHost`.
- In distributed authority contexts: returns true if `IsOwner`.
Declaration
public bool HasAuthority { get; }
Property Value
Type | Description |
---|---|
bool |
HasNetworkObject
Gets whether this NetworkBehaviour instance has a NetworkObject owner.
Declaration
public bool HasNetworkObject { get; }
Property Value
Type | Description |
---|---|
bool |
IsClient
Gets whether executing as a client.
Declaration
public bool IsClient { get; }
Property Value
Type | Description |
---|---|
bool |
IsHost
Gets whether executing as a host (both server and client).
Declaration
public bool IsHost { get; }
Property Value
Type | Description |
---|---|
bool |
IsLocalPlayer
If a NetworkObject is assigned, returns whether the NetworkObject is the local player object. If no NetworkObject is assigned, returns false.
Declaration
public bool IsLocalPlayer { get; }
Property Value
Type | Description |
---|---|
bool |
IsOwnedByServer
Gets whether the object has an owner.
Declaration
public bool IsOwnedByServer { get; }
Property Value
Type | Description |
---|---|
bool |
IsOwner
Gets whether the object is owned by the local player or if the object is the local player object.
Declaration
public bool IsOwner { get; }
Property Value
Type | Description |
---|---|
bool |
IsServer
Gets whether executing as a server.
Declaration
public bool IsServer { get; }
Property Value
Type | Description |
---|---|
bool |
IsSessionOwner
Gets whether the client is the distributed authority mode session owner.
Declaration
public bool IsSessionOwner { get; }
Property Value
Type | Description |
---|---|
bool |
IsSpawned
Determines whether it's safe to access a NetworkObject and NetworkManager from within a NetworkBehaviour component. Primarily useful when checking NetworkObject or NetworkManager properties within FixedUpate.
Declaration
public bool IsSpawned { get; }
Property Value
Type | Description |
---|---|
bool |
NetworkBehaviourId
Gets NetworkId for this NetworkBehaviour from the owner NetworkObject.
Declaration
public ushort NetworkBehaviourId { get; }
Property Value
Type | Description |
---|---|
ushort |
NetworkManager
Gets the NetworkManager that owns this NetworkBehaviour instance.
See NetworkObject
note for how there is a chicken/egg problem when not initialized.
Declaration
public NetworkManager NetworkManager { get; }
Property Value
Type | Description |
---|---|
NetworkManager |
NetworkObject
Gets the NetworkObject that owns this NetworkBehaviour instance.
Declaration
public NetworkObject NetworkObject { get; }
Property Value
Type | Description |
---|---|
NetworkObject |
NetworkObjectId
Gets the NetworkId of the NetworkObject that owns this NetworkBehaviour instance.
Declaration
public ulong NetworkObjectId { get; }
Property Value
Type | Description |
---|---|
ulong |
OwnerClientId
Gets the ClientId that owns this NetworkObject.
Declaration
public ulong OwnerClientId { get; }
Property Value
Type | Description |
---|---|
ulong |
RpcTarget
Provides access to the various SendTo targets at runtime, as well as runtime-bound targets like Single(ulong, RpcTargetUse), Unity.Netcode.RpcTarget.Group(NativeArray<ulong>), Unity.Netcode.RpcTarget.Group(NativeList<ulong>), Unity.Netcode.RpcTarget.Group(ulong[]), Unity.Netcode.RpcTarget.Group<T>(T), Unity.Netcode.RpcTarget.Not(ulong), Unity.Netcode.RpcTarget.Not(NativeArray<ulong>), Unity.Netcode.RpcTarget.Not(NativeList<ulong>), Unity.Netcode.RpcTarget.Not(ulong[]), and Unity.Netcode.RpcTarget.Not<T>(T).
Declaration
public RpcTarget RpcTarget { get; }
Property Value
Type | Description |
---|---|
RpcTarget |
ServerIsHost
Gets whether the server (local or remote) is a host.
Declaration
public bool ServerIsHost { get; }
Property Value
Type | Description |
---|---|
bool |
m_TargetIdBeingSynchronized
The relative client identifier targeted for the serialization of this NetworkBehaviour instance.
Declaration
protected ulong m_TargetIdBeingSynchronized { get; }
Property Value
Type | Description |
---|---|
ulong |
Remarks
This value is set prior to OnSynchronize<T>(ref BufferSerializer<T>) being invoked. For writing (server-side), this is useful to know which client will receive the serialized data. For reading (client-side), this will be the LocalClientId. When synchronization of this instance is complete, this value is reset to 0.
Methods
GetNetworkBehaviour(ushort)
Returns the NetworkBehaviour with a given BehaviourId for the current NetworkObject.
Declaration
protected NetworkBehaviour GetNetworkBehaviour(ushort behaviourId)
Parameters
Type | Name | Description |
---|---|---|
ushort | behaviourId | The behaviourId to return |
Returns
Type | Description |
---|---|
NetworkBehaviour | Returns NetworkBehaviour with given behaviourId |
GetNetworkObject(ulong)
Gets the local instance of a NetworkObject with a given NetworkId.
Declaration
protected NetworkObject GetNetworkObject(ulong networkId)
Parameters
Type | Name | Description |
---|---|---|
ulong | networkId |
Returns
Type | Description |
---|---|
NetworkObject |
InternalOnNetworkPostSpawn()
Declaration
protected virtual void InternalOnNetworkPostSpawn()
InternalOnNetworkSessionSynchronized()
Declaration
protected virtual void InternalOnNetworkSessionSynchronized()
OnDeferringDespawn(int)
Only for use in distributed authority mode. Invoked only on the authority instance when a NetworkObject is deferring its despawn on non-authoritative instances.
Declaration
public virtual void OnDeferringDespawn(int despawnTick)
Parameters
Type | Name | Description |
---|---|---|
int | despawnTick | The future network tick that the NetworkObject will be despawned on non-authoritative instances |
Remarks
See also: DeferDespawn(int, bool)
OnDestroy()
Invoked when the GameObject the NetworkBehaviour is attached to is destroyed. If you override this, you must always invoke the base class version of this OnDestroy() method.
Declaration
public virtual void OnDestroy()
OnGainedOwnership()
In client-server contexts, this method is invoked on both the server and the local client of the owner when NetworkObject ownership is assigned.
In distributed authority contexts, this method is only invoked on the local client that has been assigned ownership of the associated NetworkObject.
Declaration
public virtual void OnGainedOwnership()
OnInSceneObjectsSpawned()
When a scene is loaded and in-scene placed NetworkObjects are finished spawning, this method is invoked on all of the newly spawned in-scene placed NetworkObjects. This method runs both client and server side.
Declaration
protected virtual void OnInSceneObjectsSpawned()
Remarks
This method can be used to handle post-scene loaded actions for in-scene placed NetworkObjcts where you might need to access a different NetworkObject and/or NetworkBehaviour not local to the current NetworkObject context.
OnLostOwnership()
In client-server contexts, this method is invoked on the local client when it loses ownership of the associated NetworkObject and on the server when any client loses ownership.
In distributed authority contexts, this method is only invoked on the local client that has lost ownership of the associated NetworkObject.
Declaration
public virtual void OnLostOwnership()
OnNetworkDespawn()
Gets called when the NetworkObject gets despawned. This method runs both client and server side.
Declaration
public virtual void OnNetworkDespawn()
OnNetworkObjectParentChanged(NetworkObject)
Gets called when the parent NetworkObject of this NetworkBehaviour's NetworkObject has changed.
Declaration
public virtual void OnNetworkObjectParentChanged(NetworkObject parentNetworkObject)
Parameters
Type | Name | Description |
---|---|---|
NetworkObject | parentNetworkObject | the new NetworkObject parent |
OnNetworkPostSpawn()
Gets called after the NetworkObject is spawned. All NetworkBehaviours associated with the NetworkObject will have had OnNetworkSpawn() invoked.
Declaration
protected virtual void OnNetworkPostSpawn()
Remarks
Will be invoked on each NetworkBehaviour associated with the NetworkObject being spawned. All associated NetworkBehaviour components will have had OnNetworkSpawn() invoked on the spawned NetworkObject.
OnNetworkPreSpawn(ref NetworkManager)
Gets called after the NetworkObject is spawned. No NetworkBehaviours associated with the NetworkObject will have had OnNetworkSpawn() invoked yet.
A reference to NetworkManager is passed in as a parameter to determine the context of execution (IsServer
or IsClient
).
Declaration
protected virtual void OnNetworkPreSpawn(ref NetworkManager networkManager)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | a ref to the NetworkManager since this is not yet set on the NetworkBehaviour |
Remarks
The NetworkBehaviour will not have anything assigned to it at this point in time. Settings like ownership, NetworkBehaviourId, NetworkManager, and most other spawn-related properties will not be set. This can be used to handle things like initializing a NetworkVariable.
OnNetworkSessionSynchronized()
This method is only available client-side. When a new client joins it's synchronized with all spawned NetworkObjects and scenes loaded for the session joined. At the end of the synchronization process, when all NetworkObjects and scenes (if scene management is enabled) have finished synchronizing, all NetworkBehaviour components associated with spawned NetworkObjects will have this method invoked.
Declaration
protected virtual void OnNetworkSessionSynchronized()
Remarks
This can be used to handle post-synchronization actions where you might need to access a different NetworkObject and/or NetworkBehaviour not local to the current NetworkObject context. This is only invoked on clients during a client-server network topology session.
OnNetworkSpawn()
Gets called when the NetworkObject gets spawned, message handlers are ready to be registered, and the network is set up.
Declaration
public virtual void OnNetworkSpawn()
OnOwnershipChanged(ulong, ulong)
Invoked on all clients. Override this method to be notified of any ownership changes (even if the instance was neither the previous or newly assigned current owner).
Declaration
protected virtual void OnOwnershipChanged(ulong previous, ulong current)
Parameters
Type | Name | Description |
---|---|---|
ulong | previous | the previous owner |
ulong | current | the current owner |
OnReanticipate(double)
Declaration
public virtual void OnReanticipate(double lastRoundTripTime)
Parameters
Type | Name | Description |
---|---|---|
double | lastRoundTripTime |
OnSynchronize<T>(ref BufferSerializer<T>)
Override this method if your derived NetworkBehaviour requires custom synchronization data. Use of this method is only for the initial client synchronization of NetworkBehaviours and will increase the payload size for client synchronization and dynamically spawned NetworkObjects.
Declaration
protected virtual void OnSynchronize<T>(ref BufferSerializer<T> serializer) where T : IReaderWriter
Parameters
Type | Name | Description |
---|---|---|
BufferSerializer<T> | serializer | The serializer to use to read and write the data. |
Type Parameters
Name | Description |
---|---|
T | Either BufferSerializerReader or BufferSerializerWriter, depending whether the serializer is in read mode or write mode. |
Remarks
When serializing (writing), this method is invoked during the client synchronization period and when spawning new NetworkObjects. When deserializing (reading), this method is invoked prior to the NetworkBehaviour's associated NetworkObject being spawned.