首页 > 解决方案 > Photon Unity 回合制多人骰子游戏并同步视图

问题描述

我创建了一个带有单个骰子的场景,玩家将依次点击骰子,这将改变骰子的颜色。首先我创建了一个房间,一个玩家加入了房间并进入了游戏场景。到这里一切正常。但是当玩家 1(主机)点击骰子时,玩家 2 并没有看到骰子在移动。我在检查器中添加了光子变换视图,这是我的代码:

void Update()
    {
        turnBaseGame();
    }
    
    public void turnBaseGame()
    {
         PhotonView photonView = PhotonView.Get(this);
         photonView.RPC("OnMouseDown", RpcTarget.All);
    }
    
    [PunRPC]
    public void OnMouseDown()
    {
       if (Input.GetMouseButtonDown(0))
       {
           // color change
       }
    }

我正在使用 OnMouseDown 函数单击骰子,但游戏场景中两个玩家的骰子不同步。我希望骰子在玩家点击骰子时显示在两个屏幕上,颜色会发生变化,并且应该显示在其他玩家的屏幕上。然后在下一回合,另一个玩家会做同样的事情。请帮我解决这个问题。谢谢

标签: c#unity3dphoton

解决方案


您应该将本地播放器和远程播放器的方法分开。

检查 photonView.IsMine,如果 isMine == true 在本地调用方法并使用 RpcTargets.All 通知遥控器

    void OnMouseDown() 
    {
      if(photonView.isMine)
      {
         rollDice(); // call local
         //notify other players about your turn
         photonView.RPC("rollDice", RpcTarget.Others); 
       }
    }
   
   [PunRPC]
   void rollDice() 
   {
      //Your logic here
   }

因此,如果您在本地播放,更改将正确显示在每个播放器设备上。

!!!不要!!!将 Update/Start/OnMouseDown 等 EventFunction 标记为 RPC!为您的任务制作另一种方法...

对不起我的英语不好...


推荐阅读