Unity中如何实现相机Y轴转动不带动角色,仅保留X轴转向功能
解决Unity中角色与相机旋转分离的问题
没问题,我来帮你搞定这个需求——让角色只做左右转动,相机单独实现上下转动,同时角色完全不会跟着相机倾斜,位置也保持固定不动。
核心思路是把角色旋转和相机旋转逻辑拆分开:角色只负责绕Y轴(左右方向)转动,相机作为角色的子对象(或单独控制)负责绕自身X轴(上下方向)转动,两者旋转互不干扰,自然就能避免角色跟着相机倾斜的问题。
修改后的完整代码
using UnityEngine; public class PlayerCameraController : MonoBehaviour { // 拖拽你的玩家角色对象到这里 public Transform playerTransform; // 拖拽你的主相机对象到这里 public Transform cameraTransform; // 角色左右旋转的速度 public float horizontalRotateSpeed = 2.0f; // 相机上下旋转的速度 public float verticalRotateSpeed = 2.0f; // 限制相机上下旋转的角度,避免过度抬头/低头导致视角翻转 public float minPitchAngle = -60f; public float maxPitchAngle = 60f; private float currentPitch = 2.0f; private void Update() { // 处理角色的左右旋转:仅绕世界Y轴转动,位置保持不变 float horizontalInput = Input.GetAxis("Mouse X"); if (horizontalInput != 0) { playerTransform.Rotate(Vector3.up, horizontalInput * horizontalRotateSpeed); } // 处理相机的上下旋转:仅绕自身X轴转动,不影响角色 float verticalInput = Input.GetAxis("Mouse Y"); if (verticalInput != 0) { currentPitch -= verticalInput * verticalRotateSpeed; // 锁定相机旋转角度范围 currentPitch = Mathf.Clamp(currentPitch, minPitchAngle, maxPitchAngle); // 仅修改相机自身的X轴旋转值 cameraTransform.localEulerAngles = new Vector3(currentPitch, 0, 0); } } }
配置步骤
- 在场景中选择你的玩家角色对象,把这个脚本挂载上去。
- 在Inspector面板里,将角色对象拖入
playerTransform字段,主相机拖入cameraTransform字段。 - 把相机设置为角色的子对象(这样相机能跟着角色同步左右移动,但旋转逻辑完全独立),同时调整相机的初始位置到合适的视角(比如角色头部前方)。
关键细节说明
- 角色仅响应
Mouse X输入,绕世界Y轴旋转,确保只会左右转向,不会出现上下倾斜的情况。 - 相机仅响应
Mouse Y输入,绕自身X轴旋转,通过localEulerAngles保证旋转只作用在相机自身,不会传递给父对象(角色)。 - 用
Mathf.Clamp限制相机的上下旋转角度,避免相机翻转到不合理的视角。 - 全程没有修改角色的位置参数,确保玩家位置始终保持不变。
这样设置后,你就能实现:角色只能左右转动,相机可以自由上下转动,角色不会跟着倾斜,位置也纹丝不动的效果啦。
内容的提问来源于stack exchange,提问作者Stefi Zuzu
相关产品推荐
相关产品推荐

