ดูวิธีใช้ 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
โดยอัตโนมัติ
วางวัตถุ
ในเซสชัน 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