Photon Fusion 2第一人称相机Host/Server模式失效问题求助
解决方案:Photon Fusion 2 多玩家模式下第一人称相机失效问题
问题根源
在「Start Host/Client」多玩家模式下,所有玩家实例都会运行你的FirstPersonCamera脚本,没有区分本地玩家与远程玩家:
- 多个相机实例同时读取鼠标输入、修改旋转/位置,导致相机行为混乱
- 远程玩家的相机也在执行逻辑,干扰了本地相机的正常工作
- Shared Client模式下只有单个玩家实例,所以没有冲突
修复步骤
1. 引入Fusion网络权限判断
修改相机脚本,只让拥有输入权限的本地玩家控制相机(Fusion中,本地玩家的NetworkObject拥有Input Authority):
using UnityEngine; using Photon.Fusion; // 引入Fusion命名空间 public class FirstPersonCamera : MonoBehaviour { public NetworkObject PlayerNetworkObject; // 绑定玩家的NetworkObject public float MouseSensitivity = 10f; private float verticalRotation; private float horizontalRotation; void LateUpdate() { // 仅当该NetworkObject属于本地玩家(拥有输入权限)时,才执行相机逻辑 if (PlayerNetworkObject == null || !PlayerNetworkObject.HasInputAuthority()) { return; } // 绑定到本地玩家的Transform Transform target = PlayerNetworkObject.transform; transform.position = target.position; float mouseX = Input.GetAxis("Mouse X"); float mouseY = Input.GetAxis("Mouse Y"); verticalRotation -= mouseY * MouseSensitivity; verticalRotation = Mathf.Clamp(verticalRotation, -70f, 70f); horizontalRotation += mouseX * MouseSensitivity; transform.rotation = Quaternion.Euler(verticalRotation, horizontalRotation, 0); } }
2. 正确绑定相机与本地玩家
- 在场景中,将相机的
PlayerNetworkObject字段绑定到玩家预制体的NetworkObject组件 - 确保每个玩家预制体只挂载一个相机,或者将相机作为本地玩家的专属对象(比如在玩家生成时,只给本地玩家实例添加相机)
3. 额外优化:禁用远程玩家的相机
为了避免远程玩家的相机占用资源,可以在玩家的NetworkBehaviour脚本中添加逻辑,判断如果不是本地玩家,就禁用其相机组件:
public override void Spawned() { // 获取相机组件 FirstPersonCamera camera = GetComponentInChildren<FirstPersonCamera>(); if (camera != null) { // 非本地玩家则禁用相机 camera.enabled = HasInputAuthority(); } }
验证方法
- 点击「Start Host」启动主机
- 再启动一个客户端点击「Start Client」加入
- 检查本地玩家的相机是否正常工作,远程玩家的相机不会干扰本地控制
内容的提问来源于stack exchange,提问作者Brijesh Kumbhare
相关产品推荐
相关产品推荐

