주모 키우기 개발일지 - #5. 마일스톤/ 피처 구현 첫 번째
무엇을 먼저 할 것인가?
프로토타입을 통해 작업 방향을 정리하고 난 뒤, 작업 순서에 대한 고민을 시작했다.
여러 사람이 모인 팀이라면 각 작업이 병렬로 진행 가능 할 테니 고민할 것이 없을 것이다. 그러나 1인 개발을 유지하지는 이상 무언가를 먼저 만들면 필연적으로 나머지는 후순위가 될 수 밖에 없었기에 진행 순서에 대해 고민은 깊어져 갔다.
결과적으로 메인 피처에 대한 구현을 우선하여 진행하기로 결정했는데, 그 이유는 다음과 같다.
1. 그래픽(리소스 & UI 등)은 경험이 있기에 작업 추정이 수월하고 시행착오의 확률이 낮다.
2. 반면에 프로그래밍은 대략적인 작업 추정조차 어려울 정도의 생초짜다.
3. 프로토타입 때처럼 다 만들더라도 플레이를 해 봤을 때 재미가 없다면 도중에 엎을 가능성이 높다.
정리하면 프로그래밍 쪽이 불확실성이 높고, 갈아엎을 일이 생겼을 때 그래픽이 진행되지 않은 편이 마음 편하게(?) 갈아 엎을 수 있을 것 같았기 때문이다.
이렇게 대략적인 작업 방향까지 정리가 마무리 되자, 그 때부턴 본격적인 구현 작업에 들어가기로 했다.
프로토타입 피드백 반영 & 기본 피처 개발 1
가장 먼저 진행했던 것은 프로토타입 때 받았던 유저 피드백을 반영하는 작업이었다.
정말 돌아가기만 하는 미흡한 상태의 빌드였지만, 그럼에도 불구하고 다른 사람의 눈으로 본 시선은 개발 진행에 크게 도움이 되었다. 피드백들 적용 여부를 하나하나 고민해서 결정했고, 다른 메인 피처들도 조금씩 개발을 진행해 나가기 시작했다.
마침 당시 커뮤니티에 올렸던 글에 그 때의 진행 상황이 잘 정리되어 있어 해당 글을 옮겨 놓기로 한다.

얘들아 간만임. 다들 개발 잘하고 있어?
9월 말 - 10월 초쯤에 프로토타입 피드백 받고 대충 한달쯤 지났네.
처음 시작할 땐 올해 안에 출시를 목표로 잡았는데 진도가 안빠져서 고민이 많다야.
지난 한달을 되돌아보는 차원에서 그간 진행했던 작업들을 간단히 정리해봤어.
작업 순서상 그래픽을 가장 마지막으로 빼두는 바람에 아직 볼만한건 없지만 그래도 누군가에게 참고가 되었으면 하는 마음에 올려봐.
프로토타입 피드백 대응

먼저 지난 프로토타입때 받은 의견들을 취합해서 반영했어.
사소한 버그들은 바로바로 수정했고, 시스템에 관련된 의견들도 고민해봤지.
그 결과로

이제 호떡만드는 것도 강화가 가능해지고,

수비대는 개별적으로 커스텀을 지원할 예정이야.
어... 사실 커스텀이라고 하면 좀 거창하고, '직접 강화 방향을 선택'한다는 느낌만 주는 것에 가까워. 마음 같아선 캐릭터들마다 특색있는 스킬을 하나씩 추가해주고 싶은데, 내 실력에 개발기간이 너무 길어질 것 같아 당장은 킵해뒀어.
출시해보고 반응이 좀 있다 싶으면 그 때 추가하려고.
암튼 플레이 해 본 친구들의 피드백이 무척 도움되더라.

