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