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

ดูวิธีใช้ Instant Placement API หรือ เรย์แคสต์แบบถาวรในแอปของคุณเอง

ข้อกำหนดเบื้องต้น

โปรดทำความเข้าใจแนวคิดพื้นฐานของ AR และวิธีกำหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

ชื่อแนวคิด

ชื่อของแนวคิดและวิธีการบางอย่างอาจแตกต่างกันระหว่าง AR Foundation กับ ARCore SDK สําหรับ Unity ซึ่งมีรายชื่ออยู่ในตารางด้านล่างเพื่อให้อ้างอิงได้ง่ายๆ

AR Foundation ARCore SDK สำหรับ Unity
Raycast ถาวร ตำแหน่งโฆษณาทันที
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

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

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

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

AR Foundation 5.x

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

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