using System.IO; using UnityEngine; using UnityEditorInternal; namespace UnityEditor.Rendering.Universal { internal class UniversalProjectSettings : ScriptableObject { public static string filePath => "ProjectSettings/URPProjectSettings.asset"; //preparing to eventual migration later enum Version { None, First } [SerializeField] int m_LastMaterialVersion = k_NeverProcessedMaterialVersion; internal const int k_NeverProcessedMaterialVersion = -1; public static int materialVersionForUpgrade { get => instance.m_LastMaterialVersion; set { instance.m_LastMaterialVersion = value; Save(); } } //singleton pattern static UniversalProjectSettings s_Instance; static UniversalProjectSettings instance => s_Instance ?? CreateOrLoad(); UniversalProjectSettings() { s_Instance = this; } static UniversalProjectSettings CreateOrLoad() { //try load InternalEditorUtility.LoadSerializedFileAndForget(filePath); //else create if (s_Instance == null) { UniversalProjectSettings created = CreateInstance(); created.hideFlags = HideFlags.HideAndDontSave; } System.Diagnostics.Debug.Assert(s_Instance != null); return s_Instance; } static void Save() { if (s_Instance == null) { Debug.Log("Cannot save ScriptableSingleton: no instance!"); return; } string folderPath = Path.GetDirectoryName(filePath); if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); InternalEditorUtility.SaveToSerializedFileAndForget(new[] { s_Instance }, filePath, allowTextSerialization: true); } } }