/// <summary>
        /// Unregister an Interactable so it is no longer processed.
        /// </summary>
        /// <param name="interactable">The Interactable to be unregistered.</param>
        public virtual void UnregisterInteractable(XRBaseInteractable interactable)
        {
            if (!m_Interactables.Contains(interactable))
            {
                return;
            }

            CancelInteractableSelection(interactable);
            CancelInteractableHover(interactable);

            m_Interactables.Remove(interactable);

            foreach (var interactableCollider in interactable.colliders)
            {
                if (interactableCollider != null)
                {
                    m_ColliderToInteractableMap.Remove(interactableCollider);
                }
            }

#if AR_FOUNDATION_PRESENT
            if (interactable is ARBaseGestureInteractable gestureInteractable)
            {
                gestureInteractable.DisconnectGestureInteractor();
                m_GestureInteractablesNeedReconnect = true;
            }
#endif

            m_InteractableUnregisteredEventArgs.manager      = this;
            m_InteractableUnregisteredEventArgs.interactable = interactable;
            interactable.OnUnregistered(m_InteractableUnregisteredEventArgs);
            interactableUnregistered?.Invoke(m_InteractableUnregisteredEventArgs);
        }
示例#2
0
        /// <summary>
        /// Unregister an Interactable so it is no longer processed.
        /// </summary>
        /// <param name="interactable">The Interactable to be unregistered.</param>
        public virtual void UnregisterInteractable(XRBaseInteractable interactable)
        {
            if (!m_Interactables.Contains(interactable))
            {
                return;
            }

            CancelInteractableSelection(interactable);
            CancelInteractableHover(interactable);

            m_Interactables.Remove(interactable);

            foreach (var interactableCollider in interactable.colliders)
            {
                if (interactableCollider != null)
                {
                    m_ColliderToInteractableMap.Remove(interactableCollider);
                }
            }

            m_InteractableUnregisteredEventArgs.manager      = this;
            m_InteractableUnregisteredEventArgs.interactable = interactable;
            interactable.OnUnregistered(m_InteractableUnregisteredEventArgs);
            interactableUnregistered?.Invoke(m_InteractableUnregisteredEventArgs);
        }