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 packageVersion

View on GitHub (pinned to 225b0fbdb5)

Solutions

  1. Validate WSAImageScale with Enum.IsDefined and an explicit allow-list before calling Get/SetVisualAssetsImage.
  2. Never cast raw ints to WSAImageScale; use named members only.
  3. Sanitize deserialized scale values against the supported set.
  4. 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

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


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