【问题标题】:Unity Photon - How to sync player stats/infoUnity Photon - 如何同步玩家统计/信息
【发布时间】:2019-11-10 22:22:34
【问题描述】:

我正在尝试创建一个合作的第一人称多人游戏,我想我误解了 Photon 和 RPC 应该如何工作。 我有一个有效的第一人称多人游戏项目,其中玩家头像可以看到彼此并四处移动,因为玩家头像具有光子视图光子变换视图。 作为附加到玩家头像预制件的玩家控制器脚本(仅处理本地玩家的玩家移动)的一部分,我有一个属性:

public PlayerCharacterInfo myCharacter;

其中包含所有玩家的信息和统计数据,包括名称、等级、当前HP、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 存储在每个玩家的房间控制器中或类似的东西?

【问题讨论】:

    标签: c# unity3d rpc photon


    【解决方案1】:

    你想使用Custom Properties

    Photon 的自定义属性由一个键值对哈希表组成,您可以在 可以按需填写。这些值在客户端上同步和缓存, 所以您不必在使用前取走它们。更改被推送到 其他人通过 SetCustomProperties()。

    这有什么用?通常,房间和玩家有一些属性 与 GameObject 无关的:当前地图或游戏对象的颜色 玩家的角色(想想:2d 跳跃和奔跑)。这些可以通过发送 对象同步或RPC,但通常使用起来更方便 自定义属性。

    【讨论】:

    • 不是我想要的,因为我需要每个玩家都有自己的 myCharacter 对象和自己的单独值,但这仍然非常有用,因为我需要有这种“房间”数据”最终。谢谢。
    • @toxia 我建议您通过文档和演示深入了解 CustomProperties。它们用于轻松同步状态,光子播放器对象也具有 CustomProperties,因此它非常适合同步不经常更改的播放器状态,无论可能是:名称、颜色、排名、分数。
    【解决方案2】:

    有点解决了!我删除了试图同步我的自定义 PlayerCharacterInfo 对象的 RPC 调用,而是在 PlayerController 中进行了调用和新字符串“myCharacterName”以仅保存玩家的姓名。

    新的 RPC 调用获取本地玩家的 myCharacter.characterName(来自 PlayerCharacterInfo)并设置 myCharacterName 并同步到所有。 这有效,我的编辑玩家可以看到其他玩家的 myCharacterName!但是,我离同步整个 myCharacter 课程还差得远。

    现在我对它的工作原理有了正确的认识,我能够进行更多研究,发现 Photon 无法正常同步自定义类,但您可以序列化您的类以便能够发送它: https://doc.photonengine.com/en-us/realtime/current/reference/serialization-in-photon

    但是阅读这篇文章让我意识到我可能不需要同步我的整个玩家数据(它不仅包含健康和状态,还包含库存、设备、任务等信息),而且我可能会更好在不同的调用中同步不同的数据类型。

    这个帖子也有帮助: https://forum.photonengine.com/discussion/880/custom-class-object-sent-over-rpc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-27
      • 2015-10-11
      • 2019-01-15
      • 2013-12-18
      • 2016-12-21
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多