왜 C/C++이 아니라 파이썬으로 만들었나요?
사실 지오파이트를 파이썬으로 작성한 가장 큰 이유는 제가 대학에 입학해 생애 처음으로 접한 프로그래밍 언어가 파이썬이었기 때문입니다. 지오파이트 개발을 시작한 건 대학교 1학년 1학기였고, 제가 당장 가장 능숙하게 사용할 수 있는 언어는 파이썬이었습니다. 자연스럽게 지오파이트도 파이썬으로 작성하게 되었습니다.
물론 파이썬을 선택한 게 단순히 이 때문만은 아닙니다. 또 하나의 이유는 바로 생산성입니다.
"게임 로직의 복잡성을 통한 전략의 다각화"를 추구하는 정통 로그라이크 장르의 특성상,
지오파이트 역시 굉장히 복잡한 게임 로직을 가지고 있습니다.
이처럼 게임 로직이 복잡한 고전 로그라이크 장르의 게임은 개발하는데 상당히 오랜 시간과 노력을 필요로 합니다. 그 예시로 이 게임을 제작할 때 많은 영향을 받은 넷핵이란 게임은 오픈소스로 백 여명 이상의 개발자가 25여년 간 기여해 개발해서 제작되었습니다. 지오파이트는 지형이나 AI의 측면에서 넷핵 이상으로 복합적인 게임 로직을 목표로 삼고 개발되었기에, 혼자 개발해야 할 분량이 상당히 많았습니다.
여기에 더 나아가, 저는정통 로그라이크에 현대적인 요소를 접목하고자 그래픽이나 애니메이션의 추가, 보다 직관적인 조작방법을 도입했고, 뿐만 아니라 기존 로그라이크들보다도 더 생생한 던전의 느낌을 주고자 더 지능적인 AI, 더 다양한 지형 시스템 등을 시도했습니다.
이처럼 지오파이트가 지향하는 목표는 굉장히 높은데, 반면에 개발인력은 저 하나뿐이다 보니,
게임을 완성하기 위해서는 C계열 언어들보다는 생산성이 높은 파이썬이 더 적합하다고 판단해 파이썬을 선택했습니다.
파이썬으로 만드는 데 어려움은 없었나요?
게임을 개발하는 과정 자체도 많은 어려움이 있었지만, 파이썬의 언어적 특성으로 인해서도 많은 어려움을 겪었습니다.
개발하면서 파이썬은 복잡한 게임 메카닉을 갖고 있는 게임 개발에는 적합한 언어가 아니라는 것을 느끼고 있습니다.
그 이유는 여러 가지가 있는데,
1. 인터프리터 언어의 속도 상의 한계
2. GIL (Global Interpreter Lock)
3. Dynamic typed language 특유의 명시적이지 못한 코드
4. 포인터/레퍼런스의 부재
5. 저수준 메모리 관리의 어려움
6. Call By Assignment를 강제
7. Mutable한 객체들
정도가 가장 큰 문제점으로 느껴졌습니다.
저는 파이썬이라는 언어가 가진 단점을 극복하기 위해 많은 방법들을 고안해 사용했는데,
그 중 기억나는 것들을 간추리자면 다음과 같습니다.
1. 자주 활용되는 알고리즘들의 경우 C 기반 라이브러리와 연동해 사용
2. 큰 단위의 계산들에서는 numpy 활용
3. typing 을 적극 지향함으로써 최대한 Static typed language스러운 명료한 구조 형성
4. 구조를 체계적으로 설계하고, 또 수 차례 리팩토링을 반복함으로써 GC에 의해 걸러지지 않고 낭비되는 메모리가 없도록 설계
5. 특정 객체들에 대해 별도의 copy, delete 메소드를 제작
6. 객체의 정보를 컴포넌트화 시켜 구조적으로 게임이 지향하는 바(플레이어와 몬스터가 동일한 취급을 받는 것)를 안정적으로 구현함. 또한 데이터를 컴포넌트 별로 분류함으로써 객체의 복사 및 전달을 용이하게 만듬
물론 이러한 시도들에도 언어 자체가 주는 한계를 완전히 극복할 수는 없었습니다. 앞으로 파이썬으로 게임 개발을 할 일은 없을 것 같습니다.. ㅋㅋㅋ
사실 pygame과 같은 게임 전용 라이브러리를 사용했더라면 이 이상으로 생산성을 올리고 개발 기간을 훨씬 줄였으리라 생각되지만, 대학 새내기 시절의 저는 이상한 고집 아닌 고집 때문에 될 수 있는 한 최대한 모든 걸 제 손으로 제작해야 직성이 풀렸던 것 같습니다.
pygame까지도 갈 필요도 없이 당장 유니티같은 상용엔진을 굳이 사용하지 않은 것도, 기초적인 동작 원리도 파악하지 못한 채 남이 제작한 코드를 가져다 쓰는 데 거부감이 있었기 때문이라는 생각이 듭니다. (지금은 개발에 대한 이해도가 훨씬 늘어나기도 했고, 전반적으로 생각이 많이 변했습니다)
그래도 결과적으로는 당시의 그 고집 덕분에 제가 더 많이 성장할 수 있었다고 생각합니다. 유니티를 얕게 깔짝거리는 대신 3D 그래픽스나 객체지향 같은 보다 기반이 되는 기술들에 관심을 가지게 되었고,
'Yet another Unity game'이 아닌, 더 유니크하고, 제 자신에게도 더 소중한 프로젝트가 되었다고 생각합니다.
'게임 제작 > Geophyte (2020~2021)' 카테고리의 다른 글
Geophyte 알파 버전 릴리즈! (4) | 2021.10.08 |
---|---|
[Geophyte] 버그 원인을 파악하기까지의 사고의 흐름 (2) | 2021.09.08 |
[Geophyte] 사진으로 보는 개발과정 (0) | 2021.05.15 |
Geophyte(지오파이트) 소개 (3) | 2020.12.19 |