Unity-Technologies/UnityCsReference · error · ArgumentNullException
Value for parameter atlases is null
Error message
Value for parameter atlases is null
What it means
Thrown by SpriteAtlasUtility.PackAtlases when the atlases array argument is null. PackAtlases packs a caller-supplied set of SpriteAtlas assets into textures via the native PackAtlasesInternal; before delegating it asserts the array exists. ArgumentNullException is used because the whole parameter (not just an element) is missing, so there is nothing to iterate.
Source
Thrown at Editor/Mono/2D/SpriteAtlas/EditorSpriteAtlas.bindings.cs:28
using UnityEditor.AssetImporters;
using UnityEngine.UIElements;
namespace UnityEditor.U2D
{
[NativeHeader("Runtime/2D/SpriteAtlas/SpriteAtlas.h")]
[NativeHeader("Editor/Src/2D/SpriteAtlas/SpriteAtlasPackingUtilities.h")]
public class SpriteAtlasUtility
{
[FreeFunction("CollectAllSpriteAtlasesAndPack")]
extern public static void PackAllAtlases(BuildTarget target, bool canCancel = true);
[FreeFunction("PackSpriteAtlases")]
extern internal static void PackAtlasesInternal(SpriteAtlas[] atlases, BuildTarget target, bool canCancel = true, bool invokedFromImporter = false, bool unloadSprites = false);
public static void PackAtlases(SpriteAtlas[] atlases, BuildTarget target, bool canCancel = true)
{
if (atlases == null)
throw new ArgumentNullException("atlases", "Value for parameter atlases is null");
foreach (var atlas in atlases)
if (atlas == null)
throw new ArgumentNullException("atlases", "One of the elements in atlases is null. Please check your Inputs.");
PackAtlasesInternal(atlases, target, canCancel, false, true);
}
[FreeFunction("GetSpriteTexture")]
extern internal static Texture2D GetSpriteTexture([NotNull] Sprite sprite, bool fromAtlas);
[FreeFunction("SpriteAtlasExtensions::CleanupAtlasPacking")]
extern public static void CleanupAtlasPacking();
[FreeFunction("SpriteAtlasExtensions::OnSpriteAtlasSettingsChanged")]
extern internal static void OnSpriteAtlasSettingsChanged();
}
[StructLayout(LayoutKind.Sequential)]View on GitHub (pinned to 225b0fbdb5)
Solutions
- Initialize atlases via AssetDatabase.FindAssets("t:SpriteAtlas") and LoadAssetAtPath before calling PackAtlases.
- Guard with 'if (atlases == null || atlases.Length == 0) return;' for optional-pack workflows.
- Log a clear message and skip when the selection/gather step yields null instead of forwarding it.
- Verify the array is populated in the same scope that creates it, not in a deferred callback.
Example fix
// before
SpriteAtlasUtility.PackAtlases(null, BuildTarget.StandaloneWindows64);
// after
var guids = AssetDatabase.FindAssets("t:SpriteAtlas");
var atlases = guids.Select(g => AssetDatabase.LoadAssetAtPath<SpriteAtlas>(AssetDatabase.GUIDToAssetPath(g))).ToArray();
if (atlases == null || atlases.Length == 0) { Debug.LogWarning("No sprite atlases found; skipping pack."); return; }
SpriteAtlasUtility.PackAtlases(atlases, BuildTarget.StandaloneWindows64); Defensive patterns
Strategy: validation
Validate before calling
if (atlases == null) { Debug.LogWarning("atlases is null; nothing to pack."); return; } Type guard
static bool HasAtlases(SpriteAtlas[] a) => a != null && a.Length > 0;
Prevention
- Always derive atlases from AssetDatabase.FindAssets + LoadAssetAtPath so the array is populated.
- Add a null/empty guard at the entry of every batch-pack routine.
- Never forward unchecked external inputs (selection, config) to PackAtlases.
When it happens
Trigger: Calling SpriteAtlasUtility.PackAtlases(null, target). Passing a field/property that was never assigned (e.g. a SerializedProperty.objectReferenceValue-derived array that came back null). Forwarding the result of FindObjectsByType or AssetDatabase.FindAssets that returned nothing and got coerced to null.
Common situations: Editor build scripts and CI batch packing pipelines that gather atlases dynamically. PostImport or BuildPlayer callbacks that pack atlases where asset loading failed silently. Menu-item automation where the user forgot to select atlases in the Project window.
Related errors
- One of the elements in atlases is null. Please check your In
- Parameter asset is null
- gameObject
- bindings must be non-null
- keyframes must be non-null
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/17649806846e1d27.
Report an issue: GitHub.