Unity-Technologies/UnityCsReference · error · ArgumentException
TierSettings.renderingPath must be actual rendering path (no
Error message
TierSettings.renderingPath must be actual rendering path (not UsePlayerSettings)
What it means
Thrown by EditorGraphicsSettings.SetTierSettings when the supplied TierSettings.renderingPath equals RenderingPath.UsePlayerSettings. Tier settings are an explicit, per-tier override, so 'UsePlayerSettings' is a non-answer at this level and would create a meaningless self-reference; the API rejects it.
Source
Thrown at Editor/Mono/EditorGraphicsSettings.cs:77
public bool detailNormalMap;
public bool cascadedShadowMaps;
public bool prefer32BitShadowMaps;
public bool enableLPPV;
public bool semitransparentShadows;
public RenderingPath renderingPath;
public RealtimeGICPUUsage realtimeGICPUUsage;
}
public sealed partial class EditorGraphicsSettings
{
// Use the version with NamedBuildTarget passed instead.
// [Obsolete("Use SetTierSettings() instead (UnityUpgradable) -> SetTierSettings(*)", false)]
public static void SetTierSettings(BuildTargetGroup target, GraphicsTier tier, TierSettings settings)
{
if (settings.renderingPath == RenderingPath.UsePlayerSettings)
throw new ArgumentException("TierSettings.renderingPath must be actual rendering path (not UsePlayerSettings)", "settings");
SetTierSettingsImpl(target, tier, settings);
MakeTierSettingsAutomatic(target, tier, false);
OnUpdateTierSettings(target, true);
}
public static void SetTierSettings(NamedBuildTarget target, GraphicsTier tier, TierSettings settings) => SetTierSettings(target.ToBuildTargetGroup(), tier, settings);
}
//
// deprecated
//
[Obsolete("Use TierSettings instead (UnityUpgradable) -> UnityEditor.Rendering.TierSettings", false)]
[StructLayout(LayoutKind.Sequential)]
public struct PlatformShaderSettings
{View on GitHub (pinned to 225b0fbdb5)
Solutions
- Set settings.renderingPath to a concrete RenderingPath value (e.g. Deferred, Forward, VertexLit) before calling SetTierSettings.
- Read the current tier settings via GetTierSettings, modify only the fields you intend, then write back so renderingPath is already concrete.
- Validate the enum against the allowed subset before the call.
Example fix
// before
var ts = new TierSettings { /* renderingPath defaults to UsePlayerSettings */ };
EditorGraphicsSettings.SetTierSettings(target, tier, ts);
// after
var ts = EditorGraphicsSettings.GetTierSettings(target, tier);
ts.renderingPath = RenderingPath.Deferred;
EditorGraphicsSettings.SetTierSettings(target, tier, ts); Defensive patterns
Strategy: validation
Validate before calling
if (settings.renderingPath == RenderingPath.UsePlayerSettings) { settings.renderingPath = RenderingPath.Forward; /* pick a concrete default */ } Type guard
static bool IsValidTierRenderingPath(RenderingPath p) => p != RenderingPath.UsePlayerSettings;
Prevention
- Start from GetTierSettings and modify fields, rather than default-constructing TierSettings.
- Explicitly set renderingPath to a concrete value before SetTierSettings.
- Validate the renderingPath enum subset in build-configuration tooling.
When it happens
Trigger: Building TierSettings programmatically and leaving renderingPath at its default (which is UsePlayerSettings) before calling SetTierSettings. Also copying tier settings from a player-settings-derived struct without overriding the path.
Common situations: Editor scripts that programmatically configure graphics tiers for build presets; tooling that snapshots and reapplies tier settings; default-constructed TierSettings passed without field initialization.
Related errors
- Filters must be declared in pairs { "FileType", "FileExtensi
- Cannot add dependency on invalid ArtifactKey.
- No valid types in required type list
- Parameter selected must be of type System.Enum
- Parameter enumValue must be of type System.Enum
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/4966d67a3a207643.
Report an issue: GitHub.