private void UseInteractedObject(GameObject touchedObject) { if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject)) { usingObject = touchedObject; var usingObjectScript = usingObject.GetComponent <VRTK_InteractableObject>(); if (!usingObjectScript.IsValidInteractableController(gameObject, usingObjectScript.allowedUseControllers)) { usingObject = null; return; } updatedHideControllerOnUse = usingObjectScript.CheckHideMode(hideControllerOnUse, usingObjectScript.hideControllerOnUse); OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); usingObjectScript.StartUsing(gameObject); if (updatedHideControllerOnUse) { Invoke("HideController", hideControllerDelay); } usingObjectScript.ToggleHighlight(false); var rumbleAmount = usingObjectScript.rumbleOnUse; if (!rumbleAmount.Equals(Vector2.zero)) { controllerActions.TriggerHapticPulse((ushort)rumbleAmount.y, rumbleAmount.x, 0.05f); } } }
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 InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); if (grabbedObject) { var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); if (!grabbedObjectScript.IsValidInteractableController(gameObject, grabbedObjectScript.allowedGrabControllers)) { grabbedObject = null; return; } OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); grabbedObjectScript.SaveCurrentState(); grabbedObjectScript.Grabbed(gameObject); grabbedObjectScript.ZeroVelocity(); grabbedObjectScript.ToggleHighlight(false); grabbedObjectScript.ToggleKinematic(false); if (grabbedObjectScript.grabAttachMechanic == VRTK_InteractableObject.GrabAttachType.Child_Of_Controller) { grabbedObjectScript.ToggleKinematic(true); } updatedHideControllerOnGrab = grabbedObjectScript.CheckHideMode(hideControllerOnGrab, grabbedObjectScript.hideControllerOnGrab); } if (updatedHideControllerOnGrab) { Invoke("HideController", hideControllerDelay); } }
private void InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); if (grabbedObject) { var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); grabbedObjectScript.SaveCurrentState(); grabbedObjectScript.Grabbed(this.gameObject); grabbedObjectScript.ZeroVelocity(); grabbedObjectScript.ToggleHighlight(false); grabbedObjectScript.ToggleKinematic(false); if (grabbedObjectScript.grabAttachMechanic == VRTK_InteractableObject.GrabAttachType.Child_Of_Controller) { grabbedObjectScript.ToggleKinematic(true); } } if (hideControllerOnGrab) { Invoke("HideController", hideControllerDelay); } }
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); } }
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 void UseInteractedObject(GameObject touchedObject) { if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject)) { usingObject = touchedObject; OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); usingObject.GetComponent <VRTK_InteractableObject>().StartUsing(this.gameObject); if (hideControllerOnUse) { Invoke("HideController", hideControllerDelay); } usingObject.GetComponent <VRTK_InteractableObject>().ToggleHighlight(false); } }
private void InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject)); grabbedObject.GetComponent <VRTK_InteractableObject>().Grabbed(this.gameObject); grabbedObject.GetComponent <VRTK_InteractableObject>().ZeroVelocity(); if (grabbedObject) { grabbedObject.GetComponent <VRTK_InteractableObject>().ToggleHighlight(false); } if (hideControllerOnGrab) { Invoke("HideController", hideControllerDelay); } }
private void UseInteractedObject(GameObject touchedObject) { if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject)) { usingObject = touchedObject; var usingObjectScript = usingObject.GetComponent <VRTK_InteractableObject>(); if (!usingObjectScript.IsValidInteractableController(gameObject, usingObjectScript.allowedUseControllers)) { usingObject = null; return; } usingObjectScript.StartUsing(gameObject); ToggleControllerVisibility(false); AttemptHaptics(); OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); } }
/// <summary> /// InitGrabbedObject方法通过手柄上的touch脚本初始化当前抓取物体grabbedObject /// </summary> private void InitGrabbedObject() { grabbedObject = interactTouch.GetTouchedObject(); if (grabbedObject) { var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>(); if (!grabbedObjectScript.IsValidInteractableController(gameObject, grabbedObjectScript.allowedGrabControllers)) { // 判断当前手柄是否允许抓取该物体游戏对象,如果不允许,置物体对象为null grabbedObject = null; 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) { // 如果物体以子对象的方式连接手柄,那么isKinematic要为true,避免引起混乱 grabbedObjectScript.ToggleKinematic(true); } updatedHideControllerOnGrab = grabbedObjectScript.CheckHideMode(hideControllerOnGrab, grabbedObjectScript.hideControllerOnGrab); } if (updatedHideControllerOnGrab) { // 隐藏手柄 Invoke("HideController", hideControllerDelay); } }
private void UseInteractedObject(GameObject touchedObject) { if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject)) { usingObject = touchedObject; OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); usingObject.GetComponent <VRTK_InteractableObject>().StartUsing(this.gameObject); if (hideControllerOnUse) { Invoke("HideController", hideControllerDelay); } usingObject.GetComponent <VRTK_InteractableObject>().ToggleHighlight(false); var rumbleAmount = usingObject.GetComponent <VRTK_InteractableObject>().rumbleOnUse; if (!rumbleAmount.Equals(Vector2.zero)) { controllerActions.TriggerHapticPulse((int)rumbleAmount.x, (ushort)rumbleAmount.y); } } }
protected virtual void UseInteractedObject(GameObject touchedObject) { if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject)) { usingObject = touchedObject; OnControllerStartUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); VRTK_InteractableObject usingObjectScript = usingObject.GetComponent <VRTK_InteractableObject>(); if (!usingObjectScript.IsValidInteractableController(controllerReference.scriptAlias, usingObjectScript.allowedUseControllers)) { usingObject = null; return; } usingObjectScript.StartUsing(controllerReference.scriptAlias); ToggleControllerVisibility(false); AttemptHaptics(); OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); } }
/// <summary> /// UseInteractedObject方法用来开始使用手柄正在接触的游戏对象 /// </summary> /// <param name="touchedObject">手柄当前接触的游戏对象</param> private void UseInteractedObject(GameObject touchedObject) { // 如果手柄第一次使用游戏对象或者之前使用的游戏对象和手柄现在接触的游戏对象不一致,且现在接触的游戏对象是可以使用的时候 if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject)) { usingObject = touchedObject; var usingObjectScript = usingObject.GetComponent <VRTK_InteractableObject>(); if (!usingObjectScript.IsValidInteractableController(gameObject, usingObjectScript.allowedUseControllers)) { usingObject = null; return; } updatedHideControllerOnUse = usingObjectScript.CheckHideMode(hideControllerOnUse, usingObjectScript.hideControllerOnUse); // 发送事件给监听的方法,开始调用 OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); // 调用交互对象的StartUsing usingObjectScript.StartUsing(gameObject); if (updatedHideControllerOnUse) { // 隐藏手柄模型renderer Invoke("HideController", hideControllerDelay); } // 关闭高亮 usingObjectScript.ToggleHighlight(false); // 震动反馈 var rumbleAmount = usingObjectScript.rumbleOnUse; if (!rumbleAmount.Equals(Vector2.zero)) { controllerActions.TriggerHapticPulse((ushort)rumbleAmount.y, rumbleAmount.x, 0.05f); } } }
protected virtual void UseInteractedObject(GameObject touchedObject) { if ((usingObject == null || usingObject != touchedObject) && IsObjectUsable(touchedObject) && interactTouch != null) { usingObject = touchedObject; OnControllerStartUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); VRTK_InteractableObject usingObjectScript = (usingObject != null ? usingObject.GetComponent<VRTK_InteractableObject>() : null); if (usingObjectScript != null) { if (!usingObjectScript.IsValidInteractableController(gameObject, usingObjectScript.allowedUseControllers)) { usingObject = null; return; } usingObjectScript.StartUsing(this); ToggleControllerVisibility(false); OnControllerUseInteractableObject(interactTouch.SetControllerInteractEvent(usingObject)); } } }
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); } }
/// <summary> /// The ForceStopNearTouching method will stop the Interact Touch GameObject from near touching an Interactable Object even if the Interact Touch GameObject is physically touching the Interactable Object still. /// </summary> /// <param name="obj">An optional GameObject to only include in the force stop. If this is null then all near touched GameObjects will be force stopped.</param> public virtual void ForceStopNearTouching(GameObject obj = null) { if (obj != null) { Collider objCollider = (obj != null ? obj.GetComponentInChildren <Collider>() : null); if (objCollider != null) { interactNearTouchColliderScript.EndNearTouch(objCollider); } } else { for (int i = 0; i < nearTouchedObjects.Count; i++) { OnControllerNearUntouchInteractableObject(interactTouch.SetControllerInteractEvent(nearTouchedObjects[i])); } } }