Eva.js
Eva.js는 웹 브라우저에서 2차원 게임과 인터랙티브 콘텐츠를 제작하기 위한 오픈 소스 게임 엔진이다. JavaScript 생태계에 속하며, 엔티티 컴포넌트 시스템(ECS) 아키텍처로 게임 객체를 구성하고 PixiJS를 이용하는 렌더링 시스템을 플러그인 형태로 연결한다. 브라우저 기반...
| 분류 | 게임 엔진, 웹 기반 2차원 인터랙티브 엔진 |
|---|---|
| 개발 주체 | Eva.js 오픈 소스 프로젝트 |
| 개발 언어 | JavaScript, TypeScript |
| 주요 실행 환경 | 웹 브라우저 |
| 핵심 구조 | ECS |
| 런타임 객체 | Game, GameObject, Component, System |
| 렌더링 | PixiJS 기반 플러그인 |
| 그래픽스 | WebGL 및 환경별 Canvas·WebGPU 백엔드 |
| 기능 | 이미지·텍스트·스프라이트·애니메이션 |
| 확장 | 플러그인식 렌더러·자산·UI 시스템 |
| 패키지 관리 | npm 모듈(@eva/*) |
| 주요 대상 | 2D 웹 게임, 상호작용형 콘텐츠 |
| 라이선스 | MIT License |
| 공식 문서 | eva.js.org |
| 공개 소스 | eva-engine/eva.js |
Eva.js는 웹 브라우저에서 2차원 게임과 인터랙티브 콘텐츠를 제작하기 위한 오픈 소스 게임 엔진이다. JavaScript 생태계에 속하며, 엔티티 컴포넌트 시스템(ECS) 아키텍처로 게임 객체를 구성하고 PixiJS를 이용하는 렌더링 시스템을 플러그인 형태로 연결한다. 브라우저 기반의 사용자 인터페이스와 상호작용, 애니메이션 및 간단한 게임 로직을 조합하는 데 적합하도록 설계됐다.[1]
Eva.js의 엔진 코어는 Game, GameObject, Component, System, 자산 관리 기능과 실행 루프로 구성된다. 개발자는 게임 객체에 위치와 이미지, 동작 또는 사용자 정의 컴포넌트를 연결하고, 시스템을 통해 특정 유형의 데이터를 처리한다. 이 구조는 게임 상태 데이터와 해당 데이터를 그리거나 갱신하는 코드를 분리해 확장 가능하게 만들려는 ECS 설계에 기반한다.
렌더링은 @eva/plugin-renderer와 이미지·텍스트·스프라이트 같은 개별 플러그인을 통해 처리한다. 코어가 모든 화면 표시 기술에 직접 묶이지 않도록 PixiJS의 그래픽 기능을 어댑터로 추상화하고, 필요할 때 사용되는 렌더링 컴포넌트를 추가하는 방식을 채택한다. 배경 이미지와 여러 프레임으로 된 스프라이트, 텍스트, 벡터 도형 및 UI 요소를 결합해 대화형 장면을 만들 수 있다.[2]
프로젝트는 일반적인 JavaScript 의존성 관리 도구를 사용한다. 핵심 패키지인 @eva/eva.js에 필요한 렌더링과 자산·상호작용 관련 패키지를 더하는 형태이며, 개발자는 웹 애플리케이션의 실행 단계에서 게임 객체와 시스템을 초기화한다. 별도 패키지의 경계는 사용자 인터페이스와 애니메이션, 리소스 로더와 같은 기능을 코어와 독립적으로 개선하도록 한다.
2026년의 공개 소스에서는 브라우저 환경의 WebGL·Canvas 및 일부 WebGPU 렌더링 선택, UI 컴포넌트와 오프스크린 캔버스를 사용하는 워커 기반 구성 등에 관한 자료를 제공한다. 개별 기능의 실행 가능 여부는 Eva.js와 PixiJS 버전, 브라우저 지원 및 설정에 영향을 받는다. HTML5 Canvas와 WebGL 등 웹 플랫폼의 구성 요소를 활용하므로 별도의 네이티브 실행 파일을 배포하지 않고 웹 서비스에 게임 콘텐츠를 통합할 수 있다.
Eva.js의 소스는 MIT 라이선스로 제공되며 프로젝트 저장소에 예제, 문서와 여러 npm 패키지가 포함돼 있다. 동일한 JavaScript 게임 엔진이라도 Excalibur.js가 장면과 Actor 및 기본 물리·입력 API를 중심으로 개발 경험을 제공하는 데 비해, Eva.js는 ECS와 기능별 렌더링 플러그인의 조립 방식을 더 전면에 둔다. 엔진 코드의 라이선스와 프로젝트에 포함된 이미지·글꼴·외부 애니메이션 도구의 권리는 구분해야 한다.[3]