본문 바로가기

카테고리 없음

[1인개발] 다이어리

Prologue

약 10개월간 1인 게임개발자라는 타이틀을 가져온 뉴비(심지어 대표작도 없고, 수익도 눈꼽만한)의 글을 누구도 관심가지지 않겠지만,

더 늦기전에 그동안 느꼈던 점을 정리할 필요가 있다고 생각하여 작성해 봅니다.

이 글은 확율적, 사실적 근거와는 거리가 멀고 단지 수많은 개발자들 중 1인의 매우 개인적인 경험을 기반된 것임을 참고해 주시기 바랍니다.

그리고 이 글을 쓰게해준(어쩌면 죽어가는 불씨를 살려준) 정대표님께 무한한 땡큐를 드립니다.

 

 

게임 프로젝트를 완성하기 위해서 총 5개의 Step으로 나누어서 진행했고,

물론 처음엔 알지 못했지만, 돌이켜 보니 그래 왔던거 같습니다.

 

(1) 게임기획 - (2) UX - (3) 개발 - (4) 광고 - (5) Publishing - (6) 업데이트

 

 

(1) 게임기획

실제 주변 친구들에 비해 게임을 좋아하지 않는 축에 속하는 편인 나에게,

어떤 게임이 대중에게 관심받고 사랑받는지 알기엔 너무 어려운 과제 였습니다.

 

그래서 처음에 생각한 방향은 현재 잘나가고 있는 게임에 내 아이디어를 녹여넣자였습니다.

 

누구든 잘나가는 게임이 무엇인지 찾아보면 쉽게 그 이름을 발견하게 될것입니다.

"Voodoo" 와 "Ketchapp.

출시와 동시에 천만다운은 기본이고, 조금만 잘나가면 우습게 일억 다운로드를 넘겨버리고...

이들의 게임중 몇개만 해보더라도, 심지어 해보지 않고 스크린샷만 보더라도 공통적으로 느껴지는게 있었습니다.

 

바로 "쉬움과 짧음" 입니다.

특별한 조작법도 필요없고, 그렇기 때문에 게임을 하는 방법을 배울 필요도 없었습니다.

또한 한번의 플레이가 장시간을 요구하지 않고 짧게 짧게 끊어지는 구성이, 남는시간에 한판 하기 좋은 게임으로 적합하였습니다.

 

반대로 개발자 입장에서 게임을 바라봤을때도 느껴지는것 역시 "개발하기 쉬움"입니다.

복잡한 3D 그래픽을 크게 요구하지 않고, 대부분의 요소가 네모, 세모, 동그라미, 선으로 구성되어 있었습니다.

 

그래서 전 제가 만들 게임은 "쉽고 복잡하지 않아야 한다"를 첫번째 가치로 잡았습니다.

 

하지만 무조건 쉽다고 재미있고, 인기가 많은건 아닙니다.

과연 무엇이 재미를 주는 요소인지에 대한 고민을 시작하였습니다.

 

게임을 하는 사용자들의 심리, 사회적 트렌드 등등이 분석이 되어야 하겠지만..

그것을 분석한들 그게 정답이 아닐수도 있다는 생각도 해보았습니다.

이렇게 머리아프게 고민할 바에 지극히 주관적으로 접근해보았습니다.

나는 어디에서 재미를 느끼냐. 일상생활 중 언제 웃고 희열을 느끼냐.

 

그래서 나온 두번째 가치은, "내가 경험해본 곳을 다시한번 떠올릴수 있게 하자" 였습니다.

난 비록 한번 스쳤던 장소지만, 어떠한 누군가는 추억이 깃든 곳일것이며, 또는 누군가에게는 그제 집앞에 있는 장소일것입니다.

이런 것들이 게임속에서 재현이 된다면, 그 장소에 있었던 좋은 기억들을 회상시켜 줄수 있을꺼라 생각했습니다.

이를 바탕으로 제작된 게임이 바로 "월드타워메이커"입니다.

 

마지막으로 세번째는 게임을 무척이나 좋아하는 친구(별명이 김밥)에게서 영감을 얻었습니다.

주로 대작을 위주로 플레이하는 그에게 그걸 왜하냐라는 질문을 던지면서, 제 추측을 슬며서 녹여보았습니다.

만랩 찍어서 남들한테 자랑하려는 거지?

하지만 그의 대답은 정 반대였습니다.

게임에서의 적은 제작자가 만든 보스나 다른 유저가 아니라, 자기 자신과의 싸움이라고...

경험치를 쌓고 레벨을 올리는건 남들보다 빠르게 도달하고자 하는 경쟁심도 있지만,

