With the full release of Unity’s Entities packages I wanted to develop a game to test out how ready for production they really were.
I figured that a bullet heaven style game (inspired by Vampire Survivors) would be perfect for pushing simulation performance to the limit whilst still being a small enough scope to be able to develop relatively quickly.
I thought that I’d put my own twist on the genre by turning it into a vehicular combat game which would be a good use of my vehicle simulation experience plus give me a good reason to start developing a vehicle sim framework that was burst/entities compatible as I have some ambitious plans for this later down the road.
So far I’ve got the core vehicle simulation systems running well plus a good first pass implementation of zombies with path finding, attacking and ragdolling behaviours with fully animated hitboxes.
Next up is to flesh out the power up systems creating a wide range of weapons and then work on procedural level generation most likely using a tile based, wave function collapse system.
Then my plan is to release a friends and family test, followed by a public demo leading into a full release hopefully in the first half of 2024.
So far my experience with the ECS packages has been mostly positive. The performance gains are really amazing and I’m able to have several hundreds of zombies on screen, path finding, animating and running physics checks for attacks and incoming hits every frame while keeping 60+ FPS without having to do any special optimizations. It’s nice to have the basic, first pass implementation be reasonable and it feels like Unity have reasonably delivered on performance by default when working with entities.
There are definitely some downsides though, the editor integration feels pretty half-hearted where things like the scene gizmo handles are missing and there is no easy way to make custom inspectors or inspect blob assets at all.
There is also a lot of boilerplate when implementing things and whilst the baking systems are a good idea (separating authoring and runtime data is great!), incremental baking is buggy and often breaks and it feels like there should be a more straight forward way to bake simple data components (like the old GenerateAuthoringComponent attribute).
Overall I’m very happy with both the entities packages and how Driver Survivor is coming along.
Learning the entities packages and data oriented design has made me a much better developer with a more thorough understanding of how computers work and where the bottlenecks lie.