コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
 protected virtual void InitGrabbedObject()
 {
     grabbedObject = interactTouch.GetTouchedObject();
     if (grabbedObject != null)
     {
         var grabbedObjectScript = grabbedObject.GetComponent <VRTK_InteractableObject>();
         ChooseGrabSequence(grabbedObjectScript);
         ToggleControllerVisibility(false);
         OnControllerGrabInteractableObject(interactTouch.SetControllerInteractEvent(grabbedObject));
     }
 }
コード例 #7
0
 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));
     }
 }
コード例 #8
0
 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);
     }
 }
コード例 #9
0
 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);
     }
 }
コード例 #10
0
        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));
            }
        }
コード例 #11
0
        /// <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);
            }
        }
コード例 #12
0
        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);
                }
            }
        }
コード例 #13
0
ファイル: VRTK_InteractUse.cs プロジェクト: trideka/VRTK
        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));
            }
        }
コード例 #14
0
        /// <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);
                }
            }
        }
コード例 #15
0
        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));
                }
            }
        }
コード例 #16
0
        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);
            }
        }
コード例 #17
0
 /// <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]));
         }
     }
 }