示例#1
0
        /// <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;
                }
            }
        }
示例#2
0
        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();
            }
        }