What's this project?
It's a Unity version of DelayNoMore, a Multiplayer Platformer game demo on websocket with delayed-input Rollback Netcode inspired by GGPO -- but with the backend also rebuilt in C#.
(battle between celluar Wifi Android v.s. Wifi Android via internet (and UDP peer-to-peer holepunch succeeded), input delay = 2 frames i.e. ~32ms, original video here)
Notable Features (by far, would add more in the future)
- Automatically correction for "slow ticker", especially "active slow ticker" which is well-known to be a headache for input synchronization
- Peer-to-peer UDP holepunching whenever possible, and will fallback to use the backend as a UDP relay/tunnel if holepunching failed for any participant (kindly note that UDP is always used along side with WebSocket, where the latter is a golden source of frame info)
- Frame logging toggle for both frontend & backend (i.e.
backend/Battle/Room.frameLogEnabled), useful for debugging out of sync entities when developing new features - Rollback compatible NPC patrolling and vision reaction
How does it work to synchronize across multiple players?
(how input delay roughly works)
(how rollback-and-chase in this project roughly works)
(though using C# for both backend & frontend now, the idea to avoid floating err remains the same as shown below)

1. Building & running
1.1 Tools to install
Backend
proj-root/backend> dotnet runFrontend
Open OfflineScene to try out basic operations.
Open LoginScene after launching the backend to try out multiplayer mode. Available test accounts are listed in DevEnvResources.sqlite. The steps are very similar to that of DelayNoMore CocosCreator version.
Unit test
Referencing this document from Microsoft by far.
FAQ
Please refer to FAQ.md.



