AR Session추가

Hierachy의 +를 눌러 AR Session Origin을 추가한다

Session Origin을 눌러보면 안에 AR카메라가 포함되어 있다. 메인 카메라는 하나만 있으면 되므로 원래잇던 MainCamera는 지워준다.

AR Session, AR Plane Manager 추가

다음은 ARSession을 추가해준다. AR의 생명주기를 담당하는 컴포넌트이다.

 

하이라키에서 AR Session Origin을 선택하고 Add Component를 누르고  AR Plane Manager를 검색해서 넣어준

AR Plane Manager를 평면을 찾아주는 컴포넌트인데 수직, 수평 이나 전부를 선택할수도 있다.

DetectedPlane 만들기

하이라키에서 +를 눌러 CreateEmpty를 만들고 이름을 DectedPlane으로 한다.

Add Component를 눌러 Mesh Renderer, Mesh Filter, Mesh Collider, AR Plane Mesh Visualizer 를 추가한다.

Mesh Renderer : 평면의 메시의 머터리얼및 색상 지정

Mesh Filter : 

Mesh Collider : 이게 없으면 충돌처리가 안되고 RayTraycing도 안된다.

AR Plane Mesh Visualizer : 

AR Plane Mesh Visualizer도 추가한다.  검색된 플레인의 표시방식을 설정한다.  AR Plane AR Mesh Visualizer 2개가 생긴다

Assets 폴더아래 Materials 폴더를 하나 만들자

Material 폴더로 들어가 우클릭해서 Material을 create해주고 이름을 M_Material로 해주자. Inspector에서 Rendering Mode를 Transparent로 변경

Albedo를 눌러 칼라를 적당 Alpha 를 150정도

Assets폴더에 Prefabs폴더를 만들고 들어가서 하이어라키의 DetectedPlane을 끌어다 폴더에 놓는다. 이후 하이라키의 DetectedPlane은 지운다.

이제 프리팹 폴더의 DetectedPlain을 선택하고 Inspector에서 Materials Element0에 아가 만든 머터리얼을 끌어다 놔준다.

하이라키에서 AR Session Origin을 선택하고 AR Plane Manager 컴포넌트의 Plane Prefab에 방금만든 프리팹을 끌어다 놓는다. 그럼 None이 프리팹이름으로 바낀다. 동그라미를 눌러 선택해도 된다.

RayCastManager

 

 

인디케이터 표시하기

평면을 인식했더니 평면을 감지해서 위에 표식을 띄워보자.

AR Session Origin 을 선택후 AR Raycast Manager를 추가하자.

인디케이터로 쓸 투명  PNG를 적당히 찾아 유니티 머터리얼 폴더로 끌어다 놓는다.

인디케이터 파일을 선택하고 Inspectord에서 Transparency를 체크하고 Apply한다.

머티리얼을 새로만들어 M_Indicator로 하고 Rendering Mode를 Cutout로 변경하고 Indicator PNG를 끌어다 albedo 앞 박스에 놓는다. 

하이라키+를 눌러 Quad를 추가하고 indicator로 이름을 바꾼다

씬뷰의 기즈모를 줄이기 위해 뷰포트 우상 기즈모 위 지구본 옆 아래 화살표를 누르면 3D Icons를 줄일수 있다.

하이라키의 Indicator를 고르고 Inspector의 MeshRenderere의 Materials에 M_Indicator를 끌어다 놓는다. 

Position Y를 1로 변경해서 약간 올려준다.

 

Assets폴더밑에 Scripts폴더를 만들고 Script를 만들고 이름을 바로 ObjectManager로 바군다. 클래스명 때문에 그렇다.

만들어진 스크립트를 쳐보면  VisualStudio가 열린다. 안열리면 Edit>Preference를 체크한다.

VisualStudio가 열리면  다음 네임스페이스를 추가한다.

using UnityEngine.XR.ARFoundation;

스크립트를 완성한다.이건 처음 앱리 로딩하면 인디케이터가 사라지게 해준다

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

