命中測試示例
該示例演示了(le)如何對(duì)現實世界中的(de)點和(hé)面進行命中測試。有關通(tōng)過射線投射進行命中測試的(de)基本信息,以及 AR Foundation 的(de) AR Raycast Subsystem 組件的(de)功能,請參閱 Unity 文檔。要使用(yòng)此功能,必須在 OpenXR 插件設置中啓用(yòng),路徑爲 Project Settings > XR Plug-in Management > OpenXR (> Android Tab)。文檔中“射線投射”和(hé)“命中測試”這(zhè)兩個(gè)術語可(kě)以互換使用(yòng)。
示例工作原理(lǐ)
将 AR Raycast Manager 添加到 AR Session Origin GameObject 将啓用(yòng)射線投射子系統。如果沒有可(kě)用(yòng)的(de)平面管理(lǐ)器,命中測試功能将創建命中測試的(de)基礎。如果以後添加了(le)平面管理(lǐ)器,基礎平面檢測子系統将根據該管理(lǐ)器進行調整,命中追蹤可(kě)能會有所不同(例如,結果取決于平面管理(lǐ)器上設置的(de)平面過濾器)。爲了(le)獲得(de)最佳結果,如果使用(yòng)命中測試,也(yě)請在平面管理(lǐ)器上啓用(yòng)所有過濾器。如果不使用(yòng)單獨的(de)平面管理(lǐ)器,命中測試功能将自動處理(lǐ)這(zhè)些設置以獲得(de)最佳效果。
AR Raycast Manager 組件提供了(le)一個(gè)字段,用(yòng)于定義在成功與平面相交時(shí)生成的(de)預制體。在本示例中,該字段被留空,因爲該功能由 Hit Testing Sample Controller 組件實現。
射線投射管理(lǐ)器的(de) Raycast 函數将返回一個(gè)布爾值,表示射線是否擊中了(le)平面。命中結果将被添加到 ARRaycastHit 列表中,并按距離升序排列(即最近的(de)優先)。
示例場(chǎng)景中有一個(gè)默認的(de)紅色 gizmo 指示器,它會跟随視線移動。每幀都會從頭部的(de)起始點向視線方向發射一條射線。如果射線擊中一個(gè)平面,指示器 gizmo 的(de)顔色會發生變化(huà),并移動到擊中位置。如果射線沒有擊中任何物(wù)體,指示器 gizmo 将保持不變。