Eli의 여백

바쁜 나날들 사이에서 생각났던 이런저런 것들을 적어봅니다.

IT/새로운 시도

오큘러스 퀘스트 2 첫 VR 앱 제작 및 빌드 문제 해결

Eli♪ 2021. 10. 17. 18:51

튜토리얼 따라서 빌드한 앱

제작동기

약 한 달 전쯤, 오큘러스 퀘스트 2를 구매한 후 신세계를 경험하면서, 이것저것 많은 것들을 해 봤다 (기기 관련 리뷰는 조만간 별도의 글로 정리해볼 예정이다). 그런데 대부분의 컨텐츠들이 남들이 만들어놓은 것을 보거나 쓰기만 하는 일방적인 앱들 뿐이라서 뭔가 아쉬웠다.

 

---- 2021-10-31 추가 ----

후속 글이 완성되었다. 앱개발이 아니라 사용 리뷰가 궁금한 사람은 참고하기 바란다.

https://projecteli.tistory.com/195

 

메타버스 기기로서의 오큘러스 퀘스트 2 느낀점 및 활용 팁 공유

이전 글을 쓴 이후로 바빠서 한동안 정리를 못했는데, 이제서야 키보드를 잡을 시간이 나서 글을 적는다. 약 한 달 전, 이런저런 이유로 페이스북의 VR 기기인 오큘러스 퀘스트 2를 구매했다. 오

projecteli.tistory.com

------------------------ 이하 원문 계속

 

내 생각에는 10년 전에 스마트폰에서 한 번 혁명이 왔다면 이번에는 VR에서 혁명이 올 것으로 보고 있는데, 앞으로 요구되는 프로그래밍 능력도 평면 스마트폰이 아니라 360도 VR 앱을 만드는 데서 올 것이라는 생각이 들었다. 그래서 기회는 앞으로 잡으라는 이수영 회장의 말을 새기면서 VR 앱 빌드를 시도해보기로 했다.

 

제작 목표

애초에 내가 3D모델링이나 디자인에 조예가 깊은 것도 아니거니와, 뭐 거창한 것을 만들 시간도 없기 때문에 VR앱의 헬로월드 수준만 구현할 수 있으면 괜찮다고 생각했다. 가장 기본적인 요소인 world, object, interaction 3가지를 구현할 수 있다면 VR앱의 기초는 갖춰지는게 아닐까?

 

다행히도 내가 시도한 오큘러스 퀘스트 2에서는 다음 링크와 같이 앱 빌드에 대한 튜토리얼을 제시하고 있다. 이후의 설명들은 기본적으로 아래 링크의 방법을 따라한 것이다.

https://developer.oculus.com/documentation/unity/unity-tutorial/

 

Build Your First VR App | Oculus Developers

 

developer.oculus.com

 

개발환경 (2021-10-17 기준)

본격적인 제작과정 설명에 앞서, 내가 최종적으로 빌드에 성공한 환경에 대해 적어보자면 다음과 같다.

 

개발컴

OS: Windows 11 education insider preview build 22478.rs_prerelease.211008.1414

유니티 허브 버전: 3.0.0-beta.5

유니티 에디터 버전: 2020.3.20f1 (LTS)

 

VR기기

기기 종류: 오큘러스 퀘스트 2 128GB

헤드셋 버전: 1913010019990000

 

 

 

개발환경 세팅

1. 오큘러스 개발자 모드 활성화

오큘러스 계정에서 organization 생성

오큘러스 앱을 개발하기 위해서는 기기의 개발자 모드를 활성화해줘야 한다. 튜토리얼에서는 그냥 바로 되는것처럼 써있었는데, 알고보니까 오큘러스 디벨로퍼 계정에서 organization을 생성해줘야 반영되는거였다. 대충 다른사람이 올린 동영상을 참고해서 활성화를 시켜줬다.

 

 

모바일 앱에서 개발자 모드 활성화

위와 같이 오큘러스 계정에서 organization을 만든 다음 오큘러스 기기를 재부팅한 후에 모바일의 오큘러스 앱에 연결해보면 아래 사진과 같이 기존에는 안보이던 개발자 모드라는 옵션이 생긴다. 눌러서 켜주면 된다.

오큘러스 기기 화면에서도 설정에 새로 개발자 옵션이 생긴 것을 알 수 있다.

 

2. ADB 드라이버 다운로드 및 설치

오큘러스 퀘스트 2는 기본적으로 안드로이드 기기이기 때문에 USB연결시 디버깅을 위해서는 ADB 드라이버가 필요한 것 같다. 다음의 링크에서 ADB드라이버를 다운받으면 된다.

 

https://developer.oculus.com/downloads/package/oculus-adb-drivers/

 

Oculus Developer Center | Downloads

 

developer.oculus.com

 

압축을 풀면 잡다한 파일들이 나올텐데 android_winusb.inf 파일을 우클릭 후 설치 눌러주면 된다. windows 11에서는 옵션 더보기 버튼을 눌러야 제대로 나온다. 컴맹들을 위해 많이 쓰는것만 남기고 나머지는 숨겨놓은건 알겠는데 뭐 할때마다 옵션 더보기 누르는게 개발자 입장에서는 매우 불편하다.

 

 

공식 문서에서는 이 다음에 USB 연결하라고 하길래 내가 쓰던 3m짜리 usb-c to a 선으로 usb 허브에 연결하고 해봤는데, 디버깅창은 안뜨고 그냥 컴 연결할때 나오는 일반적인 MTP창만 떴다. 인터넷을 좀 검색해 보니 선 종류도 타는거같아서 그냥 오큘러스 기본제공으로 주는 짤막한 선을 써보기로 했다. 운이 좋게도 내 컴퓨터 메인보드에 USB-c 연결포트가 있어서 c to c 연결이 가능했다. 근데도 아무 창도 안떴다. 그 외에도 이것저것 많은 시도를 했는데 잘 안돼서 일단 넘어가기로 했다.

 

나중에 성공하고 나니 다른 글들에 나와있는것처럼 adb kill같은거 그딴거 다 필요없고 그냥 빌드할때 잘 연결만 해주면 되는거였다.

 

3. 유니티 설치

대충 개발자모드 활성화를 시켰다면 이제 IDE인 유니티를 깔 차례다. 그런데 내 경험상 공식 문서에 나온대로 설치하면 나중에 이런저런 문제가 많이 발생했어서 다음의 방법을 추천한다.

 

이전에 유니티로 삽질을 많이 해봐서 나는 유니티 계정이 이미 있는 상태였다. 여튼 유니티 허브를 깔고 관리자 권한으로 실행한 후 에디터 설치시 LTS (장기지원) 버전으로 깔아준다. 이 때 android build support 등등을 미리 깔지 말고 유니티만 깐다. 그래야 나중에 문제가 안생긴다.

 

다 깔았으면 재부팅 후 다시 유니티 허브를 관리자권한으로 켜고 안드로이드 빌드 서포트랑 sdk ndk openjdk를 깔아준다. 진짜 여기까지 오는데 이틀동안 수없이 많이 다시깔고를 반복했고 안드로이드랑 자바 버전 맞춘다고 인터넷에서 일일이 찾아서 다운받고를 몇 수십번은 한거같다. 그런데 최종적으로는 별도 설치 없이 유니티 허브에서 자체지원하는 설치로 빌드에 성공했다. 2021-10-17 기준으로 2019버전 에디터는 나중에 빌드할 때 계속 문제가 발생했고, 2021 베타는 안드로이드 모듈이 없다고 나오고 2020버전에서만 유일하게 최종성공했다.

 

여튼 다 깔았으면 아래처럼 프로젝트를 생성할 수 있다. 

 

유니티에서 앱 제작

이제 공식 문서의 빌드 앱 부분을 따라가면 된다.

https://developer.oculus.com/documentation/unity/unity-tutorial/#build-app

 

Build Your First VR App | Oculus Developers

 

developer.oculus.com

 

간만에 유니티를 켜보니 감회가 새로웠다. 대충 튜토리얼의 최종형태는 당구판같이 생긴거 위에 공이 놓여있고 방향키로 조작하다가 벽에 부딪치면 벽 색깔 바뀌면서 공중에 있는 텍스트가 바뀌는 앱이다.

 

다른건 다 그대로 따라하면 되는데, 텍스트 부분이 자꾸 안나와서 보니까 텍스트가 가상의 캔버스 안에 들어가는 구조고 멍청한 유니티가 캔버스 크기를 무지막지하게 크게 잡아놓은데다 반응형이 아니라서 화면에 안보이는거였다. 참고로 캔버스 밖에 텍스트를 놓아도 아무것도 안나오고 텍스트가 보이려면 캔버스 안에 꼭 들어가야된다.

 

 

대충 눈치껏 렌더모드에서 카메라를 따라가는 상대위치같은 screen space - camera로 세팅을 해주고 캔버스 크기를 많이 줄여서 시야에 들어오게 만든 다음에 공중에 떠있는 글씨가 잘 보이도록 캔버스 내의 텍스트 상대위치를 조정해 줬다. VR기기를 한번이라도 써봤다면 저 캔버스가 뭐에 해당하는지 금방 이해가 될 것이다.

 

그 외에는 유니티를 써본 사람이라면 별 무리 없이 따라갈 수 있는 내용이었다.

 

만든 앱 빌드

오큘러스 VR을 위한 빌드 세팅 

유니티 자체는 임의의 플랫폼을 위한거라서 VR기기에 최적화되어있지 않다. 따라서 다음의 링크를 따라 오큘러스에서 정상적으로 빌드하기 위한 이런저런 설정들을 만져줘야 한다.

https://developer.oculus.com/documentation/unity/unity-conf-settings/#build-settings

 

Configure Unity Settings | Oculus Developers

 

developer.oculus.com

 

사실 첫시도에 여기까지는 자잘한 문제 몇가지 빼고는 순조롭게 왔는데 빌드에서 자꾸 막혀서 이틀동안 거의 4~5시간 가까이 삽질을 한 것 같다.

 

처음에는 안드로이드 모듈이 없다느니 해가지고 재설치를 여러 번 했고, 에디터 버전 바꿔서 했는데 sdk를 못읽어서 관리자권한 등등의 여러 해결책을 시도했다. 근데 그래도 안됐다. 그래서 인터넷에서 openjdk랑 android sdk 다운받아서 따로 넣어보기도 하고 android studio에서 sdk폴더 빼다가 넣어보기도 하고 별짓을 다했는데 자꾸 에러가 발생했다.

 

그래서 일단은 윈도우로 빌드했는데 전체화면으로 잘 나오고 방향키로 조작할때 아주 잘 되는것을 확인할 수 있었다.

 

윈도는 이렇게 잘되는데 오큘에서는 대체 왜 안되는거임??? 하면서 몇시간 삽질을 더 한 끝에 최종적으로는 에디터 다 지운 다음에 관리자권한으로 허브를 실행시킨 상태에서 추가모듈 안깔고 유니티 에디터만 먼저 깐 다음 재부팅 후 안드로이드 모듈들을 별도로 깔았더니 드디어 성공했다.

 

경험상 뭐 하나라도 노란색이나 빨간색 뜨면 빌드가 안됐었다. 유니티 공식문서들에서는 자랑스럽게 manifest랑 build gradle 직접 안만들어도 되고 지들이 알아서 해준다더니 개뿔 에러만 잔뜩 나서 고생을 매우 많이 했다.

 

최종 성공한 상태에서의 각종 세팅 및 preference창, 콘솔 메시지는 다음과 같다. 

 

메뉴바 에딧-프로젝트 세팅-플레이어

 

메뉴바 에딧-프로젝트 세팅-XR 플러그인

 

메뉴바 에딧-프로젝트 세팅-XR 플러그인-오큘러스

 

메뉴바 에딧-preference

 

메뉴바 파일-빌드세팅

위의 세팅창들에서 하나라도 어긋나면 이 창에서 run device로 오큘러스 인식이 안된다.

오큘러스 인식에 성공했다면 기기를 썼을 때 디버깅 허용 창을 드디어 볼 수 있다.

 

앱 빌드 및 실행

여기까지 에러 없이 왔다면 눈앞이다. 빌드 버튼을 누르면 file dialog가 하나 뜨는데 적당히 윈도우 아무곳에나 apk를 저장하는 창이다. 대충 이름을 지어서 확인 누르면 apk파일이 하나 생긴다.

 

성공시 콘솔 메시지는 다음과 같이 나왔다.

 

이제 build and run을 누르면 드디어 VR기기에서 정상적으로 실행이 된다. 아래는 실행 동영상이다. 해보니까 왼손의 조이스틱 방향키로만 조작이 가능했다.

https://youtu.be/QzrPDw0sDXY

하... 이 간단한거 만드는데 너무 오래 걸린 것 같다.

 

결론

오큘러스 공식문서에서 제시한 방법을 따라가면서 VR의 헬로월드격인 간단한 앱을 만들고 실행해볼 수 있었다.

 

그런데 설명을 그대로 따라가도 안되는 경우도 많았고 적절히 임기응변으로 때워야 넘어가지는 부분이 많았다. 안드로이드랑 VR 개발 라이브러리는 매우 빨리 발전하는데 유니티라는 IDE가 그 변화를 못따라가는 느낌이 많이 들었고, 그 유니티의 호환성조차 못따라가는 oculus라서 아직은 좀 문제가 많은 것 같다 (스마트폰은 올 11월부터 API level 30이상 강제인데 이놈은 아직도 API 26이다). 여러모로 진입장벽이 좀 높은듯..

 

후기

VR기기에 앱을 돌리기 위한 개발환경 세팅부터 실행 및 조작까지 전체 프로세스를 한번 진행해보고 나니 대충 어떤식으로 개발을 하게 되는지 감을 잡을 수 있었다.

 

다만 예전에도 느꼈던거지만 유니티는 겉보기에는 코딩같은거 하나도 안해도 될것처럼 자기네가 다 자동화해놨고 클릭 몇번이면 되게 해놨다고 주장하는 느낌인데, 막상 해보면 그런 부분들때문에 숨겨진 세팅값들이 잘못되어있어서 명시적으로 어떻게 바꿀수도 없고 시행착오를 무지하게 거치면서 해결해야 되는 느낌이다. 디자이너 입장에서도 나중에 interaction callback이 어떻게 들어갈지를 생각해서 그려줘야되는 부분이고 프로그래머 입장에서도 그냥 코드를 보여주면 되는데 죄다 GUI로 만들어놔서 세부컨트롤할때 쓸데없는 클릭질을 많이 해야해서 양쪽 모두에 진입장벽을 유발하는 것 같다. 보기에 아름답다고 좋은 게 아닌데... 개인적으로는 현재의 스마트폰 앱 개발처럼 유니티 연동이 자연스러워지기까지는 아직 갈 길이 멀었다는 생각이 든다.

 

단순히 컨텐츠 소비자의 입장이 아니라 개발자의 입장에서 메타버스 시대로 가기 위한 VR 개발환경이 어떤지 체험해볼 수 있었다는 점에서 이 시도의 의의를 찾을 수 있을 것 같다. 아무도 안가본 길을 개척하면서 가는 것은 언제나처럼 가시밭길이다. 끝.

 

--- 2021-10-31 추가---

후속 글:

https://projecteli.tistory.com/195

 

메타버스 기기로서의 오큘러스 퀘스트 2 느낀점 및 활용 팁 공유

이전 글을 쓴 이후로 바빠서 한동안 정리를 못했는데, 이제서야 키보드를 잡을 시간이 나서 글을 적는다. 약 한 달 전, 이런저런 이유로 페이스북의 VR 기기인 오큘러스 퀘스트 2를 구매했다. 오

projecteli.tistory.com