public virtual void SelectEnter(XRBaseInteractor interactor, XRBaseInteractable interactable)
        {
            // If Exclusive Selection, is this the only interactor trying to interact?
            if (interactor.requireSelectExclusive)
            {
                for (var i = 0; i < m_Interactors.Count; ++i)
                {
                    if (m_Interactors[i] != interactor &&
                        m_Interactors[i].selectTarget == interactable)
                    {
                        return;
                    }
                }
            }
            else
            {
                for (var i = 0; i < m_Interactors.Count; ++i)
                {
                    if (m_Interactors[i].selectTarget == interactable)
                    {
                        SelectExit(m_Interactors[i], interactable);
                    }
                }
            }

            interactor.OnSelectEntering(interactable);
            interactable.OnSelectEntering(interactor);
            interactor.OnSelectEntered(interactable);
            interactable.OnSelectEntered(interactor);
        }
        /// <summary>
        /// Initiates selection of an Interactable by an Interactor, passing the given <paramref name="args"/>.
        /// </summary>
        /// <param name="interactor">The Interactor that is selecting.</param>
        /// <param name="interactable">The Interactable being selected.</param>
        /// <param name="args">Event data containing the Interactor and Interactable involved in the event.</param>
        protected virtual void SelectEnter(XRBaseInteractor interactor, XRBaseInteractable interactable, SelectEnterEventArgs args)
        {
            Debug.Assert(args.interactor == interactor, this);
            Debug.Assert(args.interactable == interactable, this);

            interactor.OnSelectEntering(args);
            interactable.OnSelectEntering(args);
            interactor.OnSelectEntered(args);
            interactable.OnSelectEntered(args);
        }