ดูวิธีใช้ 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 Extensions สำหรับ 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 และซิงค์ท่าทางกับท่าทางของ
ARRaycast โดยอัตโนมัติ
AR Foundation 5.x
เพิ่มออบเจ็กต์เกมที่กำหนดไว้ล่วงหน้า XR Origin และ AR Session

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

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

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

เมื่อ Raycast Prefab ไม่เป็น Null ARRaycastManager
จะสร้างอินสแตนซ์ของ 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