c# - 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 函数单击骰子,但游戏场景中两个玩家的骰子不同步。我希望骰子在玩家点击骰子时显示在两个屏幕上,颜色会发生变化,并且应该显示在其他玩家的屏幕上。然后在下一回合,另一个玩家会做同样的事情。请帮我解决这个问题。谢谢
解决方案
您应该将本地播放器和远程播放器的方法分开。
检查 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!为您的任务制作另一种方法...
对不起我的英语不好...
推荐阅读
- ios - 使用 Decodable + Realm Swift 解码自定义 JSON
- android - 在 pageData 中使用变量作为数组名
- php - 在子模块中拆分 CSS 并使用 PHP 或预编译器聚合它们
- reactjs - Is Flow replace PropTypes?
- javascript - 防止 Voice Over 读取文本输入中的只读属性
- python - 如何在 maya python ls 命令中选择顶点?
- android - 即使指定了 android:screenOrientation="portrait",Android 也以横向方式启动活动(来自库项目)
- ruby-on-rails - 在多个每个循环内/以上向哈希添加值
- typescript - TypeScript 接口属性 @version
- c# - 情节提要仅在第二个条件下触发一次