ดูวิธีใช้ Instant Placement API หรือ เรย์แคสต์แบบถาวรในแอปของคุณเอง
ข้อกำหนดเบื้องต้น
โปรดทำความเข้าใจแนวคิดพื้นฐานของ AR และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
ชื่อแนวคิด
ชื่อของแนวคิดและวิธีการบางอย่างอาจแตกต่างกันระหว่าง AR Foundation กับ ARCore SDK สําหรับ Unity รายการเหล่านี้แสดงอยู่ในตารางด้านล่างเพื่อให้คุณอ้างอิงได้ง่าย
| AR Foundation | ARCore SDK สําหรับ Unity |
| เรย์แคสต์แบบถาวร | ตำแหน่งโฆษณาแบบทันที |
ARRaycastManager.AddRaycast(Vector2, float)
|
Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
|
ARRaycast
|
TrackableHit
|
| (ไม่มีความเท่าเทียม) | InstantPlacementPoint
|
ARRaycast.trackingState
|
InstantPlacementPointTrackingMethod
|
ข้อกำหนดเบื้องต้น
คู่มือนี้จะถือว่าคุณได้ติดตั้งและกำหนดค่า Unity แล้ว หากไม่มี ให้ดูการเริ่มต้นใช้งานส่วนขยาย ARCore สําหรับ AR Foundation เพื่อดูขั้นตอนการติดตั้งและตั้งค่า
กำหนดค่าเซสชันใหม่ด้วย ARRaycastManager
การวางตำแหน่งทันที (เรย์แคสต์แบบถาวร) พร้อมใช้งานทันทีในแพ็กเกจ AR Foundation ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าฉาก
AR Foundation 4.x
เพิ่มออบเจ็กต์เกมที่กําหนดไว้ล่วงหน้า AR Session Origin และ AR Session

เพิ่มคอมโพเนนต์ AR Raycast Manager ลงในออบเจ็กต์เกม AR Session Origin

เมื่อ Raycast Prefab ไม่ใช่ค่า Null ARRaycastManager จะสร้างอินสแตนซ์ของ Prefab และซิงค์ท่าทางของ Prefab กับท่าทางของ ARRaycast โดยอัตโนมัติ
AR Foundation 5.x
เพิ่มออบเจ็กต์เกมที่กําหนดไว้ล่วงหน้า XR Origin และ AR Session

เพิ่มคอมโพเนนต์ AR Raycast Manager ลงในออบเจ็กต์เกม XR Origin

เมื่อ Raycast Prefab ไม่ใช่ค่า Null ARRaycastManager จะสร้างอินสแตนซ์ของ Prefab และซิงค์ท่าทางของ Prefab กับท่าทางของ ARRaycast โดยอัตโนมัติ
AR Foundation 6.x
เพิ่มออบเจ็กต์เกมที่กําหนดไว้ล่วงหน้า XR Origin และ AR Session

เพิ่มคอมโพเนนต์ AR Raycast Manager ลงในออบเจ็กต์เกม XR Origin

เมื่อ Raycast Prefab ไม่ใช่ค่า Null ARRaycastManager จะสร้างอินสแตนซ์ของ Prefab และซิงค์ท่าทางของ Prefab กับท่าทางของ ARRaycast โดยอัตโนมัติ
วางวัตถุ
ในเซสชัน ARCore ใหม่ ให้ทำการทดสอบการตีโดยใช้ ARRaycastManager.AddRaycast(Vector2, float)
public ARRaycastManager RaycastManager; // set from the Editor Inspector.
void Update()
{
Touch touch;
if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
{
return;
}
if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
{
return;
}
ARRaycast raycast = RaycastManager.AddRaycast(touch.position, _estimateDistance);
if (raycast != null)
{
// You can instantiate a 3D object here if you haven’t set Raycast Prefab in the scene.
…
}
}
ตรวจสอบสถานะการติดตาม ARRaycast
หาก ARCore มีท่าทาง 3 มิติที่แม่นยำ ARRaycast.trackingState จะแสดงเป็น Tracking
มิเช่นนั้น ระบบจะเริ่มที่ Limited
และเปลี่ยนเป็น Tracking เมื่อ ARCore มีท่าทาง 3 มิติที่ถูกต้อง เมื่อสถานะการติดตามเป็น Tracking แล้ว สถานะจะไม่เปลี่ยนกลับไปเป็น Limited