執行光柵 (即命中測試) 來決定在場景中 3D 物件的正確位置。正確放置的位置可確保 AR 內容能以適當的大小 (透明) 顯示。
命中結果類型
命中測試可能會產生四種不同類型的命中結果,如下表所示。
命中結果類型 | 說明 | 方向 | 用途 | 方法呼叫數 |
---|---|---|---|---|
深度分析 | 使用整個場景的深度資訊,判斷點的正確深度和方向 | 與 3D 表面垂直 | 將虛擬物件置於任意平面上 (不僅限於樓層和牆面) |
您必須啟用 Depth ,這項功能才能正常運作。ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
飛機 | 命中水平和/或垂直表面,判斷點的正確深度和方向 | 與 3D 表面垂直 | 使用飛機的完整幾何圖形將物體放置在平面 (地板或牆壁) 上。需要立即正確的體重計。深度命中測試的備用方法 |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
特徵點 | 提供使用者輕觸該點周圍的視覺地圖項目,以決定點的正確位置和方向 | 與 3D 表面垂直 | 將物件置於任意表面 (不限於樓層和牆上) |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
永久 Raycast (即時放置) | 使用螢幕空間放置內容。一開始使用應用程式提供的預估深度。雖然可立即運作,但 ARCore 能判斷實際場景的幾何圖形後,姿勢和實際深度也會跟著改變 | +Y 指朝上,與重力相反 | 使用飛機的完整幾何圖形將物體放置在平面 (地板或牆壁) 上,如此快速擺放位置至關重要,且體驗可以容忍初始的初始深度和縮放比例不明 |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
執行標準光線轉換
呼叫 ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
執行光柵 (hit-test)。ARRaycastManager
支援所有 TrackableType
。
var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
return;
// Raycast against planes and feature points.
const TrackableType trackableTypes =
TrackableType.FeaturePoint |
TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
// Raycast hits are sorted by distance, so the first one will be the closest hit.
var hit = hits[0];
// Do something with hit.
}
使用任意的光線與方向進行光線轉換
通常系統會將 Raycast 視為裝置或裝置相機的光線,但您可以使用 Raycast(Ray, List<ARRaycastHit>, TrackableType)
,使用世界空間座標中的任意光線進行光柵,而非螢幕空間點。
使用 ARRaycastHit
建立錨點
出現光柵命中後,請使用 GameObject.AddComponent<ARAnchor>
建立 Anchor,並將其做為 GameObject
元件,以輸入畫面做為輸入內容。ARAnchor
元件會持續更新遊戲物件的 Transform
,讓遊戲物件保持附加至命中結果的基礎 Trackable
。
持續性光柵 (即時放置)
永久性光柵會使用螢幕位置,以及做為輸入內容的預估距離,用於建立新的 ARRaycast
,以便在場景中放置 AR 內容。在 ARCore 中,這稱為「Instant Placement」。
呼叫 ARRaycastManager.AddRaycast()
可建立 ARRaycast
,會持續自動更新,直到您呼叫 ARRaycastManager.RemoveRaycast()
或停用 ARRaycastManager
為止。
一開始,ARRaycast
的距離是 AddRaycast()
呼叫中提供的距離。一旦 ARCore 繪製出當地的幾何圖形並找到相交的平面,距離就會更新為實際距離。距離的變化會影響物件的「尺寸」或感知的縮放比例。