Photon Unity 回合制多人骰子游戏和同步视图

Photon Unity turn based multiplayer dice game and synchronize the view

我创建了一个只有一个骰子的场景,玩家将轮流点击骰子,这将改变骰子的颜色。首先我创建了一个房间,一个玩家加入了房间并进入了游戏场景。到这里一切正常。但是当玩家 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 函数点击骰子,但游戏场景中两个玩家的骰子不同步。我希望每当玩家点击骰子时,骰子都会显示在两个屏幕上,颜色会发生变化,并且应该显示在其他玩家的屏幕上。然后在下一个回合中,另一个玩家将做同样的事情。请帮我解决这个问题。 谢谢

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

检查photonView.IsMine,if 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 之类的 EventFunctions 标记为 RPC!为您的任务创建另一种方法...

对不起我的英语...

photonView.RPC("rollDice", RpcTarget.Others);

而不是 RpcTarget.Others 使用 RpcTarget.All 来反映骰子滚动动画和玩家和其他人的变化玩家。 RpcTarget.Others 将在不在我们设备中的其他玩家中显示掷骰子。

或者,您可以使用实例化为房间对象的单个骰子,然后更改它的颜色。