예전에 따로 감사글도 작성했지만, 이 글을 빌어서 다시 한번 땡큐함. ㅇㅇ.
신규 시스템 추가 - 탐색
나왔다 작업 시간이 길어지게 된 제 1원인.
생산 건물이나 수비대가 특정 레벨에 도달했을 때 능력치를 배수(2배 3배 7배...)로 키워주는 시스템이야.
기존 성장 그래프가 둔화될 쯤에 등장해서 성장 속도를 빠르게 해주는 역할을 해. 플레이의 목표가 되기도 하고.

원래는 위의 이미지처럼 간단하게 리스트로 만들어 일정 레벨 도달시마다 그냥 '등장, 구매, 땡' 할 예정이었는데...

프로토타입 피드백을 정리해보니 이런 니즈가 있었어.
여기서 원래 생각했던 시스템을 그대로 가져가면 기존 건물/ 수비대 업그레이드랑 경험적으로 차이가 없겠다 싶더라구.
그러다 예전에 잠깐 고민하다가 내 귀여운 실력으론 안될 거 같아서 폐기했던 탐색 시스템을 떠올렸지.
그게 뭐냐면...

탐색꾼을 고용해서

특정 지역으로 탐색을 보내면

일정 시간 대기 후 보상과 함께 랜덤으로 능력치를 올려주는 보물을 가져오는 시스템이야. 대기시간이 있다는 점에서 기존 강화들과 경험상의 차이를 줄 수 있을 것 같더라구.
작업 사이즈때매 좀 고민하긴 했지만, 어차피 여기까지 온거 한번 벌려보기로 했지.
그래서 결국 만듬 ㅇㅇ.

탐색꾼을 고용해서 특정 지역으로 보낸 뒤, 시간이 지나거나 캐시를 사용하면 보상을 획득.

거기에 더해 보물 도감을 추가해서 수집 퍼센트를 확인할 수 있게 만들고

탐색꾼의 효율을 강화시키는 별도 메뉴도 제작했음. ㅇㅇ
막막하다 싶어도 어떻게 비비다보면 되긴 되더라.
재화 단위수 처리
재화 단위수 처리는 무작정 성장만 해제끼는 방치형 게임의 기본이지?
해야지 해야지 생각만 하다가 겁이 나서 손을 못대고 있었는데 이 참에 처리해버림.
구글은 위대해. 검색하면 다 나오니까.
뭐 'a/b/c...'나 'k/m/b...'나 '천/만/억...'이나 여러 타입들이 있을텐데, 주제에 언어별 대응은 어려울 것 같아 공통으로 적용하기 편한 abc로 적용함.
자리수는 6자리로 출력되게 했는데(like CookieClicker), 이유는 자리수가 많은 편이 보는 맛이 있으니까. ㅇㅇ 처음엔 멋모르고 float 자료형 썼다가 Infinity의 따끔한 맛을 보고 double로 변경함.
혹시 클리커나 방치형 만드는 친구들은 미리미리 재화를 double로 선언해서 나처럼 같은거 두 번 만드는 븅신짓은 하지 말길 바래.

잘 되는거 같아서 만족중임 ㅇㅇ.
세이브 시스템 추가
이지세이브 할인하기만을 기다렸는데 더 못참고 질러버림. 덕분에 구현은 매우 간단했지. 일단은 게임 켤 때 로딩/ 앱을 내리거나 끌 때 저장 정도만 구현해놨어.
좀 더 안전하게 일정 텀마다 자동으로 저장을 지원해볼까... 했는데
세이브 시간이 꽤 걸리길래(갤럭시 S8 기준 600ms, 갤6은 200ms... 왜 꾸진 폰이 더 빠름?;) 일단은 보류.
보통 세이브는 이렇게 하더라- 라는 걸 알고 있는 친구 있음 살짝 힌트 좀 주라야 ㅎ
최적화
맞아. 나도 게시판에서 봤어. 느려지는게 확인되기 전까지 최적화는 하는게 아니라는 걸.

