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