预先感谢您对我这个非常简单的问题的关注!在Unity3D中处理旋转似乎是我永远生疏的事情。在Unity3D中处理旋转似乎是我永远生疏的东西。我想做的是将对象的X旋转锁定为最多正40度,至少是-30度。这看起来很简单,因为在编辑器中,我可以清楚地看到对象的变换,当有40度或-30度的旋转,但在我的脚本中,似乎更难以判断它是否被旋转。下面是我的简单对象层次结构的截图,我所关注的旋转对象是 Camera Pivot
:
我所做的脚本是安装在了 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()
的方法,而这两种 cameraPitchFloor
和 cameraPitchCeiling
在文件的顶部被声明为浮点数,其值为 -30f
和 40f
,分别是。
我知道 Transform.rotation
得到一个四元数,这不是我真正要找的信息。我想我的最后一个问题是,我如何访问那些我在检查器中看到的度数值,即 "这个GameObject相对于父体的局部旋转"?Transform.eulerAngles
或 .localEulerAngles
似乎也没有用,因为这不会给出一个 "负 "的旋转,而是给出相应的 "正 "的旋转,最终会在同一个地方结束,这没有什么用,因为我怎么能知道我应该把旋转重置为 "最低 "点还是 "最高 "点?再次感谢您的关注!
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);