另一个Unity3D旋转问题:限制旋转在一个范围内。

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

预先感谢您对我这个非常简单的问题的关注!在Unity3D中处理旋转似乎是我永远生疏的事情。在Unity3D中处理旋转似乎是我永远生疏的东西。我想做的是将对象的X旋转锁定为最多正40度,至少是-30度。这看起来很简单,因为在编辑器中,我可以清楚地看到对象的变换,当有40度或-30度的旋转,但在我的脚本中,似乎更难以判断它是否被旋转。下面是我的简单对象层次结构的截图,我所关注的旋转对象是 Camera Pivot:

Editor object hierarchy screenshot

我所做的脚本是安装在了 Player 对象,下面是我开始写的代码(我知道这显然是错误的,但希望它能说明我想达到的目的)。

private void ProcessMouseInput()
    {
        float horizontal = mouseSensitivity * Input.GetAxis("Mouse X");
        float vertical = -(mouseSensitivity * Input.GetAxis("Mouse Y"));

        transform.Rotate(0, horizontal, 0);
        cameraPivot.Rotate(vertical, 0, 0);

        if (cameraPivot.rotation.x < cameraPitchFloor) cameraPivot.rotation = new Quaternion(cameraPitchFloor, 0, 0, 0);
        if (cameraPivot.rotation.x > cameraPitchCeiling) cameraPivot.rotation = new Quaternion(cameraPitchCeiling, 0, 0, 0);
    }

这段代码是在 Update() 的方法,而这两种 cameraPitchFloorcameraPitchCeiling 在文件的顶部被声明为浮点数,其值为 -30f40f,分别是。

我知道 Transform.rotation 得到一个四元数,这不是我真正要找的信息。我想我的最后一个问题是,我如何访问那些我在检查器中看到的度数值,即 "这个GameObject相对于父体的局部旋转"?Transform.eulerAngles.localEulerAngles 似乎也没有用,因为这不会给出一个 "负 "的旋转,而是给出相应的 "正 "的旋转,最终会在同一个地方结束,这没有什么用,因为我怎么能知道我应该把旋转重置为 "最低 "点还是 "最高 "点?再次感谢您的关注!

c# unity3d rotation
1个回答
0
投票

cameraPivot.rotation返回一个四元数。你在编辑器中看到的是欧拉角。将最后两行替换为

if (cameraPivot.rotation.eulerAngles.x < cameraPitchFloor) cameraPivot.rotation = Quaternion.Euler(cameraPitchFloor, 0, 0);
if (cameraPivot.rotation.eulerAngles.x > cameraPitchCeiling) cameraPivot.rotation = Quaternion.Euler(cameraPitchCeiling, 0, 0);
© www.soinside.com 2019 - 2024. All rights reserved.