오르막길
[Unity] [AR] Day 5~6 본문
- 글쓴이는 배워가는 학생이며 업무 내용을 스스로 관리하기 위해 관련 티스토리를 작성, 운영 중입니다.
- 글 내용이 모두 정확하다고 보장할 수 없으며 글쓴이의 개인적인 생각이 담긴 글입니다.
- 제작할 때 참고한 글은 링크를 남겼으며, 남기지 않은 내용은 주변 지인들에게 얻은 팁입니다.
- 조언, 지적, 개선사항 등은 둥글게 부탁드립니다.
[ DAY 5~6 : 플랫폼/장애물 배치 ]
1. 가이드 UI
ar 평면 위에 가구를 배치할 때 어떤 크기/각도로 배치되는지 보기 위한 스크립트 PlaceController를 작성한다.
- SetPositionAndRotation : 위치와 각도를 동시에 변경할 수 있는 함수
- position과 rotation을 동시에 변경할 수 있어 이론적으로 2배정도 성능 향상에 도움 됨
(transform 성능 향상법 참고 사이트 : https://unity-programmer.tistory.com/14)
2. 플랫폼을 지면에 배치하기
ar 평면 위에 손가락 세 개를 터치하면 1번의 화살표 UI 위에 플랫폼이 랜덤 생성된다.
나는 버튼을 클릭하면 생성되도록 수정하였다.
3. Lean Touch
Unity Asset Store에서 제공되는 Lean Touch를 이용해 AR 상의 객체를 움직이고 회전할 수 있다.
( 에셋 스토어 : https://assetstore.unity.com/packages/tools/input-management/lean-touch-30111
참고 유니티 공식 사이트 : https://learn.unity.com/tutorial/manipulating-objects-in-ar-with-lean-touch# )
using Lean.Touch;
4. 플랫폼 이동/회전
플랫폼 오브젝트에 콜라이더를 추가하고 rigidbody의 constraints에서 x,z축의 회전을 freeze한다.
회전할 때 y축으로만 회전되게 하는 것!
void Start()
{
gameObject.AddComponent<LeanDragTranslate>();
gameObject.AddComponent<LeanTwistRotateAxis>();
}
각 플랫폼에 해당 코드 및 스크립트를 추가하여 빌드 테스트한다.
생성, 이동, 회전 모두 잘 된다. 하지만 여러개의 가구들을 생성하면 한꺼번에 움직인다.
5. 선택된 플랫폼 UI
- 빌보드 : 카메라가 움직이거나 회전하더라도 카메라를 바라보고 있게 하는 기능
(게임오브젝트).transform.LookAt(메인카메라.transform);
위와 같이 상위에 빈 오브젝트 (Selected Icon)를 생성하고 그 하위로 UI (Quad)를 배치하여
상위의 빈 오브젝트로 transform을 사용하는 것이 더 정확하다고 한다. (아래 코드 참고)
private void Update()
{
// UI는 항상 카메라를 바라보도록 함 (빌보드)
selectedIcon.transform.LookAt(mainCamera.transform);
}
6. 선택된 플랫폼만 컨트롤
- Dictionary : key와 value로 데이터 저장, 검색
- https://grayt.tistory.com/77
- https://math-development-geometry.tistory.com/19
private Dictionary<int, GameObject> _instancedPrefab = new Dictionary<int, GameObject>();
_instancedPrefab[obj.GetInstanceID()] = obj;
- foreach : 변수를 배열에 담아 배열에 담긴 변수들을 반복하는 반복문
- https://chameleonstudio.tistory.com/46 - get/set : 속성 읽을때/새로운 값 할당 시킬 때 사용하는 접근자 (속성 기능)
- https://arainablog.tistory.com/102 - 변수1 = 변수2 = 값; 으로 변수2, 변수1 순서대로 값 대입
- 새로운 가구를 생성했을 때 selection 갱신이 안됨
// 가구 생성
if (TouchHelper.platformButton)
{
var index = Random.Range(0, prefab.Length);
var obj = Instantiate(prefab[index], pose.position, pose.rotation, transform);
obj.SetActive(true);
TouchHelper.platformButton = false;
_instancedPrefab[obj.GetInstanceID()] = obj;
// 새로 생성하더라도 하나의 오브젝트만 선택 ui 보이도록 갱신
RefreshSelection(obj);
}
7. Light Estimation
강좌에서 추가하라는 스크립트 찾지 못해서 github에서 비슷한 기능을 하는 스크립트를 추가하였다.
https://github.com/Unity-Technologies/arfoundation-samples/blob/main/Assets/Scripts/HDRLightEstimation.cshttps://github.com/Unity-Technologies/arfoundation-samples/blob/main/Assets/Scripts/BasicLightEstimation.cs
Camera Manager에는 AR Session Origin 하위의 AR Camera를 추가한다.
8. 추가해야 할 부분
[ ball (비눗방울 등 폭발물로 쓰일 오브젝트) ]
- 충돌 파티클
- 던지는 공의 모델링 파일
[ box (주인공 캐릭터) ]
- 모델링 파일 연동
- 대롱대롱 애니메이션 연동
- 내려놓은 박스도 다시 드는 건 가능하나 다시 내려놓을 수도 있도록
[ funiture (플랫폼) ]
- 플랫폼 생성될 때 파티클
- 플랫폼과 폭탄 충돌 시 destroy
플랫폼 밖을 터치하면 선택 해제(다른 걸 선택해도 선택이 남아있기 때문에 다른 상호작용을 못함)- 플랫폼 편집 버튼을 추가해 편집 상태일 때만 선택 및 수정 가능하도록
'혼자 개발하기 > AR 다뤄보기' 카테고리의 다른 글
[Unity] [AR] Day 8 (0) | 2021.07.27 |
---|---|
[Unity] [AR] Day 7 (0) | 2021.07.25 |
[Unity] [AR] Day 4 (0) | 2021.07.22 |
[Unity] [AR] Day 3 (0) | 2021.07.21 |
[Unity] [AR] Day 1~2 (0) | 2021.07.21 |