미디어 콘텐츠 스터디
10. 다중 이미지 추적하기(Multiple Image Tracking) 본문
10. 다중 이미지 추적하기(Multiple Image Tracking)
danmujicat 2023. 10. 12. 13:08AR 개발을 위한 프로젝트를 준비하기 위해 Window | Package Manangement 메뉴를 선택하여 Package Manangement 창을 열고 AR 장치 플러그인을 설치합니다.
1장의 ARCore 개발을 위한 환경 구축하기 참고하세요
- AR 장치용 XR plugins 설치하기
- ARCore XR Plugin 설치하기
- AR Foundation 패키지 설치하기
- Input System 설치하기
- Androd 플랫폼의 ARcore 설정하기
- Player 설정하기
1. 기본 AR 장면 만들기
① File | Save As 메뉴를 선택하여 Assets/Scenes/ 폴더에 이름을 BasicARScene으로 저장합니다.
② Hierarchy 창에서 Main Camera를 삭제합니다.
③ GameObject | XR | AR Session 메뉴를 선택하여 Hierarchy 창에 AR Session을 추가합니다.
④ GameObject | XR | XR Origin 메뉴를 선택하여 Hierarchy 창에 XR Origin 을 추가합니다.
2. 오브젝트 출력하기 : AR Tracked Image Manager 설정하기
Hierarchy 창에 XR Origin 을 선택하고 Inspector창에서 Add Component 버튼을 클릭하여 AR Tracked Image Manager 컴포넌트를 추가합니다.
2.1 인식할 이미지 만들기
① Project 창에서 Asset 폴더 하위에 Images 폴더를 만들고 여기서 오른쪽 마우스 버튼을 선택하여 Create->XR->Reference Image Libray 메뉴를 선택합니다.
② 생성된 ReferenceImageLibray를 선택한 후, Inspector 창에 Add Image 버튼을 클릭하여 인식할 이미지를 등록합니다.
③ Hierarchy 창에 XR Origin 을 선택하고 Inspector창에서 AR Tracked Image Manager의 Serialized Library 속성값에 ReferenceImageLibray를 설정합니다.
2.2 출력할 오브젝트 만들기
① Hierarchy 창에서 GameObject | 3D Object | Cube메뉴를 선택하고 이름을 Cube로 설정합니다. Transform은 초기화합니다.
② Hierarchy 창에서 Cube 를 선택하고 Position(0.06, 0, -0.06), Scale(0.15, 0.15,0.15) 변경합니다.
③ Create | Material 메뉴를 선택하여 재질을 만들고, 이를 Cube 오브젝트로 드래그하여 설정합니다.
④ Hierarchy 창에서 Project 창의 Prefabs 폴더로 Cube 오브젝트를 드래그하여 프리팹으로 만듭니다.
⑤ Hierarchy 창에서 Cube 오브젝틀르 삭제합니다.
⑥ 1번부터 5번을 반복하여 Sphere 프리팹을 만듭니다.
⑦ 1번부터 5번을 반복하여 Capsule 프리팹을 만듭니다.
3. 다중 이미지 인식하기
①Hierarchy 창에 XR Origin 을 선택하고 Inspector창에서 Add Component 버튼을 클릭하여 MultiImageTracking.cs 스크립트를 추가합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class MultiImageTracking : MonoBehaviour
{
[SerializeField]
private GameObject[] placeablePrefabs;
private Dictionary<string, GameObject> spawnPrefab = new Dictionary<string, GameObject>();
private ARTrackedImageManager trackedImageManager;
private void Awake()
{
trackedImageManager = FindObjectOfType<ARTrackedImageManager>();
foreach (GameObject prefab in placeablePrefabs)
{
GameObject newPreFab = Instantiate(prefab, Vector3.zero, Quaternion.identity);
newPreFab.name = prefab.name;
spawnPrefab.Add(prefab.name, newPreFab);
}
}
private void OnEnable()
{
trackedImageManager.trackedImagesChanged += ImageChanged;
}
private void OnDisable()
{
trackedImageManager.trackedImagesChanged -= ImageChanged;
}
private void ImageChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
foreach (ARTrackedImage trackedImage in eventArgs.added)
{
UpdateImage(trackedImage);
}
foreach (ARTrackedImage trackedImage in eventArgs.updated)
{
UpdateImage(trackedImage);
}
foreach (ARTrackedImage trackedImage in eventArgs.removed)
{
spawnPrefab[trackedImage.name].SetActive(false);
}
}
private void UpdateImage(ARTrackedImage trackedImage)
{
if (trackedImage.trackingState == TrackingState.Tracking)
{
string name = trackedImage.referenceImage.name;
Vector3 position = trackedImage.transform.position;
GameObject prefab = spawnPrefab[name];
prefab.transform.position = position;
prefab.SetActive(true);
}
else
{
string name = trackedImage.referenceImage.name;
GameObject prefab = spawnPrefab[name];
prefab.SetActive(false);
}
}
}
② 인스펙터 창의 MultiImageTracking .cs 스크립트의 속성 값을 다음과 같이 설정합니다.
③ 인스펙터 창의 AR Tacked Image Manager 컴포넌트의 속성 값을 다음과 같이 설정합니다.
실행하기
'증강현실(Augmented Reality) > ARCore 사용하기' 카테고리의 다른 글
12. 얼굴 메이커 만들기 (0) | 2023.11.11 |
---|---|
11. 행성 카드 만들기 (0) | 2023.11.05 |
09. AR 갤러리 만들기 (0) | 2023.10.06 |
08. 다중 오브젝트 배치하기(Multiple Object Placement) (0) | 2023.10.03 |
07. 얼굴 필터 만들기(Face Filter) (0) | 2023.09.29 |