using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; namespace AssetBank.Settings { public enum UnityAssetType { Animation, AnimatorController, AnimatorOverrideController, AudioClip, AudioMixer, ComputeShader, Font, GUISkin, Material, Mesh, Model, PhysicMaterial, Prefab, Scene, Script, Shader, Sprite, Texture, VideoClip, RenderTexture, LightmapParameters, Custom } [System.Serializable] public class IgnoredUnityType { public UnityAssetType assetType = UnityAssetType.Texture; public string customType = ""; } [System.Serializable] public class SafeExposedComponents { public string Component; public List ExposedFields; } public class ProjectExporterSettings : ScriptableObject { private const string k_SettingsPath = "Assets/AssetBank/Assets/ProjectExporterSettings.asset"; [SerializeField] private bool m_OptimiseExport; public bool OptimiseExport => m_OptimiseExport; [SerializeField] private List m_CategoriesToOptimise = new(); public List CategoriesToOptimise => m_CategoriesToOptimise; [SerializeField] private List m_SafeComponents = new(); public List SafeComponents => m_SafeComponents; [SerializeField] private List m_HardcodedComponents = new(); public List HardcodedComponents => m_HardcodedComponents; [SerializeField] private bool m_OverrideHardcodedDefaults; public bool OverrideHardcodedDefaults => m_OverrideHardcodedDefaults; [SerializeField] private List m_FoldersToIgnore = new(); public List FoldersToIgnore => m_FoldersToIgnore; [SerializeField] private List m_FileExtensionsToIgnore = new(); public List FileExtensionsToIgnore => m_FileExtensionsToIgnore; [SerializeField] private List m_UnityTypesToIgnore = new(); public List UnityTypesToIgnore => m_UnityTypesToIgnore; internal static ProjectExporterSettings GetOrCreateSettings() { var settings = AssetDatabase.LoadAssetAtPath(k_SettingsPath); if (settings == null) { settings = CreateInstance(); settings.m_OptimiseExport = true; settings.m_CategoriesToOptimise = new List { "Scenes", "Prefabs" }; settings.m_OverrideHardcodedDefaults = false; settings.m_HardcodedComponents = new List { new() { Component = "GameObject", ExposedFields = new List { "m_Component", "m_Name", "m_Layer", "m_TagString", "m_IsActive" } }, new() { Component = "Transform", ExposedFields = new List { "m_Father", "m_Children", "m_PrefabInstance" } }, new() { Component = "PrefabInstance", ExposedFields = new List { "m_SourcePrefab", "m_TransformParent" } }, new() { Component = "MonoBehaviour", ExposedFields = new List { "m_Enabled", "m_Script" } } }; settings.m_SafeComponents = new List { new() { Component = "GameObject", ExposedFields = new List { "m_Layer", "m_Name", "m_TagString", "m_IsActive", "m_Component" } }, new() { Component = "Transform", ExposedFields = new List { "m_Father", "m_Children" } }, new() { Component = "MonoBehaviour", ExposedFields = new List { "*" } }, new() { Component = "PrefabInstance", ExposedFields = new List { "*" } } }; var directory = Path.GetDirectoryName(k_SettingsPath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } AssetDatabase.CreateAsset(settings, k_SettingsPath); AssetDatabase.SaveAssets(); } return settings; } internal static SerializedObject GetSerializedSettings() { return new SerializedObject(GetOrCreateSettings()); } } }