/// <summary> /// Attempt to grab an Interactable to the current Interactor utilizing custom collision data. /// </summary> /// <param name="interactable">The Interactable to attempt to grab.</param> /// <param name="collision">Custom collision data.</param> /// <param name="collider">Custom collider data.</param> public virtual void Grab(InteractableFacade interactable, Collision collision, Collider collider) { if (interactable == null) { return; } Ungrab(); StartGrabbingPublisher.SetActiveCollisions(CreateActiveCollisionsEventData(interactable.gameObject, collision, collider)); ProcessGrabAction(StartGrabbingPublisher, true); if (interactable.IsGrabTypeToggle) { ProcessGrabAction(StartGrabbingPublisher, false); } }
/// <summary> /// Attempt to ungrab currently grabbed Interactables to the current Interactor. /// </summary> public virtual void Ungrab() { if (GrabbedObjects.Count == 0) { return; } InteractableFacade interactable = GrabbedObjects[0].TryGetComponent <InteractableFacade>(true, true); if (interactable.IsGrabTypeToggle) { if (StartGrabbingPublisher.Payload.ActiveCollisions.Count == 0) { StartGrabbingPublisher.SetActiveCollisions(CreateActiveCollisionsEventData(interactable.gameObject, null, null)); } ProcessGrabAction(StartGrabbingPublisher, true); } ProcessGrabAction(StopGrabbingPublisher, false); }