using System; using System.IO; using UnityEditor; using UnityEngine; namespace Unity.Toonshader { [Serializable] public struct UTSOutlineSetting { public bool enable; } [Serializable] public struct UtsHairShadowSetting { public bool enable; public RenderingLayerMask CasterRenderingLayer; } [CreateAssetMenu(fileName = "UTSRenderSetting", menuName = "UTS/RenderSetting")] public class UTSRenderPassSettings : ScriptableObject { public const string UTS_RENDERING_SETTINGS_NAME = "UTSRenderingSettings"; public const string UTS_RENDERING_SETTINGS_PATH = "Assets/Resources/Settings/UTSRenderSettings.asset"; public const string UTS_RENDERING_SETTINGS_RESOURCES_PATH = "Settings/UTSRenderSettings"; public UTSOutlineSetting outlineSetting; public UtsHairShadowSetting hairShadowSetting; internal static UTSRenderPassSettings GetOrCreateSettings() { #if UNITY_EDITOR if (EditorBuildSettings.TryGetConfigObject(UTS_RENDERING_SETTINGS_NAME, out var settings)) { return settings; } UTSRenderPassSettings renderingSettings = null; if (File.Exists(UTS_RENDERING_SETTINGS_PATH)) { renderingSettings = AssetDatabase.LoadAssetAtPath(UTS_RENDERING_SETTINGS_PATH); } else { renderingSettings = CreateInstance(); AssetDatabase.CreateAsset(renderingSettings, UTS_RENDERING_SETTINGS_PATH); AssetDatabase.Refresh(); } EditorBuildSettings.AddConfigObject(UTS_RENDERING_SETTINGS_NAME, renderingSettings, true); return renderingSettings; #else return Resources.Load(UTS_RENDERING_SETTINGS_RESOURCES_PATH); #endif } public static SerializedObject GetSerializedSettings() { return new(GetOrCreateSettings()); } } }