-
[게임 개발] 암산 & 주산 - 개발 후기 (프로그래밍편)2021.08.31 PM 07:07
기획편에 이어, 9개월간의 개발에 대한 포스트모템 내용 중에 프로그래밍편을 정리해서 올립니다.
------------
* 구글 플레이에서 "jinaju" 혹은 "지나주" ("암산 & 주산" 으로 검색하면 목록의 한참 아래쪽에 나옵니다)
* 구글 플레이 링크: https://play.google.com/store/apps/details?id=com.JINAJU.MentalCalculationAbacus
* 앱스토어에서 "암산 & 주산" 으로 검색하면 다운받으실 수 있습니다.
* 앱스토어 링크: https://apps.apple.com/kr/app/mental-calculation-abacus/id1582407909?l=en
잘한점
- 자신감이 늘었습니다. 할 수 있다!
3년 전까지는 프로그래밍하다가 문제가 발생하면 해결까지 오랜 시간이 걸렸습니다.
지식과 경험이 적어서 해결 단서를 잡기가 힘들었거든요. 뭐가 잘못된건지 어느 코드에 문제가 있는건지...
지금은 문제가 생기거나 새로운 에셋을 구매해서 적용하더라도 "시간은 조금 걸리겠지만 해결할 수 있다"는 생각이 듭니다.
구글링 할 때 검색어도 잘 맞추고요.
- Rider 에디터 유료 구매하길 잘했다!
1년 구독 비용이 18만원입니다.
저는 결제에 거부감이 크고, 특히 구독 모델은 굉장히 싫어하는데요. (결제를 하더라도 평생 소장용 구매를 선호합니다)
Rider를 1년 구독 결제한 것에 대해서는 굉장히 만족합니다.
* 더 나은 코드 추천, 최적화: LINQ, 더 나은 C# 문법 추천(return switch 등)
* 리펙토링: 코드에서 MonoBehaviour 클래스명을 변경했을 때 Unity Editor의 객체들에도 반영됨 등
* Rider 에디터의 TDD 제공 - 유니티 빌드 과정이 없어서 더 빠르고 쾌적함
* 자동 코드 추가: switch 문에서 case 내용을 자동으로 채워주거나, Unity method 등을 쉽게 추가
VisualStudio나 VisualCode에서도 확장 기능을 설치할 수도 있을 것 같네요.
저는 개발 경험도 실력도 부족하기 때문에 어떤 효과적인 기능이 있는지를 아예 모른다고 봐야하거든요.
그래서 VisualCode 개발하면서도 거의 기본 에디터로만 사용하고, 확장 기능 설치도 유니티 연동 말고는 해보질 않았습니다.
이번 프로젝트를 시작하면서 LINQ와 UniRX를 공부하며 적용했는데요.
Rider가 기본 제공하는 IntelliSense(지능형 코드 완성), 더 나은 코드를 소개하고 변경해주는 기능 등의 도움을 많이 받았습니다.
과장해서 말하면 1년 18만원을 내고 개인 코딩 선생님을 초빙한 느낌이었어요.
- DOTween 으로 연산 애니메이션을 쉽고 효과적으로 구현했어요.
기존에는 유니티 애니메이션과 애니메이터로 구현하던 것을, DOTween(Pro, 유료 에셋)을 사용해서 코드로 구현하기 시작했습니다.
유니티 애니메이션으로 작업하면 anim 파일이 매번 추가되고 해당 anim을 적용해야해서 많이 번거롭죠.
DOTween 에셋을 이용하면 p-osition, scale, rotate 부터 color, fade(alpha), shake 등의 작업을 몇 줄 코드로 간단히 구현할 수 있습니다.
코드로 구현할 때의 장점이 상당합니다. 여러 오브젝트에 적용하기도 쉽고요. 애니메이션 값을 변수화해서 상황에 따라 다르게 애니메이션 시킬 수도 있지요.
그리고 다양한 Ease 패턴을 제공하고 Loop 설정도 가능해요. 애니메이션보다 작업도 쉽고 작업 시간도 엄청나게 줄어들어요.
- 완성 프로젝트 에셋을 사서 공부했어요. 아예 모르던 것들을 알게 되었네요.
Corgi Engine(2D, 2.5D) 유료 에셋을 사서 샘플 씬을 둘러보며 공부했는데요. 덕분에 제 게임의 씬(+멀티 씬) 구조 설계에 도움이 되었어요.
GUI PRO KIT 유료 에셋은 UI 그래픽 리소스때문에 샀는데요. uGUI 위에 파티클을 올리는 UIParticleSystem 이 있다는 것을 알게 해주었지요.
- 아이맥 27" (2020) 구매와 듀얼 스크린 사용으로 개발이 많이 편해졌어요.
사용하던 맥북 프로 레티나(2014형)에서 유니티 최신 버전의 빌드가 너무 느려졌습니다.
느려진 정도가 아니라 유니티 에디터를 실행하고 있으면 얼마 안있어 비행기 이륙하는 소리가 나요.
거금을 들여서 아이맥을 구입하고, 쾌적한 개발 환경에서 작업을 하고 있습니다.
24" 화면도 고민했었는데, 27" 화면으로 하기를 잘했다고 생각해요.
Rider 에디터에서 C# 파일을 split 해서 두 개를 동시에 볼 수 있거든요. 24" 화면이었다면 조금 아쉬웠을거 같다는 생각이 듭니다.
그리고 넥슨 다닐때 회사에서 중고로 판매하던 Dell 2007FP 를 붙여서 듀얼 모니터로 사용하고 있는데요.
4:3 비율의 Dell 모니터를 세로로 세우면 아이맥 27" 모니터 높이와 비슷하더라구요.
개발 외 자료 확인이나 메신저등 서브 화면으로 사용해서 작업에 도움이 되었습니다.
- 로지텍 ERGO K860 블루투스 무선 키보드
5년 전부터 손목이 아파오더군요. 마침 아는 형이 안쓴다고 나눔해주신 MS Sculpte Ergonomic Desktop 키보드를 사용하고 있었는데요.
작년에 맥OS를 업데이트 한 뒤에 타이핑하면 여러번 입력되는 오작동이 발생했었습니다.
(맥 키보드 입력 오류 해결 https://mypi.ruliweb.com/mypi.htm?nid=3122617&num=14093)
마침 그 타이밍에 로지텍 ERGO K860이 한국 정발되어서 구매했는데요.
개인적으로는 MS comfort keyboard 5000 보다 손목과 손이 더 편안하네요.
문제점
- 기획 변경때마다 리펙토링을 하는게 쉽지 않았어요.
경력만 길고 실력이 없는 기획자(물론 저입니다)가 자꾸 기획을 바꾸는데요.
자잘한 건은 이해하겠지만 가끔은 경제 시스템을 뒤집자고 하고 또 가끔은 다 구현해놓은 네이밍을 전부 바꿔달라고 해요.
(코드-UI-DB에 Study라고 구현했는데 Learn 으로 다 바꿔달라는 식으로요)
답답하고 울화통이 터지지만 준대로 또 작업을 할 수밖에 없지요 뭐. (가끔 나몰라라 배째고 넘어가기도 합니다)
Rider 에디터의 강력한 리펙토링 기능에 도움을 받아서 어찌어찌 작업을 진행합니다.
하지만 막연하게나마 초기 개발시에 뭔가를 잘 해두면, 리펙토링 작업이 더 수월하고 퀄리티도 좋아질 것 같다는 느낌이 듭니다.
아직 내공이 부족해서 그 막연한 무언가가 뭔지는 알지 못했어요.
- MVP 구조로 코드 제작이 아직 어설퍼요.
전보다는 낫긴 한데... 상황에 따라서 Model - View - Presenter 가 막 섞여요.
애매하면 일단 Presenter에 다 때려박았다가 나중에 Model이나 View로 분리하는 경우가 많았네요.
TDD를 수행할 코드는 Model로 완벽하게 넣고 싶었는데, 프로젝트 중반이 지나고보니 Presenter에 맞물려 test가 곤란한 경우가 잦았습니다.
UI에서 사용자 입력과 출력을 View에 넣어야 할 것 같은데 Presenter에 들어가 있기도 하고요.
- Unity 기본 구조에 대한 이해가 아직도 부족합니다.
MonoBehaviour에서 Awake - OnEnable - Start - FixedUpdate - ... - Update - yield ... - LateUpdate 등의 이벤트 함수 순서를 이해하지 않은채 개발하고 있었어요.
옛날부터 보긴 했었는데 몰라도 개발 가능하니까... 하는 생각으로 무시하고 코딩만 했었지요.
이번에 씬 시작시 초기화 문제가 많이 발생하더라구요. 뒤늦게 Awake와 Start 함수를 구분해서 구현했는데요.
좀 더 Unity 기본과 기초적인 C# 문법등을 공부할 필요성을 느꼈습니다.
개선할 점
- MVP 구조 스터디
완성된 프로젝트를 보며 구조에 대해 더 공부를 해야겠습니다.
제가 구입한 완성 프로젝트 소스 말고도 유니티에서 기본 제공하는 샘플, 학습 프로젝트들이 많더라구요.
차기 게임을 준비하기 전에 이러한 완성 프로젝트들을 열어보고 찬찬이 살펴보려고 합니다.
- 네이밍(변수, 객체명, 함수 등)을 더 잘하고 싶다!
이번 개발 과정중에는 C# 변수 네이밍은 Rider가 추천해주는 룰을 따랐습니다.
- C#
- private 변수: privateVariable
- public 변수: PrivateVariable
- 클래스 멤버변수: ClassMethod
이전에는 private 변수를 _privateVariable, public 변수를 privateVariable 등과 같이 명명했었는데요.
제 방식에 특별한 철학이 있는 것이 아니었기때문에 Rider 기본 코딩 스타일에 맞춰서 작업했고, 마음이 편해졌습니다.
그런데 C# 코드가 아닌 부분은 무의식중에 막 쓰게 되더라구요.
개발 막바지에 보니, 아래와 같이 언더스코어와 하이픈을 혼용하고 있었습니다.
- DB: plus_minus_question_table
- Unity Analytics 커스텀 이벤트명: custom_ad_start
- GoogleSheet (Json): popup-window-title
네이밍 스타일에는 정답이 없다고 하지만, 어느정도는 규칙을 정해둬야 스트레스가 줄더라구요.
다음 개발때에는 네이밍 규칙도 미리 준비해야겠습니다.
암산 & 주산 포스트모템에서 기획과 프로그래밍 편을 정리해서 올렸습니다.
글도 좀 길고 대중에게 공감가는 내용이 아니어서 포스팅할까 말까 고민이 좀 있었는데요.
개인 기록, 자료로 남겨놓는 의미가 크고 혹시 몇 분이라도 도움드릴 수 있을까 생각하며 글을 작성했습니다.
user error : Error. B.