头像姓名标签
在头像姓名标签上方显示自定义标签,以展示等级、角色或队伍。
该 头像名牌 该组件会在头像的常规名牌上方添加一个小牌子,显示场景选择的文本。可用它来显示你场景为玩家追踪的等级、角色、队伍或其他任何信息,例如“VIP”、“红队”或“俱乐部所有者”。

本页介绍如何添加牌子、设置样式,以及在玩家进出时保持同步。
为玩家添加一个牌子
唯一必需的字段是 label,要显示的文本。
默认情况下,牌子会使用客户端自身的名牌颜色,因此无需额外操作就能与界面其余部分保持一致。
组件适用的位置
头像名牌 仅对带有头像的实体起作用:
engine.PlayerEntity,即运行该场景的玩家。另一位玩家的实体,可通过其
PlayerIdentityData组件。一个 NPC 头像,即任何具有
AvatarShape组件。
在其他任何实体上,该组件都会被忽略。
更改颜色
有三个可选字段使用 Color3:
labelColor:文本颜色。默认为客户端原生名牌的文本颜色。backgroundColor:牌子的填充色。默认为客户端原生名牌的背景颜色。borderColor:牌子的轮廓。默认为backgroundColor,因此除非你设置它,否则不会显示可见边框。
要将某个字段恢复为原生颜色,请在写入组件时不包含该字段再次写入。使用 createOrReplace 而不是 getMutable,因为只有替换整个组件才会清除你省略的字段:
移除牌子
使用 deleteFrom 以移除该牌子。头像的常规名牌不受影响:
标签行为
在选择标签文本之前,有几点值得了解:
较长的标签会被截断 并显示省略号。请将标签保持为一两个词。
空标签 (
'')会绘制一个不含文本的牌子。空格会被保留,因此只由空格组成的标签会使没有文本的牌子变宽。这是一种调整纯色牌子大小的方法。
要隐藏文字但保留其宽度,请将
labelColor设置为与backgroundColor.
在玩家到达时标记他们
标记其他玩家最简单的方法是在他们进入场景时附加该组件,使用 onEnterScene 事件。每次它都会给你一个新的实体,因此无需查找或缓存任何东西:
参见 获取玩家数据 以了解有关跟踪玩家进出场景的更多信息。
为场景中的每位玩家标记
要一次性在所有人头上显示牌子,请遍历具有 PlayerIdentityData 组件。
将实体收集到数组中 然后再 写入它们。在仍然遍历 engine.getEntitiesWith() 时写入组件,可能会使查询在中途失效。
在写入前与当前值比较,可以避免每次遍历都进行不必要的组件更新。
跟上玩家的加入和离开
玩家实体 ID 在断线后并不稳定。当玩家离开时,其实体 ID 会被回收,并可能分配给下一位加入的玩家,因此写入过期实体上的牌子最终会显示在错误的头像上。
遵循两条规则可确保正确:
在 每次 写入之前重新解析实体,而不是缓存实体。
当玩家离开时移除该组件。
按定时器重新运行标记函数,可以捕捉稍后加入的玩家,并且不会持有过期实体。每秒一次就足够频繁:
多人场景中的牌子
牌子对每位玩家的客户端都是本地的。牌子不会发送给其他玩家;每位玩家的场景副本都会计算自己的牌子。如果所有玩家都应看到相同的标签,那么分配它们的逻辑必须基于所有客户端都能读取的数据,在每个客户端上得到相同结果。像上面的示例那样按钱包地址对玩家排序,就是一种实现方式。否则,你的场景需要自行同步这些分配,参见 无服务器多人.
与隐藏名牌的交互
一个 AvatarModifierArea 配合 AMT_HIDE_NAMETAGS 修饰器会连同常规名牌一起隐藏这些牌子。对 AMT_HIDE_AVATARS也同样适用,它会隐藏整个头像。
如果你希望头像只显示 仅 你的牌子,而下方不显示姓名,请将 AvatarShape 组件的 name 设为空字符串。参见 NPC 头像.
相关页面
最后更新于