เรียนรู้วิธีใช้ API ตำแหน่งทันทีหรือเรย์แคสต์แบบถาวรในแอปของคุณเอง
ข้อกำหนดเบื้องต้น
ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
ชื่อแนวคิด
ชื่อของแนวคิดและวิธีการบางอย่างอาจแตกต่างกันระหว่าง AR Foundation และ ARCore SDK สำหรับ Unity ซึ่งแสดงอยู่ในตารางด้านล่างเพื่อให้อ้างอิงได้ง่าย
มูลนิธิ AR | 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
ตำแหน่งทันใจ (persistent raycasts) พร้อมให้ใช้งานได้ทันทีเมื่อแกะกล่องพร้อมกับแพ็กเกจ AR Foundation ทำตามขั้นตอนต่อไปนี้เพื่อสร้างฉาก
AR Foundation 4.x
เพิ่มออบเจ็กต์เกม AR Session Origin และ AR Session ที่กำหนดไว้ล่วงหน้า
เพิ่มคอมโพเนนต์ AR Raycast Manager ลงในออบเจ็กต์เกม AR Session Origin
เมื่อ Raycast Prefab ไม่มีข้อมูล ARRaycastManager
จะสร้างอินสแตนซ์ของ Prefab และซิงค์ท่าทางกับท่าทางของ ARRaycast
โดยอัตโนมัติ
AR Foundation 5.x
เพิ่มออบเจ็กต์เกม XR Origin และ AR Session ที่กำหนดไว้ล่วงหน้า
เพิ่มคอมโพเนนต์ AR Raycast Manager ลงในออบเจ็กต์เกม XR Origin
เมื่อ Raycast Prefab ไม่มีข้อมูล ARRaycastManager
จะสร้างอินสแตนซ์ของ Prefab และซิงค์ท่าทางกับท่าทางของ ARRaycast
โดยอัตโนมัติ
วางวัตถุ
ในเซสชัน ARCore ใหม่ ให้ทำการทดสอบ Hit โดยใช้ 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