Hướng dẫn cho nhà phát triển về Vị trí tức thì trong AR Foundation

Tìm hiểu cách sử dụng API Vị trí tức thì hoặc truyền tia bền vững trong ứng dụng của riêng bạn.

Điều kiện tiên quyết

Đảm bảo rằng bạn hiểu rõ các khái niệm cơ bản về AR và cách định cấu hình phiên ARCore trước khi tiếp tục.

Tên khái niệm

Tên của một số khái niệm và phương pháp có thể khác nhau giữa AR Foundation và SDK ARCore dành cho Unity. Các trường hợp nêu trên được liệt kê trong bảng bên dưới để bạn dễ dàng tham khảo.

Quỹ AR SDK ARCore dành cho Unity
Truyền tia liên tục Vị trí tức thì
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(Không tương đương) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

Điều kiện tiên quyết

Hướng dẫn này giả định rằng bạn đã cài đặt và định cấu hình Unity. Nếu không, hãy xem hướng dẫn bắt đầu sử dụng Tiện ích ARCore cho AR Foundation để biết các bước cài đặt và thiết lập.

Định cấu hình một phiên mới với ARRaycastManager

Vị trí tức thì (truyền tia sáng liên tục) có sẵn ngay khi mở hộp nhờ AR Gói nền tảng. Làm theo các bước sau để thiết lập cảnh của bạn.

Nền tảng AR 4.x

  1. Thêm các đối tượng trò chơi được xác định trước AR Session OriginAR Session.

  2. Thêm thành phần AR Raycast Manager vào Đối tượng trò chơi AR Session Origin.

Khi Raycast Prefab không có giá trị rỗng, ARRaycastManager sẽ tạo thực thể của prefab và tự động đồng bộ hoá tư thế của nó với ARRaycast.

Nền tảng AR 5.x

  1. Thêm các đối tượng trò chơi được xác định trước XR OriginAR Session.

  2. Thêm thành phần AR Raycast Manager vào Đối tượng trò chơi XR Origin.

Khi Raycast Prefab không có giá trị rỗng, ARRaycastManager sẽ tạo thực thể của prefab và tự động đồng bộ hoá tư thế của nó với ARRaycast.

Đặt một đối tượng

Trong phiên ARCore mới, hãy thực hiện kiểm tra lượt truy cập bằng 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.
        …
    }
}

Theo dõi trạng thái theo dõi ARRaycast

Nếu ARCore có tư thế 3D chính xác, ARRaycast.trackingState sẽ là Tracking. Nếu không, sự kiện sẽ bắt đầu bằng Limited và chuyển sang Tracking sau khi ARCore có tư thế 3D chính xác. Khi trạng thái theo dõi trở thành Tracking, nó sẽ không hoàn nguyên về Limited.