ProjectExporterSettings.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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_OptimiseExport;
  49. public bool OptimiseExport => m_OptimiseExport;
  50. [SerializeField]
  51. private List<string> m_CategoriesToOptimise = new();
  52. public List<string> CategoriesToOptimise => m_CategoriesToOptimise;
  53. [SerializeField]
  54. private List<SafeExposedComponents> m_SafeComponents = new();
  55. public List<SafeExposedComponents> SafeComponents => m_SafeComponents;
  56. [SerializeField]
  57. private List<SafeExposedComponents> m_HardcodedComponents = new();
  58. public List<SafeExposedComponents> HardcodedComponents => m_HardcodedComponents;
  59. [SerializeField]
  60. private bool m_OverrideHardcodedDefaults;
  61. public bool OverrideHardcodedDefaults => m_OverrideHardcodedDefaults;
  62. [SerializeField]
  63. private List<string> m_FoldersToIgnore = new();
  64. public List<string> FoldersToIgnore => m_FoldersToIgnore;
  65. [SerializeField]
  66. private List<string> m_FileExtensionsToIgnore = new();
  67. public List<string> FileExtensionsToIgnore => m_FileExtensionsToIgnore;
  68. [SerializeField]
  69. private List<IgnoredUnityType> m_UnityTypesToIgnore = new();
  70. public List<IgnoredUnityType> UnityTypesToIgnore => m_UnityTypesToIgnore;
  71. internal static ProjectExporterSettings GetOrCreateSettings()
  72. {
  73. var settings = AssetDatabase.LoadAssetAtPath<ProjectExporterSettings>(k_SettingsPath);
  74. if (settings == null)
  75. {
  76. settings = CreateInstance<ProjectExporterSettings>();
  77. settings.m_OptimiseExport = true;
  78. settings.m_CategoriesToOptimise = new List<string> { "Scenes", "Prefabs" };
  79. settings.m_OverrideHardcodedDefaults = false;
  80. settings.m_HardcodedComponents = new List<SafeExposedComponents>
  81. {
  82. new() { Component = "GameObject", ExposedFields = new List<string> { "m_Component", "m_Name", "m_Layer", "m_TagString", "m_IsActive" } },
  83. new() { Component = "Transform", ExposedFields = new List<string> { "m_Father", "m_Children", "m_PrefabInstance" } },
  84. new() { Component = "PrefabInstance", ExposedFields = new List<string> { "m_SourcePrefab", "m_TransformParent" } },
  85. new() { Component = "MonoBehaviour", ExposedFields = new List<string> { "m_Enabled", "m_Script" } }
  86. };
  87. settings.m_SafeComponents = new List<SafeExposedComponents>
  88. {
  89. new()
  90. {
  91. Component = "GameObject",
  92. ExposedFields = new List<string> { "m_Layer", "m_Name", "m_TagString", "m_IsActive", "m_Component" }
  93. },
  94. new()
  95. {
  96. Component = "Transform",
  97. ExposedFields = new List<string> { "m_Father", "m_Children" }
  98. },
  99. new()
  100. {
  101. Component = "MonoBehaviour",
  102. ExposedFields = new List<string> { "*" }
  103. },
  104. new()
  105. {
  106. Component = "PrefabInstance",
  107. ExposedFields = new List<string> { "*" }
  108. }
  109. };
  110. var directory = Path.GetDirectoryName(k_SettingsPath);
  111. if (!Directory.Exists(directory))
  112. {
  113. Directory.CreateDirectory(directory);
  114. }
  115. AssetDatabase.CreateAsset(settings, k_SettingsPath);
  116. AssetDatabase.SaveAssets();
  117. }
  118. return settings;
  119. }
  120. internal static SerializedObject GetSerializedSettings()
  121. {
  122. return new SerializedObject(GetOrCreateSettings());
  123. }
  124. }
  125. }