Quick answer: Unity Texture2DArray created at runtime leaking VRAM each level? Texture2DArray doesn't auto-release - call Object.Destroy on the array before reassigning.
Procedural level generates a 256-layer 1024x1024 texture array per level. After three levels, GPU memory is 3GB and growing.
Destroy before reassign
Object.Destroy(oldArray);
material.SetTexture("_Tex", newArray);Reassignment doesn't release the previous texture. Destroy is explicit.
Resize, don't recreate
For changing layer counts, prefer fewer larger arrays you reuse via SetLayer. Texture allocation is GPU-side; reuse saves real money.
Audit with Memory Profiler
Window > Analysis > Memory Profiler. Texture2DArray entries accumulating between levels = leak.
“Texture lifetime in Unity is manual for runtime-created assets.”
Establish a 'create at session start, reuse at runtime' pattern. Per-level allocation is rarely worth the lifetime burden.