근데 프로토타입 때 이런 피드백을 봐 버린걸 어떡하겠어.
갤6가 오래된 폰이긴 한지만 갤럭시 S시리즈 자체가 고급형 라인이잖아? 충분히 현역이지. 거기다 아직 그래픽도 적용안한 이런 개단순한 게임에서 렉이 생긴다? 이건 100% 내가 븅신짓 한거지.
다행히 예전에 쓰던 폰이 S6라서 거기다 넣고 한번 돌려봤는데...
...12프레임 나오더라. ㅋ?;
물론 시스템 다 만들고 최적화를 봐야겠지만, 내면의 찝찝함을 무시하지 못하고 결국 들고 파기 시작함
1. 오브젝트 풀링 적용
예전에 여기 갤에서 오브젝트 풀링이 최적화에 좋다는 글을 본 기억이 있어서 적용해보기로 함.
새로 만들 자신은 없어서 구글이랑 에셋스토어를 이리저리 뒤져봤는데, 내가 찾아본 무료 에셋들 중에선 AutoPool이 그나마 딱 필요한 기능만 있고 깔끔한거 같더라구.
Spawn시 부모 설정을 지원하지 않고 UI 오브젝트 대상으로 생성시 에러가 뜨긴 하던데, 둘 다 어찌저찌 코드 수정해서 해결함.
오브젝트 풀을 적용하니 느려졌다 빨라졌다 하는 이슈는 조금 해결된거 같았음.
근데도 프레임은 30을 못넘더라구?
2. Batches 다이어트
그래서 이래저래 찾아보다가 드로우콜과 Batches의 존재를 알게됐어.
정확히 이해한 건 아니고, 그냥 이미지를 그릴 때 그런 플로우가 존재하고, 이게 많으면 안좋다는 정도만 알게됨.
이후 유니티에서 Stats를 켜놓고 게임을 돌려봤더니 Batches가 120이 나오더라.
그때부터 안쓰는 오브젝트 지우고, 스프라이트들 페이지에 맞춰 다 아틀라스로 변환하고, 오브젝트 하나씩 껐다 켜면서 확인하고 등등 개난리를 침.
결국 120에 육박하던 Batches는 40대로 줄었고, 그 결과 갤6에서 풀프레임(60fps)을 찍는 걸 확인했다. 허헣.
이 쯤에서 마무리하고 더 디테일한건 출시 전에 다시 한번 봐야지.
여기서 내가 느낀 교훈 하나.
"코드에서 어지간히 뻘짓한게 아니라면 최적화는 그래픽에서 하는거구나!"
뭐 이거 외에도 foreach -> for 변환이나 string format 테스트, 유니티 설정 조정 등 뻘짓한 건 많은데, 다 별 차이없고 나한테 제일 효과 좋았던건 위의 2개였음.
대충 이 정도네.
아무래도 개발일지도 사람이 보는거니 눈에 보이는 캐릭터나 UI에 대한 이야기가 좋다고 생각은 하는데 아쉽게도 아직 그럴 단계가 아니라서...
아마 담달인 12월 쯤 되면 대략적인 구현 마무리짓고 그래픽 올리는 걸 보여줄 수 있을거 같아.
다음에 진도 좀 빠지면 그 때 다시 공유하러 올게.
이 때가 프로토타입 이후 1-2개월이 지난 시점으로, 글에서 볼 수 있듯 본격적인 구현을 들어가고 있던 단계였다. 다 처음 해보는 것들 투성이라 어려운 것들 투성이었지만, 그래도 조금씩 진도가 나가고 있는 것을 확인할 수 있다.
참고로 저 당시 구현에 가장 시간을 많이 썼던 것이 탐색 시스템이었는데, 결과적으로 저 시스템은 몇 달 뒤 갈아엎히게 된다. ㅠ
피처가 하나 둘 씩 나오고 있긴 하지만 아직은 갈 길이 먼 상태로, 한동안은 꾸준히 구현에 집중하기로 했다.