XR Interaction Toolkit事件未触发问题求助(Unity AR项目)
AR Foundation + XR Interaction Toolkit 交互事件(SelectExit/Enter)不触发排查与修复
问题背景
使用Unity 2023.2.6 + AR Foundation 6.0.0-pre.5 + XR Interaction Toolkit 2.5.2开发安卓移动端AR应用,已为3D对象添加ARSelectionInteractable、ARTranslationInteractable、ARRotationInteractable、ARScaleInteractable组件,缩放、旋转、拖拽功能视觉表现正常,但订阅的SelectEnter、SelectExit等交互事件完全不触发,需要获取缩放完成后的反馈。
已完成的配置
- 重新创建XR Origin
- 添加XRScreenSpaceController、XRRayInteractor和XRInteractionGroup(不确定是否必需)
- 为Main Camera添加ARGestureInteractor
- 添加XRInteractionManager
- 替换EventSystem输入模块:移除旧的Input System UI Input Module,添加XRUIInputModule
- 将AR Foundation默认的DefaultInputAction切换为XRI的XRDefaultInputActions
排查与修复方案
1. 移除冗余的交互控制器
XRScreenSpaceController、XRRayInteractor、XRInteractionGroup属于屏幕空间交互组件,而ARGestureInteractor已经专门负责AR场景中的触摸手势交互,两者共存会导致事件路由冲突。直接删除XRScreenSpaceController-G及其子对象即可。
2. 验证ARGestureInteractor的核心配置
- 确保
ARGestureInteractor的Interaction Manager字段已赋值为场景中的XRInteractionManager - 检查Interaction Layer Mask:必须与目标3D对象上所有
AR*Interactable组件的Interaction Layer Mask完全匹配(比如都勾选Default层) - 确认
ARGestureInteractor已启用,且Enabled Gestures中勾选了Select、Translate、Rotate、Scale对应选项
3. 正确绑定交互事件
如果是通过代码订阅事件,需确保在组件初始化时完成监听绑定(而非仅定义方法):
using UnityEngine.XR.Interaction.Toolkit; public class ARInteractableEventReceiver : MonoBehaviour { private ARSelectionInteractable _selectionInteractable; void Awake() { _selectionInteractable = GetComponent<ARSelectionInteractable>(); // 绑定事件监听 _selectionInteractable.selectEntered.AddListener(OnSelectEnter); _selectionInteractable.selectExited.AddListener(OnSelectExit); } void OnDestroy() { // 移除监听避免内存泄漏 _selectionInteractable.selectEntered.RemoveListener(OnSelectEnter); _selectionInteractable.selectExited.RemoveListener(OnSelectExit); } public void OnSelectEnter(SelectEnterEventArgs args) => Debug.Log("SelectEnter 事件触发"); public void OnSelectExit(SelectExitEventArgs args) => Debug.Log("SelectExit 事件触发"); }
如果是通过Inspector面板绑定,需打开ARSelectionInteractable的Events折叠面板,将脚本对象拖入对应事件槽,选择对应的方法。
4. 检查EventSystem与XRUIInputModule配置
- 确保EventSystem下只有
XRUIInputModule一个输入模块,无其他残留的输入模块 - 确认
XRUIInputModule的Input Action Asset已设置为XRI的XRDefaultInputActions,且对应的输入动作(如UI -> Submit、XR -> Select)已正确绑定触摸输入
5. 兼容性验证
由于使用了AR Foundation 6.0.0-pre.5预发布版本,需确认:
- 所有XR相关包(ARCore/ARKit、XRI)的版本与Unity 2023.2.6兼容
- 项目已启用Input System(Edit -> Project Settings -> Player -> Active Input Handling 选择
Input System Package (New))
内容的提问来源于stack exchange,提问作者Perazim
相关产品推荐
相关产品推荐

