Unity FPS摄像机旋转的陷阱

鼠标横向移动对应 Transform 在y轴上的旋转,纵向移动对应x轴上的旋转,一般采用以下方式。

Vector2 vector2 = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));
cameraObj.Rotate(Vector3.up, vector2.x, Space.World);
cameraObj.Rotate(transform.right * -vector2.y);

注意 line2 的第三个参数Space.World,不应该以cameraObj的up方向来旋转,而应该总是以世界坐标系的up方向来旋转。

在这里插入图片描述
如图,以摄像机的本地坐标系的up方向(绿色箭头)旋转,则会发生奇怪的效果。
绝大多数FPS游戏在横向移动视角时,永远是基于世界坐标系的up方向。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity摄像机旋转是通过修改摄像机旋转属性来实现的。在Unity中,摄像机旋转属性由三个欧拉角表示:pitch(俯仰角),yaw(偏航角)和roll(翻滚角)。 你可以通过以下步骤来实现摄像机旋转: 1. 获取摄像机组件:首先,你需要获取场景中的摄像机对象,并通过代码获取摄像机组件。 2. 修改摄像机旋转属性:根据你想要的旋转效果,修改摄像机的pitch、yaw和roll属性。例如,如果你想让摄像机绕Y轴旋转,可以修改yaw属性。 3. 应用旋转:将修改后的摄像机旋转属性应用到摄像机组件上。可以使用Transform组件提供的Rotate函数来实现旋转。 下面是一个简单的示例代码,演示了如何实现摄像机旋转: ```csharp using UnityEngine; public class CameraRotation : MonoBehaviour { public float rotationSpeed = 10f; void Update() { // 获取摄像机组件 Camera camera = GetComponent<Camera>(); // 按下鼠标左键进行旋转 if (Input.GetMouseButton(0)) { // 获取鼠标在屏幕上的移动距离 float mouseX = Input.GetAxis("Mouse X"); // 修改摄像机的yaw属性 Vector3 rotation = new Vector3(0f, mouseX * rotationSpeed, 0f); camera.transform.Rotate(rotation); } } } ``` 上述示例代码将允许你使用鼠标的水平移动来控制摄像机围绕Y轴旋转。你可以根据自己的需求修改旋转速度和旋转的方向。同时,你还可以探索其他旋转方法,例如绕X和Z轴旋转,或者使用Quaternion来实现更复杂的旋转效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值