Unity-Technologies/UnityCsReference · error · Exception
Unknown image scale: {scale}
Error message
Unknown image scale: {scale} What it means
ValidateWSAImageScale throws System.Exception with "Unknown image scale: <scale>" when a WSAImageScale value is outside the ten handled cases (_100, _125, _150, _200, _400, Target16, Target24, Target32, Target48, Target256). It is invoked by GetVisualAssetsImage and SetVisualAssetsImage. The default branch is defensive: it triggers when a caller casts an arbitrary integer to WSAImageScale or forwards an enum member from a newer/older engine build that this switch does not recognize.
Source
Thrown at Editor/Mono/PlayerSettingsWSA.cs:63
}
internal static void ValidateWSAImageScale(WSAImageScale scale)
{
switch (scale)
{
case WSAImageScale._100:
case WSAImageScale._125:
case WSAImageScale._150:
case WSAImageScale._200:
case WSAImageScale._400:
case WSAImageScale.Target16:
case WSAImageScale.Target24:
case WSAImageScale.Target32:
case WSAImageScale.Target48:
case WSAImageScale.Target256:
return;
default:
throw new Exception("Unknown image scale: " + scale);
}
}
public static string GetVisualAssetsImage(WSAImageType type, WSAImageScale scale)
{
ValidateWSAImageType(type);
ValidateWSAImageScale(scale);
return GetWSAImage(type, scale);
}
public static void SetVisualAssetsImage(string image, WSAImageType type, WSAImageScale scale)
{
ValidateWSAImageType(type);
ValidateWSAImageScale(scale);
SetWSAImage(image, type, scale);
}
public static System.Version packageVersionView on GitHub (pinned to 225b0fbdb5)
Solutions
- Validate WSAImageScale with Enum.IsDefined and an explicit allow-list before calling Get/SetVisualAssetsImage.
- Never cast raw ints to WSAImageScale; use named members only.
- Sanitize deserialized scale values against the supported set.
- Keep the calling assembly on the same Unity version as the editor so the enum shape matches.
Example fix
// before
var img = PlayerSettings.WSA.GetVisualAssetsImage(WSAImageType.PackageLogo, (WSAImageScale)scaleInt);
// after — guard the scale
WSAImageScale scale = (WSAImageScale)scaleInt;
var allowed = new[] { WSAImageScale._100, WSAImageScale._125, WSAImageScale._150,
WSAImageScale._200, WSAImageScale._400, WSAImageScale.Target16,
WSAImageScale.Target24, WSAImageScale.Target32,
WSAImageScale.Target48, WSAImageScale.Target256 };
if (!Enum.IsDefined(typeof(WSAImageScale), scale) || !allowed.Contains(scale))
throw new ArgumentOutOfRangeException(nameof(scale), scale, "Unsupported WSAImageScale");
var img = PlayerSettings.WSA.GetVisualAssetsImage(WSAImageType.PackageLogo, scale); Defensive patterns
Strategy: validation
Validate before calling
static readonly HashSet<WSAImageScale> AllowedScales = new HashSet<WSAImageScale>
{
WSAImageScale._100, WSAImageScale._125, WSAImageScale._150, WSAImageScale._200,
WSAImageScale._400, WSAImageScale.Target16, WSAImageScale.Target24,
WSAImageScale.Target32, WSAImageScale.Target48, WSAImageScale.Target256,
};
static bool IsValid(WSAImageScale s) => Enum.IsDefined(typeof(WSAImageScale), s) && AllowedScales.Contains(s);
if (!IsValid(scale)) throw new ArgumentOutOfRangeException(nameof(scale), scale, "Unsupported WSAImageScale");
var img = PlayerSettings.WSA.GetVisualAssetsImage(WSAImageType.PackageLogo, scale); Type guard
static bool IsSupportedWSAImageScale(WSAImageScale s)
{
switch (s)
{
case WSAImageScale._100:
case WSAImageScale._125:
case WSAImageScale._150:
case WSAImageScale._200:
case WSAImageScale._400:
case WSAImageScale.Target16:
case WSAImageScale.Target24:
case WSAImageScale.Target32:
case WSAImageScale.Target48:
case WSAImageScale.Target256:
return true;
default:
return false;
}
} Try / catch
if (!IsSupportedWSAImageScale(scale))
throw new ArgumentOutOfRangeException(nameof(scale), scale, "Unsupported WSAImageScale");
try { var img = PlayerSettings.WSA.GetVisualAssetsImage(type, scale); }
catch (System.Exception ex) when (ex.Message.StartsWith("Unknown image scale"))
{
UnityEngine.Debug.LogError(ex.Message);
} Prevention
- Use named WSAImageScale members only; never cast raw ints.
- Validate with Enum.IsDefined and an allow-list before calling the visual-assets API.
- Revalidate deserialized scale values from config files.
- Keep scripts and editor on the same Unity version.
When it happens
Trigger: Passing (WSAImageScale)99 to Get/SetVisualAssetsImage; deserializing a scale from JSON as an int and casting it; running code compiled against a Unity version whose WSAImageScale enum has members not in this switch.
Common situations: Build pipelines that read tile-image scale overrides from config files. Tooling that iterates enum values numerically. Engine/script version skew.
Related errors
- Unknown WSA image type: {type}
- {0}, the raw string was {1}
- PlayerSettings.storeTileLogo80 is deprecated. Use GetVisualA
- PlayerSettings.storeTileLogo80 is deprecated. Use SetVisualA
- PlayerSettings.storeTileLogo is deprecated. Use GetVisualAss
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/80d69da91c00daf5.
Report an issue: GitHub.