c# - 统一对象不围绕正确的轴旋转
问题描述
所以我正在编写一个能够使用鼠标移动旋转对象的脚本。我设置的场景是一个摄像机,前面有一个物体。向左移动鼠标导致对象向左旋转,向上移动鼠标导致对象向上旋转,等等。现在我有一个小问题。当我将对象向左或向右旋转 90 度然后向上或向下旋转时,它会像我想要的那样围绕 Z 轴而不是 X 轴旋转。发生这种情况是因为 Z 和 X 轴在向左或向右旋转时当然会与我之前操纵的 Y 轴一起旋转。
我制作了两个 GIF 来展示这个问题:
我希望永远发生的事情:https ://media.giphy.com/media/wsUxoi9LyXXbB24PNg/giphy.gif
实际发生了什么:https ://media.giphy.com/media/1jl3MNtMuXW9AAUQOZ/giphy.gif
这是我目前正在使用的代码:
public float object_rotSens = 100.0f;
float object_rotY = 0.0f;
float object_rotX = 0.0f;
void Update()
{
object_rotX += Input.GetAxis("Mouse X") * object_rotSens * Time.deltaTime;
object_rotY += Input.GetAxis("Mouse Y") * object_rotSens * Time.deltaTime;
objectImRotating.transform.localEulerAngles = new Vector3(object_rotY, -object_rotX, 0);
}
我希望有人可以帮助我更改代码,这样即使对象绕 Y 轴旋转任意量,我也可以进行首选旋转。提前致谢!
更新:
Chris H 帮我解决了这个问题。对于任何有同样问题的人,这里是帮助我解决问题的方法:
object_rotX = Input.GetAxis("Mouse X") * object_rotSens * Time.deltaTime;
object_rotY = Input.GetAxis("Mouse Y") * object_rotSens * Time.deltaTime;
objectImRotating.transform.RotateAround(objectImRotating.transform.position, new Vector3(object_rotY, -object_rotX, 0), 100 * Time.deltaTime);
解决方案
尝试使用Transform.RotateAround代替 localEulerAngles。
推荐阅读
- sql - 使用 SQL 查询从多个表中查找匹配记录
- elasticsearch - Elasticsearch 文档中的某些字段以 @ 和 _ 开头以及一些重复的目的是什么
- php - Mysql - 如果行存在更新,如果不插入
- react-native - react-native 应用程序在不同的 cpu 架构中组装时表现不同
- javascript - RXJS,向嵌套的 observable 添加新的 key:value
- docker - 从容器到主机的卷挂载是如何工作的,反之亦然?
- python - Pytorch 闪电指标:ValueError:preds 和 target 必须具有相同数量的维度,或者 preds 的一个额外维度
- javascript - 如何在js中获取html破折号输入标签名称
- javascript - 无法通过 id 找到一个
- linux - grep -r --include 不起作用,但 --exclude 起作用