Unity Mobile Game Overheating or Draining Battery? Cap the Frame Rate

Illustration: a smartphone with a thermometer icon cooling from red to blue

Your game runs fine for five minutes, then the phone gets hot, the frame rate drops and the battery is draining visibly. Players notice and uninstall. Unity mobile overheating and battery drain almost always come from rendering more frames, at a higher resolution, with more work per frame than the game needs. This guide shows how to cap the frame rate properly, lower render resolution, render only when needed in menus, and measure the result so you know it worked.

Why Phones Get Hot

Phones have no fans. Every frame the CPU and GPU do work, and that work turns into heat. When the chip gets too hot, the OS throttles it, lowering clock speeds, so your frame rate drops even though nothing in the game changed. The fix is to do less work per second: fewer frames, fewer pixels and cheaper frames.

Common causes:

  • An uncapped or needlessly high frame rate (120 fps on a high-refresh phone for a puzzle game).
  • Rendering at the full native resolution, which on modern phones is enormous.
  • Menus and pause screens rendering the full 3D scene at full rate.
  • Expensive post-processing, real-time shadows and high MSAA.

Set a Target Frame Rate

On mobile, QualitySettings.vSyncCount is ignored and the frame rate is controlled by Application.targetFrameRate. The default on mobile is 30 fps, but many projects set it to 60 or higher and forget it. Choose deliberately:

using UnityEngine;

public class FrameRateSetup : MonoBehaviour
{
    [SerializeField] int gameplayFps = 60;

    void Awake()
    {
        QualitySettings.vSyncCount = 0;
        Application.targetFrameRate = gameplayFps;
    }
}
  • 30 fps for turn-based, puzzle, idle and casual games. Halves the work compared to 60.
  • 60 fps for action games, platformers and anything where input feel matters.
  • Above 60 only as an opt-in setting for players who want it.

Pick a value the display refresh rate divides evenly (30 or 60 on a 60 Hz or 120 Hz screen) to avoid uneven frame pacing. Offering a “Battery saver” option that switches to 30 is a cheap win.

Lower Render Resolution

Phone screens have more pixels than most desktop monitors, and every pixel costs GPU time. Rendering slightly below native and upscaling is barely visible on a small screen.

URP: set Render Scale on the URP Asset (Quality section), for example 0.75. You can change it at runtime:

using UnityEngine.Rendering.Universal;
using UnityEngine.Rendering;

var urp = (UniversalRenderPipelineAsset)GraphicsSettings.currentRenderPipeline;
urp.renderScale = 0.75f;

Changing the asset at runtime modifies the asset itself in the Editor, so use separate URP Assets per quality level if you want the Editor values to stay put. Built-in pipeline: Screen.SetResolution with a lower width and height does a similar job.

Keep UI sharp by letting it render at native resolution in a Screen Space – Overlay canvas, which isn’t affected by render scale.

Render Less in Menus

A static menu doesn’t need 60 new frames a second. The OnDemandRendering API lets the game keep running Update at full rate (so input stays responsive) while only rendering every Nth frame:

using UnityEngine;
using UnityEngine.Rendering;

public class MenuRenderThrottle : MonoBehaviour
{
    void OnEnable()  => OnDemandRendering.renderFrameInterval = 3;  // render every 3rd frame
    void OnDisable() => OnDemandRendering.renderFrameInterval = 1;
}

Put this on your menu or pause screen. Set the interval back to 1 briefly when something animates (a button press, a transition) so it looks smooth. Also lower targetFrameRate while paused, and pause or disable the 3D camera behind a full-screen menu entirely.

Reduce Work Per Frame

  • Post-processing: bloom, depth of field and motion blur are costly on mobile GPUs. Use few, and offer a toggle.
  • Shadows: lower shadow distance and resolution, use one cascade, or bake lighting. See the shadows guide.
  • MSAA: 2x is often enough. 4x on top of a high render scale doubles the cost of a problem.
  • Overdraw: stacked transparent particles and UI panels are expensive per pixel. Keep effects small.
  • CPU: avoid per-frame allocations and Find calls, pool objects, and batch draw calls. The Profiler guide shows how to find the cost.

Adapting to Thermal State

For games that need to stay at 60 for long sessions, react before the OS throttles hard. Unity’s Adaptive Performance package (with provider packages for supported devices) reports thermal warnings and can scale quality automatically. Without it, a simple approach is to watch average frame time: if it creeps above your budget for several seconds, step down render scale or effects, then step back up after a cooldown. Always change quality in steps rather than every frame, or players see flickering quality.

Measuring the Improvement

  1. Build a Development Build and connect the Profiler to the device. Look at CPU and GPU frame times, not just FPS.
  2. Play for 15 to 20 minutes. Overheating problems only show up over time; a two-minute test won’t catch throttling.
  3. Compare battery drop over the same session before and after your changes. Android’s battery stats and Xcode’s Energy gauge both help.
  4. Test on a mid-range device, not just your flagship phone.

💻 A laptop that keeps up

Building and profiling for mobile means lots of build cycles. A fast machine makes iteration bearable. See our picks for Unity development laptops.

Troubleshooting

targetFrameRate seems ignored

Something else sets it later, or a Quality level enables vSync on a platform that respects it. Search the project for targetFrameRate.

Frame rate fine at first, drops after 10 minutes

Thermal throttling. Lower frame rate, render scale or effects so the device stays cool.

Game is blurry after lowering render scale

The value is too low, or UI is in a camera-space canvas. Try 0.8 and keep UI in an overlay canvas.

Menu animations look choppy with OnDemandRendering

Set the interval back to 1 while animating, then raise it again when idle.

Battery drains on the title screen

The title screen renders a full 3D scene uncapped. Cap the frame rate and throttle rendering there too.

FAQ

Is 30 fps acceptable on mobile?

For many genres, yes. Players notice heat and battery drain more than 30 vs 60 in a puzzle game.

Does vSyncCount work on mobile?

No. Mobile always syncs to the display and uses targetFrameRate.

Does lowering resolution affect touch input?

No. Input uses screen coordinates, which don’t change with render scale.

Does OnDemandRendering slow game logic?

No. Update still runs every frame. Only rendering is skipped.

Should I use Vulkan or OpenGL ES?

Vulkan is often more efficient on modern Android, but test both on your target devices.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *