MonoGame - 바퀴를 재발명하는 사람들을 위한 게임 엔진
출처: Dev.to
Introduction
새 게임을 만들 때 가장 먼저 마주치는 질문 중 하나는 게임 엔진을 고르는 일입니다.
대부분이 알고 있는 주요 후보는 Unity, Unreal Engine, 그리고 Godot입니다.
하지만 이들 외에도 잘 알려지지 않은 2차 엔진들이 꽤 있습니다.
그 중 하나가 바로 MonoGame이며, 이번 글에서 바로 그 이야기를 다루겠습니다. 간략히 역사를 살펴보고, 선택할 가치가 있는지 논의한 뒤, 몇 가지 유용한 링크도 공유합니다.
C# 프로그래밍 언어는 2002년 마이크로소프트가 만들었습니다. 마이크로소프트는 이를 범용 언어로 포지셔닝하면서 다양한 분야에서 사용할 수 있는 기술과 라이브러리를 개발했죠. 그 중 하나가 2006년에 출시된 XNA입니다. XNA는 DirectX 9 기반으로, 당시 마이크로소프트 생태계(Windows, Xbox, Windows Phone)용 게임을 만들 수 있게 해 주었습니다.
XNA는 게임 개발 커뮤니티에서 곧 큰 인기를 얻었고, 자연스럽게 개발자들은 게임을 다른 디바이스와 운영체제에서도 실행하고 싶어했습니다.
그 요구에 대한 답이 MonoGame이었습니다. MonoGame은 XNA와 완전한 API 호환성을 유지하면서 Android, iPhone, Linux 등에서도 동작하도록 설계되었습니다.
2013년에 마이크로소프트는 XNA 지원을 중단했습니다. 그 결과 MonoGame은 마이크로소프트 플랫폼에서도 동작하도록 확장될 수밖에 없었습니다. 현재 MonoGame은 대체로 XNA 4 사양을 구현하고 있습니다. 즉, 그래픽, 오디오, 마우스, 키보드, 게임패드 등에 대한 비교적 저수준 접근을 제공하는 게임 하드웨어 추상화 레이어라고 할 수 있습니다.
동시에 MonoGame은 몇 가지 고수준 기능도 포함하고 있습니다:
- 선형대수와 3D 기하학 라이브러리. 행렬, 벡터, 레이, 변환 등. 원근 및 직교 투영 행렬을 만드는 메서드가 풍부하고, 바운딩 박스·구 등도 지원합니다.
- SpriteBatch – 2D 그래픽 작업을 위한 궁극적인 도구이며, 텍스트 렌더링도 가능합니다.
- 오디오 라이브러리.
- Content Pipeline – 에셋을 처리하고 런타임에 적합한 포맷으로 변환하는 프레임워크. 다소 논란이 있는 기능이며, 개인적으로는 원시 형태로 에셋을 로드하는 것이 더 낫다고 생각합니다.
- 간단한 3D 모델 라이브러리. 하지만 두 가지 큰 문제가 있습니다: Content Pipeline에 강하게 의존해 런타임에 동적으로 모델을 생성할 수 없으며, 애니메이션 지원이 부족합니다. 그래서 저도 사용하지 않습니다.
- 몇 가지 기본 3D 셰이더. 예를 들어 BasicEffect(Blinn‑Phong 모델 기반 조명)와 SkinnedEffect(스켈레톤 애니메이션 지원) 등이 있습니다. 이 글의 처음에 보인 데모도 이러한 셰이더 위에 구축되었습니다. 다만 방향광만 지원하고, 포인트 라이트와 스포트 라이트는 지원되지 않습니다.
밈은 거의 맞습니다. 다만 이 말은 주로 아주 단순한 2D 게임에 해당한다는 점을 명확히 해야 합니다.
일반적인 경우라면, 개발 효율성을 최우선으로 한다면 Unity나 Unreal을 권합니다.
하지만 효율성이 최우선이 아니고 개발 과정을 즐기고 싶다면 MonoGame을 선택할 만한 이유가 몇 가지 있습니다.
- C#에 대한 애정 – Unity도 C#을 지원하지만, Unity는 오래된 언어 버전과 런타임을 지원하도록 자체 프레임워크를 사용합니다. 반면 MonoGame은 최신 Microsoft .NET 생태계 위에서 동작합니다.
- 오픈소스와 관용적인 라이선스에 대한 호감.
- “코드로 생각한다”는 사고방식을 가진 사람이라면, Unity·Unreal·Godot와 같은 디자이너 중심 접근보다 MonoGame이 제공하는 ‘벌거벗은’ 게임 루프 방식을 선호할 수 있습니다.
- 기술적인 디테일을 파고들고 휠을 재발명하는 즐거움 – MonoGame용 라이브러리가 많이 존재하지만(이 글의 저자도 몇 개 만들었습니다), 게임에 필요한 모든 기능을 바로 찾기란 쉽지 않습니다. 대부분 직접 라이브러리를 만들거나 기존 것을 확장해야 할 것입니다.
Official MonoGame Site
MonoGame 공식 사이트를 방문해 보세요. 특히 Showcase 페이지에서는 XNA/MonoGame으로 만든 유명 타이틀(예: Terraria, Stardew Valley)을 확인할 수 있습니다.
FNA - Another XNA Implementation
FNA는 또 다른 XNA 구현체이며, 관심이 있다면 살펴볼 만합니다.