My Favorite ECS Game Engines

Alexander Avery

Sat | May 29, 2021

game-dev A blurred train zooming past the camera at sunset

Personal Favorite ECS Game Engines

Over the last 8 months, I’ve been writing an ECS engine in Python for Happy Wizard. It’s been a great learning experience, and I’ve managed to happily surpass my expectations.

Though I will continue developing the engine and Happy Wizard, I’ve had the desire to complete a game and focus on developing game mechanics rather than an engine.

I’ve opted to look for a simple, existing ECS engine to use and share my thought process of considering each for you to adapt or critique.

Why a simple engine?

If you have been reading my posts for a while you may know that I appreciate simple systems, and try to draw as much potential as possible out of them. Specifically for this project, it’s difficult to find an ECS engine I like that can compile for each platform I may want. By picking a simple engine, I have a better chance at developing support for the platforms I need if they do not already exist.

The main platforms I want to compile for are Linux, MacOS, and Windows, though it’s possible I’ll build for Android or iOS in the future.

Bevy - Rust

Bevy is a relatively new engine written in Rust. Bevy has support for 2D and 3D rendering, though I only need 2D for the foreseeable future. But, if I ever delve into 3D games it would be nice to use an engine I’m familiar with.

Bevy UI

Bevy also has a UI system that allegedly works similarly to flex box. UI typically gives me the biggest problems when it comes to game development, so I would be interested to see how I would manage with this approach.

There are few existing components, so it’s far from engines like Godot that have implemented dropdowns, radio buttons, and checkboxes. This could be a significant setback if the game has a lot of UI controls, but no other engine I considered had a full suite of UI controls anyway.

Bevy Book and API Docs

Between standard Rust-style books, and API documentation, there is plenty to learn for intermediate use of the Bevy engine. Unfortunately, many of the new modules and structs don’t have descriptions of what they are for in the official API docs. This doesn’t mean they are unlearnable, only that they will take more time to learn.

Bevy documentation even covers some Cargo compile flags, which is helpful to know for more than just game development.

Available Examples

The examples are nicely organized, and span a decent rage of use cases. These examples cover UI, so hopefully I can get up to speed quickly.

Bevy supports plugins, of which there are many, though it’s unlikely I’ll need anything over what the base engine provides. At the very least, they serve as extensive examples that I can reference for networking, physics, AI, or animation systems.

Familiarity with the Language

The applications I’ve developed in Rust are rather small, but I anticipate that learning Bevy will be more of a hurdle than improving my skills with Rust. Personally this is neither an incentive nor a deterrent.

Engo - Go

Engo has been around for just a few years more than Bevy, and is written in one of my favorite languages! Engo also already has support and documentation for building on Android.

Engo Docs

Engo documentation seems to be complete for each feature. Every package and struct has at least a description of the intended use, and many of them have examples directly in the documentation. Engo v1.0.0 was released in 2018. No big features have been added since, and this stability has given time for copious documentation to be created.

There are several tutorials that read like the Bevy book, covering more topics such as animation, cameras, shaders, tile maps, and Box2D Physics.

Available Examples

The “demo” repository seems comparable to Bevy examples, and covers beginner to intermediate topics.

Familiarity with the Language

I’ve spent more time developing in Go than almost any other language. Learning the engine would be the only hurdle to getting started, and that is a good position to be in.

Prototypes and dev logs incoming

One of the most heralded methods of developing games involves creating small, incremental prototypes. I will likely start by building a prototype in Engo, and will reconsider Bevy if I run into UI issues that Bevy can solve.

I hope to have a playable prototype in about a month, so subscribe to my RSS feed if you want to see all updates and dev logs!

Next: Go, One Year Later
Previous: Considering Debian and Arch
>> Home