내 자신이 이룩한 기록을 갱신하는게 더 큰 목적이라고 하였습니다.

 

여기서 세번째 가치를 정리하였습니다.

"이전의 나와 경쟁시키자"

 

 

(2) UX

많은 회사들의 UX업무 형태를 경험해 보진 못했지만,

제가 몸담은 회사의 경우 UI디자이너와 GUI디자이너를 구분짓고 UI가이드를 바탕으로 GUI가이드를 발행하였습니다.

 

하지만 1인 개발자에게는 자아분열을 하지 않는한 그럴수 없고, 그렇게 할 필요도 없었습니다.

4년 반동안 UI디자이너로서 일을 했지만 GUI에 대해선 전문성이 떨어지고 자신없었던게 저의 현실이였습니다.

 

하지만 생각을 고쳐먹었습니다.

"어차피 처음부터 끝까지 다 내맘데로 할껀데 그게 대수겠어."

개발도 어차피 내가 하지만 개발자인 나에게 최대한 잘 설명할수 있는 UI/GUI 통합 UX가이드를 발행하기로 하였습니다.

(하기로 하고, 제대로 몇개 만들진 않았네요.^^)

 

세상의 모든 개발자가 알것입니다.

UX 가이드는 그건 어디까지나 무엇을 바꿔야 하는지에 대한 기초 자료일 뿐이란걸.

그래도 만들었습니다.

이조차도 없으면 개발하다 지쳐서 쓰러진 나에게 남는게 없을꺼 같아서요.

 

GUI의 90프로는 License Free 이미지를 바탕으로 약간의 포토샵으로 만들었습니다.

혼자 몇가지 시안을 만들어서, 혼자 고민하고, 혼자 결정하고...

 

주로 사용했던 사이트 들입니다.

- 배경 https://pixabay.com/ko/

- 사물 https://www.kisspng.com/

- 아이콘 https://www.flaticon.com/

- Effect https://www.brusheezy.com/

- Sound https://gamesounds.xyz/

- 색상매치 https://colorhunt.co/

 

 

(3-1) 개발

최초 1인 개발을 하기로 했던겄도, Unity3D 때문이였습니다.

하나의 소스코드로 안드로이드, iOS빌드가 가능하다했고, 또한 C#은 예전에 해봤기 때문에 어렵지 않을꺼라 생각했습니다.

무엇보다 Unity는 잘 차려진 AssetStore가 있기 때문에 약간의 현질을 하게되면

백지에서가 아닌 기반공사가 다져진 곳에서 부터 시작할 수 있다는 정대표님의 조언이 큰 영향을 미쳤습니다.

 

그래서 처음에 거의 완성된 프로젝트를 사서 레이아웃, 색상, 콘텐츠만 바꿔보자로 시작했습니다.

말이야 쉬웠습니다. 정말 쉬울 줄 알았습니다...

 

C#베이스 윈도우 폼을 만들었던 경험을 되살려서 접근하였습니다.

레이아웃을 GUI에디터로 만들면 코드로 변경해줬던 윈폼이였으니, Unity도 그런코드가 있을것이다.

버튼하나가 XY좌표로 명시된 곳이 있을것이라 예상했는데 찾을 수 없었습니다.

찾고 또 찾아보았으나 찾을 수 없었습니다.

(지금이여서 말할 수 있는데 그 버튼은 Prefab이였고, Grid Layout에 instantiate되어서 박히는 식으로 되어 있었습니다.^^)

 

여기서 첫번째 위기가 왔습니다.

단순히 버튼 위치 하나 못찾은거 때문에...

 

그렇다면 과감히 위치는 포기하고 배경색을 바꿔보기로 하였습니다.

이건 어차피 UI요소들 다 뒤져보면 초록색으로 선택된곳이 있겠구나 라고 생각했습니다.

하지만 이또한 찾을수가 없습니다. (정답은 카메라 배경색이였습니다.^^)

 

첫날부터 큰 위기를 겪고 여기서 그만두던지, 아님 뭘 더 해봐야되는지, 무엇이 문제였는지 골똘히 생각해보았습니다.

문제는 다름아닌 바로 제 마음가짐이였습니다.

기초중에 기초도 모르면서 뭐 별거 있겠어하는 자만심으로 가득찬 제 마음가짐이 문제였던 것이였습니다.

 

그래서 코드를 뒤져 볼게 아니라 매뉴얼을 부터 봐야겠다라는 생각했습니다.

정확하게 뭘 봤는진 기억이 안나지만, 아주 기본적인거 부터 찾아보았습니다.

