유니티 AR Foundation #AR Plane Manager

AR Plane Manager이란?

실제 환경의 평면을 감지하고 추적하는 컴포넌트입니다. 감지된 각 평면에 게임 오브젝트를 생성할 수도 있습니다.

수평, 수직, 둘 모두

 

평면으로 감지될 수 있는 예로는 수평, 수직, 둘 모두 설정할 수 있습니다.

평면이 감지되면, AR Plane Manager에 할당한 Plane Prefab이 생성되며 평면을 나타냅니다.

 

ARPlane

 

이때 생성되는 Plane Prefab에는 ARPlane 컴포넌트가 존재해야 하며, 해당 컴포넌트를 통해 감지된 평면 데이터를 사용할 수 있습니다.

 

AR Plane 컴포넌트의 주요 속성은 다음과 같습니다.

  • Destroy On Removal: 속성이 참(true)인 경우, 객체가 제거될 때 파괴됩니다.
  • Vertex Changed Threshold: 평면의 꼭짓점 위치가 이 값만큼 변경되기 전에 boundaryChanged 이벤트를 호출합니다. 단위는 미터입니다.

평면 이벤트 콜백

private void SubscribeToPlanesChanged()
{
    var manager = Object.FindObjectOfType<ARPlaneManager>();

    manager.planesChanged += OnPlanesChanged;
}

 

ARPlaneManager에는 planesChanged라는 콜백함수가 존재합니다.

아래 OnPlanesChanged함수를 등록시켜주면 평면이 생기거나, 업데이트되거나, 삭제될 때 콜백받을 수 있습니다.

public void OnPlanesChanged(ARPlanesChangedEventArgs changes)
{
    foreach (var plane in changes.added)
    {
        // handle added planes
    }

    foreach (var plane in changes.updated)
    {
        // handle updated planes
    }

    foreach (var plane in changes.removed)
    {
        // handle removed planes
    }
}

 

 

단계 설명
Added 평면이 처음 감지되면, ARPlaneManager는 AR Plane 컴포넌트가 첨부된 새 GameObject를 생성한 다음, planesChanged 이벤트를 호출하고, 추가된 속성을 통해 새 AR Plane 컴포넌트에 대한 참조를 전달합니다.
Updated 평면이 추가된 후의 각 subsequent 프레임에서, 평면 관리자는 해당 평면의 정보를 업데이트할 수 있습니다.
Removed 평면이 더 이상 감지되지 않으면, ARPlaneManager는 Plane을 제거할 수 있습니다. 제거된 Plane은 더 이상 업데이트할 수 없습니다. 제거된 Plane의 Destroy on Removal 속성이 참(true)으로 설정된 경우, ARPlaneManager는 planesChanged 이벤트를 호출한 직후에 Plane을 즉시 파괴합니다.

 

평면이 제거되었다고 해서 환경에 표면이 더 이상 존재하지 않는 다는 의미는 아닙니다.

 

AR Plane 컴포넌트 또는 그 GameObject에 Destroy를 호출해서는 안 됩니다. ARPlane은 AR Plane Manager 컴포넌트에 의해 관리되며, 직접 파괴하려고 하면 오류가 발생할 수 있습니다. GameObject를 비활성화하거나 Plane 메시를 렌더링하지 않는 것을 고려해야 합니다.