【发布时间】: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 存储在每个玩家的房间控制器中或类似的东西?
【问题讨论】: