Выполните рейкаст или проверку попадания, чтобы определить правильное размещение 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 нанес на карту локальную геометрию и нашел пересекающую плоскость, расстояние обновляется до фактического расстояния. Изменение расстояния может повлиять на видимый «размер» или воспринимаемый масштаб объекта.