我们有一个头部对象和一个身体对象。这两个对象是一个人对象的单独子对象。
我需要使头部对象左右自由旋转,这已经完成。我还需要仅当两个四元数之间的旋转差异为+/- 90度时,才使主体对象与头部对象一起左右旋转。
换句话说,我应该能够左右自由移动头部,如果头部和身体之间的旋转差小于或大于90度,则身体将开始随着头部旋转,并在出现以下情况时停止旋转:旋转范围为+/- 90度。身体的旋转不应紧贴头部的旋转,而应确保其保持在头部可以旋转的不可见的180度圆锥体内。
虽然您可以执行以下操作:
var rotation = Input.GetAxis("Mouse X") * speed * Time.deltaTime;
Head.transform.RotateAround(Vector3.up, rotation);
var angle = Quaternion.Angle(Head.transform.rotation, Body.transform.rotation);
Debug.Log(angle);
if(angle > 90)
{
Body.transform.RotateAround(Vector3.up, rotation);
}
当您向上或向下超过90度时,它也会旋转。因此,最好使用输入来修改角度,夹紧体角并将其设置为旋转角度。]
var rotation = Input.GetAxis("Mouse X") * speed * Time.deltaTime;
headAngle = headAngle + rotation;
bodyAngle = Mathf.Clamp(bodyAngle, headAngle - 90, headAngle + 90);
Head.transform.rotation = Quaternion.AngleAxis(headAngle, Vector3.up);
Body.transform.rotation = Quaternion.AngleAxis(bodyAngle, Vector3.up);