KinematicSoup Technologies

KinematicSoup Technologies

@kinematicsoup.com

We build Reactor, a Unity multiplayer engine for physics, large crowds, and games other tools can't handle. Also makers of Scene Fusion, real-time collaborative scene editing for Unity. kinematicsoup.com Join us on discord! https://discord.gg/vWeTvPB

41 followers176 following169 posts

"Networking scares me," the solo developer of Mutant Mayhem told us. Three days into the conversion, his first Unity game ran a 4-player match, built with an AI assistant and Reactor. #gamedev #unity3d #indiedev

Rollback and lockstep need bit-identical simulation on every machine, which rules out most off-the-shelf physics engines and any code that is casual with floating point. Can your game promise that? #gamedev #unity3d #indiedev

We like rollback for fighting games. It re-runs several frames inside one frame's budget, though, which keeps it to small player counts and lean simulations. We would not put a physics sandbox on it.

Concurrent users is a daily curve, not a number. Peak CCU sizes your servers; MACCU, the area under the curve, is what you pay for. Mix them up and the estimate is off by an order of magnitude. Which one did yours use? #gamedev #unity3d #indiedev

Star Fighter is a Reactor sample you can play: fly a fighter, or crew a turret attached to someone else's ship. Two players drive one entity and the server arbitrates. #gamedev #unity3d #indiedev

A turret seat only opens when another player is flying with one free, so the interesting case is the normal case. Free-for-all or teams, set on the GameManager before you publish the server config.

Syncing ten players is easy. Syncing thousands of physics objects is where most projects hit a wall, and interest management helps only until every player can see most of the scene. #gamedev #unity3d #indiedev

A bool needs 1 bit of its 8. An int that only holds 0 to 31 needs 5 of its 32. Pack each value to the bits it uses and a few lines of C# cut a typical payload by 30% or more. Unglamorous, and still one of our favourite things to explain... #gamedev #unity3d #indiedev

braains2 moves 10x the data per frame of the original braains.io: 3D, 100 players per room instead of 50, 30 Hz instead of 15. Per-player bandwidth still fell from about 300 KB/s to about 35 KB/s. #gamedev #unity3d #indiedev

Ever had a Unity object stutter at 200 fps? Update follows the frame rate, FixedUpdate a fixed clock, so some frames get two physics steps and some get none. Is your camera following in the wrong one? #gamedev #unity3d #indiedev

We shipped client-side prediction in kazap.io, and the replay step was most of the work: keep inputs for the round trip, compare with each server update, and when they disagree past a tolerance, replay from the server's state... #gamedev #unity3d #indiedev

#ScreenshotSaturday: about 5,000 enemies, every one simulated on the server and synced to each player at 50 to 70 KB/s, no network LOD. Built in a week as a stress test for our netcode... #gamedev #unity3d

5,000 to 6,000 server-simulated enemies in a multiplayer survivors game, 50 to 70 KB/s per player, no network LOD. The surprise in the budget: spawning and destroying objects is about 20% of the traffic. Hundreds of bullets a second, each a spawn... #gamedev #unity3d #indiedev

What kept it cheap: a transform delta compresses to 7 bits and a full object sync to about 4 bytes. Enemies carry a rotation the game never changes, so it compresses to near zero on its own. Bullets spawn near the avatar, so their positions cluster and pack tight.

The listen-server mistake we see most: sizing the host by download speed. The host uploads the world to every other player, so upstream is the limit, and residential upstream is usually about a tenth of the number on the ISP's ad. What else caps it... #gamedev #unity3d #indiedev

Input exchange scales badly past a handful of peers too, so large sessions and persistent worlds push toward dedicated servers. Host advantage is architectural: it cannot be patched out after launch, which matters the moment ranking or money rides on a match.

If your multiplayer game ships on mobile, client-hosted topologies are out. A host needs a stable address for the whole session; phones hop between Wi-Fi and cellular, and carrier NAT reassigns addresses without notice. The other five checks... #gamedev #unity3d #indiedev

Six checks, in order: real-time at all? ships on mobile? can you commit to determinism? does money or ranking ride on outcomes? how many players and how big a world? who pays for servers? Strike topologies as they fail. What survives is your real option space.

The short version: textures are stored gamma-encoded for human eyes, but lighting math only works on linear values. Mixing the two silently is where renders go wrong. Unity handles it correctly once the project is configured for it.