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

ดูวิธีใช้ API ตำแหน่งโฆษณาทันที หรือ Raycast คงที่ในแอปของคุณเอง

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

ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกําหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

ชื่อแนวคิด

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

มูลนิธิ AR ARCore SDK สำหรับ Unity
Raycast ถาวร ตำแหน่งโฆษณาทันใจ
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(ไม่มีค่าเทียบเท่า) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

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

คู่มือนี้จะถือว่าคุณได้ติดตั้งและกำหนดค่า Unity แล้ว หากไม่ โปรดดู การเริ่มต้นใช้งานส่วนขยาย ARCore สำหรับมูลนิธิ AR เพื่อดูขั้นตอนการติดตั้งและการตั้งค่า

กำหนดค่าเซสชันใหม่ด้วย ARRaycastManager

การวางแบบทันที (Raycast แบบต่อเนื่อง) พร้อมใช้งานทันทีด้วย AR แพ็กเกจรองพื้น ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าฉาก

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