示例#1
0
        protected void GrabBegin()
        {
            if (!firstGrabbable)
            {
                return;
            }

            m_grabbedObj = firstGrabbable;
            m_grabbedObj.GrabBegin(grabber, firstGrabbable.grabPoints[0]);

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }



            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }

            MoveGrabbedObject(m_lastPos, m_lastRot, true);
            if (m_parentHeldObject)
            {
                m_grabbedObj.transform.parent = transform;
            }
        }
示例#2
0
    protected virtual void GrabBegin()
    {
        float        closestMagSq             = float.MaxValue;
        OVRGrabbable closestGrabbable         = null;
        Collider     closestGrabbableCollider = null;

        // Iterate grab candidates and find the closest grabbable candidate
        foreach (OVRGrabbable grabbable in m_grabCandidates.Keys)
        {
            bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab);
            if (!canGrab)
            {
                continue;
            }

            for (int j = 0; j < grabbable.grabPoints.Length; ++j)
            {
                Collider grabbableCollider = grabbable.grabPoints[j];
                // Store the closest grabbable
                Vector3 closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position);
                float   grabbableMagSq       = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude;
                if (grabbableMagSq < closestMagSq)
                {
                    closestMagSq             = grabbableMagSq;
                    closestGrabbable         = grabbable;
                    closestGrabbableCollider = grabbableCollider;
                }
            }
        }

        // Disable grab volumes to prevent overlaps
        GrabVolumeEnable(false);

        if (closestGrabbable != null)
        {
            if (closestGrabbable.isGrabbed)
            {
                closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable);
            }

            m_grabbedObj = closestGrabbable;
            m_grabbedObj.GrabBegin(this, closestGrabbableCollider);

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            // Set up offsets for grabbed object desired position relative to hand.
            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }

            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }

            // Note: force teleport on grab, to avoid high-speed travel to dest which hits a lot of other objects at high
            // speed and sends them flying. The grabbed object may still teleport inside of other objects, but fixing that
            // is beyond the scope of this demo.
            MoveGrabbedObject(m_lastPos, m_lastRot, true);
            if (m_parentHeldObject)
            {
                m_grabbedObj.transform.parent = transform;
            }
        }
    }
示例#3
0
    protected virtual void GrabBegin()
    {
        float        closestMagSq             = float.MaxValue;
        OVRGrabbable closestGrabbable         = null;
        Collider     closestGrabbableCollider = null;

        foreach (OVRGrabbable grabbable in m_grabCandidates.Keys)
        {
            bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab);
            if (!canGrab)
            {
                continue;
            }

            for (int j = 0; j < grabbable.grabPoints.Length; ++j)
            {
                Collider grabbableCollider    = grabbable.grabPoints[j];
                Vector3  closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position);
                float    grabbableMagSq       = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude;
                if (grabbableMagSq < closestMagSq)
                {
                    closestMagSq             = grabbableMagSq;
                    closestGrabbable         = grabbable;
                    closestGrabbableCollider = grabbableCollider;
                }
            }
        }

        GrabVolumeEnable(false);

        if (closestGrabbable != null)
        {
            if (closestGrabbable.isGrabbed)
            {
                closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable);
            }

            m_grabbedObj = closestGrabbable;
            m_grabbedObj.GrabBegin(this, closestGrabbableCollider);

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }

            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }

            MoveGrabbedObject(m_lastPos, m_lastRot, true);
            if (m_parentHeldObject)
            {
                m_grabbedObj.transform.parent = transform;
            }
        }
    }
