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

Unity Netcode双玩家相机视角异常故障修复求助

解决方案

核心问题是所有玩家的相机都处于激活状态,导致两个相机同时渲染画面,所以移动第二个玩家相机时,两台窗口显示的都是当前激活的相机画面。按以下步骤修复:

1. 仅激活本地玩家的相机

在FirstPersonLook脚本中添加OnNetworkSpawn回调(NetworkBehaviour的生命周期方法,比Start更适合处理网络对象初始化),只让拥有该对象的客户端激活自己的相机,其他客户端禁用对应相机:

using UnityEngine;
using Unity.Netcode;

public class FirstPersonLook : NetworkBehaviour
{
    public Camera myCam;
    [SerializeField] public Transform character;
    public float sensitivity = 2;
    public float smoothing = 1.5f;

    Vector2 velocity;
    Vector2 frameVelocity;

    void OnNetworkSpawn()
    {
        // 仅本地玩家激活相机,其他玩家的相机禁用
        myCam.gameObject.SetActive(IsOwner);
        // 仅本地玩家锁定光标
        if (IsOwner)
        {
            Cursor.lockState = CursorLockMode.Locked;
        }
    }

    void Update()
    {
        if (!IsOwner) return;

        Vector2 mouseDelta = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
        Vector2 rawFrameVelocity = Vector2.Scale(mouseDelta, Vector2.one * sensitivity);
        frameVelocity = Vector2.Lerp(frameVelocity, rawFrameVelocity, 1 / smoothing);
        velocity += frameVelocity;
        velocity.y = Mathf.Clamp(velocity.y, -90, 90);

        transform.localRotation = Quaternion.AngleAxis(-velocity.y, Vector3.right);
        character.localRotation = Quaternion.AngleAxis(velocity.x, Vector3.up);
    }
}

2. 移除相机的网络同步组件

确保相机所在的Transform没有挂载ClientNetworkTransform,相机的旋转是本地输入控制的,不需要同步给其他客户端。其他玩家的视角应该由他们自己的客户端独立计算,而不是同步本地玩家的相机状态。

3. 验证ParrelSync的设置

确认ParrelSync的两个实例分别对应不同的客户端,没有共享输入或渲染上下文。可以在每个窗口的NetworkManager中检查客户端ID是否不同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:11