Thêm không gian con theo dõi mục tiêu

Các thiết bị XR được hỗ trợ
Hướng dẫn này giúp bạn xây dựng các trải nghiệm cho những loại thiết bị XR sau.
Thiết bị đeo đầu XR
Kính thông minh XR có dây

Mặc dù Subspace tiêu chuẩn luôn ở một vị trí cố định do hệ thống xác định, nhưng đôi khi bạn có thể muốn giao diện người dùng không gian của ứng dụng di chuyển linh động theo người dùng hoặc luôn gắn với một vị trí cụ thể trong môi trường của ứng dụng hoặc trong thế giới thực. Bạn có thể truyền FollowTarget đến tham số follow của Subspace để xây dựng các trải nghiệm như HUD khoá đầu hoặc bảng thông tin đính kèm với các đối tượng trong thế giới thực.

Thêm không gian con theo chế độ xem của người dùng

Để thêm một không gian con được đặt tương ứng với trường nhìn của người dùng, hãy sử dụng FollowTarget.view. Tuỳ thuộc vào chế độ theo dõi mà bạn chỉ định, chế độ này cho phép bạn liên tục theo dõi chuyển động đầu của người dùng hoặc đặt nội dung tĩnh dựa trên hướng nhìn của họ. Bạn có thể sử dụng lớp phủ này cho những nội dung như HUD, thông báo cố định hoặc các nút điều khiển thao tác nhanh.

Khai báo và yêu cầu cấp quyền

Trước khi yêu cầu quyền, bạn phải khai báo quyền trong tệp kê khai của ứng dụng bằng phần tử <uses-permission>.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for head tracking. -->
    <uses-permission android:name="android.permission.HEAD_TRACKING"/>
    <application ...>
        ...
    </application>
</manifest>

Bây giờ, hãy yêu cầu quyền. Để biết thêm thông tin, hãy xem lại nguyên tắc và quy trình cấp quyền để đảm bảo bạn cung cấp trải nghiệm tốt nhất cho người dùng, chẳng hạn như kiểm tra xem người dùng đã cấp quyền khi bắt đầu chạy mà ứng dụng của bạn yêu cầu hay chưa và liệu ứng dụng của bạn có nên cho người dùng biết lý do trước khi yêu cầu quyền này hay không.

Định cấu hình phiên của bạn

Tiếp theo, bạn sẽ định cấu hình phiên của ứng dụng được tạo cho bạn khi sử dụng Jetpack Compose cho XR bằng cách đặt DeviceTrackingMode.SPATIAL:

val session = checkNotNull(LocalSession.current)
session.configure(
    config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
        .build()
)

Tạo không gian con

Cuối cùng, bạn sẽ tạo một không gian con nhắm đến chế độ xem của người dùng, cùng với một chế độ theo dõi:

// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
    follow = FollowTarget.view(
        // Customizing the soft follow to move slightly faster and tracking all dimensions
        mode = FollowMode.soft(
        )
    ),
    modifier = modifier,
) {
    SpatialPanel {
      // SpatialPanel Content
    }
}

Chế độ theo dõi cho các không gian phụ nhắm đến chế độ xem của người dùng

Khi sử dụng FollowTarget.view làm mục tiêu, bạn có thể tuỳ chỉnh cách nội dung hoạt động bằng cách chỉ định FollowMode:

  • FollowMode.soft: Nội dung dần bắt kịp chuyển động của mục tiêu, tạo ra hiệu ứng nổi mượt mà.
  • FollowMode.snap: Nội dung được đặt trước mặt người dùng một lần dựa trên tư thế xem ban đầu của họ và giữ nguyên vị trí sau đó.
  • FollowMode.tight: Nội dung theo dõi chế độ xem của người dùng ngay lập tức với độ trễ tối thiểu, giúp nội dung luôn bám sát chuyển động của người dùng.

Tất cả các chế độ theo dõi đều cho phép bạn chọn các phương diện chuyển động được theo dõi trong số các tuỳ chọn sau:

  • Trục X
  • Trục Y
  • Giới thiệu
  • Cuộn
  • Độ lệch
  • RotationOnly: Cho phép bạn chỉ định một giá trị duy nhất để theo dõi các phương diện liên quan đến chế độ xoay (độ dốc, độ lệch và độ lăn).

Bạn có thể chọn bất kỳ kiểu kết hợp nào của các phương diện này hoặc sử dụng giá trị mặc định của TrackedDimensions.All để theo dõi tất cả các phương diện đó.

Thêm một không gian con theo một đối tượng môi trường

Để thêm một không gian con khoá chặt nội dung không gian vào một đối tượng thực tế trong môi trường của người dùng, hãy sử dụng FollowTarget.anchor(). Sử dụng loại mục tiêu này để theo dõi một mặt phẳng được phát hiện, một điểm neo hoặc một vị trí không gian địa lý.

Việc theo dõi các đối tượng trong thế giới thực đòi hỏi bạn phải có thêm quyền và cấu hình phiên, tuỳ thuộc vào đối tượng mà bạn đang theo dõi.

Để biết hướng dẫn chi tiết về cách sử dụng khả năng nhận thức cho các tính năng của ARCore, cũng như cách thiết lập các quyền cần thiết và định cấu hình phiên để sử dụng FollowTarget.anchor(), hãy xem tài liệu về SDK Jetpack XR cho Mặt phẳng, Điểm neo và Tư thế không gian địa lý.

Ví dụ sau đây tạo một không gian con theo một neo trong thế giới thực:

// A subspace locked to a real-world anchor
Subspace(
    follow = FollowTarget.anchor(anchor = myAnchor)
) {
    // Rotate the panel to ensure it faces the user while remaining anchored
    SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
      // SpatialPanel Content
    }
}

Tránh chồng chéo không gian

Mỗi Subspace bạn tạo sẽ quản lý cảnh 3D độc lập của riêng mình và không nhận biết được các không gian con khác tồn tại, vì vậy, không gian con này không tự động tránh va chạm.

Để ngăn HUD khoá đầu cắt qua các bảng điều khiển POI được neo (Z-fighting), hãy quản lý rõ ràng các khối lượng bố cục bằng các phương thức sau:

  1. Sử dụng độ lệch: Sử dụng SubspaceModifier.offset để đẩy giao diện người dùng ngoại vi (như HUD) đến gần hơn hoặc xa hơn trên trục Z, hoặc chuyển giao diện người dùng đó sang các cạnh của tầm nhìn của người dùng.
  2. Hạn chế kích thước: Áp dụng các đối tượng sửa đổi như requiredSizeIn để ràng buộc hộp giới hạn của không gian.

Để biết thêm thông tin về không gian toạ độ, các quy tắc ràng buộc về bố cục và tất cả cấu hình theo dõi hiện có, hãy xem tài liệu tham khảo Subspace.