PICO分享:面向空间应用的全新3D交互方式

PICO 4 Ultra

查看引用/信息源请点击:映维网Nweon

面向空间应用的全新3D交互方式

映维网Nweon 2026年04月03日)在构建空间应用时,开发者常常面临多输入并存、交互逻辑复杂、手感难以调优等挑战。PICO OS 6交出了一份全新的答案。从交互条件、交互动作到交互效果,它提供了一套高度统一且灵活可配的3D物体交互体系,而开发者可以用更少的代码分支,实现更直观、更自然的操控体验。日前,团队以”面向空间应用的全新3D交互方式“为题进行了分享:

PICO分享:面向空间应用的全新3D交互方式

PICO OS 6在交互层面引入了一套更统一的“3D物体交互”基础能力:从交互条件(让物体可被交互系统命中)到交互动作(Tap/Drag/Scale/Rotate/Pointer)再到交互效果(高亮、移动、缩放、旋转、动量拨动),并提供统一的输入范式来覆盖眼动、手势与手柄。你可以在同一套SpatialView + Compose输入框架下,同时支持手势、凝视协同、手柄射线、以及指针类输入,并且用更细粒度的交互类型(InteractionKind)去区分不同输入方式如何触发同一类交互动作。

这套能力的目标很明确:让开发者用更少的分支、更一致的输入模型,打造更直观、更自然的交互体验——尤其是在需要频繁操控3D内容的场景(模型浏览、内容编辑、空间UI、展示交互)中,能明显降低误触与疲劳,并提升整体手感与可预期性。

文章亮点

  • 交互条件统一规范:通过碰撞体组件CollisionComponent + 可交互组件InteractableComponent,统一定义实体的可命中范围与可交互状态,确保交互命中与响应行为一致、可预测。

  • 统一多模输入范式:在SpatialView上使用Modifier.pointerInput作为统一入口,覆盖眼动、手势与手柄输入,便于复用同一套对象规则、反馈规则与交互语义。

  • 核心交互动作覆盖:提供以detectSpatial开头的核心接口Tap / Drag / Scale / Rotate / PointerEvent等核心动作能力,覆盖选中、抓取移动、双手缩放、双手旋转与更底层的指针事件扩展。

  • 多源交互类型区分:在同一动作接口中通过interactionKind属性区分DirectPinch / Poke / GazePinch / RayBasedPinch / Pointer等交互来源,使同一动作可表达不同语义(例如Drag可用于捏合移动或拨动旋转)。

  • 强化旋转交互体验:支持延迟旋转/动量旋转等模式,面向大角度与多圈旋转场景提供更连续、更自然的交互手感。

交互条件:让3D物体“可触碰、可响应”

在空间应用中,并非所有Entity默认都可被用户直接操作。要让一个3D物体支持“点到/捏到/拨到”等基础交互,需要满足两个条件:

1)物体具有碰撞体积(Collision)

为实体配置碰撞体积,用于定义交互可作用的空间范围。常用相关要素包括:

  • CollisionComponent:为实体启用碰撞体积

  • ShapeResource:定义碰撞形状(例如Box / Sphere / ConvexMesh)

  • PhysicsMaterialResource:碰撞体材质(多数交互场景可使用默认配置)

常见配置方式(两种)

PICO分享:面向空间应用的全新3D交互方式

  • BoundingBox生成(Box / Sphere):配置效率高、性能开销低,适用于原型验证、规则几何或对象数量较多的场景。

  • 基于模型自身Mesh生成(ConvexMesh):更贴合模型轮廓,交互更精确,适用于对边缘触达准确性有更高要求的对象。可以使用PICO Spatial Editor辅助完成碰撞体积的设置与调整,尤其是在模型层级复杂、需要快速定位目标节点时更高效。

PICO分享:面向空间应用的全新3D交互方式

2)物体处于可交互状态(Interactable)

在具备碰撞体积的基础上,还需要将实体设置为可交互状态:

InteractableComponent:将实体标记为可交互,使其能够响应交互系统的输入与手势事件。

这一设置也便于在不同模式下统一管理交互能力(例如浏览模式禁用交互、编辑模式启用交互),确保对象的可操作性与产品交互策略保持一致。

交互动作:detectSpatial手势体系(统一覆盖常见操作)

PICO OS 6提供一组以detectSpatial开头的核心接口,用于捕获空间交互中最常见的动作。

这组接口的设计重点不是“提供更多手势”,而是让开发者围绕稳定的动作语义去构建交互:点击负责触发、拖拽负责操作、双手手势负责精调,指针事件负责扩展。

PICO分享:面向空间应用的全新3D交互方式

这些接口通常挂载在SpatialView的Modifier.pointerInput上:同一套输入范式可覆盖眼动、手势与手柄。

对应用来说,这能显著简化“多输入并存”的工程结构:你更多是在配置“同一动作在不同输入下的语义”,而不是复制粘贴多套交互逻辑。

多手势共存:一个手势一个pointerInput(避免互相阻塞)

当一个物体需要同时支持拖拽+缩放+旋转时,建议:

  • 不要在同一个pointerInputDSL里写多个detectSpatial*

  • 要用链式多个pointerInput,每个作用域负责一个手势(Drag / Scale / Rotate分开)

这样可以避免内部手势识别的排他性带来的互相干扰。

从工程维护角度看,这种拆分也更适合后续扩展:你可以很清晰地启用/禁用某种交互(例如某些对象不允许缩放),也更容易做A/B调参和定位冲突问题。

精准指定交互对象:TargetEntity

复杂场景下(多个可交互实体),你可以通过targetedToEntity参数限制手势的生效范围。

这在“多物体编辑/多层级模型/UI与3D共存”的应用里尤为关键,因为误触往往不是偶发,而是高频且强烈破坏体验。

TargetEntity.hit(entity):只对某个实体及其子树生效
适合做“选中对象后只操控选中对象”的编辑器逻辑。

TargetEntity.any { predicate }:对满足条件的一类实体生效(例如按名称前缀筛选)
适合做“工具模式”或“某类对象可编辑”的场景治理。

这能显著降低误触与“手势打到别的物体”问题,也让交互行为更符合用户预期(我在操作谁,就只影响谁)。

交互类型:InteractionKind

在常规开发中,我们通常只需关注手势本身(如拖拽或缩放)。但在一些复杂场景下,仅靠手势动作并不足以区分用户的真实操作方式,这时就需要进一步判断交互类型。

除了detectSpatialPointerEvent()外,所有以detectSpatial*开头的接口,都会在回调中提供InteractionKind,用于标识当前操作是通过哪种方式触发的。

PICO分享:面向空间应用的全新3D交互方式

在实际开发中,同一个手势接口往往需要承载多种操作。例如:

  • 单手拖拽 → 用于移动物体

  • 单手滑动 → 用于旋转物体

这两种操作都可以通过detectSpatialDragGesture()实现。

关键在于通过InteractionKind判断当前的交互方式,从而执行不同的逻辑。

例如:

  • DirectPinch / GazePinch → 视为“捏住移动”

  • Poke → 视为“拨动旋转”

通过这种方式,可以在复用同一手势接口的同时,让不同操作方式对应不同效果,使交互更加符合用户直觉。

PICO分享:面向空间应用的全新3D交互方式

交互效果:高亮、移动、缩放、旋转、动量拨动

交互效果决定了用户的“体感”:很多时候API都能让东西动起来,但用户觉得好不好用,取决于反馈是否清晰、行为是否符合预期、以及连续操作是否省力。

高亮提示:HoverEffectComponent(远程交互关键反馈)

HoverEffectComponent:当用户视线或手部射线掠过实体时触发预设高亮
适用:眼手协同(GazePinch)、手柄射线(RayBasedPinch)等远程交互,降低疲劳并提升可理解性

远程交互要成立,必须解决“我现在在操作谁”的确认问题。高亮/hover不是装饰,而是远程交互的最低成本提示层:它能让用户更敢操作、减少犹豫与误触,并显著提升整体交互的可信度。

移动:Drag → Transform位置更新

Drag回调会给出位移增量(常见会涉及“单位换算”和“坐标系映射”)
常用工具/类型:Offset3D、LocalPhysicalLengthConverter、LengthUnit.Meters
常用组件:TransformComponent.setPosition(…)

移动交互最常见的体验问题是“灵敏度”:太快会飘,太慢会累。建议你把移动映射逻辑设计成可调参数(例如速度系数、轴向限制、吸附策略),以便不同场景(展示vs编辑)可以有不同手感。

缩放:Scale → Transform缩放更新

detectSpatialScaleGesture()回调提供缩放增量(向量或比例)
常用组件:TransformComponent.setScaleVector(…)

缩放不仅影响视觉大小,也会影响后续交互的“感知灵敏度”(同样的手部位移在大物体和小物体上的体感不同)。因此在做精细编辑类体验时,通常需要把缩放与操控灵敏度联动考虑,而不是独立实现。

旋转:两条路线(按体验选择)

A. 单手拖拽旋转(Drag复用)
适用:需要单手操作、旋转和其它动作共存
常用类型:Rotation3D、RotationAxis3D、NormalizedPoint3D
常用操作:将位移映射为旋转增量,再转为四元数并更新TransformComponent.rotation

单手旋转的优势是“省动作”:用户不必双手参与,适合移动端式的快速浏览与轻量操控。它也更适合与意图分发结合(例如捏合移动vs拨动旋转)。

B. 双手旋转(RotateGesture专用)
detectSpatialRotateGesture()直接提供双手旋转增量
适用:精度更高、体验更“像现实双手拧动物体”

双手旋转更适合需要精确姿态调整的场景(例如摆放、对齐、内容编辑),用户对它的预期也更像现实操作:稳定、可控、误触更少。

拨动式旋转:延迟旋转/动量旋转(更像真实地球仪)

对于Poke(拨动),如果继续做“随时跟手旋转”,用户常会觉得“不跟手/转不动”。更自然的方式是:
交互中累积拨动轨迹
交互结束时注入角速度,让物体继续转并随阻尼减速(动量感)
常用组件/参数:
RigidBodyComponent:让物体交由物理引擎接管(常见:动态模式、锁定位移、只允许旋转)
angularDamping:角阻尼(模拟摩擦,控制减速手感)
PhysicsVelocityComponent.angularVelocity:注入角速度(实现动量旋转)
实践细节:开始交互时清理旧速度组件,避免后续拨动无法再次生效
额外注意:缩放会影响“手感灵敏度”,建议把灵敏度与物体当前scale关联,而不是固定常数
动量旋转的价值在于:它不仅“看起来更炫”,更重要的是让用户在大角度旋转时更省力、更符合直觉,并且在展示类内容(模型/商品/地球/星球)上能显著提升“真实感”和产品质感。

结语:为每一类应用量身定制交互体验

PICO OS 6的核心理念在于:空间交互不应是“千篇一律”的。 我们通过提供多样化且高度统一的工具箱,确保每一类应用都能获得最理想的交互支持:

  • 远程交互(眼手协同/射线): 专为长时间浏览、系统导航和媒体消费设计。通过HoverEffectComponent提供精准反馈,有效降低操作疲劳感。

  • 单手轻量操作(直接捏合/滑动): 带来“省动作”的便捷体验,非常适合移动端式的快速内容浏览和日常轻量任务。

  • 双手精准操控(旋转/缩放): 为专业生产力工具、3D内容编辑和精确对齐场景提供保障。其高稳定性和可控性能够大幅减少误触。

  • 动量拨动交互(拨动/触碰): 赋予商品展示、交互式地球仪或教学模型更真实的物理质感,让3D内容触手可及且更具高级感。

PICO OS 6不仅仅是一组API的集合,更是对高质量空间生态的承诺。通过将眼动、手势与手柄整合进统一的输入范式,我们正在助力开发者构建下一代空间应用——无论应用场景如何变化,交互手感始终如一。

本文链接https://news.nweon.com/139283
转载须知:转载摘编需注明来源映维网并保留本文链接
素材版权:除额外说明,文章所用图片、视频均来自文章关联个人、企业实体等提供
QQ交流群苹果Vision  |  Meta Quest  |  AR/VR开发者  |  映维粉丝读者
XR Dev Wechat Group/微信群

您可能还喜欢...

资讯