DamnerPow 2024-05-07 15:02 采纳率: 0%
浏览 2
已结题

使用Photon PUN2解决游戏得分同步的问题

问题如标题
以下是图片说明

img


请问如何才能使两个客户端的分数同步呢
项目已经连好网、可以两个人在同一局一人控制一个角色角色

这里是相关部分代码

public class moveTest : MonoBehaviourPun
{
    [SerializeField]
    private int score;                  //分数
    [SerializeField]
    public Text YourScore;              //你的得分UI
  
     void Update()
    {
        if (photonView.IsMine)
        {
            YourScore.text = score.ToString();         // 将得到的分数传给UI
        }
        else
        {
            //YourScore.text = photonView.Owner.
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        /* 
         * 收集樱桃
         * 如果碰撞的碰撞体tag是cherry则销毁这个物品并积一分
         */
        if (collision.tag == "cherry")
        {
            Destroy(collision.gameObject);
            score += 1;
            scoreNum.text = score.ToString();
            //YourScore.text = score.ToString();
            collectAudio.Play();
        }
 }

这个是角色头上数字文本挂载的组件

img

这个是上面展示文本的父物体Canvas挂载的组件

img

这个是Canvas的父物体 角色挂载的组件(还有很多,不相关就没放了)

img

谢谢各位!

  • 写回答

5条回答 默认 最新

  • 妄北y 嵌入式领域优质创作者 2024-05-07 15:03
    关注

    以下参考免费微信小程序:皆我百晓生 作答,并由妄北y整理回复。

    从你提供的代码和图片信息来看,你已经在使用Photon PUN2来实现多人在线游戏的同步功能。但是,你的得分同步似乎存在一些问题。以下是一些建议,帮助你解决得分同步的问题:

    1. 确保所有客户端都能接收到得分更新: 在你的代码中,你只在本地客户端更新了得分。为了让所有客户端都能看到得分更新,你需要使用Photon的网络事件来广播得分更新。

    2. 使用Rpc方法: Photon提供了一个Rpc(Remote Procedure Call)方法,允许你在所有客户端上调用一个函数。你可以使用这个方法来同步得分。

    3. 修改得分更新代码: 在你的OnTriggerEnter2D方法中,当你增加得分时,使用Rpc来更新所有客户端的得分UI。

      // 使用Rpc调用一个自定义函数来更新得分UI
      void UpdateScoreUI(int newScore)
      {
          score = newScore;
          YourScore.text = score.ToString();
      }
      
      private void OnTriggerEnter2D(Collider2D collision)
      {
          if (collision.tag == "cherry")
          {
              Destroy(collision.gameObject);
              score += 1;
              PhotonNetwork.InstantiateRpc(UpdateScoreUI, this, score, PhotonMessageInfo.sender);
              collectAudio.Play();
          }
      }
      
    4. 确保PhotonView的Synchronization设置正确: 从你提供的图片来看,你的PhotonView组件的Synchronization设置为Unreliable On Change。这通常适用于同步状态,如位置和旋转,但不适用于实时更新的得分。你可能需要调整这个设置,或者使用Rpc来确保得分同步。

    5. 检查网络延迟和丢包: 如果得分更新仍然存在问题,可能是因为网络延迟或丢包。确保你的网络连接稳定,并检查Photon服务器的延迟。

    6. 调试和测试: 使用Photon的网络日志和调试工具来监控游戏的网络活动。这可以帮助你发现任何同步问题,并确保所有客户端都能正确接收得分更新。

    7. 优化得分同步逻辑: 如果游戏的得分更新非常频繁,考虑使用一个定时器或累积系统来减少网络负载。例如,你可以每隔一定时间(如0.5秒)发送一次得分更新,而不是每次得分增加时都发送。

    通过以上步骤,你应该能够解决游戏得分同步的问题。如果仍然遇到问题,请提供更多的信息,以便进一步分析和解决。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月7日
  • 创建了问题 5月7日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路