Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于光子统一回合的多人骰子游戏和同步视图_C#_Unity3d_Photon - Fatal编程技术网

C# 基于光子统一回合的多人骰子游戏和同步视图

C# 基于光子统一回合的多人骰子游戏和同步视图,c#,unity3d,photon,C#,Unity3d,Photon,我用一个骰子创建了一个场景,玩家将依次点击骰子,这将改变骰子的颜色。首先,我创建了一个房间,一名玩家加入了房间并进入了游戏场景。直到这里一切都很好。但是当玩家1(主机)点击骰子时,玩家2没有看到骰子移动。我在inspector中添加了光子变换视图,下面是我的代码: void Update() { turnBaseGame(); } public void turnBaseGame() { PhotonView photo

我用一个骰子创建了一个场景,玩家将依次点击骰子,这将改变骰子的颜色。首先,我创建了一个房间,一名玩家加入了房间并进入了游戏场景。直到这里一切都很好。但是当玩家1(主机)点击骰子时,玩家2没有看到骰子移动。我在inspector中添加了光子变换视图,下面是我的代码:

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功能单击骰子,但游戏场景中两个玩家的骰子都没有同步。我希望骰子显示在两个屏幕上,每当一个玩家点击骰子,颜色会改变,它应该显示在其他玩家的屏幕上。然后在下一轮中,另一名玩家也会这样做。请帮我解决这个问题。
谢谢

您应该为localPlayer和RemotePlayer提供不同的方法

检查photonView.IsMine,如果IsMine==true,则在本地调用方法并使用RpcTargets通知远程。全部

    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等事件函数标记为RPC!为您的任务创建另一种方法


对不起,我的英语…

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

检查photonView.IsMine,如果IsMine==true,则在本地调用方法并使用RpcTargets通知远程。全部

    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等事件函数标记为RPC!为您的任务创建另一种方法

对不起,我的英语…

photonView.RPC(“rollDice”,RpcTarget.Others)

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

photonView.RPC(“rollDice”,RpcTarget.Others)


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

感谢您的回复。这对我有帮助。我还有一个问题,我应该如何改变球员的轮换?比如,如果(photonView.isMine)被执行,我应该如何让其他玩家转向?谢谢你的回复。这对我有帮助。我还有一个问题,我应该如何改变球员的轮换?比如如果(photonView.isMine)被执行,我应该如何让其他玩家转向它?