# Prototype networking decision Date: 5 October 2026. Scope: initial prototype steps 1–3. ## Decision Keep the already installed and Editor-resolved Unity Netcode for GameObjects (NGO) `2.13.3`, Multiplayer Services `2.3.3`, and Unity Transport `6.6.0`. Do not upgrade or replace packages. Use `MultiplayerService.Instance` / `ISession` and `WithRelayNetwork()` for private player-hosted sessions with shareable join codes. The user selected player hosting, four total players, pre-run joining, no paid spending, and returning to the menu on host loss. The user confirmed the linked Unity project uses the free tier without paid billing and can arrange two-PC and four-player external tests. ## Options compared | Option | Fit | Costs and limitations | |---|---|---| | NGO + Multiplayer Services | Existing GameObject/C# stack, first-party session integration, private join codes, authoritative host | Service-dependent internet connectivity; free-tier limits; full rollback prediction is not built in. Keep this option. | | Mirror | MIT library with server/host authority and several transports | Discovery, join codes, and mediated internet connectivity need separate infrastructure/provider integration. Exact Unity 6000.6 compatibility would require a spike. Adds setup without a demonstrated benefit here. | | Photon Fusion 2 | Built-in prediction/lag compensation and player-host topology | Proprietary SDK, separate account/App ID, and replacement of existing networking dependencies. Current documented supported Editors do not explicitly establish 6000.6 compatibility. Reconsider only if measured FPS latency requirements justify migration. | Official sources inspected on 5 October 2026: - [Unity NGO session tutorial](https://docs.unity.com/en-us/mps-sdk/tutorials/build-your-first-session) - [NGO client anticipation](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/manual/advanced-topics/client-anticipation.html) - [Unity session host migration](https://docs.unity.com/en-us/mps-sdk/session-host-migration) - [Mirror repository and license](https://github.com/MirrorNetworking/Mirror) - [Mirror hosting guidance](https://mirror-networking.gitbook.io/docs/hosting/pragmatic-hosting-guide) - [Fusion features](https://doc.photonengine.com/fusion/v2/fusion-intro), [SDK requirements](https://doc.photonengine.com/fusion/v2/getting-started/sdk-download), and [license](https://www.photonengine.com/terms/licenseterms) ## Authority and lifecycle - One player's process is the authoritative host. No dedicated-server deployment or automatic host migration in this prototype. - Host controls membership approval, spawn assignment, and run start. Future damage, enemy state, spawning, stage progression, and rewards must remain host-owned. - Each player controls its local camera and responsive movement presentation. Record the implemented movement trust/validation model in the foundation validation report; do not label owner-authoritative transform replication fully server-authoritative movement. - Up to four total players, including host. A host-only start action closes admission. Connected players may move around the arena before start. - Normal client leave removes the player's spawned object and frees its lobby spawn slot. Host leave or transport loss ends that connection and returns clients to the menu. No promise of run restoration or reconnect continuity. - Session metadata host election does not migrate the NGO gameplay simulation. Transport disconnect is decisive even if cloud metadata remains briefly visible. - Failed/invalid joins must return a readable error, clean partial network/session state, and allow retry. ## Service setup and spending boundary Use the existing linked Unity cloud project and anonymous authentication. This task does not enable paid billing, buy subscriptions, change organization billing, or deploy servers. Cloud testing starts only after the user's confirmation that this is a free-tier project. Current Unity public prices are USD: authentication is free; connectivity includes 50 average monthly concurrent users, then $0.16 per extra average concurrent user. Included connectivity traffic is 3 GiB per concurrent user, capped at 150 GiB/month. Excess traffic costs $0.09/GiB in US/EU or $0.16/GiB in Asia/Australia. Session metadata traffic includes 10 GiB/month per regional group. These limits are not permission to spend; if service quota/setup prevents testing, report it and request user action rather than enable billing. [Unity pricing](https://unity.com/products/gaming-services/pricing) and [billing rules](https://docs.unity.com/en-us/services/pricing-and-billing). Existing organization usage can affect remaining allowance; prices and limits require rechecking for later rollout. Mirror's library is free; external internet infrastructure is separately priced. Photon currently has free 20-CCU development and 100-CCU launch offerings, with offering restrictions; a paid 500-CCU plan is $125/month. No Photon product is being activated. [Photon pricing](https://www.photonengine.com/fusion/pricing). ## Package licenses and compatibility evidence Installed NGO and Transport `LICENSE.md` files use the Unity Companion License; installed Multiplayer Services uses Unity Terms of Service. Do not infer installed package licenses from older repository branches. The installed NGO and Multiplayer Services manifests declare older Transport dependency versions, while this project resolves Transport `6.6.0`. Preserve the existing pins and verify compilation, build, and actual connections. Package resolution alone is insufficient compatibility evidence. ## Validation still required Build/run, cloud authentication, host/join/leave, four-client capacity, closed admission, independent cameras/input, spawn/collision behavior, remote motion, host loss, and retry after errors. Multiple processes on one machine can exercise the cloud transport but do not prove separate-network internet play. Record those categories separately.