Unity-Technologies/UnityCsReference · error · Exception
Unknown WSA image type: {type}
Error message
Unknown WSA image type: {type} What it means
ValidateWSAImageType throws a plain System.Exception with "Unknown WSA image type: <type>" when a WSAImageType enum value is not one of the seven handled cases (PackageLogo, SplashScreenImage, UWPSquare44x44Logo, UWPSquare71x71Logo, UWPSquare150x150Logo, UWPSquare310x310Logo, UWPWide310x150Logo). The method is called by GetVisualAssetsImage/SetVisualAssetsImage and is a defensive default branch — it fires when a caller casts an arbitrary integer to the enum (e.g. (WSAImageType)999) or passes a value added to the enum in a newer engine version that this validation predates.
Source
Thrown at Editor/Mono/PlayerSettingsWSA.cs:43
{
return "1.0.0.0";
}
}
internal static void ValidateWSAImageType(WSAImageType type)
{
switch (type)
{
case WSAImageType.PackageLogo:
case WSAImageType.SplashScreenImage:
case WSAImageType.UWPSquare44x44Logo:
case WSAImageType.UWPSquare71x71Logo:
case WSAImageType.UWPSquare150x150Logo:
case WSAImageType.UWPSquare310x310Logo:
case WSAImageType.UWPWide310x150Logo:
return;
default:
throw new Exception("Unknown WSA image type: " + type);
}
}
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;View on GitHub (pinned to 225b0fbdb5)
Solutions
- Validate the WSAImageType with Enum.IsDefined before calling Get/SetVisualAssetsImage.
- Stop casting raw integers to the enum; only use named WSAImageType members.
- If the value comes from serialized data, sanitize/whitelist it against the known set before forwarding.
- Upgrade the calling code to the same Unity version as the running editor so any new enum members are visible at compile time.
Example fix
// before — unsafe cast can fall through the switch
var img = PlayerSettings.WSA.GetVisualAssetsImage((WSAImageType)rawInt, WSAImageScale._100);
// after — whitelist before calling
WSAImageType type = (WSAImageType)rawInt;
if (!Enum.IsDefined(typeof(WSAImageType), type) ||
(type != WSAImageType.PackageLogo &&
type != WSAImageType.SplashScreenImage &&
type != WSAImageType.UWPSquare44x44Logo &&
type != WSAImageType.UWPSquare71x71Logo &&
type != WSAImageType.UWPSquare150x150Logo &&
type != WSAImageType.UWPSquare310x310Logo &&
type != WSAImageType.UWPWide310x150Logo))
{
throw new ArgumentOutOfRangeException(nameof(type), type, "Unsupported WSAImageType");
}
var img = PlayerSettings.WSA.GetVisualAssetsImage(type, WSAImageScale._100); Defensive patterns
Strategy: validation
Validate before calling
static readonly HashSet<WSAImageType> AllowedTypes = new HashSet<WSAImageType>
{
WSAImageType.PackageLogo, WSAImageType.SplashScreenImage,
WSAImageType.UWPSquare44x44Logo, WSAImageType.UWPSquare71x71Logo,
WSAImageType.UWPSquare150x150Logo, WSAImageType.UWPSquare310x310Logo,
WSAImageType.UWPWide310x150Logo,
};
static bool IsValid(WSAImageType t) => Enum.IsDefined(typeof(WSAImageType), t) && AllowedTypes.Contains(t);
if (!IsValid(type)) throw new ArgumentOutOfRangeException(nameof(type), type, "Unsupported WSAImageType");
var img = PlayerSettings.WSA.GetVisualAssetsImage(type, WSAImageScale._100); Type guard
static bool IsSupportedWSAImageType(WSAImageType t)
{
switch (t)
{
case WSAImageType.PackageLogo:
case WSAImageType.SplashScreenImage:
case WSAImageType.UWPSquare44x44Logo:
case WSAImageType.UWPSquare71x71Logo:
case WSAImageType.UWPSquare150x150Logo:
case WSAImageType.UWPSquare310x310Logo:
case WSAImageType.UWPWide310x150Logo:
return true;
default:
return false;
}
} Try / catch
// ValidateWSAImageType throws a bare System.Exception; validate instead of catching.
if (!IsSupportedWSAImageType(type))
throw new ArgumentOutOfRangeException(nameof(type), type, "Unsupported WSAImageType");
try { var img = PlayerSettings.WSA.GetVisualAssetsImage(type, scale); }
catch (System.Exception ex) when (ex.Message.StartsWith("Unknown WSA image type"))
{
// last-resort guard for version-skew additions to the enum
UnityEngine.Debug.LogError(ex.Message);
} Prevention
- Never cast arbitrary integers to WSAImageType; use named members.
- Validate enums with Enum.IsDefined plus an explicit allow-list before calling Get/SetVisualAssetsImage.
- Keep editor scripts on the same Unity version as the running editor so enum shapes match.
- Sanitize deserialized WSAImageType values from JSON/YAML against the known set.
When it happens
Trigger: Passing a cast integer like (WSAImageType)42 to GetVisualAssetsImage or SetVisualAssetsImage; reading an unvalidated WSAImageType from a serialized config/JSON and forwarding it; calling these APIs on an engine build whose WSAImageType enum has new members not present in the switch.
Common situations: Build scripts that deserialize PlayerSettings overrides from YAML/JSON and cast loosely. Automated tooling enumerating enum values by integer. Version skew between the editor compiling the script and the editor running it.
Related errors
- Unknown image scale: {scale}
- {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/d0ddf9bb5cd21116.
Report an issue: GitHub.