c# - 请在 Unity 中解释 transform.rotate
问题描述
有人可以解释为什么这种方法不能作为正常的 fps 相机运动吗?我将 Z 轴设置为 0,但在测试时它会发生变化。我可以使用四元数,但我真的不明白为什么这种方法不起作用。
void onCameraLook() {
mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity;
mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity;
transform.Rotate(-mouseY, mouseX, 0, Space.Self);
}
解决方案
如果您与您通话Rotate
,Space.Self
您将围绕其局部轴旋转对象。
对于“普通 fps 相机”,这对于垂直旋转很好,您希望围绕局部 x/右轴旋转,但对于水平旋转,您希望对象围绕全局 y/上轴旋转。有关更详细的帖子,请参阅在两个轴上旋转对象。
所以你的代码应该是:
void onCameraLook() {
mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity;
mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity;
transform.Rotate(-mouseY, 0, 0, Space.Self);
transform.Rotate(0, mouseX, 0, Space.World);
}
推荐阅读
- powershell - 此平台不支持 Windows 加密下一代 (CNG) 来自 AWS-Lambda 的 PowerShell
- react-native - vue-native 中的 DrawerLayoutAndroid
- reactjs - 使用 React 查询过滤的 Firestore 数据 - 查询在规则游乐场中完美运行
- c - 如何在没有递归的情况下找到给定 N 元素集的 K 元素的所有组合?
- python-3.x - pyinstaller - 没有名为“Backtrader”的模块
- azure-web-app-service - 如何使用应用程序网关添加 Azure 应用服务冗余?
- python - 使用 Numpy 求解 n 个机械臂的 Denavit Hartenberg 正向运动学
- bash - 这是否等同于测试变量的存在?
- php - Returning a blade component from a controller in Laravel
- android-studio - Intellij Android Studio opens localhost page to login on github