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

如何解决Photon多人游戏中跨设备玩家控制混乱问题?

解决Photon联机时玩家角色被跨设备操控的问题

核心问题排查

你的问题根源大概率是PhotonView的Owner分配错误,或者输入逻辑的判断顺序不当,导致非本地角色也执行了输入操控代码。以下是具体修复步骤:

1. 确保玩家角色正确创建

必须使用PhotonNetwork.Instantiate()方法生成玩家角色,而不是Unity原生的Instantiate()。只有通过Photon的实例化方法,才能让Photon正确为每个角色分配Owner,保证view.IsMine仅对角色的创建者客户端返回true。

示例创建逻辑(通常放在连接成功后的回调里):

// 连接成功后创建本地玩家角色
void OnJoinedRoom()
{
    PhotonNetwork.Instantiate("PlayerPrefabName", spawnPosition, Quaternion.identity);
}

2. 修正输入逻辑的判断顺序

把view.IsMine的判断提到Update方法最外层,确保非本地角色完全不执行输入相关逻辑,避免因判断顺序导致的异常:

修改后的完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class Mototron : MonoBehaviour
{
    public float speed = -21f;
    private float targetAngle = 90f;
    public float enemyK = 0f;

    public bool isMoving = false;

    public GameObject boxPrefab;
    public GameObject deadCanvas;
    public GameObject wonCanvas;
    public bool box;

    PhotonView view;

    void Start()
    {
        view = GetComponent<PhotonView>();
        // 非本地角色隐藏专属UI,避免混淆
        if (!view.IsMine)
        {
            deadCanvas.SetActive(false);
            wonCanvas.SetActive(false);
        }
    }

    public void Update ()
    {      
        // 仅本地角色执行输入逻辑
        if(view.IsMine)
        {
            movement();
        }
    }
    
    void movement ()
    {
        if(Input.GetKey(KeyCode.W))
        {
            transform.Translate(Vector3.forward * speed * Time.deltaTime);
        }
    }
}

3. 额外检查项

  • 检查玩家角色Prefab上是否有多个PhotonView组件,重复组件会导致Owner判断混乱,只保留一个即可。
  • 确认PhotonServerSettings中的房间配置,不要开启强制同步所有对象的选项,保持默认的Owner同步机制。
  • 确保每个客户端只创建自己的玩家角色,不要让服务器或其他客户端替当前客户端生成角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:45:04