Tiggy is a 3D multiplayer platformer that I’ve been working on solo while testing Unity’s new packages, specifically: Entities, Physics, Netcode and URP. It works similar to a regular game of tag except that, rather than ‘passing the tag to others’, you spread the tag to other players. Last untagged player wins the game.
Tiggy runs on a client server architecture and allows players to run listen servers (there is also a headless server build that I have tested on Azure). It uses a full server authority model with clientside prediction. I found the new experimental Netcode package to be very helpful for setting this up with a proper tick based simulation model. Unity entities can still be a bit tricky and cumbersome to debug, however they have made good progress in this area with their new DOTS editor package.
Because DOTS is still in preview and many features are still missing I had to rely on the standard gameobject + monobehaviour world for things like UI, Audio and Animation. I found the best way to do this was to implement as much behaviour as possible in entity systems and link pooled game object prefabs by adding component objects to entities. Although this way you miss out on burst and have to run on the main thread it allows you to use all the behaviour of gameobjects. I have released my system for handling these prefabs to Github as a Unity package.
I love working with DOTS, specifically the performance, the seperation between data and behaviour, the code clarity and maintainability.
Unfortunately progress seems to have slowed down over the last year with no new ETA for Entities 1.0, and the current tools and packages don’t cover gameobject functionality.
Debugging has also been tough but good progress has been made on this front recently.
I’m not sure what the future holds for Tiggy, however I am up to date with the latest DOTS updates and working on moving platforms and wall jumping.
A large roadblock is working out a hosting solution for servers, I’ve been investigating Steam’s socket API but Unity’s Netcode package doesn’t have any interface to swap the transport layer.
*Update (2023): Now that the entities packages have finally been fully released and are production ready I’d love to return to this project and try to get it to a proper release. I’m currently working on Driver Survivor to test the entities packages in production and provided that goes well I’d like to return to Tiggy afterwards.
Unity’s server hosting is now more accessible and there is better support for custom transport layers so it seems my previous blockers should no longer be issues.