A cross-platform asymmetric two-player co-op puzzle game where a VR player and a Mobile player take on different roles and viewpoints to solve puzzles together. I owned the networking layer and the cross-platform architecture for a 6-person team.
VR × Mobile Walkthrough
Discovery - Puzzle 1
Introduction
This is a cross-platform asymmetric two-player co-op puzzle game pairing a Meta Quest 3 VR player with an Android Mobile player, who take on different roles and viewpoints to solve puzzles together. As Technical Lead, I owned the networking layer and cross-platform architecture for a 6-person team, built on Unity 6 and Photon Fusion 2 (Shared Mode).
The Challenge
Building a real-time cooperative experience across two very different platforms meant the two clients could easily fight over game state. The system needed a single, unambiguous source of truth — without hardcoding an assumption about which device was hosting the session.
Networking Architecture
- "VR writes / Mobile reads" — Defined and enforced this core networking principle: the host always holds StateAuthority and writes `[Networked]` properties, while Mobile only sends RPCs to the host and reads state via ChangeDetector — eliminating state-authority conflicts at the architecture level.
- Host ≠ VR Platform — Established that authority is tied to the host regardless of device, so the system never assumes VR is always the host.
- Single Source of Truth — Drove all networked state through a single `[Networked]` phase enum, with dedicated action RPCs for player input and a two-flag `RPC_SegmentDone` handshake to advance passive phases.
- Render-Only State Reads — Read all networked state in `Render()` via ChangeDetector (never `Update()`) with teardown guards, and used one-shot host-to-all RPCs for transient feedback instead of phase transitions to avoid replayed dialogue and simulation stalls.
Systems & Engineering Practices
- Decoupled Presentation Layer — Decoupled the networking layer from presentation using static `GameEvents` (e.g. `OnSceneReady`, `OnPhaseChanged`) and a per-puzzle, per-platform bridge pattern (`Puzzle0XBridge_VR` / `_Mobile`) that drives dialogue, animation, and UI without touching networked state.
- Scene & Audio Systems — Architected the scene system with an additive loading structure, a persistent `_Main` scene, and transition orchestration, plus a cross-platform audio system (persistent AudioManager singleton, phase-driven SFX/BGM via SfxLibrary and AudioPhaseDriver).
- Conventions & Documentation — Authored and enforced cross-platform naming and code conventions (`_VR` / `_Mobile` suffixes, `Handle` event-handler prefix, `RPC_` prefix, `TBD_` placeholders, `#if UNITY_EDITOR` debug guards) and wrote the technical design doc for handover.
- Code Review — Led code review as tech lead, reviewing VR-content and Mobile-UI PRs and clearly separating blocking from non-blocking items.
- Testing — Tested with a ParrelSync dual-editor setup (main editor as VR/host, clone as Mobile) and validated on real Quest 3 + Android devices.
