Unity (AR Foundation) 앱에서 레이캐스트 실행하기

레이캐스트 또는 Hit Test를 실행하여 장면에서 3D 객체의 올바른 배치를 확인합니다. 올바르게 배치해야 AR 콘텐츠가 적절한 크기로 렌더링됩니다.

조회 결과 유형

Hit Test는 다음 표와 같이 4가지 유형의 조회 결과를 생성할 수 있습니다.

조회 결과 유형 설명 수업 소개 사용 사례 메서드 호출
자세한 정보 전체 장면의 깊이 정보를 사용하여 지점의 정확한 깊이와 방향을 결정합니다. 3D 표면에 수직 바닥과 벽뿐 아니라 임의의 표면에 가상 객체를 배치합니다. 이 작업을 수행하려면 Depth를 사용 설정해야 합니다.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
비행기 점의 정확한 깊이와 방향을 결정하기 위해 수평 또는 수직면을 누릅니다. 3D 표면에 수직 항공기의 전체 형태를 사용하여 평면 (바닥 또는 벽)에 객체를 배치합니다. 정확한 체중계가 즉시 필요합니다. 깊이 Hit Test의 대체 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)를 호출하여 레이캐스트 (hit-test)를 실행합니다. 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 구성요소는 게임 객체가 조회 결과의 기본 Trackable에 연결된 상태로 유지되도록 게임 객체의 Transform를 지속적으로 업데이트합니다.

영구 레이캐스트 (인스턴트 배치)

영구 레이캐스트는 화면 위치와 표면까지의 예상 거리를 입력으로 사용하여 새 ARRaycast를 만들어 장면에 AR 콘텐츠를 배치합니다. ARCore에서는 이를 인스턴트 게재위치라고 합니다.

ARRaycastManager.AddRaycast()를 호출하여 ARRaycastManager.RemoveRaycast()를 호출하거나 ARRaycastManager를 사용 중지할 때까지 계속해서 자동으로 업데이트되는 ARRaycast를 만듭니다.

처음에 ARRaycast의 거리는 AddRaycast() 호출에 제공된 거리가 됩니다. ARCore가 로컬 도형을 매핑하고 교차하는 평면을 찾으면 거리는 실제 거리로 업데이트됩니다. 거리의 변화는 객체의 시각적 '크기' 또는 인지되는 배율에 영향을 줄 수 있습니다.

다음 단계