SuperAPI AI 工具集

advanced-input

通用与其它

查看项目

更新于 10-16 08:35

技能介绍

用途:面向 Decentraland 场景开发的高级输入处理技能,涵盖基础点击/悬浮事件之外的输入模式。若只需基本点击悬浮交互,应参考 add-interactivity 技能。

主要能力:

  1. 指针锁定状态:用 PointerLock.get(engine.CameraEntity).isPointerLocked 判断光标是否被捕获(第一人称)或自由;可用 PointerLock.onChange 监听锁定状态变化。
  2. 光标位置与世界射线:用 PrimaryPointerInfo.get(engine.RootEntity) 读取 screenCoordinates、screenDelta、worldRayDirection。
  3. 输入轮询:inputSystem.getInputCommand(InputAction, PointerEventType, entity) 检查某实体上的输入命令并获取命中数据;inputSystem.isTriggered 判断本帧刚按下,isPressed 判断持续按住。
  4. 按 Tag 批量输入:用 Tag 组件标记同类实体,每帧遍历 engine.getEntitiesByTag 并调用 getInputCommand,适合大量同类实体响应同一输入的场合。
  5. InputModifier 移动限制:可 disableAll 完全冻结,或按 disableWalk、disableJog、disableRun、disableJump、disableDoubleJump、disableGliding、disableEmote 单独限制;用 deleteFrom 恢复正常。

InputAction 对应按键:IA_POINTER 左键、IA_PRIMARY E、IA_SECONDARY F、IA_ACTION_3~6 对应 1~4 键、IA_JUMP 空格、IA_FORWARD/ BACKWARD/ LEFT/ RIGHT 为 WASD、IA_WALK 为 Shift。事件类型包括 PET_DOWN、PET_UP、PET_HOVER_ENTER、PET_HOVER_LEAVE。

必要用法:输入逻辑通常写在 engine.addSystem 注册的系统函数中;一次性动作(开枪、开门)用 isTriggered,持续动作(移动、举盾)用 isPressed;需要知道点击目标时用 getInputCommand;简单实体点击优先用 pointerEventsSystem.onPointerDown。

适用场景:第一人称光标控制、自定义 WASD 移动、数字键技能栏、过场动画冻结玩家、可破坏物统一响应按键等。

限制:InputModifier 仅在 DCL 2.0 桌面客户端生效,在网页浏览器中无效;受限期间重力、相机旋转、指针与邻近事件仍正常,玩家离开场景后限制自动解除;轮询 WASD 只读取移动状态,不会覆盖玩家自身移动。资料未提供收费与价格信息。