示例#4
0
    protected virtual void GrabBegin()
    {
        float        closestMagSq             = float.MaxValue;
        OVRGrabbable closestGrabbable         = null;
        Collider     closestGrabbableCollider = null;

        Debug.Log("GrabBegin Grabber");
        // Iterate grab candidates and find the closest grabbable candidate
        foreach (OVRGrabbable grabbable in m_grabCandidates.Keys)
        {
            bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab);
            if (!canGrab)
            {
                continue;
            }

            //Mitya+++++++++++++++
            Debug.Log("grabbable.grabPoints.Length=" + grabbable.grabPoints.Length);
            Debug.Log("grabbable.name=" + grabbable.name);

            // Счетчик вызовов MoveGrabbedObject (чисто для информации)
            myGrabMoveCount = 0;

            myISS = GameObject.Find("ISS");
            //				if (myISS != null)
            //				{
            //					Debug.Log("myISS.name=" + myISS.name);
            //				}

            if (grabbable.tag == "Hold")
            {
                Debug.Log("this.name=" + this.name);
                Debug.Log("grabbable.tag=" + grabbable.tag);

                // Положение схваченного объекта ???
//				myGrabPos0 = grabbable.transform.position;
//				myGrabRot0 = grabbable.transform.rotation;

                // Якорь (синий кубик)
                myHandAnchor    = this.gameObject;               //GameObject.Find("LeftHandAnchor");
                myHandAnchorPos = myHandAnchor.transform.position;
                myHandAnchorRot = myHandAnchor.transform.rotation;
                Debug.Log("myHandAnchorPos=" + myHandAnchorPos.ToString("F4"));


                myLocalAvatar = GameObject.Find("LocalAvatar");

//				myLocalAvatarPos = myLocalAvatar.transform.position;
//				myLocalAvatarRot = myLocalAvatar.transform.rotation;
//				Debug.Log("myLocalAvatarPos=" + myLocalAvatarPos.ToString("F4"));

                // Рука (красный кубик) и контроллер (зеленый кубик)
                if (this.name == "LeftHandAnchor")
                {
                    myHand = myLocalAvatar.transform.Find("hand_left").gameObject;
//					myHand = GameObject.Find("LocalAvatar/hand_left");
                    myController = myLocalAvatar.transform.Find("controller_left").gameObject;
                }
                else
                {
                    myHand = myLocalAvatar.transform.Find("hand_right").gameObject;
//					myHand = GameObject.Find("LocalAvatar/hand_right");
                    myController = myLocalAvatar.transform.Find("controller_right").gameObject;
                }
                myHandPos = myHand.transform.position;
                myHandRot = myHand.transform.rotation;

//                myHandLocalPos = myHand.transform.localPosition;
                Debug.Log("myHandPos=" + myHandPos.ToString("F4"));



                myPlayerControllerPos = myPlayerController.transform.position;
                myPlayerControllerRot = myPlayerController.transform.rotation;
                Debug.Log("myPlayerControllerPos=" + myPlayerControllerPos.ToString("F4"));

//				Debug.Log("transform.position=" + transform.position.ToString("F4"));

                // Контроллер (зеленый кубик)
                myControllerPos = myController.transform.position;
                myControllerRot = myController.transform.rotation;
                Debug.Log("myControllerPos=" + myControllerPos.ToString("F4"));

                // Проверка
                if (myControllerPos != myHandAnchorPos)
                {
                    Debug.Log("!!!!!!!!!!!!!");
                }
            }
            else if (grabbable.tag == "Cap")
            {
                // Якорь (синий кубик)
                myHandAnchor    = this.gameObject; //GameObject.Find("LeftHandAnchor");
                myHandAnchorPos = myHandAnchor.transform.position;
                myHandAnchorRot = myHandAnchor.transform.rotation;
                Debug.Log("myHandAnchorPos=" + myHandAnchorPos.ToString("F4"));

                myLocalAvatar = GameObject.Find("LocalAvatar");

                // Рука (красный кубик) и контроллер (зеленый кубик)
                if (this.name == "LeftHandAnchor")
                {
                    myHand       = GameObject.Find("LocalAvatar/hand_left");
                    myController = myLocalAvatar.transform.Find("controller_left").gameObject;
                }
                else
                {
                    myHand       = GameObject.Find("LocalAvatar/hand_right");
                    myController = myLocalAvatar.transform.Find("controller_right").gameObject;
                }
                myHandPos = myHand.transform.position;
                myHandRot = myHand.transform.rotation;

                //                myHandLocalPos = myHand.transform.localPosition;
                Debug.Log("myHandPos=" + myHandPos.ToString("F4"));

                myPlayerControllerPos = myPlayerController.transform.position;
                myPlayerControllerRot = myPlayerController.transform.rotation;
                Debug.Log("myPlayerControllerPos=" + myPlayerControllerPos.ToString("F4"));

                //				Debug.Log("transform.position=" + transform.position.ToString("F4"));

                // Контроллер (зеленый кубик)
                myControllerPos = myController.transform.position;
                myControllerRot = myController.transform.rotation;
                Debug.Log("myControllerPos=" + myControllerPos.ToString("F4"));
            }
            else if (grabbable.tag == "Room")
            {
                Debug.Log("grabbable.transform.parent=" + grabbable.transform.parent);
            }
            else
            {
                Debug.Log("grabbable.name=" + grabbable.name);
                Debug.Log("grabbable.transform.parent=" + grabbable.transform.parent);
            }

            //Mitya-------------

            for (int j = 0; j < grabbable.grabPoints.Length; ++j)
            {
                Collider grabbableCollider = grabbable.grabPoints[j];
                // Store the closest grabbable
                Vector3 closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position);
                float   grabbableMagSq       = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude;
                if (grabbableMagSq < closestMagSq)
                {
                    closestMagSq             = grabbableMagSq;
                    closestGrabbable         = grabbable;
                    closestGrabbableCollider = grabbableCollider;
                }
            }
        }

        // Disable grab volumes to prevent overlaps
        GrabVolumeEnable(false);

        if (closestGrabbable != null)
        {
            if (closestGrabbable.isGrabbed)
            {
                closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable);
            }

            m_grabbedObj = closestGrabbable;

            // Вызов GrabBegin перетаскиваемого объекта
            m_grabbedObj.GrabBegin(this, closestGrabbableCollider);

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            // Set up offsets for grabbed object desired position relative to hand.
            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }

            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }

            // Note: force teleport on grab, to avoid high-speed travel to dest which hits a lot of other objects at high
            // speed and sends them flying. The grabbed object may still teleport inside of other objects, but fixing that
            // is beyond the scope of this demo.
            MoveGrabbedObject(m_lastPos, m_lastRot, true);
            if (m_parentHeldObject)
            {
                m_grabbedObj.transform.parent = transform;
            }
        }
    }
