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

关于FMETP结合Photon PUN数据传输无接收的技术求助

问题排查与解决建议:FMETP + Photon PUN 数据接收失败

你当前尝试通过FMStreamPun脚本桥接FMETP编码器和解码器,基于Photon PUN同步数据,但解码器始终收不到编码器发送的信息。以下是针对性的排查和修复方案:


1. 检查PhotonView组件核心配置

挂载FMStreamPun脚本的对象必须正确配置PhotonView,否则同步逻辑根本不会触发:

  • 确保对象上存在PhotonView组件,且Observed Components列表中已添加FMStreamPun脚本(这是触发IPunObservable接口OnPhotonSerializeView方法的必要条件)
  • View ID设置为Auto Sync或手动分配唯一ID,保证房间内所有客户端的该ID一致
  • 确认Ownership Transfer设置符合需求:发送数据的客户端必须是该PhotonView的拥有者,否则无法写入流

2. 验证FMETP编码器与FMStreamPun的绑定逻辑

  • 确认FMETP Encoder的输出事件(如OnEncodedDataReady)已正确绑定到FMStreamPun的Action_SendData方法
  • 运行时查看控制台是否打印entro al action send data:如果没打印,说明编码器的数据根本没传入FMStreamPun,检查绑定是否遗漏、编码器是否激活

3. 修复FMStreamPun脚本的逻辑缺陷

读取逻辑的冗余判断

原脚本中stream.IsReading分支的!photonView.IsMine判断完全多余——因为stream.IsReading本身只会在非拥有者客户端触发,这个判断会导致部分客户端无法读取数据,直接移除:

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    Debug.Log("entro al seriaize view");
    if (stream.IsWriting)
    {
        Debug.Log("is writting");
        stream.SendNext(appendQueueSendDataCount);
        while (appendQueueSendDataCount > 0)
        {
            byte[] sentData = appendQueueSendData.Dequeue();
            stream.SendNext(sentData);
        }
    }

    if (stream.IsReading)
    {
        // 移除 !photonView.IsMine 判断
        int streamCount = (int)stream.ReceiveNext();
        for (int i = 0; i < streamCount; i++)
        {
            byte[] receivedData = (byte[])stream.ReceiveNext();
            OnDataByteReadyEvent.Invoke(receivedData);
        }
    }
}

同步触发验证

运行时检查控制台日志:

  • 如果没打印entro al seriaize view:回到第一步检查PhotonView配置
  • 如果只打印entro al seriaize view但没打印is writting:说明当前客户端不是PhotonView的拥有者,无法写入流,调整拥有者设置

4. 确认FMETP解码器的绑定与状态

  • 确保FMStreamPun的OnDataByteReadyEvent已绑定到FMETP Decoder的输入方法(如Action_DecodeData)
  • 临时添加日志验证接收逻辑:
    void Start()
    {
        OnDataByteReadyEvent.AddListener((data) => Debug.Log("收到同步数据,长度:" + data.Length));
    }
    
  • 确认解码器处于激活状态,且编码格式、参数与编码器完全一致

5. 网络环境与房间状态检查

  • 确保至少两个客户端连接到同一个Photon房间,网络状态正常
  • 暂时保留Action_SendData中被注释的玩家数量判断(或直接移除),测试时保证房间内有至少两名玩家(单玩家场景下不会触发读取逻辑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:15:34