Engo
Engo는 Go로 작성된 오픈 소스 2차원 게임 엔진이다. 엔티티 컴포넌트 시스템(Entity-Component-System, ECS)을 중심으로 게임 세계와 로직을 구성하며, 창 생성·입력·렌더링 등의 공통 작업을 처리하는 런타임과 여러 게임 시스템을 제공한다. 복잡한 시각적 에디터보...
| 분류 | 게임 엔진, 2차원 게임 개발 프레임워크 |
|---|---|
| 개발 언어 | Go |
| 기원 | Engi 프로젝트, 이후 ECS 지향 엔진으로 발전 |
| 개발 주체 | EngoEngine 오픈 소스 커뮤니티 |
| 핵심 설계 | ECS |
| 주요 구조 | engo, common, 별도 ecs 패키지 |
| 렌더링 | OpenGL 기반 2D 렌더링 |
| 기능 | 스프라이트, 카메라, 타일맵, 입력·오디오 |
| 데이터 | TMX 타일맵, 스프라이트 시트 등 |
| 지원 플랫폼 | Windows, macOS, Linux |
| 추가 플랫폼 | Android·iOS, WebAssembly 빌드 |
| 개발 방식 | Go 패키지와 ECS 시스템 구현 |
| 공개 라이선스 | MIT License |
| 공식 홈페이지 | engoengine.github.io |
| 소스 코드 | EngoEngine/engo |
Engo는 Go로 작성된 오픈 소스 2차원 게임 엔진이다. 엔티티 컴포넌트 시스템(Entity-Component-System, ECS)을 중심으로 게임 세계와 로직을 구성하며, 창 생성·입력·렌더링 등의 공통 작업을 처리하는 런타임과 여러 게임 시스템을 제공한다. 복잡한 시각적 에디터보다는 Go 코드 안에서 객체의 데이터와 동작을 조립하는 방식에 중점을 둔다.[1]
Engo는 원래 Engi라는 일반 Go 게임 엔진에서 출발했다. 이후 ECS 아키텍처를 도입하려는 개발 흐름에 따라 포크와 여러 차례 재구성이 이루어졌고, Engo라는 독립된 이름과 조직으로 공개됐다. 따라서 Engo는 기존 Engi와 역사적으로 이어지지만 현재의 모듈 구조와 객체 관리 방식을 설명할 때에는 Engo 프로젝트의 공개 API를 기준으로 이해해야 한다.
런타임의 최상위 engo 패키지는 창과 OpenGL 컨텍스트 생성, 프로그램 실행과 입력 처리를 담당한다. common 패키지에는 렌더러, 카메라와 같은 게임에서 자주 사용하는 ECS 시스템 구현이 포함된다. ECS의 Entity는 식별자를 가진 객체이고 Component는 위치·시각 표현·상태 등의 데이터를 보유하며 System은 그 데이터를 매 프레임 갱신한다. 이 구조는 화면 표시와 물리 계산, 입력 처리 같은 서로 다른 동작을 독립적으로 조직하는 데 활용된다.[2]
개발자는 필요한 시스템을 세계(World)에 등록하고, 컴포넌트를 가진 개체를 추가하여 게임플레이를 작성한다. 렌더링 시스템은 스프라이트와 카메라를 처리하고, 외부 시스템이나 확장을 통해 충돌 검사·오디오·타일맵 등을 결합할 수 있다. 공식 예제에는 카메라 이동과 HUD, 타일맵, 스프라이트 시트 이용 사례가 있어 단일 화면부터 여러 장면을 갖는 2D 게임까지 단계적으로 구성할 수 있다.[3]
Engo는 Windows, macOS, Linux를 기본 실행 환경으로 설명하고 Android·iOS와 웹을 위한 빌드 지원도 제공한다. 브라우저 지원은 WebAssembly 빌드와 관련되고 각 플랫폼은 Go 버전 및 그래픽스·입력 라이브러리 조건에 영향을 받는다. 과거 engo.io 도메인을 사용했지만 해당 도메인은 만료돼 프로젝트는 github.com/EngoEngine/engo의 import 경로 및 GitHub Pages 문서로 안내하고 있다.[4]
Engo와 기본 ECS 구현은 MIT 라이선스로 공개된다. 소스 코드와 데모 프로그램은 개발자가 자신에게 필요한 렌더링·게임 규칙과 부가 시스템을 구성하는 참고 자료가 된다. 같은 Go 언어를 이용하는 Ebitengine과 비교할 때 Engo는 ECS를 기본적인 세계 구성 모델로 제시한다는 차이가 있다. 프로젝트에서 사용하는 외부 오디오와 그래픽스 라이브러리의 라이선스 및 빌드 조건은 별도로 확인해야 한다.