示例#5
0
    protected virtual void GrabBegin()
    {
        float        closestMagSq             = float.MaxValue;
        OVRGrabbable closestGrabbable         = null;
        Collider     closestGrabbableCollider = null;

        // Iterate grab candidates and find the closest grabbable candidate
        foreach (OVRGrabbable grabbable in m_grabCandidates.Keys)
        {
            //bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab);
            //if (!canGrab)
            //{
            //    continue;
            //}

            for (int j = 0; j < grabbable.grabPoints.Length; ++j)
            {
                Collider grabbableCollider = grabbable.grabPoints[j];
                // Store the closest grabbable
                Vector3 closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position);
                float   grabbableMagSq       = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude;
                if (grabbableMagSq < closestMagSq)
                {
                    closestMagSq             = grabbableMagSq;
                    closestGrabbable         = grabbable;
                    closestGrabbableCollider = grabbableCollider;
                }
            }
        }

        // Disable grab volumes to prevent overlaps
        GrabVolumeEnable(false);

        if (closestGrabbable != null)
        {
            if (closestGrabbable.isGrabbed)
            {
                if (closestGrabbable.isFixed)
                {
                    closestGrabbable.grabbedBy.GrabEnd();
                }
                else
                {
                    closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable);
                }
            }

            m_grabbedObj = closestGrabbable;
            //disable recovering
            m_grabbedObj.GetComponent <wheelAuto>().setRecovering = false;
            m_grabbedObj.GrabBegin(this, closestGrabbableCollider);

            //NEW: Add Haptic Sound
            OVRHapticsClip hapticsClip = new OVRHapticsClip(hapticAudioClip);
            if (m_controller == OVRInput.Controller.LTouch)
            {
                OVRHaptics.LeftChannel.Preempt(hapticsClip);
            }
            else
            {
                OVRHaptics.RightChannel.Preempt(hapticsClip);
            }

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            // Set up offsets for grabbed object desired position relative to hand.
            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }

            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }



            if (m_grabbedObj.isFixed)
            {
                OVRCameraRig rig = transform.parent.parent.GetComponent <OVRCameraRig>();


                rig.UpdatedAnchors -= updateAnchor;
                localAvatar         = m_hand.parent;

                OvrAvatar.lockedHand       = m_hand.gameObject;
                OvrAvatar.lockedController = m_controllerPoint.gameObject;

                m_hand.parent            = m_grabbedObj.transform;
                m_controllerPoint.parent = m_grabbedObj.transform;
                rig.UpdatedAnchors      += updateWheel;
            }
            else
            {
                // Note: force teleport on grab, to avoid high-speed travel to dest which hits a lot of other objects at high
                // speed and sends them flying. The grabbed object may still teleport inside of other objects, but fixing that
                // is beyond the scope of this demo.
                MoveGrabbedObject(m_lastPos, m_lastRot, true);

                if (m_parentHeldObject)
                {
                    m_grabbedObj.transform.parent = transform;
                }
            }
        }
    }
