c# - Unity Photon - 如何同步玩家统计/信息
问题描述
我正在尝试创建一个合作的第一人称多人游戏,我想我误解了 Photon 和 RPC 应该如何工作。我有一个有效的第一人称多人游戏项目,其中玩家头像可以看到彼此并四处移动,因为玩家头像具有光子视图光子变换视图。作为附加到玩家头像预制件的玩家控制器脚本(仅处理本地玩家的玩家移动)的一部分,我有一个属性:
public PlayerCharacterInfo myCharacter;
它包含所有玩家的信息和统计信息,包括名称、级别、currentHP、maxHP 等,当玩家进入房间并实例化他们的化身时,这些信息和统计信息将添加到玩家头像的 PlayerController 中。
当我加入多人房间时,每个玩家只能看到自己的统计数据。例如,在编辑器中运行游戏时,只有本地编辑器玩家头像的值会显示在 Player Controller myCharacter 上。我可以看到其他玩家头像上有一个实例化的 myCharacter 但没有显示任何值。在这一点上,我想我只需要在我的播放器控制器中有一个这样的 RPC 函数,它只是将 myCharacter 重新分配给它自己,以便它可以广播给所有人:
[PunRPC]
void RPC_AddCharacter(PlayerCharacterInfo paramCharacter)
{
myCharacter = paramCharacter;
}
在无效开始()中:
if(PV.IsMine)
{
PV.RPC("RPC_AddCharacter", RpcTarget.All, myCharacter);
}
但这并没有让我看到非本地玩家头像的 myCharacter 值。
我的目标是首先通过光线投射显示您正在查看的玩家头像的名称,但我什至无法同步这些数据。
我在这里有正确的想法,但我执行错了吗?或者这不是 Photon 的工作原理?我是否需要将每个玩家的 PlayerCharacterInfo 存储在每个玩家的房间控制器中或类似的东西?
解决方案
您想使用自定义属性。
Photon 的自定义属性由一个键值哈希表组成,您可以按需填写。这些值在客户端上同步和缓存,因此您不必在使用前获取它们。SetCustomProperties() 将更改推送给其他人。
这有什么用?通常,房间和玩家有一些与游戏对象无关的属性:当前地图或玩家角色的颜色(想想:2d 跳跃和奔跑)。这些可以通过对象同步或 RPC 发送,但使用自定义属性通常更方便。
推荐阅读
- python - 如何处理从表单中获得的值并使用该值给出结果
- angularjs - Angular 混合应用程序似乎没有使用与 angularjs 相同的会话
- react-native - 获取firestore文档的文档ID的最快方法是什么?
- python - 如何遍历 3 个列表的所有组合?
- javascript - Buefy datepicker如何输出'yyyy-MM-dd'字符串?
- java - 如何使用 websocket 范围测试组件?
- c++ - 对 const 引用的右值分配和非 const 引用右值分配问题背后的原因
- c# - 如何在被调用的类中正确初始化二维数组
- python - Removing extra characters when reading csv
- java - 快速移动鼠标时相机有时会倒置