https://docs.unity3d.com/kr/2018.1/Manual/UISystem.html

Scene, Prefab, Canvas, Camera, Rect Transform, Component, MonoBehaviour 등등...

 

3번째 프로젝트를 할때쯔음 부터 아주 조금씩 대략적인 예상되는 코드가 보였습니다.

이 UI요소는 어디에서 컨트롤 하겠구나, 어느 소스르 보면 되겠구나 등등.

그때도, 지금도 여전히 모르는게 대부분입니다. 하지만 무한 삽질정신으로 버티고 있습니다. ^^

 

정리를 해보자면,

기본적인 매뉴얼을 병행하면서 남이 작성한 코드를 봐야된다. (어쩌면 너무 당연한 얘기네요.)

 

 

(3-2) 개발

어찌 개발은 했다 칩시다.

(너무 휙 지나간 느낌은 있지만)

 

이제 두번째 위기가 찾아옵니다.

바로 iOS빌드

 

안드로이드의 경우 유니티에서 바로 APK를 뽑아주지만,

iOS의 경우 Xcode를 경유해야 합니다.

Xcode설치부터 셋팅까지 친절한 블로그님들의 글을 보면서 따라하지만 무수히 많은 오류를 겪게 됩니다.

https://ajh322.tistory.com/139

워낙 같은 오류를 겪는 사람들이 많으니 대부분은 구글링에 에러메세지를 넣으면 해결방법을 찾을수 있을것입니다.

 

그리고 iOS의 경우는 개발자 등록(유료 129,000/년)을 해야 빌드 / 배포가 가능합니다.

자세히 설명된 블로그가 워낙 많으니 아무거나 참고해서 따라하기만 하면 됩니다.

https://youngchangoon.tistory.com/22

 

Unity에서 iOS 빌드하면 Xcode 소스가 나오고 Xcode에서 다시 빌드를 해야됩니다.

이 과정에서 무수히 많은 에러를 만났습니다.

내 코드에서 발생되는 에러가 아니라 빌드 옵션에 따른 에러가 대부분이기 때문에 이역시 구글링으로 해결해야됩니다.

 

대부분의 Xcode 셋팅들은 Unity에서 컨트롤 할수 있습니다.

즉, Xcode에서 건들게 없다는 뜻이죠. Unity산출물로 Xcode에선 그저 빌드만 하면됩니다.

Xcode에서 에러가 나면 Xcode에서 변경을 하기보다 Unity에서 변경후 처음부터 다시 빌드하기를 귄장합니다.

그래야 한벌의 소스를 유지하는데 의미가 있겠죠?

 

 

(3-3) 개발

유저들을 서로 경쟁시키고 자신과의 경쟁을 펼치기 위해 Leaderboard는 필수입니다.

친절히도 Android와 iOS는 각각 Native Leadboard를 가지고 있습니다.

 

https://minhyeokism.tistory.com/70

Plugin 설치해서 가이드데로 call하면 잘 뜰줄 알았습니다.

무수히 많은 에러들. 역시 쉬운건 없습니다.

https://m.blog.naver.com/PostView.nhn?blogId=lyw94k&logNo=221291506369&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

Native Leaderboard를 유저가 사용하기 위해선

Google Play Game, iOS Game Center 에 가입이 되어 있어야 합니다.

이러한 것들을 선호하지 않는 유저가 있을수도 있으니, 아래 나올 Firebase Database로 리더보드를 구성합니다.

 

또한 Leaderboard를 생성하기 위해선 App 등록이 선행되어야 합니다.

이게 뭔말이냐면 Game Service 들이 별도의 보드 형태로 존재하는게 아니라, 한 App에 종속되어 있습니다.

즉, 구글이나 애플에게 내가 이런 앱을 등록할꺼야, 비록 아직 개발은 덜되서 apk는 없는데, 리더보드 먼저 쓸수있겠니? 라는 절차를 거쳐야 합니다.

 

 

(4) 광고

첫 프로젝트의 Android / iOS 빌드를 성공했을 때, 이제 거의 다 왔구나, 광고달고 출시하면 끝이구나 라고 생각했습니다.

Unity자체적으로 광고providing을 제공 하지만, Google이라는 네임드 신뢰도 때문에 Admob을 선택했습니다.

 

1. Admob가입 

2. Admob내에서 App, 광고 단위 생성

3. Unity Plugin설치 https://github.com/googleads/googleads-mobile-unity/releases

4. 광고 나오길 원하는 부분에 코딩 https://developers.google.com/admob/unity/start?hl=ko

 

베리씸플합니다.

어느 블로그를 보면서 따라했습니다. 너무 간단했습니다.

 

하지만.. 하지만.. 세번째 위기가 왔습니다. 이또한 무수히 많은 빌드에러가 발생합니다.

에러메세지들을 보았을때 위에 Google Leaderboad때 설치한 플러그인들과 충돌이 나는거 같습니다.

https://jinsdevlog.tistory.com/8

엄청난 구글링을 통해 에러를 수정해갑니다.

이역시 내가 작성한 코드가 문제가 아니라, 유니티 셋팅 / 구글 플러그인 등에서 발생하기 때문에 해결방법을 더 찾기가 어렵습니다.

 

최근에 나름 노하우가 생긴건...

가끔 stackoverflow등에 해결책으로 이런 코멘트를 보게 됩니다.

Remove plugin and re-import, change older version...

어쩌면 빌드에러를 피해갈수 있는 최선의 방법은 이거일수도 있습니다.

 

 

그래서 어떻게 빌드를 했다 칩시다.
이제 광고가 짠 하고 나올것만 같은 느낌으로 APK를 설치하고 실행해봅니다.
아무 반응이 없습니다. 배너도 안나옵니다. 그냥 혼자서 "뭐지 뭐지"란 말밖에 안나옵니다.
로그를 봤더니 "No Ad to show" 하 어쩌란말인가............

이렇게 저렇게 소스를 고쳐보았지만 똑같습니다.
유니티 에디터에서는 광고가 나오는걸 확인할 수 없고 On-Device에서만 가능하다보니,
한번씩 테스트하는데도 시간이 엄청나게 오래 걸립니다.

정확히 기억은 안나지만 주말 2일동안 이것만 했던거 같습니다.

그렇게 시간이 흘렀고, 지칠데로 지쳐있는 상태에서, 나도 모르게 뭘 바꿨는지도 몰랐는데 광고가 나오기 시작합니다!!!!!!!!!!!!!!
정말 첫 광고를 보면서 와! 하면서 소리를 질렀습니다.(눈물도 살짝)

 

광고에 대해선 두가지만 기억하시면 됩니다.

1. 프로젝트 기획단계에서 Admob광고 ID를 미리 발행

: ID를 발행했다고 해서 바로 광고가 송출되지 않고, 특정기간 후 부터 가능합니다. 그러니 미리미리 발행해야 합니다.

2. AssetStore에 널리고 널린 Wraping source를 사용

: 안그래도 많은 빌드에러때문에 지친데 코드만큼은 무결함을 가지는걸 추천드립니다.


(5) Publishing

이제 모든게 준비되었습니다. Store에 올리면 끝이구나.
사후관리를 하기 위해서 Firebase를 설치했습니다.
역시 간단합니다.
플러그인 설치하고 초기화 코드 / 이벤트 코드만 몇줄 넣어주면 됩니다.
https://firebase.google.com/docs/unity/setup?hl=ko

하.. 

위에서도 느꼇듯이 구글 머시기 들만 설치하면 지들끼리 충돌해서 에러를 발생시킵니다.
Firebase.. 이녀석도 구글산이였네요. 또 빌드에러입니다.

이제 침착하게 하나 하나 잘 지워가 봅니다. 그리고 옛날것도 깔아보고, 안되면 유니티 버젼도 바꿔보고,
이렇게 크게 한번 당하고 나면 이제 빌드에러에 크게 민감해 지지 않습니다.
그저 유니트를 만든 사람도 개발자고, 각종 플러그인을 만든사람도 개발자고.
개발자가 개발자들의 마음을 알아 줘야하지 않겠습니까 ㅎ

Firebase를 단지 설치만 하더라도(초기화 코드만 넣고) 앱을 매니징 할수있지만,

유독 끌리는 기능은 실시간 데이터베이스 기능입니다.

 

따로 웹서버를 두지 않고, Firebase 자체에서 DB기능을 사용할수 있습니다.

의외로 Firebase는 사용법이 간단하니, 이미 지쳤지만 조금만 더 힘내서 꼭 설치하시는걸 권장합니다.

 

 

이제 정말 끝났습니다.(라고 알았습니다.)

 

iOS개발자 등록도 끝마쳤고, Google Play에 앱을 등록하기 위해서 돈도 냈습니다.

얼만지 기억안나는데 한번내면 평생 무료인거 같습니다.

 

위에 Leaderboard를 생성하기 위해 만들어 놓은 App에 아이콘, 스크린샷, 설명, 개인정보처리 등등

