
XR Origin에서 하위 오브젝트인 Camera를 선택한 후 카메라 하위 오브젝트에 원하는 프리팹을 넣고 AR Occlusion Manager를 넣어준다.
Environment Depth Mode에서 Fastest, Medium, Best 중에서 선택하는데 이 때 Fastest쪽은 메모리를 적게 먹지만 원하는 결과가 안 나올 수 있고 Best로 갈수록 메모리는 많이 먹지만 결과가 더 좋을 수도 있다. 이런 Occlusion Manager를 실행해보면 알 수 있겠지만 Best를 선택해도 그렇게 원하는 결과가 나오지 않는다.
방법2)
OcclusionManager를 지우고 AR Default Plane을 만들어준다(XR Origin) 그 후, Material에서 다음과 같이 설정을 해준다

프리팹으로 형성 된 AR Default Plane에 해당 머티리얼을 적용시켜 준다.
이렇게 실행 했을 떄 원하는 바닥이나 벽이 선택되면 해당 바닥과 마찰이 있을 경우 오브젝트가 숨겨지는 현상을 볼 수 있다.

다음과 같이 이미지가 확인되면 프리팹을 활성화 하도록 설정

reference Image Library를 선택한 후 위와같이 원하는 프리팹을 드래그앤 드랍 해주면 해당 이미지가 카메라에 관찰 될 시 출력이 된다.(주의, 너무 단순한 이미지 안됨 - 포인트가 없는 이미지)
여기서 Max number~~ 여기에 넣는 숫자는 프리팹이 나타날 수 있는 최대 갯수를 정하는 것으로 2개 이상을 지정할 경우 스크립트를 통해 활성화 비활성화를 알아보자
Image Tracking Support

먼저 해당 오브젝트의 ARTrackedImageManager를 가져와야하기 때문에 선언 해주고, 딕셔너리를 통해 프리팹이 포함 되어있는지, 그리고 인식된 오브젝트를 키값으로 구별해 줄것이며, List를 통해 프리팹을 넣어줄 것이다

이벤트 함수를 사용해서 OnImageChanged를 구독하고, init에서 풀은 아니지만 비슷한 형식으로 list에 프리팹을 넣어주는데 이 때 딕셔러니에 생성 할려는 GameObject가 존재하지 않을경우에 생성해준다.

이미지가 바뀔 때 마다 호출 될 함수로 모든 이미지를 돌면서 순환하는 형식으로 작성했다.

Bind : ARTrackedImage를 받아와서(반복문을 통해 가져온 이미지) 해당 이미지가 키와 값이 존재하지 않을경우 실행되지 않도록 하고 만약 딕셔너리에 존재 한다면 true, _bound딕셔너리에 Add해주고 위치를 지정해준다.
SetPosition : 딕셔너리에 존재하지 않는다면 마찬가지로 실행되지 않고, 이미지 상태를 isTracked에 넣고 만약 true라면 위치를 img의 위치와 회전을 설정해서 해당 이미지를 따라 가도록 설정해주었다.

다음과 같이 머티리얼을 설정 해주고,


AR Default Face에 해당 머티리얼을 적용시켜준다. 그리고 XR Origin에서 AR Face Manager를 적용 한 후 Default Face를 적용시킨다.
실행해보면 마스크가 낀것처럼 얼굴에 적용이 되는데 이는 FaceManager의 점에 따라 얼굴에 마스크가 낀것처럼 적용을 해주는 형식이다
유니티에 GPS 사용 권한을 받는것 - 매니페스트(기술서, 요청서)
먼저 사용자 권한을 받는 방법부터 알아보자

먼저 프로젝트 세팅에서 publishing settings에서 custom Main amnifest를 체크해준다. 그리고 해당 파일을 따라가서 안드로이드 Permission에 따라 어떤 권한을 필요로 하는지 설정해준다.
Access-fine-location : 위치정보에 접근을 할것인지
access - network - state : 네트워크에 접근 가능해야 하는지
Camera의 경우 AR Foundation에서 요청함
사이트 : 안드로이드 Permission
스크립트에서 Permission을 살펴 보자면 struct 형태의 string으로 나열되어 있고, const로 정의된 부분에서
PermissionManager

1회성으로 유저에게 위치 정보의 권한을 받는 코드
Permission에 대한 정보 :
필요한 기능에 따라 해당 권한에 관한 string을 가져다 쓰면 됨
HasUserAutherPermission : 입력받은 Permission의 상태가 승인되어 잇는지 - bool 타입
RequestUserPermission : 유저에게 permission을 요청함
RequestUserPermissions : 여러개를 요청
RequestUserPermission(오버라이드) : 유저에게 permission을 요청함 + callbacks
callbacks -> 승인 됐는지 안됐는지에 따라 이벤트발생
PermissionCallbacks)

위에부터 요청 받았는지, 안 받았는지, 안받고 다시 안물어보기
다시 PermissionManager)

수락, 거절에 따른 이벤트 callbacks

여러 Permission권한 요청 (주의할점 어느 시점의 어느 permission이 callback이 되는지 주의해야함)
GPS
MyLocation)
위도와 경도

GPSManager)




LocationServiceStatus에서 해당 status의 상태를 불러올 수 있는데 자세히 살펴보자면

멈춰있는지, 초기화중인지, 실행되고있는지, 실패했는지 이렇게 동작을 살펴볼 수있다.


다음과같이 모두 통과 됐을 때 while문에 들어가서 위도와 경도의 값을 가져올 수 있다