FPS玩家相机无法左右转向问题求助
问题修复方案
你的代码核心问题在于两次单独给cam.eulerAngles赋值,第二次赋值Vector3.right * mY会完全覆盖掉之前设置的Y轴旋转,导致相机无法左右转向。另外当前玩家和相机的Y轴旋转只用到了mX/2,这也可能是旋转方向/幅度不符合预期的原因。
修正后的代码:
mX += Input.GetAxis("Mouse X") * Sensivity * Time.deltaTime; mY -= Input.GetAxis("Mouse Y") * Sensivity * Time.deltaTime; mY = Mathf.Clamp(mY, -89.9f, 89.9f); // 玩家对象只负责Y轴左右旋转 transform.eulerAngles = new Vector3(0, mX, 0); // 相机同时应用X轴(上下)和Y轴(左右)旋转,和玩家保持一致的Y轴方向 cam.eulerAngles = new Vector3(mY, mX, 0); float inputX = Input.GetAxis("Horizontal"); float inputY = Input.GetAxis("Fly"); float inputZ = Input.GetAxis("Vertical"); Vector3 dirForward = Vector3.ProjectOnPlane(transform.forward, Vector3.up).normalized; Vector3 dirSide = transform.right; Vector3 dirUp = Vector3.up; Vector3 moveDir = (inputX * dirSide) + (inputY * dirUp) + (inputZ * dirForward); transform.position += moveDir * Speed * Time.deltaTime;
关键修正点说明:
- 合并相机的欧拉角设置:用
new Vector3(mY, mX, 0)同时指定X(上下)和Y(左右)轴旋转,避免之前的覆盖问题。 - 玩家和相机使用相同的
mX值做Y轴旋转,确保左右转向同步,不会出现方向相反的情况。 - 移除了原代码中
mX/2的减半操作,如果你需要更小的旋转灵敏度,可以直接调整Sensivity参数,这样更直观。
如果调整后相机左右转向方向还是相反,只需要把cam.eulerAngles里的mX改成-mX即可。
内容的提问来源于stack exchange,提问作者Der Fette Boss
相关产品推荐
相关产品推荐

