private void InitPrimaryGrab(VRTK_InteractableObject currentGrabbedObject) { if (!currentGrabbedObject.IsValidInteractableController(gameObject, currentGrabbedObject.allowedGrabControllers)) { grabbedObject = null; if (currentGrabbedObject.IsGrabbed(gameObject)) { interactTouch.ForceStopTouching(); } return; } influencingGrabbedObject = false; currentGrabbedObject.SaveCurrentState(); currentGrabbedObject.Grabbed(gameObject); currentGrabbedObject.ZeroVelocity(); currentGrabbedObject.ToggleHighlight(false); currentGrabbedObject.ToggleKinematic(false); //Pause collisions (if allowed on object) for a moment whilst sorting out position to prevent clipping issues currentGrabbedObject.PauseCollisions(); if (currentGrabbedObject.grabAttachMechanic == VRTK_InteractableObject.GrabAttachType.Child_Of_Controller) { currentGrabbedObject.ToggleKinematic(true); } }
protected override void InitPrimaryGrab(VRTK_InteractableObject currentGrabbedObject) { if (!currentGrabbedObject.IsValidInteractableController(gameObject, currentGrabbedObject.allowedGrabControllers)) { grabbedObject = null; if (interactTouch != null && currentGrabbedObject.IsGrabbed(gameObject)) { interactTouch.ForceStopTouching(); } return; } influencingGrabbedObject = false; currentGrabbedObject.SaveCurrentState(); currentGrabbedObject.Grabbed(this); currentGrabbedObject.ZeroVelocity(); currentGrabbedObject.isKinematic = false; }
protected virtual void InitPrimaryGrab(VRTK_InteractableObject currentGrabbedObject) { GameObject grabbingObject = controllerReference.scriptAlias; if (!currentGrabbedObject.IsValidInteractableController(grabbingObject, currentGrabbedObject.allowedGrabControllers)) { grabbedObject = null; if (currentGrabbedObject.IsGrabbed(grabbingObject)) { interactTouch.ForceStopTouching(); } return; } influencingGrabbedObject = false; currentGrabbedObject.SaveCurrentState(); currentGrabbedObject.Grabbed(grabbingObject); currentGrabbedObject.ZeroVelocity(); currentGrabbedObject.ToggleHighlight(false); currentGrabbedObject.isKinematic = false; }
private void InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); if (grabbedObject) { var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); if (!grabbedObjectScript.IsValidInteractableController(gameObject, grabbedObjectScript.allowedGrabControllers)) { grabbedObject = null; interactTouch.ForceStopTouching(); return; } OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); grabbedObjectScript.SaveCurrentState(); grabbedObjectScript.Grabbed(gameObject); grabbedObjectScript.ZeroVelocity(); grabbedObjectScript.ToggleHighlight(false); grabbedObjectScript.ToggleKinematic(false); //Pause collisions (if allowed on object) for a moment whilst sorting out position to prevent clipping issues grabbedObjectScript.PauseCollisions(); if (grabbedObjectScript.grabAttachMechanic == VRTK_InteractableObject.GrabAttachType.Child_Of_Controller) { grabbedObjectScript.ToggleKinematic(true); } updatedHideControllerOnGrab = grabbedObjectScript.CheckHideMode(hideControllerOnGrab, grabbedObjectScript.hideControllerOnGrab); } if (updatedHideControllerOnGrab) { Invoke("HideController", hideControllerDelay); } }
protected virtual void AttemptSecondaryGrab(VRTK_InteractableObject grabbableObject) { if (attemptSecondaryGrab) { SDK_BaseController.ControllerHand currentHand = VRTK_DeviceFinder.GetControllerHand(interactTouch.gameObject); VRTK_ControllerReference oppositeControllerReference = VRTK_ControllerReference.GetControllerReference(VRTK_DeviceFinder.GetOppositeHand(currentHand)); if (VRTK_ControllerReference.IsValid(oppositeControllerReference)) { secondaryInteractTouch = (secondaryInteractTouch == null ? oppositeControllerReference.scriptAlias.GetComponentInChildren <VRTK_InteractTouch>() : secondaryInteractTouch); secondaryInteractGrab = (secondaryInteractGrab == null ? oppositeControllerReference.scriptAlias.GetComponentInChildren <VRTK_InteractGrab>() : secondaryInteractGrab); secondaryInteractTouch.ForceStopTouching(); secondaryInteractTouch.ForceTouch(grabbableObject.gameObject); secondaryInteractGrab.AttemptGrab(); } } }
protected virtual IEnumerator AutoGrab() { yield return(new WaitForEndOfFrame()); interactTouch = (interactTouch != null ? interactTouch : GetComponentInParent <VRTK_InteractTouch>()); interactGrab = (interactGrab != null ? interactGrab : GetComponentInParent <VRTK_InteractGrab>()); if (interactTouch == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_ObjectAutoGrab", "VRTK_InteractTouch", "interactTouch", "the same or parent")); } if (interactGrab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_NOT_INJECTED, "VRTK_ObjectAutoGrab", "VRTK_InteractGrab", "interactGrab", "the same or parent")); } if (objectToGrab == null) { VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.NOT_DEFINED, "objectToGrab")); yield break; } while (interactGrab.controllerAttachPoint == null) { yield return(true); } bool grabbableObjectDisableState = objectToGrab.disableWhenIdle; if (objectIsPrefab) { objectToGrab.disableWhenIdle = false; } VRTK_InteractableObject grabbableObject = objectToGrab; if (alwaysCloneOnEnable) { ClearPreviousClone(); } if (!interactGrab.GetGrabbedObject()) { if (cloneGrabbedObject) { if (previousClonedObject == null) { grabbableObject = Instantiate(objectToGrab); previousClonedObject = grabbableObject; } else { grabbableObject = previousClonedObject; } } if (grabbableObject.isGrabbable && !grabbableObject.IsGrabbed()) { grabbableObject.transform.position = transform.position; interactTouch.ForceStopTouching(); interactTouch.ForceTouch(grabbableObject.gameObject); interactGrab.AttemptGrab(); } } objectToGrab.disableWhenIdle = grabbableObjectDisableState; grabbableObject.disableWhenIdle = grabbableObjectDisableState; }