using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARFoundation.VisualScripting;
public class MultiImgTracker : MonoBehaviour
{
[SerializeField] ARTrackedImageManager imgMgr;
[SerializeField] GameObject firstImg;
[SerializeField] GameObject secondImg;
private void OnEnable()
{
//imgMgr.trackedImagesChanged += OnImageChange; //유니티 5 기준
imgMgr.trackablesChanged.AddListener(OnImageChange); //유니티 6 기준
}
private void OnDisable()
{
//imgMgr.trackedImagesChanged -= OnImageChange; //유니티 5 기준
imgMgr.trackablesChanged.RemoveListener(OnImageChange); //유니티 6 기준
}
//void OnImageChange(ARTrackedImagesChangedEventArgs args) //유니티 5 기준
void OnImageChange(ARTrackablesChangedEventArgs<ARTrackedImage> args) //유니티 6 기준
{
foreach( ARTrackedImage trackedImg in args.added) //새로운 이미지가 추가된 이벤트일경우
{
string imgName = trackedImg.referenceImage.name; //트래킹 성공한 새 이미지의 이름을 받아오고
switch(imgName)
{
case "Moko": //라이브러리 상의 이미지 이름
GameObject first = Instantiate(firstImg, trackedImg.transform.position, trackedImg.transform.rotation);
first.transform.parent = trackedImg.transform;
break;
case "Ab": //라이브러리 상의 이미지 이름
GameObject second = Instantiate(secondImg, trackedImg.transform.position, trackedImg.transform.rotation);
second.transform.parent = trackedImg.transform;
break;
}
}
//변경 관련. 위치가 변한것들은 updated 속에 있음
foreach(ARTrackedImage trackedImg in args.updated)
{
//이미지 변경사항이 있으면 자식으로 있던 게임오브젝트를 위치 및 회전 갱신
trackedImg.transform.GetChild(0).position = trackedImg.transform.position;
trackedImg.transform.GetChild(0).rotation = trackedImg.transform.rotation;
}
//foreach (ARTrackedImage trackedImg in args.removed) //유니티5
//{
// Destroy(trackedImg.transform.GetChild(0).gameObject);
//}
foreach (var trackedImg in args.removed) //유니티6
{
//사라지면 자식 오브젝트 제거
Destroy(trackedImg.Value.transform.GetChild(0).gameObject);
}
}
}
Head Mount Display : 머리에 착용하는 디스플레이 기기를 착용합니다. 기기 사양에 따라 각종 센서가 내장되어 있다
Controller : 손에 들고 조작하는 기기로, 키 입력에 그치지 않고 컨트롤러의 이동과 움직임을 추적할 수 있다

