首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity Photon -如何同步玩家状态/信息

Unity Photon -如何同步玩家状态/信息
EN

Stack Overflow用户
提问于 2019-06-29 15:03:33
回答 2查看 3.9K关注 0票数 1

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

代码语言:javascript
复制
public PlayerCharacterInfo myCharacter;

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

当我加入一个多人房间时,每个玩家只能看到他们自己的数据。例如,在编辑器中运行游戏时,只有本地编辑器玩家头像的值显示在玩家控制器myCharacter上。我可以看到其他玩家的头像上有一个实例化的myCharacter,但没有显示任何值。在这一点上,我想我只需要在我的播放器控制器中有一个像这样的RPC函数,它只是将myCharacter重新分配给它自己,这样它就可以广播给所有人:

代码语言:javascript
复制
[PunRPC]
void RPC_AddCharacter(PlayerCharacterInfo paramCharacter)
{
    myCharacter = paramCharacter;
}

在void Start()中:

代码语言:javascript
复制
if(PV.IsMine)
{
    PV.RPC("RPC_AddCharacter", RpcTarget.All, myCharacter);
}

但这并不能让我看到非本地玩家头像的myCharacter值。

我的目标是首先通过光线投射显示你正在查看的玩家头像的名称,但我甚至无法同步这些数据。

我的想法是正确的,但我执行错了吗?或者这不是Photon的工作方式?我是否需要在房间控制器中为每个玩家存储每个玩家的PlayerCharacterInfo,或者类似的东西?

EN

回答 2

Stack Overflow用户

发布于 2019-06-29 20:15:40

您想要使用Custom Properties

Photon的自定义属性由一个键值哈希表组成,您可以按需填充该表。这些值被同步并缓存在客户机上,因此您不必在使用它们之前获取它们。更改由SetCustomProperties()推送到其他对象。

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

票数 1
EN

Stack Overflow用户

发布于 2019-06-29 20:40:55

在某种程度上解决了!我删除了试图同步我的自定义PlayerCharacterInfo对象的RPC调用,而是在PlayerController中进行了一个调用和新字符串'myCharacterName‘来保存玩家的名字。

新的RPC调用获取本地播放器的myCharacter.characterName (来自PlayerCharacterInfo),并将myCharacterName和syncs设置为all。这是可行的,我的编辑器播放器可以看到其他播放器的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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56815715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档