Mobile 3D Game Development
3D on mobile—constant balance between visual quality and thermal throttling. iPhone 15 Pro with A17 Pro handles what Snapdragon 680 won't. Developer's task—game looking good on premium hardware, not dropping below 30 FPS on mid-range Android.
Engine Choice
Unity—standard for mobile 3D. Rich ecosystem, URP (Universal Render Pipeline) optimized for mobile GPU. Unreal—when AAA visual quality needed and budget for longer development and optimization. Godot 4 with Vulkan Mobile—for small studios with limited budget.
Rendering and Optimization—Main Work
Universal Render Pipeline (Unity). For mobile 3D—URP, not Built-in. URP Renderer Features replace custom render passes. URP Asset → Quality → HDR Off for mid-range, MSAA 2x max. Depth Texture and Opaque Texture—disable if unused: each—additional render pass.
LOD (Level of Detail). Mandatory for any environment. LODGroup with three LOD levels: full geometry to 10 m, simplified to 30 m, impostor (billboard) further. LODBias in Quality Settings—on mobile reduce to 0.7–1.0. Without LOD—10,000 polygons per object in view = thermal throttling in 5 min.
Occlusion Culling. Static Occluder on large objects (buildings, rocks), Static Occludee on everything else. Bake Occlusion via Window → Rendering → Occlusion Culling. Without culling GPU renders hidden objects—waste per frame.
Shaders. URP/Lit—basic PBR. For mobile: reduce Material Quality via shader keywords. Custom shaders via ShaderGraph—Universal Render Pipeline/Lit. Transparent objects—minimum: each transparent—separate render pass. Particle Systems with transparent—main overdraw source.
// Profiler marker for custom code
using var marker = new ProfilerMarker("EnemyAI.Update");
marker.Begin();
UpdateAI();
marker.End();
Physics and Collisions
Rigidbody with Interpolation = Interpolate for smooth motion. Collision Detection = Continuous only for fast objects (bullets, projectiles)—expensive. MeshCollider—static environment only. Characters and enemies—CapsuleCollider or composite primitives.
Physics.OverlapSphere for AoE checks instead constant triggers. Physics step frequency—Time.fixedDeltaTime 0.02f (50 Hz)—standard. Reduce to 0.033f (30 Hz) for heavy scenes on weak devices.
Characters and Animation
Animator Controller with blend trees for movement: 1D Blend Tree by speed (idle → walk → run). Avatar Masks—separate layers for upper and lower body. Rigging package for procedural (IK for feet on uneven ground).
GPU Skinning. Skinned Mesh Renderer → Quality → Auto—Unity switches to GPU when multiple instances. For enemy crowds (20+)—Baked Simulation or ECS via Unity.Animations.Rigging.
Store animations in Addressables—not Resources. 50 animations in Resources = all in memory at start. Addressables load on demand, unload.
Multiplayer (If Needed)
Unity Netcode for GameObjects (NGO)—official solution. NetworkObject, NetworkVariable<T>, ServerRpc / ClientRpc. Transport: Unity Transport (best mobile performance, UDP). Relay via Unity Relay for NAT traversal without own server.
Mirror (open source)—NGO alternative with better docs. Photon Fusion—SaaS with ready infrastructure, fast start.
Mobile multiplayer needs: connection loss, background (iOS kills sockets 30 sec in background), battery (Android Doze cuts network).
Integrations
Addressables + CDN. Content (levels, 3D assets) loads gradually via CDN, not packed in APK/IPA. First run—base content. Rest—on demand. Reduces initial download, allows updating without App Store review.
Compute Shaders via ComputeShader.Dispatch—GPU-particle systems, grass, custom LOD. Work on Metal (iOS A7+) and Vulkan/OpenGL ES 3.1 (Android).
Timeline
| Project | Team | Target |
|---|---|---|
| Prototype / vertical slice | 3–4 people | 3–5 months |
| Full game (10–20 levels, single player) | 5–8 people | 10–18 months |
| With multiplayer | 7–12 people | 18+ months |
Cost calculated after GDD, platform requirements, visual quality.







