Sprint 3 was all about one thing: multiplayer. And I’m happy to report – Connect 3D can now be played across devices over the network! 🎉
Business Logic Moved to the Server
Until now, all the game logic lived on the client. In this sprint, I rewrote and refactored the core logic and moved it to a dedicated server. The Unity client now focuses entirely on input, rendering and presentation; while the server handles all game rules, state transitions and validation. This shift brings several important benefits:
- Security: The server enforces all game rules, preventing cheating and ensuring fair play.
- Flexibility: It becomes easier to implement features like user matchmaking, custom game modes and even AI players, if they are needed.
- Consistency: All clients now share a single authoritative source of truth, which is key for stable multiplayer.
- Version control: Game logic updates can now be deployed independently of client builds, which helps reduce update friction.
Most of the game logic was modular already, so I could reuse parts of the Unity implementation in the server codebase. I had to rewrite some of the logic, but the structure and separation of concerns from earlier sprints made this transition smoother than expected.
Real Multiplayer Support
With the new server architecture, players can now play against each other across devices. It’s still limited – I’m using a handful of hardcoded, pre-created test users for now – but the actual infrastructure is in place.
Games are now initiated from the server and tied to specific sessions. At this stage the server exposes REST controllers for managing the game and player actions – clients constantly pull for new data.
There’s also a basic game lobby that shows your ongoing and completed matches. You can have multiple games going in parallel against different opponents and switching between them feels surprisingly seamless.

And because why not – I added a simple in-game chat. It uses a basic message queue tied to each game session. Nothing fancy, just a text box and a message list, but it works and adds a lot of personality.
I tested multiplayer extensively across different Android devices, both phones and tablets – some older, some newer. Seeing the first working game unfold between two physical phones was a magical moment: one move here, reflected instantly over there. That’s when it really felt like a multiplayer game for the first time.

Building the Server
The backend is built in C#, structured as microservices, and runs inside Linux Docker containers. Each service is responsible for a specific part of the system – like game session management, player state, and messaging. With Docker Compose, I can spin up the entire stack in one go, which makes local development and testing fast and reliable.
For now, everything runs locally on my network, but the system is built to evolve.
Coming Up: Accounts and Friends
In the next sprint, I plan to:
- Add real user accounts, with support for Google and Apple sign-in (this will be a challenge for sure…).
- Allow saving players as friends.
- Enable starting new games against friends or any available player.
The foundation is finally in place – and now it’s time to make it personal.
See you in two weeks!
– Elena