Thực hiện raycast (phương thức chiếu tia) hoặc kiểm thử nhấn để xác định vị trí chính xác của đối tượng 3D trong cảnh. Vị trí đặt chính xác đảm bảo nội dung AR được kết xuất ở kích thước (hiển thị) thích hợp.
Loại kết quả của lượt truy cập
Một lượt kiểm thử có thể tạo ra 4 loại kết quả kiểm thử, như minh hoạ trong bảng sau.
Loại kết quả lượt truy cập | Mô tả | Hướng | Trường hợp sử dụng | Lệnh gọi phương thức |
---|---|---|---|---|
Độ sâu | Sử dụng thông tin độ sâu từ toàn bộ cảnh để xác định độ sâu và hướng chính xác của một điểm | Vuông góc với bề mặt 3D | Đặt một vật thể ảo trên một bề mặt tuỳ ý (không chỉ trên sàn và tường) |
Bạn phải bật Depth để tính năng này hoạt động.ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
Máy bay | Đập vào các bề mặt ngang và/hoặc dọc để xác định độ sâu và hướng chính xác của một điểm | Vuông góc với bề mặt 3D | Đặt một đối tượng trên một mặt phẳng (sàn hoặc tường) bằng cách sử dụng hình học đầy đủ của mặt phẳng đó. Cần điều chỉnh tỷ lệ ngay lập tức. Phương án dự phòng cho thử nghiệm nhấn Độ sâu |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
Điểm đặc trưng | Dựa vào các tính năng hình ảnh xung quanh điểm nhấn của người dùng để xác định vị trí và hướng chính xác của điểm | Vuông góc với bề mặt 3D | Đặt một đối tượng trên một bề mặt tuỳ ý (không chỉ trên sàn và tường) |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
Raycast liên tục (Vị trí tức thì) | Sử dụng không gian màn hình để đặt nội dung. Ban đầu, sử dụng độ sâu ước tính do ứng dụng cung cấp. Hoạt động ngay lập tức, nhưng tư thế và độ sâu thực tế sẽ thay đổi sau khi ARCore có thể xác định hình học cảnh thực tế | +Y hướng lên, ngược với trọng lực | Đặt một đối tượng trên mặt phẳng (sàn hoặc tường) bằng cách sử dụng hình học đầy đủ của mặt phẳng, trong đó việc đặt nhanh là rất quan trọng và trải nghiệm có thể chấp nhận độ sâu và tỷ lệ ban đầu không xác định |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
Thực hiện một raycast tiêu chuẩn
Gọi ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
để thực hiện một raycast (kiểm thử va chạm). ARRaycastManager
hỗ trợ tất cả TrackableType
.
var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
return;
// Raycast against planes and feature points.
const TrackableType trackableTypes =
TrackableType.FeaturePoint |
TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
// Raycast hits are sorted by distance, so the first one will be the closest hit.
var hit = hits[0];
// Do something with hit.
}
Thực hiện một raycast bằng một tia và hướng tuỳ ý
Raycast thường được coi là các tia từ thiết bị hoặc máy ảnh của thiết bị, nhưng bạn có thể sử dụng Raycast(Ray, List<ARRaycastHit>, TrackableType)
để thực hiện raycast bằng một tia tuỳ ý trong toạ độ không gian thế giới thay vì một điểm trong không gian màn hình.
Tạo một neo bằng ARRaycastHit
Sau khi bạn có một lần nhấn raycast, hãy sử dụng GameObject.AddComponent<ARAnchor>
để tạo Mũi neo và thêm mũi neo đó làm thành phần vào GameObject
, sử dụng lần nhấn raycast làm dữ liệu đầu vào. Thành phần ARAnchor
sẽ liên tục cập nhật Transform
của đối tượng trò chơi để đối tượng trò chơi vẫn được đính kèm vào Trackable
cơ bản cho kết quả nhấn.
Raycast liên tục (Vị trí tức thì)
Raycast liên tục sử dụng vị trí màn hình và khoảng cách ước tính đến một bề mặt làm dữ liệu đầu vào để tạo một ARRaycast
mới nhằm đặt nội dung AR trong cảnh của bạn. Trong ARCore, tính năng này được gọi là Đặt ngay.
Gọi ARRaycastManager.AddRaycast()
để tạo ARRaycast
tiếp tục tự động cập nhật cho đến khi bạn gọi ARRaycastManager.RemoveRaycast()
hoặc tắt ARRaycastManager
.
Ban đầu, khoảng cách của ARRaycast
sẽ là khoảng cách được cung cấp trong lệnh gọi AddRaycast()
. Sau khi ARCore lập bản đồ hình học cục bộ và tìm thấy một mặt phẳng giao nhau, khoảng cách sẽ được cập nhật thành khoảng cách thực tế. Sự thay đổi về khoảng cách có thể ảnh hưởng đến "kích thước" rõ ràng hoặc tỷ lệ nhận biết của vật thể.
Bước tiếp theo
- Lớp học lập trình Tạo trò chơi AR bằng AR Foundation của Unity.