ทำ raycast หรือ Hit-test เพื่อระบุตำแหน่งที่ถูกต้องของวัตถุ 3 มิติในฉาก การวางตำแหน่งที่ถูกต้องช่วยให้มั่นใจได้ว่าเนื้อหา AR จะแสดงผลในขนาดที่เหมาะสม (ชัดเจน)
ประเภทผลลัพธ์ Hit
การทดสอบ Hit สามารถให้ผลลัพธ์ Hit ที่แตกต่างกัน 4 ประเภทตามที่แสดงในตารางต่อไปนี้
ประเภทผลลัพธ์ Hit | คำอธิบาย | การวางแนว | Use Case | การเรียกใช้เมธอด |
---|---|---|---|---|
ความลึก | ใช้ข้อมูลความลึกจากฉากทั้งหมดเพื่อกำหนดความลึกและการวางแนวที่ถูกต้องของจุด | ตั้งฉากกับพื้นผิว 3 มิติ | วางวัตถุเสมือนจริงบนพื้นผิวที่กำหนดเอง (ไม่ใช่แค่บนพื้นและผนัง) |
ต้องเปิดใช้ Depth เพื่อให้ดำเนินการได้ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
เครื่องบิน | กระทบพื้นผิวแนวนอนและ/หรือแนวตั้งเพื่อกำหนดความลึกและการวางแนวที่ถูกต้องของจุด | ตั้งฉากกับพื้นผิว 3 มิติ | วางวัตถุบนเครื่องบิน (พื้นหรือผนัง) โดยใช้รูปเรขาคณิตเต็มของเครื่องบิน ต้องใช้สเกลที่ถูกต้องทันที สำรองสำหรับการทดสอบ Hit ความลึก |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
จุดสนใจ | อาศัยฟีเจอร์ภาพรอบๆ จุดที่ผู้ใช้แตะเพื่อกำหนดตำแหน่งและการวางแนวที่ถูกต้องของจุด | ตั้งฉากกับพื้นผิว 3 มิติ | วางวัตถุบนพื้นผิวที่กำหนดเอง (ไม่ใช่แค่บนพื้นและผนัง) |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
Persistent 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)
เพื่อทำraycast โดยใช้รังสีที่กำหนดเองในพิกัดพื้นที่โลกแทนการใช้จุดกับพื้นที่หน้าจอ
สร้าง Anchor โดยใช้ ARRaycastHit
เมื่อได้รับ Hit ของ Raycast ให้ใช้ GameObject.AddComponent<ARAnchor>
เพื่อสร้างแท็ก Anchor และเพิ่มเป็นคอมโพเนนต์ลงใน GameObject
โดยใช้ Hit เรย์แคสต์เป็นอินพุต คอมโพเนนต์ ARAnchor
จะอัปเดต Transform
ของออบเจ็กต์เกมอย่างต่อเนื่อง เพื่อให้ออบเจ็กต์เกมยังคงแนบอยู่กับ Trackable
เบื้องหลังสำหรับผลลัพธ์ของ Hit
เรย์คาสต์ต่อเนื่อง (ตำแหน่งทันใจ)
การฉายรังสีอย่างต่อเนื่องจะใช้ตำแหน่งหน้าจอและระยะทางไปยังพื้นผิวโดยประมาณเป็นอินพุตเพื่อสร้าง ARRaycast
ใหม่เพื่อวางเนื้อหา AR ในฉาก ใน ARCore จะเรียกว่าตำแหน่งทันที
โปรดโทรหา ARRaycastManager.AddRaycast()
เพื่อสร้าง ARRaycast
ที่จะอัปเดตโดยอัตโนมัติอย่างต่อเนื่องจนกว่าคุณจะโทรหา ARRaycastManager.RemoveRaycast()
หรือปิดใช้ ARRaycastManager
ในขั้นต้น ระยะทางของ ARRaycast
จะเป็นระยะทางที่ระบุไว้ในการโทร AddRaycast()
เมื่อ ARCore จับคู่เรขาคณิตในพื้นที่และพบระนาบตัดกัน ระยะทางจะอัปเดตเป็นระยะทางจริง การเปลี่ยนแปลงระยะทางอาจส่งผลต่อ "ขนาด" หรือขนาดที่รับรู้ได้ของวัตถุ