gpt4 book ai didi

c# - 夹紧角度时相机开始崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:36 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com