NPC 头像
显示并控制 NPC 头像
将头像作为场景中的一个实体显示。
创建一个头像
以下代码片段会创建一个带有随机穿戴物和身体形状、名称为“NPC”的头像。
const myAvatar = engine.addEntity()
AvatarShape.create(myAvatar)
Transform.create(myAvatar, {
position: Vector3.create(4, 0.25, 5),
})在传递数据以生成 AvatarShape时,以下字段是必需的:
id: (必需)Avatar 的内部标识符
此外,还可使用以下可选字段:
name:显示在头像头顶上的名称。默认值:“NPC”。将其设置为空字符串则完全不显示名称,这在你只想显示 头像名牌 板时很有用。bodyShape:用于定义要使用的身体形状的字符串。有效选项为 'urn:decentraland:off-chain:base-avatars:BaseMale' 和 'urn:decentraland:off-chain:base-avatars:BaseFemale'。wearables:包含头像当前穿戴物 URN 列表的数组。如果穿戴物冲突(例如两个都是帽子),列表中的最后一个会替换另一个。emotes:包含头像能够播放的 NFT 表情 URN 列表的数组eyeColor: Color3 用于眼睛颜色(任何颜色都可以)skinColor: Color3 用于肤色(任何颜色都可以)hairColor: Color3 用于头发颜色(任何颜色都可以)说话中:如果 true时,会在名称旁边显示一组绿色条,就像玩家在世界中使用语音聊天时那样。
import { AvatarShape } from "@dcl/sdk/ecs"
动画
头像在静止时会播放默认的待机动画。
要在头像上播放动画,请将 expressionTriggerId 字符串设置为你想播放的动画名称。
该 expressionTriggerId 字段支持所有 默认动画,以及来自场景文件的自定义动画 ,甚至还支持来自市场上发布的表情的 URN。Looping Animations
循环动画
动画在 AvatarShape 上只会播放一次;如果你希望头像持续循环某个动画,你应该创建一个系统,每隔几秒让它再次播放该动画。
使用 expressionTriggerTimestamp 以重新播放同一个表情。此字段的值是一个 Lamport 时间戳,这意味着它不是时间值,而是一个每次表情重复时都会加 1 的索引。
因此,当你第一次播放一个表情时,你会设置 expressionTriggerTimestamp 为 0。要再次播放该表情,你必须将此值更新为 1。这就是引擎识别这是一个新指令,而不是它已经执行过的指令的方式。
以下代码片段创建了一个每 2 秒运行一次同样表情的系统:
在名称上方添加标签
使用 头像名牌 组件可在 NPC 名称上方显示带有自定义文本的牌子,例如“Shopkeeper”或“Boss”之类的角色。将其附加到具有 AvatarShape:
如果 AvatarShape 具有空的 name,则只显示牌子,不会在其下方显示空的名牌框。这对于仅用头衔给 NPC 标注很方便。
参见 头像名牌 以查看包括颜色在内的完整字段列表。
从玩家复制穿戴物
以下代码片段会将 NPC 头像的穿戴物和其他特征更改为与玩家当前穿戴的内容相匹配。这可以在场景中用作人体模特,以展示特定的穿戴物或表情,并与玩家当前的装扮组合展示。
仅显示穿戴物
使用 showOnlyWearables 字段,用于仅显示头像列出的穿戴物。头像其余部分将不可见。
这对于展示穿戴物很有用,例如在商店中。
将实体附加到 NPC
你可以使用 AvatarAttach 功能将一个实体固定到 NPC 头像的某块骨骼上,例如让 NPC 手里拿着一个物体。该实体在动画播放时会随头像一起移动。
要使用此功能,请使用 id 属性在任何 UI 实体上的 AvatarShape 为此头像分配一个任意 id,然后在 AvatarAttach上引用该 id。这个 id 可以是任意字符串。
了解更多关于 AvatarAttach 组件 这里.
替换玩家头像
你不能更改玩家头像所穿戴的物品,但可以改为将玩家头像替换为一个你可以完全自定义的 NPC 头像。
要做到这一点,请使用一个 头像修改区域 ,并使用 AMT_HIDE_AVATARS 修饰符隐藏玩家自己的头像,然后改为在玩家的位置显示一个 AvatarShape 实体。
最后更新于