手动更改统一的旋转

manually change a rotation in unity

所以这是我的问题:我在 Unity 中有一个对象是我的播放器。 我希望这个玩家能够面对他移动的方向。 但我不知道如何旋转对象,直到释放特定键然后将旋转重新定位到 0,0,0

我试过这段代码

public class PlayerAction : MonoBehaviour
{
public float horizontalInput;
public float verticalInput;
// Start is called before the first frame update
void Start()

    
}

// Update is called once per frame
void Update()
  {
    horizontalInput = Input.GetAxis("Horizontal");
    verticalInput = Input.GetAxis("Vertical");

    if (horizontalInput > 0)
    {
        transform.Rotate(0, 90, 0);
    }
  }
}

我在四元数上看,但在任何论坛上都看不懂。

澄清一下,我想手动更改播放器的旋转

找到这个例子,你可以绕 y 轴旋转到每一边,然后分别重置回原来的旋转。

using UnityEngine;

public class Rotation : MonoBehaviour {
    private Quaternion startingRot;

    void Start() {
        startingRot = transform.rotation;
        }

    void Update() {

        if (Input.GetKeyDown(KeyCode.P)) {
            transform.Rotate(0, 45, 0);
        }

        if (Input.GetKeyDown(KeyCode.O)) {
            transform.Rotate(0, -45, 0);
        }

        if (Input.GetKeyUp(KeyCode.L)) {
            transform.rotation = startingRot;
        }
    }
}

四元数是一种处理旋转的数学工具。它们远不如 eulerAngles 直观,但计算效率更高,并且解决了 eulerAngles 的一个已知问题,即 Gimbal lock.

你暂时不需要担心这个,但仅供参考:

Unity 提供了与代码中的欧拉角旋转交互的方式,与在编辑器中相同,但旋转是处理四元数的。这就是为什么很多时候你会在 unity 的编辑器变换旋转 window 中发现一些意想不到的值,因为 unity 正在从它内部处理的四元数永久地转换为编辑器用户界面中显示的欧拉角。