private void InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); if (grabbedObject) { var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); if (!grabbedObjectScript.IsGrabbed() || grabbedObjectScript.IsSwappable()) { InitPrimaryGrab(grabbedObjectScript); } else { InitSecondaryGrab(grabbedObjectScript); } updatedHideControllerOnGrab = grabbedObjectScript.CheckHideMode(hideControllerOnGrab, grabbedObjectScript.hideControllerOnGrab); OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); } if (updatedHideControllerOnGrab) { Invoke("HideController", hideControllerDelay); } }
private void InitGrabbedObject() { if (grabbedObjectList.Contains(interactTouch.GetTouchedObject())) { return; } grabbedObjectList[grabbedObjectIndex] = interactTouch.GetTouchedObject(); //print("Attempt grab object " + grabbedObject); if (grabbedObjectList[grabbedObjectIndex]) { var grabbedObjectScript = grabbedObjectList[grabbedObjectIndex].GetComponent <VRTK_InteractableObject>(); if (!grabbedObjectScript.IsGrabbed() || grabbedObjectScript.IsSwappable()) { InitPrimaryGrab(grabbedObjectScript); } else { InitSecondaryGrab(grabbedObjectScript); } updatedHideControllerOnGrab = grabbedObjectScript.CheckHideMode(hideControllerOnGrab, grabbedObjectScript.hideControllerOnGrab); OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); } if (updatedHideControllerOnGrab) { Invoke("HideController", hideControllerDelay); } }
private void GrabInteractedObject() { if (controllerAttachJoint == null && grabbedObject == null && IsObjectGrabbable(interactTouch.GetTouchedObject())) { InitGrabbedObject(); SnapObjectToGrabToController(grabbedObject); } }
protected virtual void InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); if (grabbedObject != null) { var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); ChooseGrabSequence(grabbedObjectScript); ToggleControllerVisibility(false); OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); } }
protected override void InitGrabbedObject() { grabbedObject = (interactTouch != null ? interactTouch.GetTouchedObject() : null); if (grabbedObject != null) { OnControllerStartGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); VRTK_InteractableObject grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); ChooseGrabSequence(grabbedObjectScript); ToggleControllerVisibility(false); OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); } }
private bool GrabInteractedObject() { if (controllerAttachJoint == null && grabbedObject == null && IsObjectGrabbable(interactTouch.GetTouchedObject())) { InitGrabbedObject(); if (grabbedObject) { SnapObjectToGrabToController(grabbedObject); return(true); } } return(false); }
protected virtual void AttemptUseObject() { GameObject touchedObject = (interactTouch != null ? interactTouch.GetTouchedObject() : null); if (touchedObject == null) { touchedObject = GetFromGrab(); } if (touchedObject != null && interactTouch != null && interactTouch.IsObjectInteractable(touchedObject)) { VRTK_InteractableObject interactableObjectScript = touchedObject.GetComponent <VRTK_InteractableObject>(); if (interactableObjectScript != null && interactableObjectScript.useOnlyIfGrabbed && !interactableObjectScript.IsGrabbed()) { return; } UseInteractedObject(touchedObject); if (usingObject != null && !IsObjectHoldOnUse(usingObject)) { SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1); } } }
private void DoStartUseObject(object sender, ControllerInteractionEventArgs e) { GameObject touchedObject = interactTouch.GetTouchedObject(); if (touchedObject == null) { touchedObject = GetFromGrab(); } if (touchedObject != null && interactTouch.IsObjectInteractable(touchedObject)) { var interactableObjectScript = touchedObject.GetComponent <VRTK_InteractableObject>(); if (interactableObjectScript.useOnlyIfGrabbed && !interactableObjectScript.IsGrabbed()) { return; } UseInteractedObject(touchedObject); if (usingObject && !IsObjectHoldOnUse(usingObject)) { SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1); } } }
/// <summary> /// DoStartUseObject方法会监听VRTK_ControllerEvents中的AliasUseOn事件,当使用按钮按下时,会自动地调用 /// 调用UseInteractedObject方法,更新游戏对象的UsingState值加一 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DoStartUseObject(object sender, ControllerInteractionEventArgs e) { GameObject touchedObject = interactTouch.GetTouchedObject(); if (touchedObject == null) { touchedObject = GetFromGrab(); } if (touchedObject != null && interactTouch.IsObjectInteractable(touchedObject)) { var interactableObjectScript = touchedObject.GetComponent <VRTK_InteractableObject>(); if (interactableObjectScript.useOnlyIfGrabbed && !interactableObjectScript.IsGrabbed()) { // 如果手柄正在接触的游戏对象设定了自己只有在被抓取的时候才能使用,而此时该对象并没有被手柄抓取,那么不能使用 return; } UseInteractedObject(touchedObject); if (usingObject && !IsObjectHoldOnUse(usingObject)) { // 如果手柄当前使用的游戏对象不需要一直按着按钮才能持续使用,就更新其UsingState加一,下次按按钮就会停止使用 SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1); } } }
protected virtual void DoControllerNearTouch(object sender, ObjectInteractEventArgs e) { if (interactTouch != null && interactTouch.GetTouchedObject() == null) { SetAnimatorStateOn("NearTouchState", nearTouchOverrides); HandleOverrideOn(nearTouchOverrides.ignoreAllOverrides, fingerAxis, GetOverridePermissions(nearTouchOverrides), GetOverrideValues(nearTouchOverrides)); } }
private void DoStartUseObject(object sender, ControllerInteractionEventArgs e) { GameObject touchedObject = interactTouch.GetTouchedObject(); if (touchedObject != null && interactTouch.IsObjectInteractable(touchedObject)) { UseInteractedObject(touchedObject); if (!IsObjectHoldOnUse(usingObject)) { SetObjectUsingState(usingObject, GetObjectUsingState(usingObject) + 1); } } }
void RightControllerEvents_TriggerDown(object sender, VRTK.ControllerInteractionEventArgs e) { if (RightInteractGrab.GetGrabbedObject() != null || // If we already have an object that we have grabbed RightInteractTouch.GetTouchedObject() != null) // .. or if we are touching an interactable object { return; } if (RightInteractNearTouch.GetNearTouchedObjects().Count > 0) // If we near interactable objects { if (ValidateNearObjects()) { return; } } ChangeGameMode(GameMode.DRAW); }