이것저것 다 적어넣습니다. 정말 지루하고 귀찮습니다.

이쯤되면 너무 지쳐서 다 대충대충 넣고 싶어집니다.

 

그런데 말입니다.

 

iOS app store 에 등록하는데 App이 iPad에서 동작이 되면 iPad 스크린샷을 필수적으로 등록해야됩니다.

하지만 전 iPad가 없습니다.

대충 생각해봐도 iPad라고 동작이 안될거 같진 않은데, iPad에게 설치 안되게 하고 싶진 않습니다.

그래서 스크린샷을 구라로 만듭니다.

아이폰 스크린샷을 크게 늘려서 아이패드 해상도로 둔갑시켜서 등록합니다.(별일 없을줄 알았습니다.)

 

그리고 대망의 등록버튼 클릭!!!

 

Google은 심사가 까다롭지 않습니다. 대략 2시간 내에 등록이 됬던거 같습니다.

하지만 iOS는 깐깐하기로 유명하죠.

 

아니나 다를까 심사가 시작한지 얼마 안되서 바로 Reject 메일이 날아옵니다.

사유를 보니 metadata 부족.

 

구라 iPad 스샷이 걸린겁니다................

이렇게 iPad용을 포기하느냐 아님 친구 iPad를 빌려서 스샷을 찍어야 하느냐.

iOS는 안드로이드 처럼 빌드파일을 전달하여 설치하는 방식이 아니라,

Xcode에서 기기등록후 빌드를 해야되서 멀리있는 친구에게 부탁할수도 없습니다.

 

역시 이런 고민을 저만 한게 아니더라구요.

바로 Simulator.

 

유니티에서 Target SDK를 Device 에서 Simulator로 변경한뒤 빌드 산출물을 Xcode에서 부르면 Simulor로 실행이 가능합니다.

이렇게 스크린샷을 찍어서 등록. 다시 리뷰.

 

하지만 또 Reject.

정확히 용어는 기억이 안나는데 중복컨셉 어쩌고 저쩌고 였습니다.

진짜 iOS는 포기하고 싶었습니다.

하지만 이미 돈도 냈고, 여태 해온것들이 너무 아까워서 주구절절 이의신청했습니다.

말이 이의신청이고, 거의 애걸복걸하는 수준의 장문의 편지를 보냈죠.

 

그렇게 몇번의 Reject을 더 거친 후,

 

 Finally, 첫 앱이 등록되었답니다. ^_____^

 


(6) 업데이트

 

앱 등록 후 유저들의 상황을 보면서 업데이트를 해줄 계획을 가지고 있었습니다.

하지만, 다운로드도 없고 리뷰도 없으니 딱히 할 필요가 없겠더라구요.ㅎㅎㅎㅎ

 

그러던 어느날,

App Connect에서 노티가 왔습니다.

"리뷰가 등록되었습니다"

 

사실 앱이 처음 등록되고 지인들 풀어서 다운로드시키고, 리뷰 작성하라고 시켰습니다.

그들도 사람인지라 재미없는건 기가막히게 알아서 바로 앱삭..

 

그런데 진짜 유저에게서 리뷰를 받은 그날.

정말 너무너무 감동이었습니다.

누군가. 얼굴도 국적도 성별도 나이도 모르는 말그대로 누군가가

내가 만든 게임을 하고 자발적으로 리뷰를 남겨주다니요.

 

익명의 Google사용자까지 너무나도 감사드립니다.

태어나서 처음 받아보는 진짜 리뷰라서 저에게는 큰 힘이 되었답니다.

 

 

 

 

Epilogue

주구절절 순서없이 생각의 흐름데로 적어보았으나,

서두에 언급했듯이 이 모든건 저 하나의 기준으로 작성된 글입니다.

잘못 알고 있는 부분들도 다수 있을것입니다. 댓글로 고쳐주신다면 이또한 큰 힘이 될거 같습니다.

이렇게 1인개발 다이어리를 작성해보니, 앞으로 어떤방향으로 진행해야될지 좀더 정리가 된 좋은 기회가 된거 같습니다.

 

만약 아직 시작하지 않은 1인개발자 혹은 진행중이신 분께 감히 한마디 드리자면,

코딩하는게 전부가 아니란걸 꼭 말씀드리고 싶습니다.

기획부터 출시까지, 코딩은 매우 일부일 뿐이고, 그 나머지 일과 사건들에서 지치지말고 해쳐나가시길 바랍니다.

 

문의사항은 댓글이나 쪽지주시면, 제가 아는선에서 도움드리도록 하겠습니다.

그럼 20000.