当前位置: 首页 > article >正文

Unity XR-XR Interaction Toolkit开发使用方法(十一)组件介绍(XR Interactable)

目录

一、插件介绍

二、主要组件

XR Interaction Manager

XR Controller

XR Interactor

XR Direct Interactor

XR Ray Interactor

XR Socket Interactor

XR Gaze Interactor

XR Interaction Group

三、XR Interactable

1、组件介绍

2、核心功能与特点

交互类型支持

事件驱动设计

物理与运动控制

可扩展性

3、组件配置详解

1. 基础配置

Interaction Manager

Interaction Layer Mask

Colliders

2. 交互行为配置

Interactable Events

Filters

3. 高级配置

Allow Multiple Selection

Custom Reticle

4、事件系统与脚本交互

1. 通过 Unity Event 绑定

2. 通过脚本监听事件

5、与其他组件的协作

与 XR Interactor 的交互

与 XR Interaction Manager 的协同

与物理系统的集成

6、实际应用场景

场景1:基础抓取与释放

场景2:悬停高亮与提示

场景3:条件过滤交互

7、子类与扩展

XR Grab Interactable

XR Simple Interactable

8、优化与调试技巧

性能优化

调试工具

输入防抖

9、常见问题与解决

问题:物体无法被交互

问题:抓取后物体位置偏移

问题:事件未触发


一、插件介绍

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

Unity XR-XR Interaction Toolkit开发使用方法(十)组件介绍(XR Interaction Group)-CSDN博客


三、XR Interactable

1、组件介绍

Unity XR Interactable 是 XR Interaction Toolkit 中用于标记物体为 可交互对象 的核心组件,定义了物体如何响应交互器(如手柄、射线、视线)的操作(如抓取、悬停、激活)。它是所有交互行为的“接收方”,为开发者提供了灵活的事件系统和属性配置,是构建 XR 交互逻辑的基础。


2、核心功能与特点

交互类型支持

  1. 支持多种交互行为:悬停(Hover)选中(Select)激活(Activate)焦点(Focus) 等。
  2. 可配置交互的触发条件(如仅允许特定类型的交互器操作)。

事件驱动设计

  1. 提供丰富的回调事件(如 OnHoverEnteredOnSelectExited),便于监听和响应交互状态变化。
  2. 支持通过 Unity Event 或脚本绑定自定义逻辑。

物理与运动控制

  1. 与 Unity 物理引擎深度集成,支持基于物理的抓取、投掷、碰撞反馈。
  2. 可配置物体的运动模式(如运动学抓取或物理模拟)。

可扩展性

  1. 作为基类,派生出多种专用交互组件(如 XR Grab InteractableXR Simple Interactable)。
  2. 允许通过继承和重写方法实现自定义交互逻辑。

3、组件配置详解

在 Inspector 面板中,XR Interactable 的关键属性如下:

1. 基础配置

Interaction Manager
  • 绑定的交互管理器(默认为场景中的 XR Interaction Manager)。
Interaction Layer Mask
  • 指定可与此物体交互的层级,过滤无关的交互器。
Colliders
  • 手动指定用于检测交互的碰撞体列表(默认自动获取物体及其子物体的所有碰撞体)。

2. 交互行为配置

Interactable Events
  • OnFirstHoverEntered:首次悬停时触发。
  • OnLastHoverExited:最后一个悬停离开时触发。
  • OnSelectEntered / OnSelectExited:选中开始/结束。
  • OnActivate / OnDeactivate:激活/取消激活(如按下扳机键)。
Filters
  • Hover Filters / Select Filters:通过脚本接口(IXRHoverFilterIXRSelectFilter)过滤交互器。
  • 示例:仅允许带有特定标签的交互器悬停或选中物体。

3. 高级配置

Allow Multiple Selection
  • 是否允许多个交互器同时选中该物体(如双手抓取)。
Custom Reticle
  • 自定义悬停或选中时显示的光标预制体(如高亮图标)。

4、事件系统与脚本交互

XR Interactable 提供的事件可通过 Inspector 面板直接绑定 或 脚本动态监听。以下是典型用法:

1. 通过 Unity Event 绑定

  • 在 Inspector 面板中,将事件(如 OnSelectEntered)拖拽到目标脚本方法。
    示例:抓取物体时播放音效。

2. 通过脚本监听事件

using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

public class InteractableDemo : MonoBehaviour
{
    private XRBaseInteractable interactable;

    void Start()
    {
        interactable = GetComponent<XRBaseInteractable>();
        interactable.onSelectEntered.AddListener(OnGrabbed);
        interactable.onHoverEntered.AddListener(OnHoverStart);
    }

