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

ดูวิธีใช้ 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

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

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

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

AR Foundation 5.x

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

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

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

AR Foundation 6.x

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

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