using UnityEditor; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public static class AetheriaUrpBootstrap { private const string SettingsFolder = "Assets/Settings/Rendering"; private const string PipelineAssetPath = SettingsFolder + "/AetheriaURPAsset.asset"; private const string RendererAssetPath = SettingsFolder + "/AetheriaUniversalRenderer.asset"; [MenuItem("Aetheria/Rendering/Ensure URP Assets")] public static void EnsureUrpAssetsAndAssign() { EnsureFolder(SettingsFolder); var rendererData = AssetDatabase.LoadAssetAtPath(RendererAssetPath); if (rendererData == null) { rendererData = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(rendererData, RendererAssetPath); } var pipelineAsset = AssetDatabase.LoadAssetAtPath(PipelineAssetPath); if (pipelineAsset == null) { pipelineAsset = UniversalRenderPipelineAsset.Create(rendererData); AssetDatabase.CreateAsset(pipelineAsset, PipelineAssetPath); } GraphicsSettings.defaultRenderPipeline = pipelineAsset; QualitySettings.renderPipeline = pipelineAsset; EditorUtility.SetDirty(pipelineAsset); EditorUtility.SetDirty(rendererData); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log($"Aetheria URP asset assigned: {PipelineAssetPath}"); } private static void EnsureFolder(string folderPath) { var parts = folderPath.Split('/'); var current = parts[0]; for (var i = 1; i < parts.Length; i++) { var next = current + "/" + parts[i]; if (!AssetDatabase.IsValidFolder(next)) { AssetDatabase.CreateFolder(current, parts[i]); } current = next; } } }