    private void OnGrabbed(XRBaseInteractor interactor)
    {
        Debug.Log($"{interactor.name} 抓取了 {interactable.name}");
    }

    private void OnHoverStart(XRBaseInteractor interactor)
    {
        GetComponent<Renderer>().material.color = Color.red;
    }
}

5、与其他组件的协作

与 XR Interactor 的交互

XR Interactor(如 XR Direct Interactor)检测到 XR Interactable 后,触发其事件。

  • 例如:当手柄靠近物体时,XR Interactable 的 OnHoverEntered 事件被触发。

与 XR Interaction Manager 的协同

XR Interaction Manager 管理所有交互器和可交互对象的注册与事件分发。

  • 例如:当一个交互器选中物体时,管理器确保冲突的正确处理。

与物理系统的集成

若物体需要物理反馈(如投掷),需附加 Rigidbody 组件,并配置 XR Grab Interactable 的运动模式:

  • Kinematic:直接控制物体位置(无物理模拟)。
  • Velocity Tracking:通过力或速度驱动物体(模拟物理抓取)。

6、实际应用场景

场景1:基础抓取与释放

  1. 为物体添加 XR Grab Interactable(继承自 XR Interactable)。
  2. 配置 OnSelectEntered 事件:抓取时缩小物体。
  3. 配置 OnSelectExited 事件:释放时恢复原大小并施加投掷力。

场景2:悬停高亮与提示

  1. 监听 OnHoverEntered 事件:悬停时显示发光材质。
  2. 监听 OnHoverExited 事件:隐藏发光效果。

场景3:条件过滤交互

  1. 创建自定义 IXRSelectFilter 脚本:仅允许带有 "Key" 标签的交互器抓取物体。
  2. 将过滤器添加到 XR Interactable 的 Select Filters 列表。

7、子类与扩展

XR Interactable 作为基类,派生出多种专用交互组件:

XR Grab Interactable

  1. 扩展抓取功能,支持 运动学抓取 或 物理抓取
  2. 可配置抓取附着力、投掷速度比例。

XR Simple Interactable

  1. 轻量级交互,仅响应悬停和基础选中事件(无物理抓取)。
  2. 适用于按钮、开关等简单交互。

8、优化与调试技巧

性能优化

  1. 减少 XR Interactable 对象的碰撞体复杂度(使用简单形状碰撞体)。
  2. 通过 Interaction Layer Mask 过滤不必要的交互检测。

调试工具

  1. 启用 XR Interactable 的调试模式(Gizmos),可视化交互范围。
  2. 使用 Debug.Log 输出交互事件参数:
interactable.onSelectEntered.AddListener((interactor) => 
    Debug.Log($"选中者:{interactor.name}, 物体:{interactable.name}"));

输入防抖

  1. 为悬停事件添加延迟触发(通过脚本控制),避免快速移动时的误触。

9、常见问题与解决

问题:物体无法被交互

检查步骤

  1. 确认物体附加了 XR Interactable 或其子类组件。
  2. 检查 Interaction Layer Mask 是否允许当前交互器的层级。
  3. 验证碰撞体是否正确设置(非Trigger类型)。

问题:抓取后物体位置偏移

解决

  1. 调整 XR Grab Interactable 的 Attach Transform 位置。
  2. 检查物体的 Rigidbody 是否被其他力干扰。

问题:事件未触发

排查方向

  1. 确保事件回调方法为 public 或在脚本中动态注册。
  2. 检查交互器与可交互对象的 Interaction Manager 是否一致。

http://www.kler.cn/a/563453.html

相关文章:

  • Redis|复制 REPLICA
  • python的列表和元组别再傻傻分不清啦
  • C# WinForm 中的事件驱动模型
  • Java 算法和数据结构 答案整理,最新面试题
  • 计算机毕业设计SpringBoot+Vue.js大创管理系统(源码+文档+PPT+讲解)
  • 大模型面试问题准备
  • 力扣(leetcode)每日一题 1472 设计浏览器历史记录 - 数组
  • 2025全新版Java多语言跨境电商系统
  • Spring Boot 中 @Transactional 注解全面解析
  • git 国内源
  • 第4章 4.5 查看EF Core生成的SQL语句
  • C# 单元测试 xUnit、NUnit 与 MTest
  • SOC-ATF 安全启动BL1流程分析(1)
  • 【课堂笔记】线性回归梯度下降的矩阵求导推导
  • redis-bitmap使用场景
  • Nacos + Dubbo3 实现微服务的Rpc调用
  • Vue组件间通信的方式
  • 毕业项目推荐:基于yolov8/yolo11的苹果叶片病害检测识别系统(python+卷积神经网络)
  • angular舒尔特方格
  • 医院HIS接入大模型:算力基础设施与训练能力的深度剖析与测算