You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
    }
}

关键修改说明

  1. 完全同步旋转状态:去掉了原来单独给第二台相机加Y轴旋转的代码,改成直接赋值主相机的rotation,这样两台相机的X/Y轴旋转会完全一致,不会再出现某根轴不动的情况。
  2. 避免旋转漂移:用直接赋值旋转的方式代替Rotate累加,不会因为帧积累导致旋转角度异常,稳定性更高。
  3. 适配不同层级结构:注释里的备选写法适用于两台相机父物体不同的场景,保证旋转逻辑和主相机完全对齐。

内容的提问来源于stack exchange,提问作者MarkoFire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:42:41