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(),我注意到了一些事情:

播放器已经有一些我从未设置过的自定义属性,称为“name”和“hideFlags”。 SetCustomProperties() 根本不做任何事情。我期待它创建/更改“mmr”属性,但它没有 如果我直接更改player.CustomProperties 就可以了。但是,这似乎不是正确的方法。

这是我用 3 个步骤调试它:https://imgur.com/a/YI24dP0

所以,我不确定下一步该怎么做,因为 SetCustomProperties() 似乎不起作用。 有任何想法吗?谢谢。

【问题讨论】:

您确定要从实际先设置该属性的玩家那里获取该属性吗? @derHugo 当然。我用这个链接更新了问题:imgur.com/a/YI24dP0 3 张图片显示了调试过程中的问题 【参考方案1】:

tl;博士

永远不要直接设置Player.CustomPropertiesRoom.CustomProperties(将它们用作只读),而是始终使用SetCustomProperties 方法。 等待OnPlayerPropertiesUpdate 回调,然后再尝试访问刚刚设置的更新属性值。

默认情况下,演员或房间属性的设置属性不会 在发送者/设置者客户端(设置 属性)在加入在线房间时立即与它不同 曾经在双关语经典中。现在,发送者/设置者客户端 (设置属性的演员)将等待服务器事件 PropertiesChanged 在本地应用/设置更改。所以你需要等待 直到 OnPlayerPropertiesUpdateOnRoomPropertiesUpdate 回调 为本地客户端触发以访问它们。新的 行为是由于引入了新的房间选项标志 roomOptions.BroadcastPropsChangeToAll 被设置为 true 默认。这背后的原因是属性很容易出去 如果我们先在本地设置它们然后发送 请求在服务器上和房间中的其他参与者这样做。这 后者可能会失败,我们最终可能会得到 发送者/设置者客户端(设置属性的参与者)不同 本地来自服务器或其他客户端上的内容。如果你想 有旧的行为(在发送之前在本地设置属性 请求服务器同步它们)设置 roomOptions.BroadcastPropsChangeToAllfalse 在创建之前 房间。但我们强烈建议不要这样做。

source

【讨论】:

就是这样!!我不知道那些回调方法,但它们很有意义。谢谢约翰

以上是关于Photon Network Player.SetCustomProperties 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Unity Photon Network CustomPropeties 在加载新场景后未更新

使用 Photon Unity Network(多人游戏)在 Unity 中实时同步

photon引擎的photon引擎5分钟快速入门

photon引擎的photon引擎的相关术语

使用Photon引擎进行unity网络游戏开发——Photon常用类介绍

二Photon v4引擎基础开发框架——开发第一个Photon程序