用途:在 Decentraland 场景中处理玩家与 Avatar 相关的逻辑,包括读取玩家状态、绑定物件、表情、NPC 形象和移动控制。
主要能力:通过保留实体 engine.PlayerEntity 读取玩家 Transform(位置、旋转);用 getPlayer() 获取玩家名称、userId(钱包地址或游客 ID)、isGuest;通过 Catalyst 的 https://peer.decentraland.org/lambdas/profiles/{userId} 获取完整头像档案(wearables、肤色等)。AvatarAttach 可将 3D 物件挂到玩家骨骼锚点,支持 anchorPointId(如 AAPT_LEFT_HAND、AAPT_HEAD 等)或指定 avatarId 绑定其他玩家。AvatarShape 用于创建 NPC 或仅展示 wearables 的人台(show_only_wearables: true)。AvatarModifierArea 支持隐藏 Avatar、禁用护照点击、禁用跳跃等区域修饰。AvatarLocomotionSettings 可调整 runSpeed、jumpHeight。InputModifier 可禁用走、跑、跳、滑翔等移动模式。
使用方式:在 main-entities.ts 中用 AvatarShape 声明 NPC;运行时组件(AvatarAttach、AvatarBase、AvatarEquippedData 等)在 src/index.ts 中通过引擎实体添加。表情用 triggerEmote(预定义)或 triggerSceneEmote(自定义,文件须以 _emote.glb 结尾)。传送必须使用 ~system/RestrictedActions 的 movePlayerTo,直接写 Transform.getMutable(engine.PlayerEntity).position 无效。
限制:engine.PlayerEntity 的 Transform 只读;movePlayerTo 仅限同场景内传送,跨场景需玩家另行同意。表情仅在玩家静止时播放,移动或跳跃会中断。AvatarAttach 要求目标玩家在同一场景。NPC Avatar 为静态,不自行移动或动画。读取前应先检查 Transform.has(engine.PlayerEntity)。数据不足处暂未提供更多细节。