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
드라이버를 깔고 다시 해도 안된다. 그리고 핸드폰을 좀만 만지면 접촉이 안좋와서 그런지 자꾸 연결이 끊어졌고 그런 과정에서 핸드폰을 보니 개발자디버깅을 허용하겠냐는 팝업이 떠서 그걸 체크했더니 Build and run이 실행되었다.
터치하면 인디케이터에 오브젝트 표시하기
에셋스토어에서 3D 에셋을 다운로드하다
https://assetstore.unity.com/packages/3d/characters/animals/animals-free-260727
하면 PackageManager가 뜨면서 download import 하면 자동으로 폴더가 만들어진다.
'AR > 24 KMOOC 비주얼심화과정' 카테고리의 다른 글
7/1 FaceTracking2 (1) | 2024.07.03 |
---|---|
4일차 FaceTracking (6.30 강의) (3) | 2024.06.30 |
3일차 인디케이터에서 오브젝트 생성및 회전 (6월28일) (0) | 2024.06.28 |
1일차 설치, 프로젝트만들기, AR인디케이터 (0) | 2024.06.27 |
AR Foundation (0) | 2024.06.27 |