Photon Network Player.SetCustomProperties 不起作用
Posted
技术标签:
【中文标题】Photon Network Player.SetCustomProperties 不起作用【英文标题】:Photon Network Player.SetCustomProperties not working 【发布时间】: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()
,我注意到了一些事情:
SetCustomProperties()
根本不做任何事情。我期待它创建/更改“mmr”属性,但它没有
如果我直接更改player.CustomProperties
就可以了。但是,这似乎不是正确的方法。
这是我用 3 个步骤调试它:https://imgur.com/a/YI24dP0
所以,我不确定下一步该怎么做,因为 SetCustomProperties()
似乎不起作用。
有任何想法吗?谢谢。
【问题讨论】:
您确定要从实际先设置该属性的玩家那里获取该属性吗? @derHugo 当然。我用这个链接更新了问题:imgur.com/a/YI24dP0 3 张图片显示了调试过程中的问题 【参考方案1】:tl;博士
永远不要直接设置Player.CustomProperties
或Room.CustomProperties
(将它们用作只读),而是始终使用SetCustomProperties
方法。
等待OnPlayerPropertiesUpdate
回调,然后再尝试访问刚刚设置的更新属性值。
默认情况下,演员或房间属性的设置属性不会 在发送者/设置者客户端(设置 属性)在加入在线房间时立即与它不同 曾经在双关语经典中。现在,发送者/设置者客户端 (设置属性的演员)将等待服务器事件
PropertiesChanged
在本地应用/设置更改。所以你需要等待 直到OnPlayerPropertiesUpdate
或OnRoomPropertiesUpdate
回调 为本地客户端触发以访问它们。新的 行为是由于引入了新的房间选项标志roomOptions.BroadcastPropsChangeToAll
被设置为true
默认。这背后的原因是属性很容易出去 如果我们先在本地设置它们然后发送 请求在服务器上和房间中的其他参与者这样做。这 后者可能会失败,我们最终可能会得到 发送者/设置者客户端(设置属性的参与者)不同 本地来自服务器或其他客户端上的内容。如果你想 有旧的行为(在发送之前在本地设置属性 请求服务器同步它们)设置roomOptions.BroadcastPropsChangeToAll
到false
在创建之前 房间。但我们强烈建议不要这样做。
source
【讨论】:
就是这样!!我不知道那些回调方法,但它们很有意义。谢谢约翰以上是关于Photon Network Player.SetCustomProperties 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Unity Photon Network CustomPropeties 在加载新场景后未更新
使用 Photon Unity Network(多人游戏)在 Unity 中实时同步