개발/Unity

유니티 AR - 미드 에어 앵커로 오브젝트 생성하기 (Vuforia Mid Air Anchors)

피로물든딸기 2023. 7. 5. 19:53
반응형

Unity 전체 링크

 

참고

- 유니티 AR 뷰포리아 튜토리얼

- 그라운드 플레인으로 평면 인식하기

유니티 더블 클릭 구현하기

 

미드 에어 앵커(Mid Air Anchors)를 이용하면 이미지를 인식하지 않아도 공간에 AR 오브젝트를 만들 수 있다.

 

뷰포리아에서 제공하는 미드 에어 앵커를 사용해보자.


Mid Air Anchors 적용하기

 

Vuforia Engine에서 아래 두 오브젝트를 추가한다.

 

Mid Air는 Ground Plane과 사용 방법이 거의 동일하다.

예를 들어 Ground Plane StageMid Air Stage와 Stage Type만 다를 뿐이다.

 

Ground Plane에서 Plane Finder에 Anchor Stage를 추가한 것처럼,

Mid Air PositionerMid Air Stage를 앵커 스테이지로 설정한다.

 

그리고 Mid Air Stage에 생성할 오브젝트를 자식으로 설정한다.

 

위에서 사용한 오브젝트는 아래 링크를 참고하자.

https://assetstore.unity.com/packages/3d/characters/creatures/kawaii-slimes-221172

 

Kawaii Slimes | 3D 생물 | Unity Asset Store

Elevate your workflow with the Kawaii Slimes asset from Awaii Studio. Find this & other 생물 options on the Unity Asset Store.

assetstore.unity.com

 

Ground Plane과 마찬가지로 Mid Air도 웹캠에서 테스트할 수 없다.

아래의 임시 이미지를 이용해서 테스트하는 것은 가능하다.

 

게임을 실행하면 Mid Air Indicator가 위치하는 곳에 오브젝트를 만들 수 있다.


Mid Air Positioner 제어하기

 

오브젝트를 하나만 생성하려면 Duplicate Stage를 해제하면 된다.

 

그라운드 플레인에서 Plane Finder를 제어한 것처럼 Mid Air Positioner도 제어가 가능하다.

PlaneFinderController.cs를 참고하여 MidAirPositionerController.cs를 만든다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class MidAirPositionerController : MonoBehaviour
{
    public GameObject midAirPositioner;

    AnchorInputListenerBehaviour ailr;
    MidAirPositionerBehaviour mapb;
    ContentPositioningBehaviour cpb;

    float interval = 0.25f;
    float doubleClickedTime = -1.0f;
    bool isDoubleClicked = false;

    public void initialize()
    {
        ailr.enabled = false;
        mapb.enabled = false;
        this.gameObject.SetActive(true);
    }

    void Start()
    {
        ailr = midAirPositioner.GetComponent<AnchorInputListenerBehaviour>();
        mapb = midAirPositioner.GetComponent<MidAirPositionerBehaviour>();
        cpb = midAirPositioner.GetComponent<ContentPositioningBehaviour>();

        cpb.OnContentPlaced.AddListener(delegate { initialize(); });
    }

    void OnMouseUp()
    {
        if ((Time.time - doubleClickedTime) < interval)
        {
            isDoubleClicked = true;
            doubleClickedTime = -1.0f;
        }
        else
        {
            isDoubleClicked = false;
            doubleClickedTime = Time.time;
        }
    }

    void Update()
    {
        if (isDoubleClicked)
        {
            isDoubleClicked = false;

            this.gameObject.SetActive(false);
            ailr.enabled = true;
            mapb.enabled = true;
        }
    }
}

planeFinder → midAirPositioner

PlaneFinderBehaviour → MidAirPositionerBehaviour

 

스크립트를 슬라임에 추가하고 더블 클릭 이벤트를 위해 콜라이더도 추가한다.

 

apk 빌드 후, 공간에 정상적으로 오브젝트가 생성되는 것을 확인해보자.

 

반응형