用途:为 XR Blocks 应用设计并实现交互,把每个用户意图落成可测试的交互契约,涵盖选择、悬停、直接触摸、抓取、手势、事件归属与传播,以及自动操作(平移、旋转、缩放)。
主要能力与流程:
- 盘点用户意图:为每个动作记录执行者、目标、触发方式、开始/更新/结束或取消阶段、一次应用状态转换、反馈,以及桌面/XR 测试路径;归属或阶段模型不同的动作应分行。
- 选择单一事件族:参考 ../../docs/docs/manual/Interaction.md。场景级命令用全局 Script 钩子;已解析射线目标用对象 select 与 hover 钩子;直接手部接触用 touch 与 grab 钩子;识别到的手势姿态或完成的头部运动用 gesture 事件目标;自动平移、旋转、缩放用 object.xb.manipulation;仅碰撞、重力、动量、投掷或力使用 Rapier。分支参考:references/selection-and-direct-hands.md、references/gesture-events.md、references/manipulation-and-physics.md。
- 实现归属与反馈:处理器放在拥有应用状态或包含逻辑目标的脚本上;给目标设置有意设计的命中几何;使用事件的 source、target、surface、currentTarget、intersection,避免再次射线检测;准星仅作为已解析命中的呈现。显式表示 idle、hovered、active、held、disabled 等阶段;处理器保持精简:校验事件、改变一个领域状态、更新反馈;多个输入源表示同一动作时共享领域方法。
- 保持事件与操作语义:仅在需要阻止祖先传播时于目标回调中调用 event.stopPropagation();仅在事件暴露处使用 event.preventDefault(),如 touch start 可抑制默认触摸选择,manipulation start 可抑制自动变换;传播与默认行为相互独立。自动操作支持多个对象所有者同时独立操作,以及单一所有者上的双源缩放;每对象状态放在对象或所属脚本上,而非全局拖拽槽;放置脚本在操作期间挂起,恢复时重定基准。对可选的手、关节、识别器与跟踪数据做保护;在 dispose() 中保存并移除监听函数;提供稳定的不可用、中断、禁用与取消状态。
- 验证与交付:构建或类型检查应用,运行聚焦测试,可用时启动确切的模拟器路径;确认目标、可供性、处理器、事件字段、状态转换、释放行为与相关控制台输出;以 ../../templates/02_object_interaction/ 作为当前交互基础。为每个动作提供一张紧凑测试卡:模拟器步骤、XR 输入、目标、开始/活动/结果/释放反馈、状态变化与仅设备检查项。
适用场景:在 XR Blocks 项目中新增或改造交互逻辑时使用。
限制:资料未提供具体收费、价格、平台支持范围与效果数据;部分步骤依赖仓库内文档与模板路径,需在对应代码库环境中使用。