Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        if (isGrabbed)
        {
            anchorRestricted.transform.position = hand.transform.position;

            Vector3 handToBase   = anchorRestricted.localPosition - anchorBase.localPosition;
            Vector3 anchorToBase = anchor.localPosition - anchorBase.localPosition;

            float xDifference = VectorFunctions.PolarAngleToFrom(handToBase, anchorToBase);

            transform.Rotate(xDifference / movementSensetivity, 0, 0, Space.Self);

            float localX = transform.localEulerAngles.x;
            if (localX > 180)
            {
                localX = -360 + localX;
            }

            if (localX > rotationLimitPositive)
            {
                transform.Rotate(-xDifference / movementSensetivity, 0, 0, Space.Self);
            }
            else if (localX < rotationLimitNegative)
            {
                transform.Rotate(-xDifference / movementSensetivity, 0, 0, Space.Self);
            }

            difference = zeroPoint.localPosition - anchor.localPosition;

            if (difference.z > xLimit || difference.z < -zLimit)
            {
                if ((difference.z > zLimit * 2 || difference.z < -zLimit * 2))
                {
                    handHaptics.Vibrate(VibrationForce.Hard);
                }
                else if (difference.z > zLimit * 1.5 || difference.z < -zLimit * 1.5)
                {
                    handHaptics.Vibrate(VibrationForce.Medium);
                }
                else
                {
                    handHaptics.Vibrate(VibrationForce.Light);
                }
            }
        }
    }