ProjectExporterSettings.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace AssetBank.Settings
  6. {
  7. public enum UnityAssetType
  8. {
  9. Animation,
  10. AnimatorController,
  11. AnimatorOverrideController,
  12. AudioClip,
  13. AudioMixer,
  14. ComputeShader,
  15. Font,
  16. GUISkin,
  17. Material,
  18. Mesh,
  19. Model,
  20. PhysicMaterial,
  21. Prefab,
  22. Scene,
  23. Script,
  24. Shader,
  25. Sprite,
  26. Texture,
  27. VideoClip,
  28. RenderTexture,
  29. LightmapParameters,
  30. Custom
  31. }
  32. [System.Serializable]
  33. public class IgnoredUnityType
  34. {
  35. public UnityAssetType assetType = UnityAssetType.Texture;
  36. public string customType = "";
  37. }
  38. [System.Serializable]
  39. public class SafeExposedComponents
  40. {
  41. public string Component;
  42. public List<string> ExposedFields;
  43. }
  44. public class ProjectExporterSettings : ScriptableObject
  45. {
  46. private const string k_SettingsPath = "Assets/AssetBank/Assets/ProjectExporterSettings.asset";
  47. [SerializeField]
  48. private bool m_ConvertToNewSchema;
  49. public bool ConvertToNewSchema => m_ConvertToNewSchema;
  50. [SerializeField]
  51. private bool m_OptimiseExport;
  52. public bool OptimiseExport => m_OptimiseExport;
  53. [SerializeField]
  54. private List<string> m_CategoriesToOptimise = new();
  55. public List<string> CategoriesToOptimise => m_CategoriesToOptimise;
  56. [SerializeField]
  57. private List<SafeExposedComponents> m_SafeComponents = new();
  58. public List<SafeExposedComponents> SafeComponents => m_SafeComponents;
  59. [SerializeField]
  60. private List<SafeExposedComponents> m_HardcodedComponents = new();
  61. public List<SafeExposedComponents> HardcodedComponents => m_HardcodedComponents;
  62. [SerializeField]
  63. private bool m_OverrideHardcodedDefaults;
  64. public bool OverrideHardcodedDefaults => m_OverrideHardcodedDefaults;
  65. [SerializeField]
  66. private List<string> m_FoldersToIgnore = new();
  67. public List<string> FoldersToIgnore => m_FoldersToIgnore;
  68. [SerializeField]
  69. private List<string> m_FileExtensionsToIgnore = new();
  70. public List<string> FileExtensionsToIgnore => m_FileExtensionsToIgnore;
  71. [SerializeField]
  72. private List<IgnoredUnityType> m_UnityTypesToIgnore = new();
  73. public List<IgnoredUnityType> UnityTypesToIgnore => m_UnityTypesToIgnore;
  74. public static ProjectExporterSettings GetOrCreateSettings()
  75. {
  76. var settings = AssetDatabase.LoadAssetAtPath<ProjectExporterSettings>(k_SettingsPath);
  77. if (settings == null)
  78. {
  79. settings = CreateInstance<ProjectExporterSettings>();
  80. settings.m_OptimiseExport = true;
  81. settings.m_CategoriesToOptimise = new List<string> { "Scenes", "Prefabs" };
  82. settings.m_OverrideHardcodedDefaults = false;
  83. settings.m_HardcodedComponents = new List<SafeExposedComponents>
  84. {
  85. new() { Component = "GameObject", ExposedFields = new List<string> { "m_Component", "m_Name", "m_Layer", "m_TagString", "m_IsActive" } },
  86. new() { Component = "Transform", ExposedFields = new List<string> { "m_Father", "m_Children", "m_PrefabInstance" } },
  87. new() { Component = "PrefabInstance", ExposedFields = new List<string> { "m_SourcePrefab", "m_TransformParent" } },
  88. new() { Component = "MonoBehaviour", ExposedFields = new List<string> { "m_Enabled", "m_Script" } }
  89. };
  90. settings.m_SafeComponents = new List<SafeExposedComponents>
  91. {
  92. new()
  93. {
  94. Component = "GameObject",
  95. ExposedFields = new List<string> { "m_Layer", "m_Name", "m_TagString", "m_IsActive", "m_Component" }
  96. },
  97. new()
  98. {
  99. Component = "Transform",
  100. ExposedFields = new List<string> { "m_Father", "m_Children" }
  101. },
  102. new()
  103. {
  104. Component = "MonoBehaviour",
  105. ExposedFields = new List<string> { "*" }
  106. },
  107. new()
  108. {
  109. Component = "PrefabInstance",
  110. ExposedFields = new List<string> { "*" }
  111. }
  112. };
  113. var directory = Path.GetDirectoryName(k_SettingsPath);
  114. if (!Directory.Exists(directory))
  115. {
  116. Directory.CreateDirectory(directory);
  117. }
  118. AssetDatabase.CreateAsset(settings, k_SettingsPath);
  119. AssetDatabase.SaveAssets();
  120. }
  121. return settings;
  122. }
  123. internal static SerializedObject GetSerializedSettings()
  124. {
  125. return new SerializedObject(GetOrCreateSettings());
  126. }
  127. }
  128. }