diff --git a/Assets/_Project/Scripts/Client/Debug/PixelArtDevControls.cs b/Assets/_Project/Scripts/Client/Debug/PixelArtDevControls.cs
index a10bac7af..e110589d0 100644
--- a/Assets/_Project/Scripts/Client/Debug/PixelArtDevControls.cs
+++ b/Assets/_Project/Scripts/Client/Debug/PixelArtDevControls.cs
@@ -21,11 +21,33 @@ namespace ProjectM.Client
static PixelArtDevControls _instance;
+ ///
+ /// OPT-IN EditorPref, mirroring `ProjectM/Boot Into Menu (Editor)`. This used to self-spawn into EVERY
+ /// scene — Game.unity included, not just DevSandbox — and draws its toggle button on
+ /// every IMGUI pass BEFORE the `!_open` early-out. IMGUI dispatches at least Layout+Repaint per frame,
+ /// so it allocated continuously during normal gameplay and dominated allocation profiling until it was
+ /// found on 2026-08-13. Off by default; enable from the menu when you actually want to tune the look.
+ ///
+ const string EnabledPref = "ProjectM.PixelArtDevControls.Enabled";
+ const string MenuPath = "ProjectM/Pixel Art Dev Controls (Editor)";
+
+ [MenuItem(MenuPath)]
+ static void ToggleEnabled() => EditorPrefs.SetBool(EnabledPref, !EditorPrefs.GetBool(EnabledPref, false));
+
+ [MenuItem(MenuPath, true)]
+ static bool ToggleEnabledValidate()
+ {
+ Menu.SetChecked(MenuPath, EditorPrefs.GetBool(EnabledPref, false));
+ return true;
+ }
+
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void Bootstrap()
{
if (_instance != null)
return;
+ if (!EditorPrefs.GetBool(EnabledPref, false))
+ return; // opt-in only — see EnabledPref
var go = new GameObject("~PixelArtDevControls") { hideFlags = HideFlags.HideAndDontSave };
DontDestroyOnLoad(go);
_instance = go.AddComponent();