繁体   English   中英

Unity Photon - 如何同步玩家统计数据/信息

[英]Unity Photon - How to sync player stats/info

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

public PlayerCharacterInfo myCharacter;

它包含玩家的所有信息和统计信息,包括姓名、等级、当前HP、maxHP 等,当玩家进入房间并实例化他们的头像时,这些信息和统计信息会添加到玩家头像的 PlayerController 中。

当我加入多人游戏室时,每个玩家只能看到自己的统计数据。 例如,在运行游戏时的编辑器中,玩家控制器 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() 将更改推送给其他人。

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

解决了一些! 我删除了试图同步我的自定义 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM