目录
一、插件介绍
Unity XR-XR Interaction Toolkit开发使用方法(一)-CSDN博客
Unity XR-XR Interaction Toolkit开发使用方法(二)Hisense XR-V3 Pro SDK接入-CSDN博客
二、主要组件
XR Interaction Manager
Unity XR-XR Interaction Toolkit开发使用方法(三)组件介绍(XR Interaction Manager)-CSDN博客
XR Controller
Unity XR-XR Interaction Toolkit开发使用方法(四)组件介绍(XR Controller)-CSDN博客
XR Interactor
Unity XR-XR Interaction Toolkit开发使用方法(五)组件介绍(XR Interactor)-CSDN博客
XR Direct Interactor
Unity XR-XR Interaction Toolkit开发使用方法(六)组件配置(XR Direct Interactor)-CSDN博客
XR Ray Interactor
Unity XR-XR Interaction Toolkit开发使用方法(七)组件配置(XR Ray Interactor)-CSDN博客
XR Socket Interactor
Unity XR-XR Interaction Toolkit开发使用方法(八)组件介绍(XR Socket Interactor)-CSDN博客
XR Gaze Interactor
Unity XR-XR Interaction Toolkit开发使用方法(九)组件介绍(XR Gaze Interactor)-CSDN博客
三、XR Interaction Group
1、组件介绍
Unity XR Interaction Group 是 XR Interaction Toolkit 中用于管理 多个交互器(Interactor)协同工作 的核心组件,旨在解决多交互器场景下的优先级冲突和协作问题。它通过定义组内交互器的执行顺序和协作规则,确保复杂的交互行为(如双手操作、多模式切换)能够有序进行,提升交互的自然性和可控性。
交互组(Interaction Group)是交互器(Interactors)的中介协调者。一个组包含多个按优先级排序的成员交互器,且同一时间仅允许组内一个交互器进行交互(悬停或选择)。交互组优先遵循持续选择原则——若某个成员交互器在前一帧已处于交互状态,且在当前帧能开始或继续选择,则该交互器将被选中进行交互,即使有更高优先级的交互器尝试介入。
您可为每个成员配置交互覆盖规则。具有覆盖权限的组成员可忽略优先级,并阻断当前活跃成员的交互(前提是它能选择活跃成员正在交互的所有可交互对象)。当这种情况发生时,覆盖成员将被选为唯一的交互执行者。若多个成员同时尝试覆盖,优先级规则仍然生效。例如,您可能希望通常让"点击交互"(Poke)保持优先,使"直接悬停"(Direct hover)不会阻碍它,但仍需允许用户抓取(Direct select)正在被点击的可交互对象。
交互组的成员排序列表也可包含其他交互组。当父级组进行交互优先级排序时,嵌套的子组会被视为单个交互器。组内选中的交互器会向上冒泡传递至父级组,直至最终被顶级组选中进行交互,或像其他交互器一样被跳过。
需注意:在交互组调用Awake方法后,其初始成员配置(Starting Group Members)及覆盖规则在运行模式(Play Mode)中将无法被修改。

2、核心功能与特点
优先级与冲突管理
- 定义组内交互器的 执行顺序,当多个交互器同时检测到可交互对象时,按优先级选择激活的交互器。
- 自动解决交互冲突(例如,双手同时抓取同一物体时,优先响应先触发的交互器)。
动态交互切换
- 根据上下文自动切换激活的交互器(如近距离时使用直接抓取,远距离时切换为射线交互)。
- 支持手动锁定或释放交互器的控制权。
协作式交互
- 允许多个交互器协同操作同一对象(如双手调整物体位置和旋转)。
- 支持组内交互器的 状态同步(例如,一个交互器激活时,其他交互器临时禁用)。
事件统一管理
- 提供组级别的交互事件(如
OnGroupInteractionStarted),简化多交互器的逻辑处理。
3、组件配置详解
| 属性 | 描述 |
|---|---|
| Interaction Manager | 该交互组(Interaction Group)将通信的XR交互管理器(XRInteractionManager)。若未指定,系统会自动查找一个可用实例。 |
| Starting Group Members | 在Awake阶段注册到该组的交互器(Interactors)或交互组(Interaction Groups)的有序列表。该顺序决定了成员间的优先级关系。 |
| Interaction Override Configuration | 为每个组成员配置其他成员是否能够覆盖其交互行为。当高优先级成员尝试选择低优先级成员已悬停或选中的交互对象时,通过勾选框指定列对应的成员能否覆盖行对应的成员。例如:若第2列勾选第1行,则成员2可覆盖成员1的交互。 |
4、工作原理
初始化阶段
- 将组内交互器按配置的优先级排序,并注册到
XR Interaction Manager。
每帧检测阶段
- 组内交互器按优先级顺序检测可交互对象。
- 根据
Execution Strategy决定是否允许多个交互器同时激活。
冲突裁决阶段
- 若多个交互器检测到同一对象,选择优先级最高的交互器执行操作。
- 若高优先级交互器失败(如抓取条件不满足),按规则传递控制权。
交互执行阶段
- 激活的交互器触发事件,控制对象行为(如抓取、释放)。
- 协作模式下,多个交互器共同影响同一对象的运动(如双手缩放)。
5、事件系统与脚本交互
XR Interaction Group 提供以下关键事件:
| 事件 | 触发时机 | 典型应用 |
|---|---|---|
OnGroupInteractionStarted | 组内任一交互器开始交互时 | 播放全局音效、记录操作日志 |
OnGroupInteractionEnded | 组内任一交互器结束交互时 | 重置状态、触发后续逻辑 |
OnActiveInteractorChanged | 激活的交互器切换时 | 更新UI提示、切换交互模式动画 |
示例脚本:动态切换交互器焦点
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
public class InteractionSwitcher : MonoBehaviour
{
public XRInteractionGroup interactionGroup;
public XRBaseInteractor dominantHand;
void Update()
{
// 当右手举起时,强制切换为右手交互器优先
if (IsRightHandRaised())
{
interactionGroup.MoveInteractorToFront(dominantHand);
}
}
private bool IsRightHandRaised()
{
// 根据设备输入或姿态判断逻辑
return false;
}
}
6、实际应用场景
场景1:双手协同操作
- 创建两个
XR Direct Interactor(左右手),加入同一XR Interaction Group。 - 设置
Execution Strategy为All,允许双手同时抓取物体。 - 监听物体的
OnSelectEntered事件,当双手同时抓取时,启用物理关节约束,实现双手调整物体位姿。
场景2:动态交互模式切换
- 组内包含
XR Direct Interactor和XR Ray Interactor。 - 配置优先级顺序为直接交互优先,射线交互次之。
- 当用户远离物体时,直接交互器失效,自动切换至射线交互。
场景3:多人协作交互
- 为每个玩家分配独立的
XR Interaction Group。 - 使用
Allow Failed Interactions确保当一个玩家释放物体后,其他玩家可接管。 - 通过组事件同步多人操作状态(如共同搬运大型物体)。
7、高级用法与优化
自定义冲突裁决逻辑
- 继承
XRInteractionGroup,重写SelectInteraction方法,实现基于距离、角度等条件的优先级计算:
public class CustomInteractionGroup : XRInteractionGroup
{
protected override bool SelectInteraction(List<XRBaseInteractor> validTargets)
{
// 示例:选择距离最近的交互器
XRBaseInteractor closestInteractor = null;
float minDistance = float.MaxValue;
foreach (var interactor in validTargets)
{
float distance = Vector3.Distance(interactor.attachTransform.position, focusPoint);
if (distance < minDistance)
{
minDistance = distance;
closestInteractor = interactor;
}
}
return closestInteractor;
}
}
混合交互策略
- 组合使用
Execution Strategy和脚本逻辑,实现分阶段协作(如左手定位、右手微调)。
性能优化
- 限制组内交互器数量,避免过多检测计算。
- 为低频交互器设置
Allow Failed Interactions为false,减少无效检测。
8、常见问题与解决
问题:组内交互器无法同时激活
检查:确认 Execution Strategy 设置为 All,且目标物体支持多交互器协作(如 XR Grab Interactable 的 Multiple Grab 模式)。
问题:优先级切换不生效
解决:确保通过 MoveInteractorToFront() 动态调整顺序后,调用 XRInteractionManager.ProcessInteractors() 强制刷新。
问题:组事件未触发
排查:验证交互器是否正确注册到组内,且事件回调未被其他逻辑覆盖。
Unity XR Interaction Group组件详解
2150

被折叠的 条评论
为什么被折叠?



