// 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); } } } }