我在 unity 中构建了一个第一人称 Controller ,我正在努力做到这一点,以便相机跟踪鼠标位置,以便玩家可以环顾四周,但是当我尝试阻止玩家将相机倒置时,相机开始摇晃并且它搞乱相机的旋转
// Get Axis
float mouseY = Input.GetAxis(mouseYInputName) * mouseSensitivity *
Time.deltaTime;
// Check if past limit
clampX += mouseY;
if (Mathf.Abs(clampX) < 90f) {
transform.Rotate(Vector3.left * mouseY);
}
else {
Vector3 eulerRotation = -transform.eulerAngles;
eulerRotation.x = (clampX > 90f ? 270f : 90f);
transform.eulerAngles = eulerRotation;
}
最佳答案
您的代码存在一些问题。
首先,您在将旋转分配给向量 (-transform.eulerAngles
) 时将旋转负数,但随后只需将修改后的向量重新分配给变换。这将具有每帧翻转 Y 轴和 Z 轴旋转的效果。
此外,夹紧本身看起来有点不对劲。现在,当旋转移动超过 90° 时,它会立即捕捉到 270°,当它移动超过 -90° 时,它会捕捉到 90°。
另一个问题:
使用您当前的代码,如果玩家在夹紧已经开始后继续移动鼠标,则 clampX
变量仍在增加。因此,当玩家开始向另一个方向移动鼠标时,他们必须在相机开始移动之前再次将 clampX
值恢复到可接受的值。
这是一种希望不会出现这些问题的钳制方法:
clampX += mouseY;
if (Mathf.Abs(clampX) < 90f) {
transform.Rotate(Vector3.right * mouseY);
}
else {
if (clampX > 90f) clampX = 90f;
else if (clampX < -90f) clampX = -90f;
Vector3 eulerRotation = transform.eulerAngles;
eulerRotation.x = clampX;
transform.eulerAngles = eulerRotation;
}
(我还将 Vector3.left
替换为 Vector3.right
,因为它在 Unity 中是正 X。)
关于c# - 夹紧角度时相机开始崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57842546/