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

  1. Validate the WSAImageType with Enum.IsDefined before calling Get/SetVisualAssetsImage.
  2. Stop casting raw integers to the enum; only use named WSAImageType members.
  3. If the value comes from serialized data, sanitize/whitelist it against the known set before forwarding.
  4. 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

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


AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13). Data as JSON: /api/errors/d0ddf9bb5cd21116. Report an issue: GitHub.