2019.2.2f1 그나마 최신 버전의 유니티를 설치를 했습니다. 근데 최근엔 또 다른 새로운 버전이 나온듯해요.
예제를 돌려보려고 해도 버전이 안 맞으면 도루묵 인 셈이죠.
그리고 초기 세팅 때에 유니티 설치 시에 모듈을 선택하는 부분이 있는데요.
이 모듈 추가 부분에서
NDK iOs, android 등등 기본적인 Build Support들이 설치되어 있어야 합니다. 따라서 맥 용량도 많이 필요해요. 암튼 이런 세팅 부분 때문에도 꽤 시간을 많이 잡아먹었었던 기억이 있네요.
그래서 좋은 예제를 잘 찾아야 합니다.
그래서 유니티 책을 도서관에서 빌려 보기로 했어요.
유니티 책 대여 리스트
유니티에 대해서 c#이라 쉬울 것이라고만 생각을 했는데요.
이게 처음부터 이해하고 개발을 해야 하다 보니
SCENE에 대한 이해와
이 해당 C# 혹은 소스를 매칭 시키는 방식에 대해서 이해가 필요했습니다.
즉, 누군가의 설명 없이는 개발이 용이하지 않은 상황.
사실상 이 유니티 책들은 모두 훑어보았으나, 크게 도움은 되지 않은 듯해요.
그리고 각각 화면별로 역할과 소스의 연결.
이 걸 설명한 좋은 책들이 없었는데요.
대부분 어떤 식이냐면 3D 게임을 만드는데 집중을 하고
예제 돌려 쓰기 인지 거의 설명이 책들이 비슷하고
최근에 유니티에 대한 내용도 없고 설명도
자세하지 않았습니다.
유니티 개발 구조
유니티 실행 화면입니다.
보시면 아시다시피 도대체 뭐가 뭔지 어려운 구조로 되어있습니다.
큰 틀 : Scenes, Hierarchy, 화면, Inspector, 코드
보시다시피 유니티의 화면 구성은 유니티 책을 보면 어느 정도 설명이 되어있는데요
2D로 기본 디폴트로 개발할 수 있고 3D 디폴트로 개발이 가능합니다.
아래 Scencs라고 유니티 아이콘 모양으로 되어 있는 것들이 하나하나의 장면을 설계할 수 있는 요소라고 볼 수 있는데요.
안드로이드로 치면 Activity.java 파일처럼 하나하나의 화면을 설계하는 구조로 되어있는 것이죠.
위의 화면만 보면 장면만 해도 14개 화면으로 구성이 되어있습니다.
앱을 틀어보면 허접하고 뭐 없는 구조임에도 불구하고 이렇게 복잡한 화면 구성으로 되어있는데요.
그리고 하이 라키 부분은 이런 화면 안에서 여러 가지 오브젝트들을 생성하고 위치시킬 수 있습니다.
이미지나 카메라, 그리고 음악까지 다양한 오브젝트 단위를 만들어 둘 수가 있는데요.
이런 오브젝트를 하이 라키 부분에서 생성한 뒤에 Asset에 있는 이미지나 음원 등등과 연결하게 되어있습니다.
그리고 우측에 있는 inspector 가 중요한데요. 언뜻 보면 그냥 오브젝트에 대한 설명 정도로만 볼 수 있는 구조로 되어있는데 이 부분을 통해서 여러 가지 C# 소스를 드래그 함으로써 연결이 가능합니다.
기존에 C#과 이 유니티에서 사용한 C#의 느낌은 달랐는데요. 이 소스에서는 딱 여기 유니티에 맞는 라이브러리와 그리고 라이프 사이클로 되어있습니다.
이 유니티에서 사용하는 C#의 라이브 사이클은 기본적으로
Start(), Update() 함수를 기본으로 추가적으로 여러 이벤트를 비롯해서 다양한 것들을 활용할 수 있습니다.
화면 구성
처음 개발을 진행할 때는 ㄱ부터 ㅎ까지 다양한 오브젝트들을 클릭하고 싶었는데요.
처음엔 가로 3개 세로 5줄로 위아래 스크롤 뷰를 적용하려고 기획을 했는데 확실히 안드로이드 개발과 달리
이런 뷰 적용도 쉽지 않더라고요.
결국 좌우 스크롤로 14개 단어를 대체했는데요.
요렇게 좌우 스크롤 적용 화면입니다.
좌우 스크롤을 적용하기 위해 NGUI를 사용하기 시작합니다.
화면 설계와 반응형스러운 동적 화면 구성.
처음엔 그냥 화면만 대강 만들면 되겠지 싶었는데
버튼을 넣고 이미지를 넣고 오브젝트들을
배치하다 보니 이게 크기가 제 각각인 데다가
안드로이드와 아이폰일 때 크기가 정말하게 상이해서
이 심각한 문제를 처리하기 위해서
반응형스럽게 화면을 자르고 재단하고 크기를 보정해주는
절차를 통해 화면 비율로 동적으로
계산이 필요하단 걸 알았어요.
삽질이 시작됩니다. 좀 더 모듈화를 시켜볼 수도 있었지만
시간이 없는 관계로 삽질을 하기로 합니다
삽질의 현장....
이 삽질의 결과
안드로이드, 아이폰, 아이패드 화면 모두 어느 정도는 화면처리를 할 수 있게 되었는데요.
이 앱 내에서 여행 파트 부분의 모습을 보시면
소스의 적용 결과 화면의 깨짐 없이 다양한 형태로 화면상에 표현되는 것을 볼 수 있습니다. 일반적으로는
크기에 대해서 자동 변환이 없기 때문에 NGUI로는 소스 상의 너비를 계산해서 다양한 크기를 지원할 수 있는 거죠. 물론 최근에는 이 방식을 잘 사용하지는 않는다고 하네요. 그리고 제약사항도 많이 있긴 합니다. 만약 동적 화면 구성하는 게 가능하면 그 방식으로 전환할 생각도 있지만, 또 그런 게 나오려면 시간이 걸리겠죠..?
예전보다 안드로이드의 경우 절차가 까다로워졌는지 몇 번의 리젝 때문에 멘털이 조금 흔들렸었습니다.
안드로이드 Apk 추출
안드로이드의 경우 보통 APK 파일을 추출하고 사인한 뒤에 올리는 방식으로 론칭을 하는데요.
이번 프로젝트의 경우 유니티이기도 하고 asset 음원 파일 디자인 파일 스리디 파일등등
용량이 꽤나 많은 프로젝트였어요. 다른 안드로이드 프로젝트의 경우 50메가가 넘어가는 경우도 드문 경우라
따로 50메가가 넘을 때에 대해서 대비하진 않았었는데요.
100메가 이상에서는 번들이라는 파일을 뽑으면 되는 구조였어요.
평소 유니티에서 기기로 빌드 시에는 빌드엔 런을 선택하면 되지만,
실제로 안드로이드로 빌드를 할 때에는 최근 안드로이드 정책이 꼭 64 비트를 추가해야 하는 부분이 생겼는데요. 이 경우에 유니티로 번들을 만들어도 잘 적용되지 않는 부분이 있었습니다.
결국 프로젝트 export를 통해서 한 번은 안드로이드 스튜디오를 켜야 했는데요.
아이폰은 XCode 안드로이드는 Android Studio, 처음 개발하는 분들의 입장에서는 유니티만 하면 될 거로 생각하다가, 이것저것 세팅에 많은 시간을 보내겠다는 생각이 들었네요.
안드로이드 스튜디오
다행스러운 부분은
빌드 시에 오류가 없다는 부분이고, 가끔씩 라이브러리가 설치가 안되어있거나
해당 안드로이드 SDK 등등의 패스 문제로 잘 동작하지 않는 경우들이 있어서 신경을 써야 합니다.
이런저런 세팅 후에 ndk 항목에 보시면 x86 까지는 세팅이 되어있는데요.
x86_64의 경우 여기에서 추가적으로 넣어주어야 합니다. (그래들 파일)
그리고 빌드 배포할 때, Generate Signed Bundle / APK를 클릭하시고, 선택을 하게 되면 위에 번들과 APK 파일이 있는데요. 위 번들을 설정하시고 NEXT 버튼을 누르셔서 release를 누르시면 확장자 aab라고 되어있는 파일이 생겨있습니다. 이 파일을 구글 플레이에 올리면 됩니다.
결론적으로 처음에는 정보상 기재 시에 사실이 아닌 정보를 빼라는 내용이었고요. 뭐가 사실이 아닌지 난감했는데, 이런 부분도 고려해야 한다는 것, 그리고 3세 이상으로 가족정책 안에 포함되다 보니, 증강현실 앱을 실행할 때, 위험성을 경고하라는 것이었습니다. 문제는 이 경고 문구를 고치고도 몇 번이고 리젝을 당했었는데요.
다시 핑퐁 하고 나서야 겨우 통과가 되었네요. 이 승인됨이라는 단어가 너무나 반갑고 좋은!!!