Mobile Simulator Game Development
Simulators on mobile span wide spectrum: from farming games with timers to full physics simulations of transport or construction. They share one thing: complex interdependent systems that must work cohesively and provide a "living" world feel even when app is closed.
Offline simulation: how world lives without player
The main technical feature of simulators is offline progression. Player returns after 8 hours, and events must have occurred: crops matured, resources produced, production chains completed.
Naive approach: on app open, run loop with deltaTime step and calculate everything from last save. Works for simple systems. With complex interdependencies (resource A needed for B production, B for C, and A supply might run out mid-period)—you need discrete simulation with fixed tick.
Implementation: save lastTickTimestamp. On open, calculate missedTicks = (now - lastTick) / tickInterval. Run simulation for missedTicks steps with tickInterval (e.g., 1 minute). Each tick is deterministic: apply production, consumption, events. Limitation: maxOfflineTicks (e.g., 8 hours = 480 ticks), remainder lost or accumulates in overflow buffer.
Physics in transport and construction simulators
For physics simulators (bus, crane, road construction), in Unity use Configurable Joint for complex articulations + Rigidbody.AddForceAtPosition for physically correct control. Standard WheelCollider good for basic car physics, but limitations appear quickly for non-standard vehicles.
Important: physics simulators with many Rigidbody (30+) on scene require Physics.simulationMode tuning. Using SimulationMode.Script (manual Physics.Simulate(fixedDeltaTime) call) gives exact step order control—critical when physics combines with game logic.
On Android, physics with Vulkan and ARMv8 significantly faster due to NEON SIMD optimizations in PhysX. If targeting low-end Android with OpenGL ES 3.0, limit active rigidbodies via Sleep Threshold and Rigidbody.IsSleeping().
Management simulators: agent-based model
For "tycoon" simulators (restaurant, airport, hospital)—agent-based model. Each NPC is autonomous agent with Behaviour Tree or Utility AI. Unity NavMesh Agent for movement, custom task system for actions (take order, deliver, clean).
With many agents (50+), transition to ECS-based agents via Unity DOTS: positions and states in NativeArray, compute paths via Job System. NavMesh Agents on DOTS still in preview, but for 2D isometric simulators, custom tile navigation via A Pathfinding Project* (Aron Granberg) gives better result.
Saving complex state
Simulators with hundreds of objects and their states—hundreds of kilobytes of save data. JsonUtility doesn't handle complex object graphs. Use Newtonsoft.Json (com.unity.nuget.newtonsoft-json) with custom converters or MemoryPack for binary serialization (5–10x faster for large volumes).
Autosave via UniTask.Delay on background thread—serialization in Task.Run, disk write in UniTask.SwitchToMainThread minimally. Crash during write shouldn't corrupt existing save—write to temp file, then atomically rename.
Timeline: farming simulator with core mechanics—4–7 months; full tycoon or physics transport simulator—9–15 months.







