You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:53:13