[TIL] 100 AR 강의, Image Tracking Face Detector ⭐⭐⭐
카테고리: Til
AR
AR Image Tracking
AR Face Detector
이력서 진행중, 강의듣기, AR 스터디
[o] 알고리즘 문제 - 53
[o] 1,2반 마무리정리 챌~
[x] 디자인 코드 패턴 이해,정리하기. 책사기
[x] 자료구조 디자인패턴 강의 다시 듣기.
[x] 포트폴리오 강의듣고 만들기.
AR 이미지 트렉킹
이미지 트레킹
- XR Origin - AR Tracked Image Manager 컴포넌트 추가
- assets 에 XR - ImageLibrary 생성 후 이미지들 추가하기
- AR Tracked Image Manager 에 생성한 라이브러리 추가, cube프리팹 추가
- trackedImagesChanged 이벤트 -> added, updated, remove
- MultiImageTracking 스크립트 생성 이미지 트래킹
이미지별 다른 프리팹
- Tracked Image Prefab 빼기
- 이름 P0000, P0001, P0002 로 수정
- 같은 이름으로 프리팹 세 개 만들기
- MultiImageTracked 스크립트
MultiImageTracked 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class MultiImageTracked : MonoBehaviour
{
private ARTrackedImageManager ARTrackedImageManager;
private Dictionary<string, GameObject> instanciatePrefab;
private void Awake()
{
ARTrackedImageManager = GetComponent<ARTrackedImageManager>();
}
private void OnEnable()
{
ARTrackedImageManager.trackedImagesChanged += OnTrackedImage;
}
private void OnDisable()
{
ARTrackedImageManager.trackedImagesChanged -= OnTrackedImage;
}
void OnTrackedImage(ARTrackedImagesChangedEventArgs args)
{
foreach (ARTrackedImage trackedImage in args.added)
{
InstantiateGameObject(trackedImage);
}
foreach (ARTrackedImage trackedImage in args.updated)
{
UpdateTrackingGameObject(trackedImage);
}
foreach (ARTrackedImage trackedImage in args.removed)
{
DestroyGameObject(trackedImage);
}
}
private void InstantiateGameObject(ARTrackedImage addedImage)
{
GameObject prefab = Instantiate(Resources.Load<GameObject>(addedImage.referenceImage.name));
prefab.transform.position = addedImage.transform.position;
prefab.transform.rotation = addedImage.transform.rotation;
prefab.transform.parent = addedImage.transform;
instanciatePrefab.Add(addedImage.referenceImage.name, prefab);
}
private void UpdateTrackingGameObject(ARTrackedImage updatedImage)
{
for (int i = 0; i < instanciatePrefab.Count; i++)
{
if (instanciatePrefab.TryGetValue(updatedImage.referenceImage.name, out GameObject prefab))
{
prefab.transform.position = updatedImage.transform.position;
prefab.transform.rotation = updatedImage.transform.rotation;
prefab.SetActive(true);
}
}
}
private void DestroyGameObject(ARTrackedImage removedImage)
{
for (int i = 0; i < instanciatePrefab.Count; i++)
{
if (instanciatePrefab.TryGetValue(removedImage.referenceImage.name, out GameObject prefab))
{
instanciatePrefab.Remove(removedImage.referenceImage.name);
Destroy(prefab);
}
}
}
}
ImageLibrary
테스트
이미지 요류로 1번째 이미지변경
AR Face Detector
- 기본 세팅
- XR Origin - AR Face Manager 컴포넌트 추가
- FaceDetector 스크립트 생성 추가
- Sphere 추가 해서 포인트 표시 스케일 0.01
- 카메라 전면으로 변경
- Index 증가시키는 UI 버튼 작성
FaceDetector 코드
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;
public class FaceDetector : MonoBehaviour
{
ARFaceManager faceManager;
public GameObject facePref;
public Text text;
int index = 0;
void Start()
{
faceManager = GetComponent<ARFaceManager>();
faceManager.facesChanged += OnDetect;
text.text = index.ToString();
}
void OnDetect(ARFacesChangedEventArgs args)
{
if (args.updated.Count > 0)
{
Vector3 pos = args.updated[0].vertices[index];
pos = args.updated[0].transform.TransformPoint(pos);
facePref.SetActive(true);
facePref.transform.position = pos;
}
else
{
facePref.SetActive(false);
}
}
public void OnButtonClick()
{
index++;
text.text = index.ToString();
}
}
VR 취업관련
VR 디바이스 사용해봤나?
인터렉션 기능 뭐개발해봤나?
트러블슈팅은?
잡담, 일기?
AR
AR Image Tracking
AR Face Detector
댓글남기기