docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class AttachableBehaviour

    Attachable NetworkBehaviours
    This component handles the parenting synchronization of the GameObject that this component is attached to.
    under another NetworkBehaviour's GameObject.
    The GameObject to be parented must have this component attached to it and must be nested on any child GameObject under the NetworkObject's GameObject.
    The GameObject target parent must have an AttachableNode component attached to it and must belong to a different NetworkObject than that of the AttachableBehaviour's.

    Inheritance
    object
    Object
    Component
    Behaviour
    MonoBehaviour
    NetworkBehaviour
    AttachableBehaviour
    Inherited Members
    NetworkBehaviour.NetworkManager
    NetworkBehaviour.RpcTarget
    NetworkBehaviour.IsLocalPlayer
    NetworkBehaviour.IsOwner
    NetworkBehaviour.IsServer
    NetworkBehaviour.HasAuthority
    NetworkBehaviour.IsSessionOwner
    NetworkBehaviour.ServerIsHost
    NetworkBehaviour.IsClient
    NetworkBehaviour.IsHost
    NetworkBehaviour.IsOwnedByServer
    NetworkBehaviour.IsSpawned
    NetworkBehaviour.NetworkObject
    NetworkBehaviour.HasNetworkObject
    NetworkBehaviour.NetworkObjectId
    NetworkBehaviour.NetworkBehaviourId
    NetworkBehaviour.GetNetworkBehaviour(ushort)
    NetworkBehaviour.OwnerClientId
    NetworkBehaviour.OnDeferringDespawn(int)
    NetworkBehaviour.OnNetworkPreSpawn(ref NetworkManager)
    NetworkBehaviour.OnNetworkSpawn()
    NetworkBehaviour.OnNetworkPostSpawn()
    NetworkBehaviour.InternalOnNetworkPostSpawn()
    NetworkBehaviour.InternalOnNetworkSessionSynchronized()
    NetworkBehaviour.OnInSceneObjectsSpawned()
    NetworkBehaviour.OnNetworkDespawn()
    NetworkBehaviour.OnGainedOwnership()
    NetworkBehaviour.OnLostOwnership()
    NetworkBehaviour.OnNetworkObjectParentChanged(NetworkObject)
    NetworkBehaviour.GetNetworkObject(ulong)
    NetworkBehaviour.OnReanticipate(double)
    NetworkBehaviour.m_TargetIdBeingSynchronized
    NetworkBehaviour.OnDestroy()
    MonoBehaviour.IsInvoking()
    MonoBehaviour.CancelInvoke()
    MonoBehaviour.Invoke(string, float)
    MonoBehaviour.InvokeRepeating(string, float, float)
    MonoBehaviour.CancelInvoke(string)
    MonoBehaviour.IsInvoking(string)
    MonoBehaviour.StartCoroutine(string)
    MonoBehaviour.StartCoroutine(string, object)
    MonoBehaviour.StartCoroutine(IEnumerator)
    MonoBehaviour.StartCoroutine_Auto(IEnumerator)
    MonoBehaviour.StopCoroutine(IEnumerator)
    MonoBehaviour.StopCoroutine(Coroutine)
    MonoBehaviour.StopCoroutine(string)
    MonoBehaviour.StopAllCoroutines()
    MonoBehaviour.print(object)
    MonoBehaviour.destroyCancellationToken
    MonoBehaviour.useGUILayout
    MonoBehaviour.didStart
    MonoBehaviour.didAwake
    MonoBehaviour.runInEditMode
    Behaviour.enabled
    Behaviour.isActiveAndEnabled
    Component.GetComponent(Type)
    Component.GetComponent<T>()
    Component.TryGetComponent(Type, out Component)
    Component.TryGetComponent<T>(out T)
    Component.GetComponent(string)
    Component.GetComponentInChildren(Type, bool)
    Component.GetComponentInChildren(Type)
    Component.GetComponentInChildren<T>(bool)
    Component.GetComponentInChildren<T>()
    Component.GetComponentsInChildren(Type, bool)
    Component.GetComponentsInChildren(Type)
    Component.GetComponentsInChildren<T>(bool)
    Component.GetComponentsInChildren<T>(bool, List<T>)
    Component.GetComponentsInChildren<T>()
    Component.GetComponentsInChildren<T>(List<T>)
    Component.GetComponentInParent(Type, bool)
    Component.GetComponentInParent(Type)
    Component.GetComponentInParent<T>(bool)
    Component.GetComponentInParent<T>()
    Component.GetComponentsInParent(Type, bool)
    Component.GetComponentsInParent(Type)
    Component.GetComponentsInParent<T>(bool)
    Component.GetComponentsInParent<T>(bool, List<T>)
    Component.GetComponentsInParent<T>()
    Component.GetComponents(Type)
    Component.GetComponents(Type, List<Component>)
    Component.GetComponents<T>(List<T>)
    Component.GetComponents<T>()
    Component.GetComponentIndex()
    Component.CompareTag(string)
    Component.CompareTag(TagHandle)
    Component.SendMessageUpwards(string, object, SendMessageOptions)
    Component.SendMessageUpwards(string, object)
    Component.SendMessageUpwards(string)
    Component.SendMessageUpwards(string, SendMessageOptions)
    Component.SendMessage(string, object)
    Component.SendMessage(string)
    Component.SendMessage(string, object, SendMessageOptions)
    Component.SendMessage(string, SendMessageOptions)
    Component.BroadcastMessage(string, object, SendMessageOptions)
    Component.BroadcastMessage(string, object)
    Component.BroadcastMessage(string)
    Component.BroadcastMessage(string, SendMessageOptions)
    Component.transform
    Component.gameObject
    Component.tag
    Object.GetInstanceID()
    Object.GetHashCode()
    Object.Equals(object)
    Object.InstantiateAsync<T>(T)
    Object.InstantiateAsync<T>(T, Transform)
    Object.InstantiateAsync<T>(T, Vector3, Quaternion)
    Object.InstantiateAsync<T>(T, Transform, Vector3, Quaternion)
    Object.InstantiateAsync<T>(T, int)
    Object.InstantiateAsync<T>(T, int, Transform)
    Object.InstantiateAsync<T>(T, int, Vector3, Quaternion)
    Object.InstantiateAsync<T>(T, int, ReadOnlySpan<Vector3>, ReadOnlySpan<Quaternion>)
    Object.InstantiateAsync<T>(T, int, Transform, Vector3, Quaternion)
    Object.InstantiateAsync<T>(T, int, Transform, Vector3, Quaternion, CancellationToken)
    Object.InstantiateAsync<T>(T, int, Transform, ReadOnlySpan<Vector3>, ReadOnlySpan<Quaternion>)
    Object.InstantiateAsync<T>(T, int, Transform, ReadOnlySpan<Vector3>, ReadOnlySpan<Quaternion>, CancellationToken)
    Object.InstantiateAsync<T>(T, InstantiateParameters, CancellationToken)
    Object.InstantiateAsync<T>(T, int, InstantiateParameters, CancellationToken)
    Object.InstantiateAsync<T>(T, Vector3, Quaternion, InstantiateParameters, CancellationToken)
    Object.InstantiateAsync<T>(T, int, Vector3, Quaternion, InstantiateParameters, CancellationToken)
    Object.InstantiateAsync<T>(T, int, ReadOnlySpan<Vector3>, ReadOnlySpan<Quaternion>, InstantiateParameters, CancellationToken)
    Object.Instantiate(Object, Vector3, Quaternion)
    Object.Instantiate(Object, Vector3, Quaternion, Transform)
    Object.Instantiate(Object)
    Object.Instantiate(Object, Scene)
    Object.Instantiate<T>(T, InstantiateParameters)
    Object.Instantiate<T>(T, Vector3, Quaternion, InstantiateParameters)
    Object.Instantiate(Object, Transform)
    Object.Instantiate(Object, Transform, bool)
    Object.Instantiate<T>(T)
    Object.Instantiate<T>(T, Vector3, Quaternion)
    Object.Instantiate<T>(T, Vector3, Quaternion, Transform)
    Object.Instantiate<T>(T, Transform)
    Object.Instantiate<T>(T, Transform, bool)
    Object.Destroy(Object, float)
    Object.Destroy(Object)
    Object.DestroyImmediate(Object, bool)
    Object.DestroyImmediate(Object)
    Object.FindObjectsOfType(Type)
    Object.FindObjectsOfType(Type, bool)
    Object.FindObjectsByType(Type, FindObjectsSortMode)
    Object.FindObjectsByType(Type, FindObjectsInactive, FindObjectsSortMode)
    Object.DontDestroyOnLoad(Object)
    Object.DestroyObject(Object, float)
    Object.DestroyObject(Object)
    Object.FindSceneObjectsOfType(Type)
    Object.FindObjectsOfTypeIncludingAssets(Type)
    Object.FindObjectsOfType<T>()
    Object.FindObjectsByType<T>(FindObjectsSortMode)
    Object.FindObjectsOfType<T>(bool)
    Object.FindObjectsByType<T>(FindObjectsInactive, FindObjectsSortMode)
    Object.FindObjectOfType<T>()
    Object.FindObjectOfType<T>(bool)
    Object.FindFirstObjectByType<T>()
    Object.FindAnyObjectByType<T>()
    Object.FindFirstObjectByType<T>(FindObjectsInactive)
    Object.FindAnyObjectByType<T>(FindObjectsInactive)
    Object.FindObjectsOfTypeAll(Type)
    Object.FindObjectOfType(Type)
    Object.FindFirstObjectByType(Type)
    Object.FindAnyObjectByType(Type)
    Object.FindObjectOfType(Type, bool)
    Object.FindFirstObjectByType(Type, FindObjectsInactive)
    Object.FindAnyObjectByType(Type, FindObjectsInactive)
    Object.ToString()
    Object.name
    Object.hideFlags
    object.Equals(object, object)
    object.GetType()
    object.MemberwiseClone()
    object.ReferenceEquals(object, object)
    Namespace: Unity.Netcode.Components
    Assembly: Unity.Netcode.Runtime.dll
    Syntax
    public class AttachableBehaviour : NetworkBehaviour
    Remarks

    The term "attach" is used in place of parenting in order to distinguish between NetworkObject parenting and AttachableBehaviour parenting ("attaching" and "detaching").
    This component can be used along with one or more ComponentController in order to enable or disable different components depending upon the AttachableBehaviour instance's current state.
    AttachableNode invocation order:

    • When attaching, the AttachableNode's OnAttached(AttachableBehaviour) is invoked just before the OnAttachStateChanged(AttachState, AttachableNode) is invoked with the Attached state.
    • When detaching, the AttachableNode's OnDetached(AttachableBehaviour) is invoked right after the OnAttachStateChanged(AttachState, AttachableNode) is invoked with the Detached notification.

    Fields

    AutoDetach

    Determines if this AttachableBehaviour will automatically detach on all instances if it has one of the AttachableBehaviour.AutoDetachTypes flags.

    Declaration
    public AttachableBehaviour.AutoDetachTypes AutoDetach
    Field Value
    Type Description
    AttachableBehaviour.AutoDetachTypes

    Properties

    m_AttachState

    The current AttachableBehaviour instance's AttachableBehaviour.AttachState.

    Declaration
    protected AttachableBehaviour.AttachState m_AttachState { get; }
    Property Value
    Type Description
    AttachableBehaviour.AttachState

    m_AttachableNode

    If attached, attaching, or detaching this will be the AttachableNode this AttachableBehaviour instance is attached to.

    Declaration
    protected AttachableNode m_AttachableNode { get; }
    Property Value
    Type Description
    AttachableNode

    m_DefaultParent

    The original parent of this AttachableBehaviour instance.

    Declaration
    protected GameObject m_DefaultParent { get; }
    Property Value
    Type Description
    GameObject

    Methods

    Attach(AttachableNode)

    Attaches the GameObject of this AttachableBehaviour instance to the GameObject of the AttachableNode.

    Declaration
    public void Attach(AttachableNode attachableNode)
    Parameters
    Type Name Description
    AttachableNode attachableNode

    The AttachableNode to attach this instance to.

    Remarks

    This effectively applies a new parent to a nested NetworkBehaviour and all GameObject children of the nested NetworkBehaviour.
    Both the AttachableNode and this AttachableBehaviour instances should be in the spawned state before this is invoked.

    Awake()

    If you create a custom AttachableBehaviour and override this method, you must invoke this base instance of Awake().

    Declaration
    protected virtual void Awake()

    Detach()

    Invoke to detach from a AttachableNode.

    Declaration
    public void Detach()

    OnAttachStateChanged(AttachState, AttachableNode)

    For customized/derived AttachableBehaviours, override this method to receive notifications when the AttachableBehaviour.AttachState has changed.

    Declaration
    protected virtual void OnAttachStateChanged(AttachableBehaviour.AttachState attachState, AttachableNode attachableNode)
    Parameters
    Type Name Description
    AttachableBehaviour.AttachState attachState

    The new AttachableBehaviour.AttachState.

    AttachableNode attachableNode

    The AttachableNode being attached to or from. Will be null when completely detached.

    OnAwake()

    Override this method in place of Awake. This method is invoked during Awake.

    Declaration
    protected virtual void OnAwake()
    Remarks

    The AttachableBehaviour's Awake method is protected to assure it initializes itself at this point in time.

    OnHasAuthority()

    Override this method to change how the instance determines the authority.
    The default is to use the HasAuthority method.

    Declaration
    protected virtual bool OnHasAuthority()
    Returns
    Type Description
    bool

    true = has authoriy | false = does not have authority

    Remarks

    Useful when using a ClientServer network topology and you would like to have the owner be the authority of this ComponentController instance.

    OnNetworkPreDespawn()

    Gets called before OnNetworkDespawn() has been invoked for all NetworkBehaviours associated with the currently spawned NetworkObject instance.

    Declaration
    public override void OnNetworkPreDespawn()
    Overrides
    NetworkBehaviour.OnNetworkPreDespawn()

    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 override void OnNetworkSessionSynchronized()
    Overrides
    NetworkBehaviour.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.

    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 override void OnOwnershipChanged(ulong previous, ulong current)
    Parameters
    Type Name Description
    ulong previous

    the previous owner

    ulong current

    the current owner

    Overrides
    NetworkBehaviour.OnOwnershipChanged(ulong, ulong)

    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 override 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.

    Overrides
    NetworkBehaviour.OnSynchronize<T>(ref BufferSerializer<T>)
    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.

    OnValidate()

    Declaration
    protected virtual void OnValidate()
    Remarks

    In the event an AttachableBehaviour is placed on the same GameObject as the NetworkObject, this will automatically create a child and add an AttachableBehaviour to that.

    Events

    AttachStateChange

    Invoked when the AttachableBehaviour.AttachState of this instance has changed.

    Declaration
    public event Action<AttachableBehaviour.AttachState, AttachableNode> AttachStateChange
    Event Type
    Type Description
    Action<AttachableBehaviour.AttachState, AttachableNode>
    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)