[BOB - Basis Of Bitwise] 제작 후기 - soo:bak
작성일 :
제작의 후기 글인 만큼, 먼저 게임 플레이를 즐겨주신 후 읽어주시면 더욱 재미를 느끼실 수 있는 글이 될 것 같습니다.
BOB - Basis Of Bitwise 다운로드 - 구글 플레이 스토어
BOB - Basis Of Bitwise 다운로드 - 앱 스토어
제작 배경
나는 게이미피케이션(Gamification)
에 관심이 많다.
사실, 관심이 많은 정도가 아니라, 하나의 ‘꿈’ 이자 ‘인생의 목표’ 중 하나가 해당 분야에서 유명해지는 것이다.
나는 어렸을 때 부터 게임을 굉장히 좋아했다.
많은 사람들이 게임에 대하여 부정적인 인식을 가지고 있지만,
나는 분명히 게임을 통해서 인생에 긍정적인 부분들을 많이 얻어왔다고 확신한다.
‘월드 오브 워크래프트’ 라는 게임의 공격대장 활동으로 큰 사회성과 리더쉽을 기를 수 있었고,
‘리그 오브 레전드’ 라는 게임을 통해서는 ‘지나친 경쟁’ 의 폐해와 사람들이 얼마나 ‘경쟁’ 이라는 요소에 몰입하는지 배울 수 있었다.
‘리그 오브 레전드’ 와 같은 장르의 게임이지만, 흥행에 실패한 게임인 ‘히어로즈 오브 스톰’ 이라는 게임의 사례로 ‘공유 주의’ 의 단점을 알 수 있었으며,
위의 유명한 게임들 이외에도 정말, 다양한 게임들을 통해서, 인생에 있어서 도움이 되는 많은 부분들을 얻을 수 있었다.
물론 모든 게임에 긍정적인 부분만 있다는 것은 아니다.
분명히 게임의 부정적인 요소들도 존재한다.
하지만, 부정적인 요소들의 원인은 대부분 ‘게임’ 그 자체에 있다기 보다는 게임 세계 속으로 빠져들게 만들 수 밖에 없는 다른 부분들에 있다고 생각한다.
‘게임 중독’은 ‘질병’이 아니라 ‘증상’ 이라고 생각한다.
어떠한 문제들로 생겨난 진짜 ‘질병’ 때문에 나타나게 된 ‘증상’ 말이다.
이런 생각을 갖고 있기 때문에 내가 ‘게이미피케이션’ 에 관심이 많은 것 같다.
관련된 이야기는 추후에 따로 다루도록 하겠다.
따라서, 우선 간단하게라도 ‘게이미피케이션’ 을 적극적으로 적용한 게임을 직접 제작해보며…
내게 필요한 성장의 발판을 만들고자…
제작하게 된 게임이 BOB - Basis Of Bitwise
이다.
우선, 이 게임의 제작 목표는 발판 을 만드는 것 이었다.
아직 게이미피케이션 분야와 관련하여 레퍼런스가 없는 나에게 필요한 발판.
따라서, 여러 요소들 중 가장 크게 고려한 것 중 하나는 ‘홍보’ 가능성 이었다.
사실, 내가 좋아하거나 내가 학습하고 싶은 주제로 게임을 만들고 싶은 마음도 있었다.
하지만, 이 게임의 제작 목표를 고려하여 정한 주제가 바로 ‘비트 연산’ 이다.
제작 시작 당시, 그리고 지금도 나는 42Seoul
이라는 개발자를 꿈꾸는 분들로 구성되어 있는 커뮤니티에 속해있는데,
해당 커뮤니티에는 42서울 채널에만 약 2,000 여명
, 그리고 42Paris, 42Tokyo 등을 포함하여 전 세계 채널에는 약 10만명
이상의 사람들이 속해있다.
나는 이 부분을 활용하고 싶었다.
따라서, 게임의 주제를 고민할 때 다음과 같은 내용들을 우선적으로 고려하였다.
- 개발자, 혹은 개발자 지망생들이 학습에 관심이 있을만한 주제일 것
- 나의 게이미피케이션 관련 철학 중 하나인
'낯선 것을 자연스럽게 즐기며 익히도록 할 수 있는'
주제일 것
위 내용들을 고려한 결과 설정한 주제가 비트 연산이다.
사실, 비트 연산은 컴퓨터의 가장 기본적인 원리이자, 한 번 익숙해지고나면 전혀 어려운 내용이 아니라고 생각한다.
하지만, 현재에는 개발 분야의 많은 부분들이 발전되었기에 원리를 알지 못하더라도 비교적 편리하게 개발을 진행할 수 있다.
그럼에도 불구하고, 어떠한 것의 ‘기본적인 원리’ 를 아는 것은 아주 중요하다고 생각한다.
단순히 ‘학습하기 힘들다’는 이유만으로 배제하기에는 아쉬운 개념이다.
그리고 코딩 테스트와 알고리즘 풀이, 네트워킹, 게임의 아이템 플래그 설정 등 많은 부분들에서 비트 연산은 아주 훌륭한 도구가 된다.
하지만, 나 역시도 ‘굳이 학습해야 하나?’ 라는 생각이 든 적도 있었기에, 학습의 힘듦을 알고 있다.
따라서, 이런 부분들을 이겨내고 비트 연산에 대하여 사람들에게 ‘재미있게 익숙해지며 학습할 수 있도록’ 하고 싶었다.
내가 학습과 관련하여 가장 좋아하는 말 중 하나는 "어려운 것이 아니라 익숙하지 않아서 낯선 것이다."
이다.
살다보면 새로운 것을 학습해야 될 때가 많다.
보통 새로운 것은 '낯설기 때문에'
학습하기에 힘듦이 있는 것이라고 생각하는데,
때떄로 사람들은 '어렵기 때문에'
힘들다고 생각하는 것 같다.
물리학, 철학, 수학 등등… 일반적으로 하나의 학문으로 정립된 분야들의 심도있는 부분들,
그리고 예술과 고도의 신체적 능력이 필요한 분야 등등… 이야 말로 정말 ‘어려운 것’ 이라고 생각하며,
일반적인 사람들에게 구구단 외우기, 올바른 헬스 운동의 자세, 새로운 전자기기를 다루는 방법 등등 정말 많은 부분들은,
'어려운 것' 이 아니라 '낯선 것'
이기 때문에 학습하는 데에 힘듦이 있는 것이라고 생각한다.
시대가 발전하면서, 그리고 많은 훌륭하신 분들의 노력으로,
어려웠던 것들이 점점 줄어들고, 낯설 뿐인 것들이 점점 더 늘어나고 있는 것 같다.
나도, 사람들에게 "학습하기 어렵다고 생각하는 것들 중 많은 부분들이, 사실은 그저 낯선 것일 뿐, 익숙해지면 된다"
라는 것을 전달하고 싶다.
'재미'
라는 요소를 통해서,
그리고 '게임'
이라는 통로를 통해서 말이다.
기획
혼자 개발을 진행했기 때문에, 기획은 그저 노트에 끄적이며 진행했다.
내가 알아볼 수 있을 정도로 작성하였기 때문에,
기획된 내용을 다른 사람들에게 전달하기에는 정말 큰 장벽이 있는 노트이다.🥲
부끄럽지만, 일부만 조금 공개한다.
가장 큰 기획 의도는 위의 제작 배경 에서 설명하였으므로,
기획을 진행할 때 초점을 맞춘 다른 부분들에 대해서 설명하고자 한다.
우선은, 게임 리소스
이다.
나는 그림 실력이 정말 형편없다.
따라서, 최대한 단순한 그림으로도 만들 수 있는 게임을 제작하는 것을 목표로 삼았다.
사실, ‘그림’ 이라고 부르기도 애매하다.
이 부분이 기획에 있어서 가장 크게 초점을 맞춘 부분 중 하나라는 것이 좀 슬프기도 하다…
두 번째는, '어떻게 하면 자연스럽게 플레이하면서 학습을 진행할 수 있을까?'
였다.
즉, '학습'
자체가 목표가 되지 않고 '게임 플레이'
자체가 목표가 되면서, 자연스럽게 ‘학습’ 이 되도록 디자인하려 최대한 노력했다.
예를 들어서, ‘Q-플레이’ 혹은 ‘퀴즈퀴즈’ 라는 이름의 게임에서처럼 ‘문제를 내고 맞추는 방법’ 으로 유저의 학습을 진행시키는 것이 아니라,
블록을 일치시키게 만드는 하나의 게임 과정을 자연스럽게 진행하면서, 비트 연산에 대해서 학습이 되도록 기획하는 것에 초점을 맞췄다.
세 번째는, 기획서를 지나치게 자세하게 작성하지 말자는 것이었다.
사실, 이 부분은 협업을 하는 경우에는 큰 단점이 되겠지만, 나는 혼자 개발을 진행하므로 기획서가 자세하지 않아도 된다는 장점이 있었다.
이 점을 적극적으로 활용하면서, 전체적인 큰 틀만 기획서로 작성하고 나머지 부분에 대해서는 그 때 그 때 깃허브 이슈를 활용하여 문서화하였다.
덕분에, 문서화 작업에 소모되는 시간이 상당히 줄어들었고, 높은 효율성으로 게임을 제작할 수 있었다.
다만, '다른 사람에게 전달하기 위한 문서화' 작업에 소요되는 자원만 줄였을 뿐
,
'내가 스스로, 틈틈히 프로젝트의 진행을 확인하기 위한 문서화'
는 정말 꼼꼼하게 진행하였다.
프로토타입
사실, 정말 많은 프로토타입들이 있었다.
연산자 버튼의 개수를 조절해보기도하고, 원하는 블록을 없애거나 바꾸는 아이템을 추가해보기도 하고,
디자인적으로 이펙트를 미리 조절해보거나, UI 의 배치 및 게임 진행 방식에 대해서도 다양한 프로토타입을 만들었었다.
하지만, 역시 가장 중요한 것은 처음 기획의도인 '쉽게 플레이하면서 익숙함으로 학습하는 것'
이었기 때문에,
복잡하고 어려운 부분들은 최대한 배제시키고, 누구나 쉽게, 그리고 자연스럽게 게임을 플레이할 수 있는 방향으로 점점 설계해나갔다.
사실, 개발을 마친 지금도 아직 십진수 블록
과 이진수 블록
사이를 매칭시키는 부분과 블록 변경 아이템
부분을 없앤 것은 조금 아쉽기도 하다.
하지만, 최종적으로 복잡하지 않게 플레이 가능한 게임이 제작되었다는 점에서 만족한다.
개발
클라이언트
클라이언트 개발은 Unity
로 진행했다.
우선 언리얼 엔진과 유니티, 두 가지의 상용 엔진 선택지가 있었는데,
당시의 나는 C++
이 C#
보다 익숙하였지만,
- 1인 개발을 진행한다는 점
- 모바일 게임을 출시한다는 점
위 두가지 사실로 인해, ‘Asset Store’ 와 커뮤니티가 비교적 더 활성화되어 있고, 모바일에 친숙한 Unity를 선택하였다.
프로젝트 개발 초반에 있어서, Unity를 다루는 부분에 있어서는 김종필 멘토님 의 도움이 굉장히 컸다.
사실, Unity 뿐만 아니라 프로젝트의 방향성, 이슈 관리, 그리고 무엇보다도 여러모로 심적으로도 많이 지지해주시는 부분이 너무 감사했다.
진심으로, 너무 감사하고 또 감사하다.
클라이언트 개발 자체는 정말 재미있었다.
내가 원하는대로, 내가 구현하고자 하는 내용을 그대로 구현하고 눈으로 직접 확인한다는 점이 클라이언트 개발의 큰 매력인 것 같다.
심지어 기획도 내가 진행하므로, 느끼는 재미가 배가 되었던 것 같다.
다만, 디자인 패턴과 C#
언어를 공부하면서 개발을 진행하였기에, 지금 생각해보면 최초의 설계와 구현을 그렇게 하지 말걸… 하는 후회되는 부분들도 있다.
특히, 싱글톤 패턴을 너무 남발한 것, 그리고 객체 지향 프로그래밍을 한다고 굳이 불필요한 상속 및 오버라이딩 등을 진행한 것(지금 생각 했을 때 기준) 등이 아쉽다.
또한, 개발을 진행하면서 외부 플러그인을 사용할 때, 플러그인들 간의 의존성 문제가 종종 발생했는데 이 문제는 정말 해결하기가 너무 어렵고 답답했다.
하지만, 그냥 앉아서 뭐라도 검색하고, 무슨 코드라도 한 줄 더 치면서 시도해보면 뭔가 나아가는 거다
라는 생각으로 무작정 앉아서 뭐라도 했다.
조금은 무식한 방법일 수 있겠지만, 계속 마음을 다잡으면서 앉아서 검색하고, 코드를 수정해보면서 조금씩 조금씩 앞으로 나아갔다.
또한, 모바일 최적화 문제 부분도 힘들었던 부분들 중 하나이다.
화려한 이펙트와 멋진 애니메이션을 삽입했을 때, PC 에서는 정말 잘 작동이 되었지만,
모바일에서는 발열, 혹은 C#
의 가비지 콜렉터가 돌아가면서 버벅이는 부분들이 생겨나고는 했다.
이럴 때는 Unity 프로파일러
를 사용해서 튀는 부분을 점검하고, 수정하였으며,
해상도와 프레임 관련 최적화 설정, Unity 에반젤리스트 님들의 강의를 통해 최적화를 진행했다.
열심히 PC 에서 개발한 내 멋진 프로젝트가, 정작 모바일에서는 뜨거운 손난로가 되어 배터리를 빨리 소모시킬 때의 실망감은 정말 이루 말할수가 없었는데,
여러가지 최적화 기법 등을 숙지하고 적용한 후, 모바일에서 잘 진행되는 내 게임을 처음 플레이 했을 때의 기쁨 또한 이루 말할수가 없었다.
모바일 게임 개발에서 최적화는 정말 중요하면서도 어려운 부분 중 하나인 것 같다.
또한, 모바일 기기 간 다양한 해상도에 따른 문제, 안드로이드 및 iOS 간의 설정값 분기, 개발을 진행하면서 다양한 문제들을 부딪히고 배웠다.
프로젝트 론칭 후, 차근 차근 내가 사용했던 최적화 기법들 중 코드는 라이브러리화 하여 깃헙에 올릴 예정이며,
기타 최적화 관련 유니티 설정과 마주쳤던 이슈 및 에러 해결 상황들은 잘 정리해서 블로그에 올릴 예정이다.
리소스
스프라이트 아틀라스, 배칭, 드로우콜, 프리로딩 등 리소스 관리와 관련된 용어들의 개념 등은 기존에도 이해하고 있었다.
이 점이 이번 개발에서 좋은 밑바탕이 되었던 것 같다.
스프라이트들도 아틀라스화 하려고 노력했으며, 리소스 관리 측면에서도 내가 알고 있던 개념 뿐만 아니라 조금씩 더 공부하며 관리를 진행했다.
하지만, 공부할 수록 조금 허탈해지는 부분들도 있었다.
에를 들어, Unity 는 모든 스프라이트들을 자동을 아틀라스화 시켜주는 설정이 있다.
옵션 하나만 체크하면 된다.
아트 리소스의 경우, 처음에는 동그라미 네모도 잘 못그리는 그림 수준이었지만,
점점 발전해서 언젠가부터는 어느 정도 이상 수준의 아이콘과 애니메이션도 재미있게 만들 수 있게 되었다.
다만, 아직 정교하고 멋진 그림을 그릴 수 있는 실력은 아님을 잘 알기에,
일부러 약간의 낙서 느낌이 나도록 게임 아트 컨셉을 설정했다.
약간 초등학생이 공부하면서 노트 필기를 하는 느낌으로 설정했다.
서버
서버는 Firebase
를 이용하였다.
내가 원하는 것은 단순히 유저들의 닉네임과 최고 점수를 서버에 저장하고,
각 유저별 순위를 불러오는 단순한 기능이었기 때문에, 자체 서버를 구현하지는 않았다.
또한, Unity 와 Firebase 는 안드로이드 기준으로 호환이 아주 잘 된다는 장점도 매력적이었다.
iOS 의경우 M2 에서 2023년 07월 기준 firebase SDK 와 cocoapods, ruby가 호환이 안되는 문제가 있다.
Unity 와 Firebase 의 연동은 쉽게 연동할 수 있도록 되어 있어서,
기본적인 개념만 공부하고 숙지하고 나면 쉽게 개발할 수 있도록 되어 있다.
사실, 단순한 기능들 뿐이기 때문에 게임 서버라고 부르기도 부족하지만,
직접 클라이언트와 서버를 연동하고, 유저들의 정보를 갱신하는 나만의 게임을 만들었다는 점에서 굉장히 기쁘다.
또한, 유저 로그인은 안드로이드의 경우 Google Play Games Service
를 이용하여 로그인되도록 하였으며,
iOS 의 경우, Game Center
을 통해 로그인 되도록 하였다.
만약, 유저가 네트워크와 연결이 안된 상황이거나, 두 플랫폼을 이용하지 못하는 상황에서는,
클라이언트에서 유저 정보를 식별 후, C#
의 Guid 클래스를 통해 고유한 UUID(Universally Unique Identifier)
를 생성해서 서버에 등록하고 요청을 주고받을 수 있도록 처리했다.
BM, 수익 창출
사실, 제작 경험을 만들기 위한, 그리고 교육을 목표로 하는 게임이다 보니,
BM 을 설정하기가 쉽지 않았다.
교육용 게임에서 자꾸 광고가 나온다거나, 가챠를 유도한다면…
따라서, 간단한 보상형 광고와 IAP 로 후원을 유도하는 방식으로 BM 을 설정했다.
솔직히, 수익 창출을 위해 만드는 게임이 아니기 때문에 BM 을 넣고 싶지 않았지만,
이번 기회에 광고, IAP 구현 등을 학습하고 싶어서 열심히 공부하며 직접 구현한 것의 의미가 크다.
로컬라이제이션
게임의 지원 언어는 한국어, 영어, 그리고 프랑스어 이다.
한국어와 영어의 경우 로컬라이제이션을 진행하는 데에 크게 문제가 없었지만,
프랑스어의 경우 좀 난감했다.
사실 영어만 하더라도 인터넷 번역기를 사용하면 어색한 문장이 많이 나오는데,
프랑스어의 경우 아예 모르기 때문에, 번역기를 사용한다면 잘못된 문장이 있는지 없는지 조차 알 수 없기 때문이다.
따라서, 프랑스어에 능숙한 지인과 커뮤니케이션을 주고 받으며 로컬라이제이션을 진행했다.
힘듦에도 불구하고 굳이 프랑스어까지 현지화를 진행한 이유는,
바로 42
커뮤니티 중 가장 유명한 캠퍼스이자, 본 캠퍼스인 에꼴42
가 프랑스에 있기 때문이다.
마켓 관리
이 부분 또한 학습해야 할 부분들이 많았다.
개인정보처리방침, 서비스이용약관, 14세미만 아동 관련 광고 제한 이슈, 시장 타겟 등등,
여러 이슈들을 접하면서, 법적인 부분 뿐만 아니라 마켓의 정책적인 부분들도 재미있게 학습할 수 있었다.
그리고, 마침내 2023년 7월 15일, BOB - Basis Of Bitwise
를 출시했다.
재밌는 여정이었다.
마무리
개발 단계에서 마주쳤던 이슈 해결 방법, 코드, Unity 설정 등에 관한 경험은 추후 해당 블로그에 올리도록 하겠습니다.
또한 라이브 서비스 이후에 대한 리뷰도 작성 예정입니다.
긴 글 읽어주셔서 감사합니다.
재밌게 즐겨주셨으면 좋겠습니다.
플레이해주시고, 후기글도 읽어주신 모든 분들께 감사한 마음을 담아 인사드립니다.
감사합니다.
soo:bak 드림.