유니티 ArRaycast Manager에 대해 알아보자! #AR Foundation

ArRaycastManager란?

ArRaycastManager 컴포넌트는 AR Foundation에서 Raycast 기능을 관리하는 역할을  합니다. ArRaycastManager  컴포넌트를 사용하면 물리(Real) 세계에 존재하지 않는 AR Ray Cast Manager에 대해 Raycast를 수행할 수 있습니다.
 
이 말은 Camera로 촬영하고 있는 공간은 실제 세계이지만 실행되고 있는 앱은 실제 세계가 아닌 AR 환경이라는 뜻입니다.

증강 현실(AR) 환경은 가상의 객체를 실제 세계에 '추가’하여 사용자가 실제 세계와 가상의 객체 사이에서 상호작용할 수 있게 하는 기술임을 잊지 말아야 함! - 인터페이스 느낌
 
ArRaycastManager 컴포넌트는 다음과 같은 역할을 합니다.

  1. 단일 Raycast를 수행하는 API를 제공.
  2. 지속적인 ARRaycast를 생성할 수 있음. ARRaycast는 트랙터블의 한 유형이며, 제거할 때까지 자동으로 업데이트됨.

 


Trackable이란?

AR Foundation에서 사용하는 TrackableType 열거형은 실제 세계에서 AR Camera가 추적할 수 있는 특징을 나타내는 플래그입니다. 

  • None: 추적할 특징이 없음.
  • AllTypes: 모든 추적 가능한 유형.
  • PlaneWithinPolygon: 평면의 경계점과 연관된 2D 볼록한 모양을 나타냄.
  • PlaneWithinBounds: 평면의 다각형을 완전히 둘러싸는 2D 직사각형 경계 상자를 나타냄 .
  • PlaneWithinInfinity: 위치와 방향을 설명하는 자세(Pose)에 의해 설명되는 무한 평면을 나타냄 .
  • PlaneEstimated: 추정된 평면을 나타냄 .
  • Planes: 모든 평면 유형의 트랙터블을 나타냄 .
  • FeaturePoint: 포인트 클라우드의 특징점(Point)을 나타냄 .
  • Image: 추적된 이미지를 나타냄 .
  • Face: 추적된 얼굴을 나타냄 .
  • Depth: 깊이 맵의 점(Point)을 나타냄 .

따라서 TrackableType은 Raycast가 검사할 트랙터블의 유형을 지정하는 데 사용됩니다.
예를 들어, TrackableType.PlaneWithinPolygon을 사용하면 Raycast는 폴리곤 내의 평면과 교차하는지 확인합니다.
 


ArRaycastManager 사용방법

if (arRaycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))
{
          Pose hitPose = hits[0].pose;
    
          InstantiateRandomObject(hitPose.position + Vector3.up);
 }

 
위 코드는 간단한 예제입니다. TrackableType은 PlaneWithinPolygon을 사용하여 Raycast는 폴리곤 내의 평면과 교차하는지 확인할 수 있습니다.
 
Touch한 Position을 받아서 해당 포지션에 오브젝트를 생성하는 간단한 코드입니다.
 
그렇다면 왜 AR Ray Cast Manager를 사용해야 할까요? Physics.Raycast를 사용하면 안되는 것일까요?
 
아까도 설명했지만 Physics.Raycast는 게임 오브젝트에 적용된 물리 속성(예: 콜라이더)에 대해 Raycast를 수행합니다. Physics.Raycast는 게임 환경 내에서 물체 간의 상호작용을 계산할 때 사용됩니다.
 
반면에 AR Ray Cast Manager는 AR(증강 현실) 환경에서 사용됩니다. AR 환경에서는 Physics.Raycast로 객체를 감지할 수 없습니다.