Install any skill in seconds. Free to start, no credit card required.
Get Started Free →besty0728/unity-performance
Advises on Unity performance red flags — Update/allocation/pooling/physics hot paths, frame drops, and GC pressure.
Passed 20 of 22 test cases with the skill, and 19 of 22 without it.
1 fixed19 passed either way2 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
A test case the skill fixed. Same model, same prompt, with and without the skill.
We noticed string interpolation calls like `Debug.Log($"Enemy state: {enemy.GetState()}");` inside Update loops are causing performance drops in release builds of our Unity game. Why does Debug.Log run in release builds when we expected it to be stripped, and how should we prevent the string formatting overhead without deleting the logs?
| Checked | Without skill | With skill |
|---|---|---|
| Explains that Debug.Log calls are not stripped in release builds by default. | Passed | Passed |
| Recommends wrapping the log expression in a check for Debug.isDebugBuild. | Missed | Passed |
The instructions your model reads when the skill loads.
Before calling any skill in this module: if you are about to call a skill with parameters guessed from its name or description, STOP — read this file (or fetch its schema via
GET /skills/recommend?includeSchema=true) first. If you already have the parameter definitions from recommend/schema, you may proceed straight to dryRun.
Use this skill for a high-signal review of likely Unity performance issues. Focus on red flags, not speculative micro-optimizations.
Update / LateUpdate / FixedUpdate loopsFind, GetComponent, Camera.main, or tag lookups in hot pathsInstantiate / Destroy suitable for poolingThree counter-intuitive traps where what seems "free" is actually expensive. Each cost is paid for possibility of work, not for work actually performed — which is why profilers rarely catch them directly.
A component whose Update can mutate transform.position pays the cost whether the branch runs or not: dirty-flag and serialization systems treat write permission as a reason to poll every frame. Similarly, a [SerializeField] field that is never modified at runtime still sits on the serialization path. The fix is to remove the permission, not tighten the branch — split the rarely-needed writer into its own component and AddComponent only when needed. Source: NetcodeSamples/HelloNetcode/2_Intermediate/07_Optimization/Optimization.md — "a system with the possibility of writing to a component, regardless of whether it writes to it or not, will always have to be serialized".
Seeding N RNG instances with baseSeed + i gives N similar streams — patrol paths line up, spawn jitter clumps, loot rolls cluster. Hash the index before seeding:
// Wrong — N correlated streams
for (int i = 0; i < N; i++) rngs[i] = new System.Random(baseSeed + i);
test cases passed, vs 19 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.