Выполняйте raycasts в своем приложении Unity (AR Foundation).

Выполните рейкаст или проверку попадания, чтобы определить правильное размещение 3D-объекта в вашей сцене. Правильное размещение гарантирует, что контент AR будет отображаться в соответствующем (кажущемся) размере.

Типы результатов обращений

Проверка попадания может дать четыре различных типа результатов попадания, как показано в следующей таблице.

Тип результата обращения Описание Ориентация Вариант использования Вызовы методов
Глубина Использует информацию о глубине всей сцены для определения правильной глубины и ориентации точки. Перпендикулярно 3D-поверхности Разместите виртуальный объект на произвольной поверхности (не только на полу и стенах) Чтобы это работало, необходимо включить Depth .

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Самолет Касается горизонтальных и/или вертикальных поверхностей, чтобы определить правильную глубину и ориентацию точки. Перпендикулярно 3D-поверхности Поместите объект на плоскость (пол или стену), используя полную геометрию плоскости. Срочно нужен правильный масштаб. Резервный вариант для проверки глубины ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Характерная точка Полагается на визуальные особенности вокруг точки касания пользователя для определения правильного положения и ориентации точки. Перпендикулярно 3D-поверхности Разместите объект на произвольной поверхности (не только на полу и стенах) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Постоянный Raycast (мгновенное размещение) Использует пространство экрана для размещения контента. Первоначально используется предполагаемая глубина, предоставленная приложением. Работает мгновенно, но поза и фактическая глубина изменятся, как только ARCore сможет определить фактическую геометрию сцены. +Y направлен вверх, против силы тяжести Разместите объект на плоскости (поле или стене), используя полную геометрию плоскости, где быстрое размещение имеет решающее значение, и опыт может допускать неизвестную начальную глубину и масштаб. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Выполните стандартный рейкаст

Вызовите ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) чтобы выполнить рассылку лучей (проверку попадания). ARRaycastManager поддерживает все 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.
}

Провести raycast, используя произвольный луч и направление

Рейкасты обычно рассматриваются как лучи от устройства или камеры устройства, но вы можете использовать Raycast(Ray, List<ARRaycastHit>, TrackableType) для проведения рейкаста с использованием произвольного луча в координатах мирового пространства вместо точки экранного пространства.

Создайте привязку, используя ARRaycastHit

Получив попадание raycast, используйте GameObject.AddComponent<ARAnchor> , чтобы создать Anchor и добавить его в качестве компонента в свой GameObject , используя попадание raycast в качестве входных данных. Компонент ARAnchor будет постоянно обновлять Transform игрового объекта, так что игровой объект остается прикрепленным к базовому Trackable для результата попадания.

Постоянные лучи (мгновенное размещение)

Постоянные raycasts используют местоположение экрана и предполагаемое расстояние до поверхности в качестве входных данных для создания нового ARRaycast для размещения AR-контента в вашей сцене. В ARCore это называется Instant Placement .

Вызовите ARRaycastManager.AddRaycast() чтобы создать ARRaycast , который продолжает автоматически обновляться до тех пор, пока вы не вызовете ARRaycastManager.RemoveRaycast() или не отключите ARRaycastManager .

Первоначально расстояние ARRaycast будет расстоянием, указанным в вызове AddRaycast() . Как только ARCore нанес на карту локальную геометрию и нашел пересекающую плоскость, расстояние обновляется до фактического расстояния. Изменение расстояния может повлиять на видимый «размер» или воспринимаемый масштаб объекта.

Что дальше