이전 시간에 Animal Asset을 추가했다 Animals_Free 폴더 안에 Prefas가 있고 그중 Penguin_001을 선택해보면
다음과 같이 보이고 편집할수 있다 일단은 안한다.
ObjectManage.cs 스크립트를 열고 다음 코드를 추가한다. 터치가 있다면 model을 인디케이터 위치에 생성한다.
public GameObject modeling;
void Update()
{
Touch touch = Input.GetTouch(0);
DetectGround();
if (touch.phase == TouchPhase.Began)
{
Instantiate(modeling, indicator.transform.position, indicator.transform.rotation);
}
}
저장후 유니티 에디터에서 public변수 modling에 펭귄 프리팹을 연결해준다.
빌드후 실행해보면 펭귄의 뒷모습이 보여서 돌려주자
프리팹의 RotationY를 돌리면 될것같은데 AR에서는 안된단다.
하이리키+를 누르고 Create>EmptyObject를 만들고 이름을 Penguin으로 하고 자식으로 Penguin_001을 끌어다 놔주고 Rotation과 Scale을 재설정해주자
설정이 끝났으면 Penguin을 끌어다 프리팹에 넣어주고 프리팹을 만든뒤 하이라키의 펭귄은 지워주자
AR Session Origin > Object Manager Modeling의 값을 방금 만든 프리팹을 끌어다 연결해준다.
빌드앤런 해보고 터치하면 펭귄이 앞을 바로 보고 있다 그런데 지금은 터치할때 마다 펭귄이 계속 생기므로 하나만 생기게 해보겠다. ObjectManager CS를 열고 코드를 추가한다 .Instatiate()는 객체참조를 리턴하므로 이걸 저장했다고 null이면 생성하고 아니면 위치를 현재 Indicator로 움직여 보겠다.
//생성된 모델
GameObject placedObject;
void Update()
{
Touch touch = Input.GetTouch(0);
DetectGround();
if (touch.phase == TouchPhase.Began)
{
//만약 생성된 오브젝트가 없다면 모델링 생성및 placedObject변수에 할당
if(placedObject == null)
{ // 인디케이터 위치에 모델링 생성
placedObject = Instantiate(modeling, indicator.transform.position, indicator.transform.rotation);
} else
{
placedObject.transform.SetPositionAndRotation(indicator.transform.position, indicator.transform.rotation);
}
}
}
빌드런 해보면 이제는 하나만 생긴다. 터치하면 계속 중앙으로 이동한다.
이제는 터치하고 드래그 하면 좌우로 회전하게 만들어 보겠다.
스크립터 폴더에 우클릭하고 스크립트를 하나 만들고 이름을 Controller로 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controller : MonoBehaviour
{
Vector2 touchStartPos; //터치 시작 시점
float rotationSpeed = 0.1f; // 회전속도
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.touchCount == 1)
{ //인풋의 첫번째 데이터를 가져옴
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{ //터치 시작점을 저장
touchStartPos = touch.position;
} else if (touch.phase == TouchPhase.Moved)
{
//현재 터치위치 - 시작 터치위치
Vector2 touchDelta = touch.position - touchStartPos;
float rotationY = touchDelta.x * rotationSpeed;
transform.Rotate(transform.up, rotationY, Space.World);
touchStartPos = touch.position;
}
}
}
}
이 스트립트는 펭귄을 돌리므로 펭귄 프리펜이 넣어준다 자의할점은 펭귄 프리펩의 자식에 넣어주어야 한다 안그러면 안움직인단다.
빌드런 하면 한번 클릭하면 움직이고 누른채로 좌우로 움직이면 펭귄이 좌우로 회전한다.
'AR > 24 KMOOC 비주얼심화과정' 카테고리의 다른 글
7/1 FaceTracking2 (1) | 2024.07.03 |
---|---|
4일차 FaceTracking (6.30 강의) (3) | 2024.06.30 |
2일차 화면 중앙에 인디케이터 위치하기 (0) | 2024.06.28 |
1일차 설치, 프로젝트만들기, AR인디케이터 (0) | 2024.06.27 |
AR Foundation (0) | 2024.06.27 |