Wars2 — Multiplayer Online RPG
Wars2 is a server-authoritative, multiplayer online RPG built in Unity 6 in the style of the classic MMORPG Metin2. It targets Android (IL2CPP, URP) and supports a large open world spread across 30+ interconnected zones — cities, hunting fields, dungeons, and boss towers — that players explore, fight, and trade in together in real time.
The project is built around a clean separation between gameplay logic and networking, a service-oriented backend for matchmaking and dynamic server orchestration, and an on-demand cloud hosting model that spins up game servers close to the player.
At a glance
| Engine | Unity 6, Universal Render Pipeline, Linear color space | ||
| Target platform | Android, IL2CPP scripting backend, .NET Standard 2.0 | ||
| Networking | FishNet (Fish-Networking) — server-authoritative | ||
| Server hosting | Edgegap — on-demand, geo-distributed containerized game servers | ||
| Backend / real-time services | Socket.IO (persistent client ↔ master-server channel) | ||
| Dependency injection | VContainer | ||
| Unity Addressables + Cloud Content Delivery (CCD) | ||
| Scale | 50,000+ assets, 30+ networked game scenes | ||
Multiplayer architecture
Networking layer — FishNet
The multiplayer backbone is FishNet (Fish-Networking), a high-performance, server-authoritative networking framework for Unity. FishNet was chosen over alternatives (Mirror, Unity Netcode for GameObjects) for its performance, built-in client-side prediction, object pooling, and mature code-generation pipeline — all important for an action RPG with many simultaneously networked entities (players, monsters, NPCs, projectiles).
The game runs an offline → online scene flow: players start in an offline lobby scene, then transition into networked world scenes once connected to a deployed game server.
Server-authoritative design
The server is the source of truth. Gameplay-critical state (health, damage, combat resolution, monster aggro, loot, shop transactions) is validated and driven server-side, with clients receiving synchronized results — the correct model for preventing cheating in a competitive RPG. A dedicated NetworkTrafficLogger supports profiling and bandwidth analysis of what's being sent over the wire.
Wider technical stack
Dependency Injection — VContainer. The project uses VContainer, a fast DI container for Unity, to wire services (matchmaking, Edgegap, etc.) and keep systems loosely coupled and testable — reinforcing the same decoupling philosophy seen in the network-adapter design.
Async — UniTask. Allocation-free async/await throughout, avoiding the GC overhead of coroutines and standard Task on a mobile target where memory pressure matters.
Content delivery — Addressables + CCD. Assets are served through Unity Addressables backed by Cloud Content Delivery, allowing content (the large world, art, and data) to be delivered and updated remotely without shipping a new build — important for a 50,000+ asset game on mobile.
Rendering & world. URP for a broad Android device range, with ProBuilder, Terrain Tools, Splines, and Cinemachine used across 30+ handcrafted world scenes. The FBX Exporter enables round-trip workflows with external DCC tools.
Animation — Animancer. On-demand, code-driven animation control instead of rigid Animator state machines, giving finer runtime control over character and combat animations.
Input & mobile. Unity's new Input System, Mobile Notifications, and Android Logcat tooling round out the mobile-focused toolchain.

Comments
Post a Comment