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
相关产品推荐
相关产品推荐

