/// <summary>Unregisters an Interactable with the UI system. This cancels all UI Interaction and makes the IUIInteractable no longer able to affect UI.</summary> /// <param name="interactable">The IUIInteractable to stop using.</param> public void UnregisterInteractable(IUIInteractable interactable) { EnsureInitialized(); for (int i = 0; i < m_RegisteredInteractables.Count; i++) { if (m_RegisteredInteractables[i].interactable == interactable) { RegisteredInteractable registeredInteractable = m_RegisteredInteractables[i]; registeredInteractable.interactable = null; m_RegisteredInteractables[i] = registeredInteractable; return; } } }
protected override void DoProcess() { EnsureInitialized(); if (m_EnableXRInput) { for (int i = 0; i < m_RegisteredInteractables.Count; i++) { RegisteredInteractable registeredInteractable = m_RegisteredInteractables[i]; //Update the raycast distance in case it's changed between frames registeredInteractable.model.maxRaycastDistance = m_MaxTrackedDeviceRaycastDistance; //If device is removed, we send a default state to unclick any UI if (registeredInteractable.interactable == null) { registeredInteractable.model.Reset(false); registeredInteractable.model.maxRaycastDistance = 0; ProcessTrackedDevice(ref registeredInteractable.model, true); m_RegisteredInteractables.RemoveAt(i--); } else { registeredInteractable.interactable.UpdateUIModel(ref registeredInteractable.model); ProcessTrackedDevice(ref registeredInteractable.model); m_RegisteredInteractables[i] = registeredInteractable; } } } if (m_EnableMouseInput) { ProcessMouse(); } if (m_EnableTouchInput) { ProcessTouches(); } }