如何将四元数钳位在另一个角度内

问题描述 投票:0回答:1

我们有一个头部对象和一个身体对象。这两个对象是一个人对象的单独子对象。

我需要使头部对象左右自由旋转,这已经完成。我还需要仅当两个四元数之间的旋转差异为+/- 90度时,才使主体对象与头部对象一起左右旋转。

换句话说,我应该能够左右自由移动头部,如果头部和身体之间的旋转差小于或大于90度,则身体将开始随着头部旋转,并在出现以下情况时停止旋转:旋转范围为+/- 90度。身体的旋转不应紧贴头部的旋转,而应确保其保持在头部可以旋转的不可见的180度圆锥体内。

unity3d quaternions
1个回答
1
投票

虽然您可以执行以下操作:

    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);
© www.soinside.com 2019 - 2024. All rights reserved.