【发布时间】:2021-04-12 16:50:36
【问题描述】:
我目前正在使用 Unity 使用 Photon Networking 构建在线游戏,但 Photon.Realtime.Player.SetCustomProperties() 方法存在问题。我已经用谷歌搜索了它,但我找不到任何类似我的问题。
关于项目
匹配系统没什么特别的:我有第一个登录场景(暂时没有密码),它将连接到 Photon。当OnConnectedToMaster 事件引发时,我加载将显示房间的大厅场景。最后,当OnJoinedRoom 被调用时,我为房间本身加载了第三个场景,它将显示玩家、设置团队、游戏配置等。
我为 Player 和 Room (RoomInfo) 类创建了一个扩展类,以便更轻松、更清晰地获取/设置自定义属性。
问题
加载房间场景后,我想从播放器中获取一些属性以显示在房间中,例如 MMR(排名)。所以我做了以下代码:
public static class PlayerExtensions
{
private static readonly string _mmrProperty = "mmr";
public static void SetMmr(this Player player, int mmr)
{
player.SetCustomProperties(new Hashtable() { { _mmrProperty, mmr.ToString() } });
}
public static int GetMmr(this Player player)
{
return (int)player.CustomProperties[_mmrProperty];
}
}
在GetMmr() 收到空异常错误后,我意识到播放器中没有实际的“mmr”自定义属性。所以我调试了SetMmr(),我注意到了一些事情:
- 播放器已经有一些我从未设置过的自定义属性,称为“name”和“hideFlags”。
-
SetCustomProperties()根本不做任何事情。我期待它创建/更改“mmr”属性,但它没有 - 如果我直接更改
player.CustomProperties就可以了。但是,这似乎不是正确的方法。
这是我用 3 个步骤调试它:https://imgur.com/a/YI24dP0
所以,我不确定下一步该怎么做,因为 SetCustomProperties() 似乎不起作用。
有任何想法吗?谢谢。
【问题讨论】:
-
您确定要从实际先设置该属性的玩家那里获取该属性吗?
-
@derHugo 当然。我用这个链接更新了问题:imgur.com/a/YI24dP0 3 张图片显示了调试过程中的问题