raycast 또는 히트 테스트를 실행하여 장면에서 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)
|
지속적인 레이캐스트 (인스턴트 게재위치) | 화면 공간을 사용하여 콘텐츠를 배치합니다. 처음에는 앱에서 제공하는 추정 깊이를 사용합니다. 즉시 작동하지만 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(Ray, List<ARRaycastHit>, TrackableType)
를 사용하여 화면 공간 점 대신 세계 공간 좌표에서 임의의 광선을 사용하여 레이캐스트를 실행할 수 있습니다.
ARRaycastHit
를 사용하여 앵커 만들기
레이캐스트가 적중하면 GameObject.AddComponent<ARAnchor>
를 사용하여 앵커를 만들고 레이캐스트 적중을 입력으로 사용하여 GameObject
에 구성요소로 추가합니다. ARAnchor
구성요소는 게임 객체의 Transform
를 지속적으로 업데이트하므로 게임 객체가 히트 결과의 기본 Trackable
에 계속 연결된 상태로 유지됩니다.
영구 레이캐스트 (즉시 배치)
지속적인 레이캐스트는 화면 위치와 표면까지의 예상 거리를 입력으로 사용하여 새 ARRaycast
를 만들어 장면에 AR 콘텐츠를 배치합니다. ARCore에서는 이를 즉시 배치라고 합니다.
ARRaycastManager.AddRaycast()
를 호출하여 ARRaycastManager.RemoveRaycast()
를 호출하거나 ARRaycastManager
를 사용 중지할 때까지 자동으로 계속 업데이트되는 ARRaycast
를 만듭니다.
처음에는 ARRaycast
의 거리가 AddRaycast()
호출에 제공된 거리입니다. ARCore가 로컬 도형을 매핑하고 교차 평면을 찾으면 거리가 실제 거리로 업데이트됩니다. 거리의 변화는 물체의 겉보기 '크기' 또는 인식된 크기에 영향을 줄 수 있습니다.