Files
AIGame/AIClient/Assets/Editor/SetupUrp.cs
T

73 lines
3.1 KiB
C#

#if UNITY_EDITOR
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public static class SetupUrp
{
// Map Quality level name -> URP asset under Assets/Settings/URP
static readonly (string qualityName, string assetPath)[] QualityPipelineMap =
{
("Very Low", "Assets/Settings/URP/UniversalRP-0VeryLowQuality.asset"),
("Low", "Assets/Settings/URP/UniversalRP-1LowQuality.asset"),
("Medium", "Assets/Settings/URP/UniversalRP-2MediumQuality.asset"),
("High", "Assets/Settings/URP/UniversalRP-3HighQuality.asset"),
("Very High", "Assets/Settings/URP/UniversalRP-4VeryHighQuality.asset"),
("Ultra", "Assets/Settings/URP/UniversalRP-4VeryHighQuality.asset"),
};
const string FallbackPipeline = "Assets/Settings/URP/UniversalRP-3HighQuality.asset";
/// <summary>
/// Assign a URP asset to every Quality level and set Graphics default pipeline.
/// Fixes: "platforms have assets in its associated Quality levels that belong to different render pipelines"
/// </summary>
public static string FixQualityPipelines()
{
var log = new StringBuilder();
var names = QualitySettings.names;
UniversalRenderPipelineAsset fallback = AssetDatabase.LoadAssetAtPath<UniversalRenderPipelineAsset>(FallbackPipeline);
if (fallback == null)
return "ERROR: missing fallback URP asset at " + FallbackPipeline;
for (int i = 0; i < names.Length; i++)
{
var path = ResolvePipelinePath(names[i]);
var asset = AssetDatabase.LoadAssetAtPath<UniversalRenderPipelineAsset>(path) ?? fallback;
QualitySettings.SetQualityLevel(i, applyExpensiveChanges: false);
QualitySettings.renderPipeline = asset;
log.AppendLine($"{i}:{names[i]} -> {AssetDatabase.GetAssetPath(asset)}");
}
// Prefer High-tier as project default (Graphics Settings)
GraphicsSettings.renderPipelineAsset =
AssetDatabase.LoadAssetAtPath<UniversalRenderPipelineAsset>(FallbackPipeline) ?? fallback;
// Restore previous current quality if possible, else Ultra/last
int restore = System.Array.IndexOf(names, "Ultra");
if (restore < 0) restore = names.Length - 1;
QualitySettings.SetQualityLevel(restore, applyExpensiveChanges: true);
AssetDatabase.SaveAssets();
EditorUtility.SetDirty(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/QualitySettings.asset")[0]);
log.AppendLine("Graphics default -> " + AssetDatabase.GetAssetPath(GraphicsSettings.renderPipelineAsset));
log.AppendLine("Current quality -> " + QualitySettings.names[QualitySettings.GetQualityLevel()]);
return log.ToString();
}
static string ResolvePipelinePath(string qualityName)
{
foreach (var entry in QualityPipelineMap)
{
if (entry.qualityName == qualityName)
return entry.assetPath;
}
return FallbackPipeline;
}
public static string Execute() => FixQualityPipelines();
}
#endif