ALEngine - 자체 게임엔진 프로젝트
2024. 10 - 2025. 03
역할: 렌더링 개발
기여: 스켈레톤 애니메이션 및 GUI 개발, c# 스크립팅 API 구현, 데모 씬 구현
스택: c++, c#, Vulkan, cmake
팀/협업: ALEngine
개요
ALEngine은 Unity나 Unreal과 같은 상용 엔진을 벤치마킹하여 Vulkan과 C++ 기반으로 개발한 자체 게임엔진입니다. 물리엔진, 애니메이션 시스템, C# 스크립팅 API를 포함해 실제 게임 개발에 필요한 핵심 기능을 직접 구현하는 것을 목표로 했습니다.
팀은 2024년 10월부터 프로젝트를 시작했지만, 저는 다른 프로젝트를 진행하던 관계로 12월에 뒤늦게 합류했습니다. 초반 설계 단계부터 함께하지 못해 아쉬움이 있었지만, 합류 후에는 빠르게 기존 구조를 학습하고 적응하여 애니메이션 시스템과 스크립팅 API, 데모 씬 구현 등 핵심 기능을 맡아 기여했습니다.
역할과 기여
- 스켈레톤 애니메이션 및 상태머신 스켈레톤 애니메이션을 기반으로 한 애니메이션 블렌딩 및 상태머신을 구현하여, 두 애니메이션 간 자연스러운 전환을 지원했습니다. 함수 호출이나 이벤트 발생에 맞춰 변수값에 비례하여 애니메이션을 블렌딩할 수 있도록 했으며, 이를 편리하게 제어할 수 있도록 ImGui 기반 GUI도 개발했습니다.

-
C# 스크립팅 API 구현 (Mono)
엔진의 물리 관련 코드를 C# 스크립트와 연결하기 위해 Mono 기반 스크립팅 API를 직접 설계·구현했습니다. 특히 Rigidbody와 Collider 간 충돌 여부를 감지하고, 이를 API에서 확인해 어떤 오브젝트와 접촉했는지를 스크립트 단에서 활용할 수 있도록 했습니다. -
데모 씬 개발
실제 기능 검증을 위해 모델하우스 씬을 제작했습니다. 플레이어가 문 오브젝트와 상호작용해 열고 닫을 수 있도록 설정했으며, 위의 충돌 감지 기능을 응용해 문과의 상호작용을 구현했습니다
주요 개발 과정
-
ECS 기반 최적화
동일 모델을 여러 엔티티가 공유할 수 있도록 ECS(Entity Component System) 기반의 애니메이션 컴포넌트를 구현하여 성능을 최적화했습니다. -
상태머신 + GUI 지원 애니메이션 상태머신을 기반으로 블렌딩 로직을 설계하고, ImGui로 GUI를 개발해 엔진 사용자가 직관적으로 조작할 수 있도록 했습니다.
-
스켈레톤 애니메이션 응용 단순 본 애니메이션뿐 아니라, 오브젝트의 중점에 가상의 본을 배치해 트랜스폼 애니메이션을 구현하는 실험적인 기능을 추가했습니다.
트러블슈팅
- Mono GC 문제 해결
C# 스크립트를 로드할 때 GC가 메모리를 해제하거나 주소를 이동시키는 문제가 발생했습니다. 이를 해결하기 위해 강한 GCHandle을 구조적으로 관리하도록 리팩토링하여 안정적인 주소 반환을 보장했습니다. - 에디터 모드 애니메이션 렌더링 문제
기존 엔진 구조에서는 Pause 상태(에디터 모드)에서 렌더링이 중지되어 타임라인 조정 시 애니메이션 변화가 반영되지 않았습니다. 이를 개선하기 위해 엔진을 수정, 에디터 모드에서도 애니메이션 모델만 렌더링하도록 하여 작업 효율성을 크게 높였습니다.
아쉬운 점과 개선 방향
엔진 아키텍처를 참고해 제작했음에도 불구하고, 처음 시도한 프로젝트라 고려하지 못한 부분이 많았습니다.
- 스크립팅에 필요한 이벤트 시스템이 키 입력 이외에는 전혀 제공되지 않았고,
- 그 결과 스크립트에서 기능을 구현할 때 엔티티를 직접 순회하며 알맞은 엔티티를 찾아내는 방식으로 처리해야 했습니다.
이로 인해 충돌 감지 API를 구현했음에도, 스크립트 단에서는 사용 편의성이 충분하지 못했습니다. 다음에 다시 제작한다면 이벤트 시스템을 확장하고, 더 전문적인 애니메이션 기능을 제공하여 개발자 경험을 높이고 싶습니다.
협업 방식
프로젝트는 6개월 동안 매주 진행도 회의를 통해 목표를 설정하고 달성해 나갔습니다. 팀원들과 정기적으로 개발 상황을 공유하며 문제를 함께 논의하고, 각자의 파트를 조율해 엔진의 전체적인 완성도를 확보했습니다.
프로젝트 시연 데모
맺음말
ALEngine 프로젝트는 단순히 기능을 따라 만드는 수준을 넘어, 상용 엔진의 핵심 아키텍처를 직접 설계·구현하며 엔진 구조와 렌더링 파이프라인에 대한 깊은 이해를 쌓은 경험이었습니다. 특히, 애니메이션 시스템과 스크립팅 API를 직접 연결하고, 충돌 감지 및 상호작용까지 구현해낸 점은 단순한 클론을 넘어 실질적인 기능 개발 경험으로 이어졌습니다. 또한 부족했던 점을 자각하고 개선 방향을 명확히 제시한 과정은, 다음 프로젝트에서 더 완성도 높은 결과를 만들기 위한 밑거름이 되었습니다.