Unity中如何同时控制两台相机保持同步旋转?
双相机同步旋转问题解决方案
嘿,我一眼就瞅出问题所在啦!你这第二台相机只同步了Y轴的左右旋转,完全没管X轴的上下转动,难怪它只有X轴转得正常,Y轴没反应~咱们来一步步解决这个问题:
问题根源分析
你的主相机逻辑是分两部分的:
- 通过
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f)处理X轴的上下抬头/低头 - 通过
playerBody.Rotate(Vector3.up * mouseX)处理Y轴的左右转向(因为主相机应该是挂在playerBody下的子物体,跟着一起转)
但你给第二台相机的代码里,只写了secondaryCamera.Rotate(Vector3.up * mouseX)——也就是只同步了Y轴的转动,完全没同步X轴的上下旋转,而且用Rotate累加旋转的方式,时间久了还容易出现旋转漂移的问题,不如直接同步主相机的最终旋转状态更靠谱。
修正后的完整代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseController : MonoBehaviour { public float mouseSensitivity = 100f; public Transform playerBody; public Transform secondaryCamera; float xRotation = 0f; void Start() { Cursor.lockState = CursorLockMode.Locked; } void Update() { float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation, -90f, 90f); // 主相机的X轴上下旋转 transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f); // 玩家体的Y轴左右旋转(带动主相机同步转向) playerBody.Rotate(Vector3.up * mouseX); // 核心修改:直接让第二台相机完全同步主相机的旋转状态 // 如果两台相机的父物体一致,直接同步rotation就行 secondaryCamera.rotation = transform.rotation; // 要是第二台相机和主相机不在同一个父物体下,就用下面这句替代上面的,分开同步X/Y轴旋转 // secondaryCamera.localRotation = Quaternion.Euler(xRotation, transform.localEulerAngles.y, 0f); } }
关键修改说明
- 完全同步旋转状态:去掉了原来单独给第二台相机加Y轴旋转的代码,改成直接赋值主相机的
rotation,这样两台相机的X/Y轴旋转会完全一致,不会再出现某根轴不动的情况。 - 避免旋转漂移:用直接赋值旋转的方式代替
Rotate累加,不会因为帧积累导致旋转角度异常,稳定性更高。 - 适配不同层级结构:注释里的备选写法适用于两台相机父物体不同的场景,保证旋转逻辑和主相机完全对齐。
内容的提问来源于stack exchange,提问作者MarkoFire
相关产品推荐
相关产品推荐

