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 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.