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 是否一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践20250301

突破网络壁垒&#xff1a;实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践 背景与痛点 在现代开发环境中&#xff0c;开发者通常会面临不同操作系统之间的协同工作。例如&#xff1a; 主要开发环境位于 Windows 的 WSL Ubuntu 子系统需要从局域网内的 Mac 设备进行远程访问…

数字样机:从技术革新到产业赋能的演进之路

摘要&#xff1a;数字样机作为产品全生命周期数字化的核心技术&#xff0c;旨在通过虚拟化建模与仿真技术重构传统工业研发范式。 数字样机&#xff08;Digital Prototype&#xff0c;DP&#xff09;技术是一种数字化设计技术&#xff0c;利用数字样机替代原型样机&#xff0c…

Ollama+LM Studio+Anything LLM本地部署大模型

主要用于自我学习大模型本地部署的实战 首先安装Ollama&#xff0c;官网OllamaGet up and running with large language models.https://ollama.com/ 安装LM Studio&#xff0c;官网 LM Studio - Discover, download, and run local LLMsRun Llama, Mistral, Phi-3 locally o…

fastadmin 后台sku 插件

老规矩先上效果图 新引用需要用到的js define([backend], function (Backend) {require.config({paths: {// vue: ../js/vue,//js省略&#xff0c;如果是vue.min.js&#xff0c;就学vue.minlayui: /assets/LayuiSpzj/layui/layui,//js省略&#xff0c;如果是vue.min.js&#x…

毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手&#xff0c;详细阐述居家养老管理模式兴起的…

【Redis】Redis 入门

借鉴枫枫知道 一、连接 redis 1.1 命令行连接 // 完整的命令 redis-cli -h 127.0.0.1 -p 6379 -a password// 简写 redis-cli// 认证&#xff0c;进行redis之后 auth password1.2 go 代码连接 package mainimport ("fmt""github.com/go-redis/redis" …

HVAC 设计:使用 Ansys Discovery 探索更好的设计

通过 Ansys Discovery 及其 2025 年新功能利用 CFD&#xff0c;通过 Computational Insights 应对 HVAC 行业的挑战。 挑战 HVAC 行业在设计高效可靠的管道系统方面面临多项挑战&#xff1a; 压力损失&#xff1a;设计不当的管道会增加能耗并降低热性能。复杂的几何形状&…

【Redis】Redis初阶

&#x1f525;个人主页&#xff1a; 中草药 一、认识Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的键值对存储数据库&#xff0c;支持持久化、网络化访问&#xff0c;并提供多种数据结构操作&#xff0c;用作数据缓存。它由Salvatore …

帧中继+静态路由实验(大规模网络路由器技术)

一、帧中继实验 &#xff08;1&#xff09;实验拓扑图如下图所示: 帧中继交换机1接口两侧的DLCI值&#xff1a; 数据链路连接标识符&#xff08;DLCI&#xff0c;Data Link Connection Identifier&#xff09;&#xff0c;DLCI值用于标识 永久虚电路 &#xff08;PVC&#xf…

Azure Speech

1、文字转语音(Text-To-Speech, TTS) 2、语音转文字(Speech-To-Text): Azure Speech to Text 1- 环境配置&#xff1a;Microsoft Azure 注册使用免费服务&#xff1a; 需要信用卡&#xff0c;本人没有&#xff0c;所以没有完成注册

海洋cmsv9报错注入,order by 和limit注入

海洋cmsv9 1&#xff0c;我们拿到海洋cmsv9源码分析发现注入点&#xff0c;$rlist 2&#xff0c;seacms开源&#xff0c;可以知道seacmsv9系统数据库&#xff08;mysql&#xff09;为seacms&#xff0c;存放管理员账号的表为 sea_admin&#xff0c;表中存放管理员姓名的字段为…

Linux系统下基于mplayer媒体播放器

1、项目背景 随着多媒体技术的发展&#xff0c;各种音视频格式的流行&#xff0c;用户对媒体播放器的功能和性能要求 日益增加。MPlayer是一个强大的开源媒体播放器&#xff0c;支持多种音视频格式。本项目旨在 基于MPlayer构建一个轻量级的Linux媒体播放器&#xff0c;提供简洁…

牛客NC288803 和+和

​import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;​public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m&#xff0c;分别表示数组的…

2025 软件供应链安全情报预警平台建设与实践

何为数字安全供应链情报&#xff1f; 所谓的数字供应链开源安全情报主要针对目标是开源数字应用资产。包括开源组件&#xff0c;中间件和操作系统。开源安全情报类型可以分为三大类&#xff1a; 1 第一类是传统的安全漏洞风险情报&#xff0c;开源漏洞情报数据获取主要有2种渠…

红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测

文章目录 ​​研判&#xff08;入侵检测&#xff09;​​ ​​设备​​ ​​经典网络​​​​云网络​​ ​​异常HTTP请求​​​​Webshell分析​​ ​​Webshell 的分类​​​​Webshell 的检测​​ ​​主机层面​​​​流量层面​​ ​​附录​​ ​​常见端口漏洞…

【Python系列】Python 连接 PostgreSQL 数据库并查询数据

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

DeepSeek赋能智慧社区:提升社区治理,优化资源配置,带来全新变革

在数字化浪潮的推动下&#xff0c;智慧社区正逐渐成为城市发展的重要方向。作为一款先进的人工智能大模型&#xff0c;DeepSeek凭借其强大的多模态数据分析和智能决策能力&#xff0c;正在为智慧社区的建设注入新的活力。 标准规范及顶层设计指南、供应商整体解决方案合集、供应…

代理服务器与内网穿透/打洞

内网穿透 简单来说内网穿透就是让一个在私人IP的设备&#xff0c;能在公网上被别的主机访问到资源。 中间经过服务器将获取的数据转发给主机。 内网打洞 内网打洞&#xff0c;也叫 P2P 穿透或 NAT 穿越&#xff0c;是一种用于实现位于不同内网中的设备之间直接建立连接的技…

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链&#xff0c;继续使用基于 langgraph 链 &#xff0c;对结构化数据库 SQlite 进行查询的方法。该系统建立以后&#xff0c;我们不需要掌握专业的 SQL 技能&#xff0c;可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…