示例#6
0
    protected virtual void GrabBegin()
    {
        float        closestMagSq             = float.MaxValue;
        OVRGrabbable closestGrabbable         = null;
        Collider     closestGrabbableCollider = null;

        // Iterate grab candidates and find the closest grabbable candidate
        foreach (OVRGrabbable grabbable in m_grabCandidates.Keys)
        {
            bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab);
            if (!canGrab)
            {
                continue;
            }

            for (int j = 0; j < grabbable.grabPoints.Length; ++j)
            {
                Collider grabbableCollider = grabbable.grabPoints[j];
                // Store the closest grabbable
                Vector3 closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position);
                float   grabbableMagSq       = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude;
                if (grabbableMagSq < closestMagSq)
                {
                    closestMagSq             = grabbableMagSq;
                    closestGrabbable         = grabbable;
                    closestGrabbableCollider = grabbableCollider;
                }
            }
        }

        // Disable grab volumes to prevent overlaps
        GrabVolumeEnable(false);

        if (closestGrabbable != null)
        {
            if (closestGrabbable.isGrabbed)
            {
                closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable);
            }


            //check what is grabbed ----------------------
            GameObject grabbed = closestGrabbable.gameObject;

            int Size = InputManager.GetComponent <InputManager>().SizeState;
            if (Size != 3 && grabbed.CompareTag("Large"))
            {
                return;
            }
            if (Size == 1 && grabbed.CompareTag("Medium"))
            {
                return;
            }

            if (grabbed.CompareTag("Key"))
            {
                AudioManager.GetComponent <AudioManagement>().Play("Keypickup");
                GameplayManager.GetComponent <GameplayManager>().KeyPickup(grabbed);
                return;
            }
            else
            {
                AudioManager.GetComponent <AudioManagement>().Play("Pickup");
            }

            if (grabbed.CompareTag("Map"))
            {
                Destroy(grabbed);
                GameplayManager.GetComponent <GameplayManager>().HandMap.SetActive(true);
                return;
            }

            if (grabbed.CompareTag("Shrimp"))
            {
                InputManager.GetComponent <InputManager>().ShrimpGrabbed = true;
            }
            if (grabbed.CompareTag("Watermelon"))
            {
                InputManager.GetComponent <InputManager>().WatermelonGrabbed = true;
            }
            //----------------------------------------------


            m_grabbedObj = closestGrabbable;
            m_grabbedObj.GrabBegin(this, closestGrabbableCollider);

            m_lastPos = transform.position;
            m_lastRot = transform.rotation;

            // Set up offsets for grabbed object desired position relative to hand.
            if (m_grabbedObj.snapPosition)
            {
                m_grabbedObjectPosOff = m_gripTransform.localPosition;
                if (m_grabbedObj.snapOffset)
                {
                    Vector3 snapOffset = m_grabbedObj.snapOffset.position;
                    if (m_controller == OVRInput.Controller.LTouch)
                    {
                        snapOffset.x = -snapOffset.x;
                    }
                    m_grabbedObjectPosOff += snapOffset;
                }
            }
            else
            {
                Vector3 relPos = m_grabbedObj.transform.position - transform.position;
                relPos = Quaternion.Inverse(transform.rotation) * relPos;
                m_grabbedObjectPosOff = relPos;
            }

            if (m_grabbedObj.snapOrientation)
            {
                m_grabbedObjectRotOff = m_gripTransform.localRotation;
                if (m_grabbedObj.snapOffset)
                {
                    m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff;
                }
            }
            else
            {
                Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation;
                m_grabbedObjectRotOff = relOri;
            }

            // Note: force teleport on grab, to avoid high-speed travel to dest which hits a lot of other objects at high
            // speed and sends them flying. The grabbed object may still teleport inside of other objects, but fixing that
            // is beyond the scope of this demo.
            MoveGrabbedObject(m_lastPos, m_lastRot, true);
            if (m_parentHeldObject)
            {
                m_grabbedObj.transform.parent = transform;
            }
        }
    }