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

            interactor.OnSelectExiting(args);
            interactable.OnSelectExiting(args);
            interactor.OnSelectExited(args);
            interactable.OnSelectExited(args);
        }
 public virtual void SelectCancel(XRBaseInteractor interactor, XRBaseInteractable interactable)
 {
     // TODO Add an OnSelectCancel function to XRBaseInteractor?
     interactor.OnSelectExiting(interactable);
     interactor.OnSelectExited(interactable);
     if (interactable != null)
     {
         interactable.OnSelectCanceling(interactor);
         interactable.OnSelectCanceled(interactor);
     }
 }