คู่มือนักพัฒนาซอฟต์แวร์ที่ใช้ตำแหน่ง Instant สำหรับ AR Foundation

เรียนรู้วิธีใช้ 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

  1. เพิ่มออบเจ็กต์เกม AR Session Origin และ AR Session ที่กำหนดไว้ล่วงหน้า

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

เมื่อ Raycast Prefab ไม่มีข้อมูล ARRaycastManager จะสร้างอินสแตนซ์ของ Prefab และซิงค์ท่าทางกับท่าทางของ ARRaycast โดยอัตโนมัติ

AR Foundation 5.x

  1. เพิ่มออบเจ็กต์เกม XR Origin และ AR Session ที่กำหนดไว้ล่วงหน้า

  2. เพิ่มคอมโพเนนต์ 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