目錄
一、插件介紹
二、主要組件
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、核心功能與特點
交互類型支持
- 支持多種交互行為:懸停(Hover)、選中(Select)、激活(Activate)、焦點(Focus)?等。
- 可配置交互的觸發條件(如僅允許特定類型的交互器操作)。
事件驅動設計
- 提供豐富的回調事件(如?
OnHoverEntered
、OnSelectExited
),便于監聽和響應交互狀態變化。 - 支持通過 Unity Event 或腳本綁定自定義邏輯。
物理與運動控制
- 與 Unity 物理引擎深度集成,支持基于物理的抓取、投擲、碰撞反饋。
- 可配置物體的運動模式(如運動學抓取或物理模擬)。
可擴展性
- 作為基類,派生出多種專用交互組件(如?
XR Grab Interactable
、XR Simple Interactable
)。 - 允許通過繼承和重寫方法實現自定義交互邏輯。
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:通過腳本接口(
IXRHoverFilter
、IXRSelectFilter
)過濾交互器。 - 示例:僅允許帶有特定標簽的交互器懸停或選中物體。
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:基礎抓取與釋放
- 為物體添加?
XR Grab Interactable
(繼承自?XR Interactable
)。 - 配置?
OnSelectEntered
?事件:抓取時縮小物體。 - 配置?
OnSelectExited
?事件:釋放時恢復原大小并施加投擲力。
場景2:懸停高亮與提示
- 監聽?
OnHoverEntered
?事件:懸停時顯示發光材質。 - 監聽?
OnHoverExited
?事件:隱藏發光效果。
場景3:條件過濾交互
- 創建自定義?
IXRSelectFilter
?腳本:僅允許帶有 "Key" 標簽的交互器抓取物體。 - 將過濾器添加到?
XR Interactable
?的?Select Filters?列表。
7、子類與擴展
XR Interactable 作為基類,派生出多種專用交互組件:
XR Grab Interactable
- 擴展抓取功能,支持?運動學抓取?或?物理抓取。
- 可配置抓取附著力、投擲速度比例。
XR Simple Interactable
- 輕量級交互,僅響應懸停和基礎選中事件(無物理抓取)。
- 適用于按鈕、開關等簡單交互。
8、優化與調試技巧
性能優化
- 減少?
XR Interactable
?對象的碰撞體復雜度(使用簡單形狀碰撞體)。 - 通過?
Interaction Layer Mask
?過濾不必要的交互檢測。
調試工具
- 啟用?
XR Interactable
?的調試模式(Gizmos),可視化交互范圍。 - 使用?
Debug.Log
?輸出交互事件參數:
interactable.onSelectEntered.AddListener((interactor) => Debug.Log($"選中者:{interactor.name}, 物體:{interactable.name}"));
輸入防抖
- 為懸停事件添加延遲觸發(通過腳本控制),避免快速移動時的誤觸。
9、常見問題與解決
問題:物體無法被交互
檢查步驟:
- 確認物體附加了?
XR Interactable
?或其子類組件。 - 檢查?
Interaction Layer Mask
?是否允許當前交互器的層級。 - 驗證碰撞體是否正確設置(非Trigger類型)。
問題:抓取后物體位置偏移
解決:
- 調整?
XR Grab Interactable
?的?Attach Transform
?位置。 - 檢查物體的?
Rigidbody
?是否被其他力干擾。
問題:事件未觸發
排查方向:
- 確保事件回調方法為?
public
?或在腳本中動態注冊。 - 檢查交互器與可交互對象的?
Interaction Manager
?是否一致。