Wars2

 

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

EngineUnity 6, Universal Render Pipeline, Linear color space
Target platformAndroid, IL2CPP scripting backend, .NET Standard 2.0
NetworkingFishNet (Fish-Networking) — server-authoritative
Server hostingEdgegap — on-demand, geo-distributed containerized game servers
Backend / real-time servicesSocket.IO (persistent client ↔ master-server channel)
Dependency injectionVContainer
Content delivery
Unity Addressables + Cloud Content Delivery (CCD)
Scale50,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