Blog

The Great Infinite Fleet Reset - Migrating Away From ECS

(Scroll down for the TL;DR, Commander)

This is a crucial time for Infinite Fleet.

It’s been almost a year and a half since we really ramped up the team to bring our vision of this unique and groundbreaking Sci-Fi MMO to life. And we’ve made great progress! We launched the Infinite Fleet Alpha earlier this year, and we love engaging with you, the commanders, to keep making the game better as we move towards the release of our Beta.

As you may know, Infinite Fleet is made with Unity. Up until now, our technical team has been using Unity’s Data-Oriented Technology Stack (DOTS), a powerful toolbox that has allowed us to create impressive sceneries and gaming experiences for you. Especially Unity Entities, Unity’s take on an innovative technology called “Entity Component System” (ECS), lent itself really well to our goals of being able to have millions of entities on the screen at any time. We envisioned swarms of mechs and thousands of players being able to come together in epic battles. ECS is a novel technology, and the roadmap Unity presented made us take the leap and select it for the development of Infinite Fleet.

However, this has been a challenging pursuit. Over the last year and a half, we have been facing frequent struggles related to the immaturity of ECS, and it has slowed us down greatly. In the following, I will break down some of those struggles.

There Was No Compatible Networking Solution

When we started working on Infinite Fleet, there was no suitable networking solution that was compatible with DOTS aside from the Multiplayer DOTS sample — which was not working properly at the time. That was why we decided to go with our own networking solution.

Game Development With ECS Is Uncharted Territory

While innovative in its idea and design, ECS has seen very little game development, which made our quest of building an MMO using ECS a challenging task. With hardly any documentation available and only a small developer community, we not only had a hard time finding people who were able to work with ECS, but we found ourselves problem-solving on our own most of the time, with little support from Unity.

Architecting the game, navigating data consumption from a web service, managing communication with the non-ECS world — all those things required a lot of experimentation and trial and error on our part. If you’ve ever tried putting together a piece of furniture without a manual, you’ll understand the extra time (and nerves) something like this requires.

The ECS Framework Comes With Its Own Drawbacks

When using ECS, the Unity Editor becomes slow. Really slow — any changes to the code would take minutes to compile for those of us who are still using HDDs (hard disk drives). Even for the lucky ones with access to high-speed SSDs (solid state drives), it would take over 40 seconds.

There’s also no elegant solution for the implementation of visual effects in ECS. Unity proposes a hybrid approach in which ECS and GameObjects (an older version of Unity) co-exist. Yet we ran into similar issues when trying to make animations, scriptable assets, off-the-shelf tools, sound, and other parameters work with ECS. In theory, a pure ECS approach would have been a lot simpler and cleaner.

For our in-game audio solutions, we use Wwise, a third-party tool that doesn’t currently support ECS. Hence, we had to come up with a custom solution to link the soundscape we created to what happens within the ECS game environment. This would only work with a specific version of Unity, and the same would be the case with many other third-party tools. Yet that’s the exact opposite of what you want when working with preview technologies like DOTS. As a result, we couldn’t install the regular updates provided by Unity, as that would have impacted our third-party solutions.

Future ECS Updates Will Not Be Compatible With Unity 2021

A few months back, we learned from Unity that for an unknown period of time, future ECS updates will not be compatible with Unity 2021. We fear it may take years for ECS to make it to a non-preview release. While we have mastered many hurdles with ECS in the past, this posed a major challenge for our development work going forward.

What Does That Mean?

In short, it means we had to make a decision: we could continue with ECS, which would require us to stick with early preview releases of Unity and deal with the bugs, engine instability, framework refactoring, slow speed, and third-party tool incompatibility to arise from that. Or we could step back from ECS.

The decision we made was not to continue with ECS. Don’t get us wrong — we still believe in the potential of ECS. It’s groundbreaking technology that we hope to be able to use in the future. But maybe it’s just too early for Unity Entities at this point.

That means we are going to roll back and start afresh using the classic GameObjects workflow. That doesn’t mean Infinite Fleet will be any less enjoyable! It simply means we’re using tried and tested tech that our team is familiar with and that is faster and more stable.

Consequently, our end-of-year Beta will be delayed by around three to four months. It might have been even more delayed had we stuck with ECS. The good news is that we are very comfortable with GameObjects, so it should be smooth sailing from here on.

What About The Alpha?

The Infinite Fleet Alpha is built with ECS, and we won’t change that. You will be able to continue playing the Alpha, explore its features, and give us feedback to help make the game better. However, the Fleets Update will be the last major Alpha update for now. We will not publish new big updates until later this year, as we want to focus our time and resources on building a powerful Beta and releasing it on time.

That being said, there are plenty of ways to enjoy the Alpha until then! We have some exciting additions for your fleet in the pipeline, as well as new customizations and fun contests and giveaways that will make you want to fire up the engine and head straight into the Infinite Fleet universe.

TL;DR

Up until now, our technical team has been developing Infinite Fleet with Unity Entities, Unity’s take on a novel technology called “Entity Component System” (ECS). We were using this method to meet our goals of being able to have millions of entities on the screen at any time. We envisioned swarms of mechs and thousands of players being able to come together in epic battles.

However, this has been a challenging pursuit. The support offered by Unity was limited, and the developer community around ECS was very small. Not only that, but Unity has informed us that they are making a new version of Unity dedicated to ECS, and will have two different products in the future. Their roadmap for this is uncertain. 

With that in mind, we have decided not to continue with ECS, which means we are going to roll back and start afresh using the classic GameObjects workflow. Consequently, our end-of-year Beta will be delayed by an estimated three to four months (it might have been even more delayed had we stuck with ECS). Unfortunately, Unity dropped us in deep water with its software split plans. But the good news is that development in the more traditional sense will pick up speed as we are now sailing on charted territory.

We want to be as transparent as possible and share this journey with you with all its highs and lows, as you are the reason we are able to develop Infinite Fleet. Our mission is unchanged: we’re going to build a groundbreaking AAA Sci-Fi title that brings fresh air into the MMO space and levels up storytelling and in-game economies for the games industry of the future. As always, we’re thankful to have you by our side, Commanders. Onward and upward!

 

Sonny Alves Dias

Chief Technology Officer, Pixelmatic



All Posts

2021 (20)