미디어 콘텐츠 스터디
04. 오브젝트 확대/축소하기(Object Pinch to Scale/Drag) 본문
04. 오브젝트 확대/축소하기(Object Pinch to Scale/Drag)
danmujicat 2023. 8. 12. 19:12AR 개발을 위한 프로젝트를 준비하기 위해 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 을 추가합니다.
1.1 AR Default Point Cloud 프리팹 설정하기
① Hierarchy 창에서 XR Origin오브젝트를 선택하고 Inspector 창에 Add Component 버튼을 클릭하여 AR Point Cloud Manager 컴포넌트를 추가합니다.
② Hierarchy 창에서 GameObject | XR | AR Default Point Cloud을 선택하여 오브젝트를 추가합니다.
③ Hierarchy 창에서 Project 창의 Prefabs 폴더로 AR Default Point Cloud 오브젝트를 드래그하여 프리팹으로 만듭니다.
④ Hierarchy 창에서 AR Default Point Cloud 오브젝틀르 삭제합니다.
⑤ Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에서 AR Point Cloud Manager의 Point Cloud Prefab에 AR Default Point Cloud 프리팹을 설정합나다.
1.2 AR Default Plane 프리팹 설정하기
① Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에 Add Component 버튼을 클릭하여 AR Plane Manager 컴포넌트를 추가합니다.
② Hierarchy 창에서 GameObject | XR | AR Default Plane을 선택하여 오브젝트를 추가합니다.
③ Hierarchy 창에서 Project 창의 Prefabs 폴더로 AR Default Plan 오브젝트를 드래그하여 프리팹으로 만듭니다.
④ Hierarchy 창에서 AR Default Plane 오브젝틀르 삭제합니다.
⑤ Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에서 AR Plane Manager 의 Plane Prefab에 AR Default Plane 프리팹을 설정합나다.
2. AR 장면에 오브젝트 출력하기
2.1 오브젝트 만들기
① Hierarchy 창에서 GameObject | Create Empty메뉴를 선택하여 빈 오브젝트를 생성하고 이름을 AR Placed Cube로 설정합니다. Transform은 초기화합니다.
② Hierarchy 창에서 AR Placed Cube를 선택하고 하위에 3D Object|Cube를 추가합니다.
- Cube의Transform : Position(0, 0.025,0), Scale(0.05, 0.05,0.05)
③ Create | Material 메뉴를 선택하여 재질을 만들고, 이름을 PlacedCubeMaterial로 지정하고 이를 AR Placed Cube 하위의 Cube 오브젝트로 드래그하여 설정합니다.
④ Hierarchy 창에서 Project 창의 Prefabs 폴더로 AR Placed Cube 오브젝트를 드래그하여 프리팹으로 만듭니다.
⑤ Hierarchy 창에서 AR Placed Cube 오브젝틀르 삭제합니다.
2.2 오브젝트 출력하기
① Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에 Add Component 버튼을 클릭하여 AR Raycast Manager 컴포넌트를 추가합니다.

② Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에 Add Component 버튼을 클릭하여 새로운 PlaceOnPlane.cs 스크립트를 추가하고 다음코드를 작성합니다.
PlaceOnPlane.cs
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class PlaceOnPlane : MonoBehaviour
{
public GameObject m_PlacedPrefab;
static List<ARRaycastHit> s_Hits = new List<ARRaycastHit>();
ARRaycastManager m_RaycastManager;
GameObject spawnedObject;
bool object_spawned;
Vector2 first_tourch;
Vector2 second_tourch;
float distance_current;
float distance_previous;
bool first_pinch = true;
void Awake()
{
m_RaycastManager = GetComponent<ARRaycastManager>();
object_spawned = false;
}
void Update()
{
if (Input.touchCount > 0 && !object_spawned)
{
if (m_RaycastManager.Raycast(Input.GetTouch(0).position, s_Hits, TrackableType.PlaneWithinPolygon))
{
var hitPose = s_Hits[0].pose;
spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
object_spawned = true;
}
}
if (Input.touchCount > 1 && object_spawned)
{
first_tourch = Input.GetTouch(0).position;
second_tourch = Input.GetTouch(1).position;
distance_current = second_tourch.magnitude - first_tourch.magnitude;
if (first_pinch)
{
distance_previous = distance_current;
first_pinch = false;
}
if (distance_current != distance_previous)
{
Vector3 scale_vale = spawnedObject.transform.localScale * (distance_current / distance_previous);
spawnedObject.transform.localScale = scale_vale;
distance_previous = distance_current;
}
}
else first_pinch = true;
}
}
③ Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에 PlaceOnPlane 스크립트의 Place On Plane에 Project창에 Prefabs 폴더로 AR Placed Cube 프리팹을 드래그하여 설정합니다.

④ 실행하기
스마트폰에서 실행해 봅니다. 실행한후 지면을 클릭해 보고, 오브젝트를 드래그 합니다
3. 지면에 재질 입히기
① Project 창의 Prefabs 폴더로 AR Default Plan을 선택하고 Inspector 창에서 Materials의 Element의 재질 속성을 변경합니다.
② Hierarchy 창에서 XR Origin 오브젝트를 선택하고 Inspector 창에 PlaceOnPlane.cs 스크립트를 수정합니다.
...
public class PlaceOnPlane : MonoBehaviour
{
...
ARPlaneManager m_PlaneManager;
void Awake()
{
m_RaycastManager = GetComponent<ARRaycastManager>();
m_PlaneManager = GetComponent<ARPlaneManager>();
object_spawned = false;
}
void Update()
{
if (Input.touchCount > 0 && !object_spawned)
{
if (m_RaycastManager.Raycast(Input.GetTouch(0).position, s_Hits, TrackableType.PlaneWithinPolygon))
{
var hitPose = s_Hits[0].pose;
spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
object_spawned = true;
m_RaycastManager.enabled = false;
m_PlaneManager.enabled = false;
}
}
...
}
}
③ 실행하기
'증강현실(Augmented Reality) > ARCore 사용하기' 카테고리의 다른 글
06. 얼굴 추적하기(Face Tracking) (0) | 2023.09.28 |
---|---|
05. 이미지 추적하기(Image Tracking) (0) | 2023.09.12 |
03. 오브젝트 배치하기(Object Placement) (0) | 2023.06.27 |
02. 지면 감지하기(Plane Detection) (0) | 2023.06.27 |
01. ARCore 환경 설정하기 (0) | 2023.01.01 |