본문 바로가기

Unity/ARCore

ARFoundation으로 ARCore 사용하기 - ARPlaneManagerEvent

ARFoundation으로 ARCore 사용하기 - ARPlaneManagerEvent

 

ARFoundation에서 바닥면을 인식 할때 나오는 이벤트를 알아보겠습니다.

AR Session Origin에 추가했던 ARPlaneManager를 이용해서 이벤트를 추가해 보겠습니다.

이벤트를 작성할 스크립트를 추가합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

public class ARPlaneManagerEvent : MonoBehaviour
{
    public GameObject spawnObject;
    public ARPlaneManager arPlaneManager;

    private Dictionary<TrackableId, GameObject> spawnObjects;

    // Start is called before the first frame update
    void Start()
    {
        arPlaneManager.planesChanged += ArPlaneManager_planesChanged;
    }

    private void ArPlaneManager_planesChanged(ARPlanesChangedEventArgs obj)
    {
        List<ARPlane> addedPlanes = obj.added;

        if (addedPlanes.Count > 0)
        {
            foreach (ARPlane plane in addedPlanes)
            {
                GameObject instance = Instantiate(spawnObject, plane.center, plane.transform.rotation);
                spawnObjects.Add(plane.trackableId, instance);
            }
        }

        List<ARPlane> removedPlanes = obj.removed;

        if (removedPlanes.Count > 0)
        {
            foreach (ARPlane plane in removedPlanes)
            {
                GameObject destoryTarget = spawnObjects[plane.trackableId];
                Destroy(destoryTarget);
            }
        }
    }

}

 

ARPlaneManager 객체를 받아와서 아래처럼 이벤트를 생성해주면 added, removed, updated 이벤트를 사용할 수 있습니다.

arPlaneManager.planesChanged += ArPlaneManager_planesChanged;

위 예제는 면을 인식할 때 면 중앙에 오브젝트를 생성해주는 코드 입니다.

빌드 후 테스트 해봅시다.