public class ObjectManager : MonoBehaviour
{
    //변수선언
    public GameObject indicator;
    ARRaycastManager arManager;
    // Start is called before the first frame update
    void Start()
    {
        //AR Raycast Manager 컴포넌트를 가져옴
        arManager = GetComponent<ARRaycastManager>();
        //인디케이터 비활성화
        indicator.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

AR Session Origin을 선택하고 스크립트를 끌어다 추가하고 Indicator변수에 하이라키의 indicator를 끌어다 연결한다.

 

재생버튼을 누르면

Indicator가 사라진다. 다시 재생버튼을 눌러 멈춘면 나타난다. 플레이버튼이 켜진상태에서는 편집변경이 저장 안된다.

다음 스크립터를 추가하면 앱이 Plane을 생성하면 그 위에 인디케이터를 표시해준다

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

public class ObjectManager : MonoBehaviour
{
    //변수선언
    public GameObject indicator;
    ARRaycastManager arManager;
    // Start is called before the first frame update
    void Start()
    {
        //AR Raycast Manager 컴포넌트를 가져옴
        arManager = GetComponent<ARRaycastManager>();
        //인디케이터 비활성화
        indicator.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {
        DetectGround();
    }
    void DetectGround()
    {
        //스크린 중앙 지점을 찾음
        Vector2 screenSize = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f);
        List<ARRaycastHit> hitInfos = new List<ARRaycastHit>();
        //만약 스크린 중앙에서 레이를 발사했을 때 평면이 있다면 인디케이터 활성화
        if (arManager.Raycast(screenSize, hitInfos, UnityEngine.XR.ARSubsystems.TrackableType.Planes))
        {
            indicator.SetActive(true);
            //인디케이터의 위치와 회전 값을 레이가 닿은 지점에 일치시킴
            indicator.transform.position = hitInfos[0].pose.position;
            indicator.transform.rotation = hitInfos[0].pose.rotation;
            //위치를 위로 0.1m 옮림
            indicator.transform.position += indicator.transform.up * 0.1f;


        } else
        {
            indicator.SetActive(false);
        }
    }
}



빌드하기

실험을 위해 핸드폰에서 실행하기 위해서는 개발자모드 설정을 해야한다. 설정에서 빌드번호를 검색후 계속 누르면 개발자가 된다. 다시 개발자모드를 검색후  사용, USB디버기을 활성화 해준다.

File>Build Setting에 가서 Add Open Scenes를 클릭해서 현재 씬을 넣어준다 물론 Andrid 가 선택되어져있어야한다.

이후 아래  Build and Run을 누른다 파일명을 물어보면 Build폴더를 만들고 적당히 이름을 지정후 저장한다.

오래걸림

난 Build 는 되는데 Build and Run은 연결을 체크해봐라 문제없다면 드라이브 문제라는 헛소리가 나와서 드라이버를 깔아봤는

https://everyday-devup.tistory.com/90

 

[Unity] Android Debug ( Logcat ) - 안드로이드 디버깅, 개발자 옵션 ( Samsung, LG )

Unity로 안드로이드 게임을 개발할 때, Editor에서는 재현이 되지 않고 디바이스에서만 발생하는 이슈가 있다. 그런 이슈들은 디바이스의 로그를 통해서 이슈가 되는 부분을 찾아야 한다. Editor에서

everyday-devup.tistory.com

드라이버를 깔고 다시 해도 안된다. 그리고 핸드폰을 좀만 만지면 접촉이 안좋와서 그런지 자꾸 연결이 끊어졌고 그런 과정에서 핸드폰을 보니 개발자디버깅을 허용하겠냐는 팝업이 떠서 그걸 체크했더니 Build and run이 실행되었다.

 

터치하면 인디케이터에 오브젝트 표시하기

에셋스토어에서 3D 에셋을 다운로드하다

 

https://assetstore.unity.com/packages/3d/characters/animals/animals-free-260727

 

Animals FREE | 3D 동물 | Unity Asset Store

Elevate your workflow with the Animals FREE asset from ithappy. Find this & other 동물 options on the Unity Asset Store.

assetstore.unity.com

 

하면 PackageManager가 뜨면서 download import 하면 자동으로 폴더가 만들어진다.

 

 

+ Recent posts