首页 > 解决方案 > 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 存储在每个玩家的房间控制器中或类似的东西?

标签: c#unity3drpcphoton

解决方案


您想使用自定义属性

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

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


推荐阅读