레이캐스트 또는 Hit Test를 수행하여 장면에서 3D 개체가 올바르게 배치되는지 확인합니다. 올바른 위치에 배치해야 AR 콘텐츠가 적절한 (눈에 띄는) 크기로 렌더링됩니다.
조회 결과 유형
아래 표와 같이 Hit Test는 네 가지 유형의 조회 결과를 생성할 수 있습니다.
조회 결과 유형 | 설명 | 방향 | 사용 사례 | 메서드 호출 |
---|---|---|---|---|
깊이 | 전체 장면의 깊이 정보를 사용하여 지점의 올바른 깊이와 방향을 결정합니다. | 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)
|
Persistent 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
를 사용하여 앵커 만들기
레이캐스트 적중이 발생하면 GameObject.AddComponent<ARAnchor>
를 사용하여 앵커를 만들고 레이캐스트 조회를 입력으로 사용하여 GameObject
에 구성요소로 추가합니다. ARAnchor
구성요소는 게임 객체의 Transform
을 지속적으로 업데이트하므로 게임 객체가 조회 결과의 기본 Trackable
에 연결된 상태로 유지됩니다.
지속적인 레이캐스트 (인스턴트 배치)
지속적 레이캐스트는 화면 위치와 표면까지의 예상 거리를 입력으로 사용하여 새 ARRaycast
를 만들어 장면에 AR 콘텐츠를 배치합니다. ARCore에서는 이를 인스턴트 게재위치라고 합니다.
ARRaycastManager.AddRaycast()
를 호출하여 ARRaycastManager.RemoveRaycast()
를 호출하거나 ARRaycastManager
를 사용 중지할 때까지 자동으로 업데이트되는 ARRaycast
를 만듭니다.
처음에는 ARRaycast
의 거리는 AddRaycast()
호출에 제공된 거리입니다. ARCore가 로컬 도형을 매핑하고 교차 평면을 찾으면 거리가 실제 거리로 업데이트됩니다. 거리의 변화는 겉보기에 '크기'에 영향을 줄 수 있습니다. 측정할 수 있습니다