오르막길

[Unity] [AR] Day 5~6 본문

혼자 개발하기/AR 다뤄보기

[Unity] [AR] Day 5~6

nanalyee 2021. 7. 25. 22:38
  • 글쓴이는 배워가는 학생이며 업무 내용을 스스로 관리하기 위해 관련 티스토리를 작성, 운영 중입니다.
  • 글 내용이 모두 정확하다고 보장할 수 없으며 글쓴이의 개인적인 생각이 담긴 글입니다.
  • 제작할 때 참고한 글은 링크를 남겼으며, 남기지 않은 내용은 주변 지인들에게 얻은 팁입니다.
  • 조언, 지적, 개선사항 등은 둥글게 부탁드립니다.

 

 

[ DAY 5~6 : 플랫폼/장애물 배치 ]

 

1. 가이드 UI

ar 평면 위에 가구를 배치할 때 어떤 크기/각도로 배치되는지 보기 위한 스크립트 PlaceController를 작성한다.

  • SetPositionAndRotation : 위치와 각도를 동시에 변경할 수 있는 함수
    - position과 rotation을 동시에 변경할 수 있어 이론적으로 2배정도 성능 향상에 도움 됨
    (transform 성능 향상법 참고 사이트 : https://unity-programmer.tistory.com/14)

apk 테스트

 

 

 

2.  플랫폼을 지면에 배치하기

ar 평면 위에 손가락 세 개를 터치하면 1번의 화살표 UI 위에 플랫폼이 랜덤 생성된다.
나는 버튼을 클릭하면 생성되도록 수정하였다.

apk 테스트

 

 

 

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;

Lean Touch 설정값 참고

 

 

 

4. 플랫폼 이동/회전

플랫폼 오브젝트에 콜라이더를 추가하고 rigidbody의 constraints에서 x,z축의 회전을 freeze한다.
회전할 때 y축으로만 회전되게 하는 것!

    void Start()
    {
        gameObject.AddComponent<LeanDragTranslate>();
        gameObject.AddComponent<LeanTwistRotateAxis>();
    }

각 플랫폼에 해당 코드 및 스크립트를 추가하여 빌드 테스트한다.

apk 테스트

생성, 이동, 회전 모두 잘 된다. 하지만 여러개의 가구들을 생성하면 한꺼번에 움직인다.

 

 

 

5. 선택된 플랫폼 UI

UI를 플랫폼 위에 보이도록 배치

  • 빌보드 : 카메라가 움직이거나 회전하더라도 카메라를 바라보고 있게 하는 기능
    (게임오브젝트).transform.LookAt(메인카메라.transform);

위와 같이 상위에 빈 오브젝트 (Selected Icon)를 생성하고 그 하위로 UI (Quad)를 배치하여
상위의 빈 오브젝트로 transform을 사용하는 것이 더 정확하다고 한다. (아래 코드 참고)

private void Update()
    {
        // UI는 항상 카메라를 바라보도록 함 (빌보드)
        selectedIcon.transform.LookAt(mainCamera.transform);
    }

apk 테스트 (까만건 지면인식이 겹쳐서)

 

 

 

6. 선택된 플랫폼만 컨트롤

    private Dictionary<int, GameObject> _instancedPrefab = new Dictionary<int, GameObject>();
            _instancedPrefab[obj.GetInstanceID()] = obj;

 

apk 테스트

 

  • 새로운 가구를 생성했을 때 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

AR Camera의 Light Estimation 수정

강좌에서 추가하라는 스크립트 찾지 못해서 github에서 비슷한 기능을 하는 스크립트를 추가하였다.
https://github.com/Unity-Technologies/arfoundation-samples/blob/main/Assets/Scripts/HDRLightEstimation.cs
https://github.com/Unity-Technologies/arfoundation-samples/blob/main/Assets/Scripts/BasicLightEstimation.cs

 

Diretional Light에 스크립트 추가

Camera Manager에는 AR Session Origin 하위의 AR Camera를 추가한다.

apk 테스트

 

 

 

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