Unity3D/[유니티 인디게임] 처음 공부부터 출시까지

[유니티 인디게임] 처음 공부부터 출시까지. - 7(完)

상연 2021. 9. 20. 03:34

목차

    이전글

      1. 처음 게임을 개발하기로 마음먹기까지, 그리고 생각보다 어려웠던 유니티.
      2. 두 개발 초보의 얼렁뚱땅 날림 게임 기획. 헤딩시작!
      3. 캐릭터 선택 / 장애물 기획 및 구현 / 스킬 일부 구현
      4. 핵심기능 개발 / 일부 UI 개선
      5. 코드 / UI  갈아엎기, MWU 제출을 위하여
      6. 튜토리얼/편의성/밸런스 패치
      7. 구글플레이 등록 / 인앱결제 / 애드몹 다방면 삽질끝에 출시를 앞두다.

     

    맨 땅에 헤딩으로 시작해서 게임을 개발하고, 뒤늦게 조금씩 올리던 개발일지의 끝이 보이네요.

    처음에는 굉장히 잦은 주기로 올렸었는데, 마지막 개발일지를 이렇게 늦게 올리게 될 줄은 예상하지 못했습니다.

    제 생각보다 이게 어플을 등록하는것이나 플러그인을 사용하는것 등등에서 굉장히 많은 어려움을 겪었던게 컸습니다.

    개발능력외에도 참 많은 부분에서 부족함을 느끼고, 배웠던 막바지 개발기간에 대해 이야기해보겠습니다.

    이번 글은 사진보다는 줄글 형식으로 조금 한탄식이 될 것 같네요.


    [16] 구글플레이 앱 등록


    정말 내가 원하는 방향으로 '코딩만' 할 수 있다면 얼마나 재밌을까요...?

    정말 이렇게 소규모로 프로젝트 하나 하는데도 신경쓸게 많다는 것에 기함을 한 최근이었습니다.

    앞으로도 앵무새처럼 말하겠지만 정말 게임 개발하시는 분들 존경하고, 대단하다고 생각합니다.

    각설하고, 이전에 대략의 게임을 완성...시켜놓고 이제 드디어 구글 플레이에 어플리케이션 등록을 시도했습니다.

     

    개발자 계정 등록비 25달러를 지불하고...

    이것저것 요구하는 것들 양식을 맞춰 작성하는데, 이것도 처음 해 보는 거다 보니까 굉장히 많이 헤매게 되더라고요.

     

    이곳 저곳 블로그 등지를 참고해서 최대한 양식을 작성하는데

    하... 정말 예전에 티스토리 애드센스나 애널리틱스 연동할때도 느낀거지만 참 구글이 뭐라할까요, 사이트 내용 구성의 변화가 빠르다고 해야하나 불과 몇 개월전 작성된 글을 봐도 내가 보는 사이트와 내용 구성이 다르고 버튼이 알려진것과 다른 저 세상에 가 있는 경우가 잦습니다.

    일단 이것도 좀 짜증나는 모먼트기도한데, 구글의 도움말은 대개 절반은 도움이 되고 절반은 오히려 헷갈리게하는 요주의범이었습니다. 자세히 알아보려고 단어별로 링크를 차곡차곡 타고 들어가면 어느새 맨 처음 도움말로 와 있는건 기본이고 뭔가 말을 헷갈리게 써 놓은것은 부지기수에...

    어쩌면 저만 느낀 걸 수도 있습니다.

    제가 아직 이런것을 많이 접해보지 못해서 미숙했던 탓이 가장 크긴 했을 거예요.

    아무튼 사실 앱 등록 자체는 크게 어려울 게 없었습니다.

    그냥 성심성의껏 대답하고, 게임을 나타내는 글이나 이미지를 첨부하면 됐으니까요.

    어쩌다 보니 삽질을 하도 많이해서 앱 출시 과정을 4번이나 하게 됐습니다.

    그렇게 해서 최종적으로 얻어낸 등록물이 이것...

    이제는 앱 등록 과정정도는 가볍게 금방 끝낼 수 있습니다.

    추후 구글플레이 어플 등록부터 인앱결제 애드몹 등등까지 어떻게 했는지 과정을 담아서 나중에 처음 하시는 분들이 도움이 되게 포스팅을 해서 올릴 예정입니다.


    [17] 인앱결제에 대한 이야기(유니티 코드리스 IAP 사용)


    우선, 결론부터 말하자면 인앱결제를 구현도 하고 테스트도 다 했지만 정작 출시한 게임에는 인앱결제가 없습니다.

    왜냐하면 정말 헤딩을 빡세게 한 나머지 좀 알아봤어야 하는데...

    인앱결제를 넣으려면 '사업자 등록'이 필요로 되는 것을 몰랐습니다.

    뭐 구글플레이는 일단은 필요가 없고 인앱결제를 넣고 출시는 가능하다... 일단 넣고 나중에 팔리면 그때 등록하고 해도 된다 뭐 이런 말도 봤는데요.

    어쨌든 결론적으로 물건은 팔더라도 아마 정산을 받으려면 사업자 등록이 필요한것으로 보였습니다.

    잠시 제가 한 삽질에 대해 이야기하고 가자면.

    중간에 구글로부터 세부적인 정보가 필요하다 뭐 주거지 증빙 서류, 입출금 내역서가 필요하다 이런 메일이 왔습니다.

    그런데 아무리 봐도 요구하는 서류중에 주소지가 같이 첨부되는게 하나도 없더라구요.

    그래서 순간 어...? 내가 이 계정을 아무생각없이 비즈니스 용으로 팠었던가...?

    그럼... 어떻게 해야하지? 하다가 아무생각없이 연결된 계좌를 폐쇄시켜버렸습니다.

    폐쇄시키고 다시 개인으로 파서 연결을 하면 되지 않을까??? 하는 마음에... 왜 그랬을까요... 좀 더 침착했어야 하는데...

    연결된 계좌가 폐쇄되면서 기존에 구글콘솔과 연동이 해지되었고, 제가 개발자 계정 등록비를 냈다는 사실도 공중분해가 되어버렸습니다. 동시에 구글콘솔에 들어가면 이로 인한 오류 메세지가 났구요.

    저 시점에서 저는 대충 짐작을 했습니다.

    음 이미 계정이 돌이킬 수 없는 강을 건너버렸구나, 살릴 수는 없을 거 같고 내가보기엔 개발자 계정 등록비를 받는것도 요원할것 같으니 그냥 수업비 냈다 치고 새로 계정을 파버리자...

    그렇게 해서 새로운 계정에 다시 앱 출시를 했습니다.

    아무튼 이야기가 좀 많이 샜는데, 결론은 그렇습니다.

    사업자 등록을 하는것이 그렇게 어려운것도 아니긴 하지만, 이래저래 후속관리에 있어서 불편이 많으니 처음 헤딩하시는 분이라면 인앱결제는 좀 더 나중으로 생각하시는게 좋을 것 같습니다.

    진짜 이제 인앱결제에 대해 이야기하자면

    우선 구현 자체는 꽤 편하게 했습니다.

    https://docs.unity3d.com/kr/2019.4/Manual/UnityIAPCodelessIAP.html

     

    코드리스 IAP - Unity 매뉴얼

    코드리스 IAP(Codeless IAP) 를 사용하면 아주 간편하게 Unity 앱에 인앱 결제를 구현할 수 있습니다. Unity 에디터는 최소한의 스크립트 작성을 통해 기본 IAP 통합을 설정하기 위한 인터페이스를 제공

    docs.unity3d.com

    유니티 코드리스 IAP가 정말 편하더라고요.

    이것도 근데 알아보니까 영수증 검사니 뭐니 파고들면 신경쓸게 많아서 사실 권장되는지는 모르겠습니다.

    어쨌든 어플리케이션의 라이센스 키를 갖고 메뉴얼만 졸졸 잘 따라가면 굉장히 쉽게 구현 할 수 있습니다.

    하지만 저는 이번에 하면서 느낀게, 인앱결제나 이런건 유저 데이터를 서버에 관리할 수 있을때나 시도해야겠다.

    서버가 없으면 인앱결제가 다 무언가 싶더라구요.

    악의적인 유저에 의한 데이터 조작, 유저의 데이터를 보관할 수 없음에서 발생하는 유저가 구매한 상품의 보존능력 하락 등등 단순히 클라이언트 영역에서만 굴리기엔 영 힘들다고 판단이 들었습니다.

    짜잔, 어쨌든 인앱결제도 구현을 해 보기는 했습니다.

    정작 쓰지는 못하지만 그래도 하면서 조금 공부가 됐으니까 그렇게 실망스럽진 않아요.

    인앱결제를 못 쓰는것보다는 못 쓰게 되어서 이제 게임 경제를 다시 조정해야 했던 부분이 많이 머리가 아팠습니다...


    [18] GPGS 연동 -  클라우드 저장 / 리더보드


    GPGS, Google Play Game Services 의 약자입니다.

    그리고 제가 제일 많이 삽질을 한 부분이기도 합니다.

    솔직히 앱 등록 IAP 애드몹 등은 그래도 그럭저럭 레퍼런스 자료가 보고 따라갈만 했었는데 GPGS는 유독 힘들었습니다.

    그도 그럴게 OAuth가 뭔지도 모르겠고 뭐 Cloud Platform에 들어가서 사용자 인증 정보를 등록하라고 하고 그러는데, 뭐가 뭔지 하나도 모르겠더라구요.

    그래도 이제는 조금 알게 돼서 세팅을 금방 금방하게 됐습니다.

    깃헙에서 플러그인을 받아서 import 해주고 구글 콘솔~ 클라우드 플랫폼에서 이래저래 키 적고 패키지이름적고 왔다갔다하면서 설정 적용해주면 되는데요

    정말 상세하게 A-Z 설명하고 싶지만 이렇게 왕창 뭉개서 말하는 저를 용서하세요...

    아무튼 저렇게 세팅을 하는게 아마 처음하시는 분들에게는 1차 고비일거라고 생각이 됩니다.

    앞서 말했지만, 구글에 내부 구성요소가 참... 빨리 바뀌어서 참고자료를 봐가면서해도 헤매는 일이 부지기수라서요.

     

    어쨌든 등록을 하게 되면 첫 번째로 구글 플레이 서비스에 로그인, 로그아웃이 되는지를 하면서 테스트를 하게 됩니다.

    이건 정말 정말 정말 간단해요.

    검색하면 널려있는 함수를 긁어서 돌리면 뚝딱 됩니다!

    근데 사실 로그인만 할 거면 굳이 그렇게 고생해가면서 GPGS를 추가 할 필요가 없습니다.

    정말로요

    사실 GPGS 자체는 없어도 게임 출시에는 영향이 없는 부분이니까요.

     

    다만 제가 GPGS를 하게 된 이유에는 우선 그때까지만해도 인앱결제의 꿈을 갖고 있었기 때문입니다...

    그래도 유저가 현금을 지불하고 재화를 구매하는 것인데, 로컬에다가만 데이터를 저장하는것은 너무 무책임한게 아닐까

    최소한 유저가 기기를 옮긴다던지 게임을 삭제하고 다시 설치했을때도 기존의 플레이 데이터 및 구매이력을 보존할 수단을 마련해주는것이 도리가 아닌가라는 생각에서 시작된것이 바로 GPGS의 클라우드 저장 시스템이었습니다.

    서버는 당연히 없는 마당에 GPGS를 잘 쓰면 그래도 유저 클라우드에 게임 데이터를 보존시켜줄 수 있겠다는 생각이 들어서... 이를 구현하려고 해 봅니다.

    그런데, 주어진 라이브러리를 활용해 본 경험이 제로에 가까운 저에게는 공식 문서를 보고 더듬더듬 따라하는게 퍽 벅차고 힘든일이었습니다.

    그래서 어떻게 좋은 블로그 포스팅을 다행히도 찾아내어서 구현을 시도하게 되는데요.

    우선 첫 번째로, 블로그에 적힌 코드를 한 줄 한 줄 천천히 뜯어보며 어떻게 작동하는지 분석했습니다.

    두 번째로는, 그 포스팅은 단순 String 타입을 클라우드 저장 한 것이어서 XML 데이터를 쓰는 저는 약간의 변형을 해서 코드를 이식해야 했습니다. 

    그리고 테스트해서 되는지만 확인하면.. 되는데.... 그러면 되는데.... 자꾸 알 수 없는 오류가 발생합니다.

     AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='getStatusCode' signature='()I' in class Ljava.lang.Object;

    위와 같은 문제입니다.

    코드상으로는 문제가 없는 것 같은데 도통 알 수없는 에러 메세지에 막혀서 안되고, 깃허브 이슈 글을 봐도 썩 도움이 되지 않았기 때문에 엄청 골머리를 앓았습니다.

    저거 해결해보겠다고 붙잡다가 한 시간 자고 알바가고 했었거든요...

    우선 문제 원인부터 말하자면 '패키지 이름'이 문제였습니다. 

    패키지 이름에 대문자가 들어가면 오류가 발생합니다. 참 어이가 없지만 사실입니다.

    혹여 이 글을 보시는 저와 같은 헤딩 개발러가 있으시다면,,, 꼭,,,, 패키지는 소문자로하세요,,,,

    https://wonsang98.tistory.com/155 

     

    [유니티 GPGS 오류 해결] AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='getStatusCode'

    유니티에 구글 플레이 게임 서비스(GPGS)를 연동해서 Cloud Save / Load를 사용하기 위해 관련된 함수를 활용하려고 했는데, 아래와 같은 에러메세지가 발생하면서 동작하지 않았다. AndroidJavaException: j

    wonsang98.tistory.com

    이에 대해서는 제가 하도 억울해서 포스팅을 살짝 남겨놨습니다. 참고하시면 좋을 것 같아요.

     

    몇 시간을 꼬박 날렸는데 패키지 이름 바꾸자마자 바로 작동하는거 보니까

    참 기분이 좋기도하면서 안좋은게 애 키우는 기분이었습니다.

    어쨌든 무사히 클라우드 저장 / 세이브도 만들었습니다...!

     

    아, 리더보드도 만들었습니다.

    원래는 기획에만 있었다가 정작 만들기 힘들것 같아서 안했는데 리더보드 구현 자체는 거의 구글플레이 로그인 수준으로 간단합니다!!!

    지금은 비록 아무도 없지만, 꼭 출시하면 많은분들이 참여하셔서 랭킹을 빛내주셨으면 하는 바람이 있습니다...ㅜㅜ


    [19] 애드몹 연동


    애드몹... 이미 GPGS에서 조금 단련이 된 덕분일까요?

    애드몹을 다는 '것'은 수월했습니다. 이거는 공식 문서가 잘 되어있어서 보고 잘 따라하기만 하면 금방 달 수 있더라구요.

    https://support.google.com/admob/answer/7311747?hl=ko 

     

    보상형 광고 단위 만들기 - Google AdMob 고객센터

    도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

    support.google.com

    https://developers.google.com/admob/unity/quick-start

     

    시작하기  |  Unity  |  Google Developers

    Unity에서 앱을 제작 중인 AdMob 게시자를 위한 모바일 광고 SDK입니다.

    developers.google.com

     

    문제는 그 이후에 계정에서 발생했습니다.

    아마 정말 처음 만드시는 분들은 딱히 저와같은 문제가 발생하지 않을 것 같은데요

    문제는 제가 기존에 티스토리 블로그에 구글 애드센스를 달고 있던것에서부터 출발합니다.

    하다못해 그 기존 애드센스 계정이 있는 구글 계정으로 어플리케이션 출시를 했으면 문제가 없었을텐데, 2인개발이다보니 새로운 계정을 파고 만들다보니 더 복잡해집니다.

     AdMob 계정에 연결된 애드센스 계정에 대한 액세스 권한이 없습니다.

    애드몹 계정을 개설했을때만해도 문제가 없었는데, 다음날 자고 일어나니 메일 한 통이 와 있고

    그 다음부터 저 메세지를 보여주며 애드몹에 로그인이 막혀버립니다.

    그리고 역시나 도움말은 큰 도움이 되지 않았습니다.

    어떻게 또 다방면으로 삽질을 하다보니 애드몹의 구조에 대해 어느정도 이해하게 되었고

    저 문제또한 완벽히 해결하게 되었습니다.

    애드몹, 애드센스, 구글애즈 이 3개의 삼박자가 딱 맞춰져야 해결 할 수 있는 구조인데, 이 방법까지 적기에는 이미 충분히 글이 너무 길어져서 후에 포스팅하도록 하겠습니다.

    포스팅 되기 전까지 저같은 문제를 겪는분이 있다면 댓글로 알려주세요, 상세히 도와드리겠습니다.

    어쨌든 말은 쉽지만 몇시간을 또 삽질을 열심히 해서 해결하고 드디어 제 앱에 광고를 넣게 되었습니다...!

    많은 분들이 봐 주셨으면 좋겠지만 이미 블로그 운영으로 광고수익에 대한 기대를 많이 접었습니다.


    [20] 출시를 앞두고


    앱 등록 GPGS 애드몹 인앱결제 등등... 사실 위의 글 말고도 참 생략된 부분이 많습니다.

    정말 게임 하나 출시하는데 들어가는 심력이 장난이 아닌것 같습니다.

    근 한 달은 거의 다 된 것 같다는 느낌에 사로잡혀서 계속해서 앉아서 프로젝트만 붙잡았더니 체력도 상하고요

    틈틈히 SDK 등록 플러그인 뭐 막 하면서도 UI도 전체적으로 손 보고 자잘 자잘한 버그도 고치고,,, 뭐 편의성 패치라던지 꾸준히 눈에 거슬리는것들을 하나씩 치워나가다보니

    드디어 출시를 하게 되었습니다.

    이 글을 쓰기전에 프로덕트 트랙에 올려놨구요, 이제 검토가 끝나고 출시되기를 기다리는 중입니다.

    어떻게보면 참 아픈손가락 같은 게임이 되어버리기도 했고... 뿌듯하면서도 많은 부분이 아쉬운 게임이 나올 예정인데

    어찌됐든 그래도 뭔가 스스로 만들어 낸 첫 작품이 생겼다는게 기분이 싱숭생숭합니다.

    이 글을 올리고 한숨 자고 일어나면 출시가 되어있을테죠... ㅎㅎ

    이번 프로젝트를 하게 되면서 정말, 정말 많은걸 얻은것 같습니다.

    모든지 처음 할 때 얻는 경험치가 제일 상당하잖아요?

    구조를 짜는거라던지, 기본적으로 언어 문법도 그렇고, 유니티자체를 다루는 능력도...

     

    맨 바닥 헤딩이었다보니 정말 철저하게 구글 검색부터 카페 정보 등등 많은곳에서 많이 배우게 되었는데요.

    제가 올린 글 또한 제가 다른 분들에게 얻은 만큼의 도움이 되기를 바랍니다.

    제 생각보다 시행착오가 굉장히 많아서 고난했던 약 4개월이었지만 게임을 만든다는건 정말로 재밌었습니다.

    당장 지금도 이번에 출시하면 잠시 쉬고 업데이트 하고 싶은것들이 한 바탕이기도 하고, 만들어보고싶은 게임도 참 많거든요. 앞으로 많이 배워서 좋은 게임개발자로 성장하고 싶다는 생각이 만연합니다.

    이번 글이 어쩌다보니 엄청 길어지게 되었네요, 꽤 길게 쓴 것 같은데도 하고싶은 말의 반도 못 한 기분입니다.

    이만 글을 줄이겠습니다.

    다음번에는 프로젝트 출시 후 소개 게시글로 뵙겠습니다! 감사합니다!!!

     

    [이전 글 보기]

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 1

    처음 게임개발을 하게 되면서 생긴 시행착오, 작업물 등을 일지로 남겨놓고 싶어 이 글을 작성하게 되었습니다. 정말 맨 땅에 헤딩으로 공부하고 작업했기 때문에 부족한 부분이 많이 보일듯 합

    wonsang98.tistory.com

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 2

    목차 처음 게임을 개발하기로 마음먹기까지, 그리고 생각보다 어려웠던 유니티. 두 개발 초보의 얼렁뚱땅 날림 게임 기획. 헤딩시작!(이번글) 첫 리소스 추가, 스킬 및 기능 추가. (다음글) [유니

    wonsang98.tistory.com

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 3

    목차 처음 게임을 개발하기로 마음먹기까지, 그리고 생각보다 어려웠던 유니티. 두 개발 초보의 얼렁뚱땅 날림 게임 기획. 헤딩시작! 캐릭터 선택 / 장애물 기획 및 구현 / 스킬 일부 구현 [5] 캐

    wonsang98.tistory.com

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 4

    목차 처음 게임을 개발하기로 마음먹기까지, 그리고 생각보다 어려웠던 유니티. 두 개발 초보의 얼렁뚱땅 날림 게임 기획. 헤딩시작! 캐릭터 선택 / 장애물 기획 및 구현 / 스킬 일부 구현 핵심기

    wonsang98.tistory.com

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 5

    [12] 코드 리팩토링 작업 맨땅 헤딩으로 게임 제작을 시작한지 약 한~두달, 초기에는 싱글톤패턴을 활용해서 제작을 해 보려고 했습니다. 하지만 이 싱글톤패턴에 대한 명확한 공부가 이뤄지지

    wonsang98.tistory.com

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 6

    [15] 스토리 / 튜토리얼 추가 이제 어느 정도 게임 시스템도 자리 잡았고, 남은 건 버그를 잡고 마감도를 올리는 일이 대부분입니다. 이쯤 되니 슬슬 데모 버전으로 주변 사람들에게 테스트를 해

    wonsang98.tistory.com

     

    [유니티 인디게임] 처음 공부부터 출시까지. - 7(完)

    맨 땅에 헤딩으로 시작해서 게임을 개발하고, 뒤늦게 조금씩 올리던 개발일지의 끝이 보이네요. 처음에는 굉장히 잦은 주기로 올렸었는데, 마지막 개발일지를 이렇게 늦게 올리게 될 줄은 예상

    wonsang98.tistory.com