/// <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); }
/// <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); }