Settings.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace VEngine.Editor.Builds
  6. {
  7. public enum ScriptPlayMode
  8. {
  9. Simulation,
  10. Preload,
  11. Incremental
  12. }
  13. [CreateAssetMenu(menuName = "Versions/Settings", fileName = "Settings", order = 0)]
  14. public sealed class Settings : ScriptableObject
  15. {
  16. public List<string> excludeFiles =
  17. new List<string>
  18. {
  19. ".spriteatlas",
  20. ".giparams",
  21. "LightingData.asset"
  22. };
  23. public bool offlineMode;
  24. public ScriptPlayMode scriptPlayMode = ScriptPlayMode.Simulation;
  25. public bool ILRuntimeMode;
  26. public static string PlatformBuildPath
  27. {
  28. get
  29. {
  30. var dir = Utility.buildPath + $"/{GetPlatformName()}";
  31. if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
  32. return dir;
  33. }
  34. }
  35. public static string UnityBuildPath
  36. {
  37. get
  38. {
  39. var dir = Utility.BuildlesUnityFolder + $"/{GetPlatformName()}";
  40. if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
  41. return dir;
  42. }
  43. }
  44. public static string BuildPlayerDataPath =>
  45. string.Format("{0}/{1}", Application.streamingAssetsPath, Utility.buildPath);
  46. public static PlayerSettings GetPlayerSettings()
  47. {
  48. return LoadAsset<PlayerSettings>("Assets/Resources/PlayerSettings.asset");
  49. }
  50. public static Settings GetDefaultSettings()
  51. {
  52. var guilds = AssetDatabase.FindAssets("t:Settings");
  53. foreach (var guild in guilds)
  54. {
  55. var assetPath = AssetDatabase.GUIDToAssetPath(guild);
  56. if (string.IsNullOrEmpty(assetPath)) continue;
  57. var settings = LoadAsset<Settings>(assetPath);
  58. if (settings == null) continue;
  59. return settings;
  60. }
  61. return LoadAsset<Settings>("Assets/Settings.asset");
  62. }
  63. public static Manifest GetManifest()
  64. {
  65. var manifest = CreateInstance<Manifest>();
  66. manifest.name = nameof(Manifest);
  67. var path = GetBuildPath(manifest.name);
  68. if (!File.Exists(path)) return manifest;
  69. manifest.Load(path);
  70. return manifest;
  71. }
  72. public static List<ManifestBundle> GetBundlesInBuild(bool includeManifest)
  73. {
  74. var bundles = new List<ManifestBundle>();
  75. var manifest = GetManifest();
  76. bundles.AddRange(manifest.bundles);
  77. if (includeManifest)
  78. {
  79. var manifestName = $"{manifest.name}";
  80. var manifestVersionName = Manifest.GetVersionFile(manifestName);
  81. bundles.Add(new ManifestBundle
  82. {
  83. name = manifestVersionName,
  84. nameWithAppendHash = manifestVersionName
  85. });
  86. bundles.Add(new ManifestBundle
  87. {
  88. name = manifestName,
  89. nameWithAppendHash = manifestName
  90. });
  91. }
  92. return bundles;
  93. }
  94. public static string GetBuildPath(string file)
  95. {
  96. return $"{PlatformBuildPath}/{file}";
  97. }
  98. public static string GetPlatformName()
  99. {
  100. switch (EditorUserBuildSettings.activeBuildTarget)
  101. {
  102. case BuildTarget.Android:
  103. return "Android";
  104. case BuildTarget.StandaloneOSX:
  105. return "OSX";
  106. case BuildTarget.StandaloneWindows:
  107. case BuildTarget.StandaloneWindows64:
  108. return "Windows";
  109. case BuildTarget.iOS:
  110. return "iOS";
  111. case BuildTarget.WebGL:
  112. return "WebGL";
  113. default:
  114. return Utility.unsupportedPlatform;
  115. }
  116. }
  117. public static void PingWithSelected(Object target)
  118. {
  119. Selection.activeObject = target;
  120. EditorGUIUtility.PingObject(target);
  121. }
  122. public static T LoadAsset<T>(string path) where T : ScriptableObject
  123. {
  124. var asset = AssetDatabase.LoadAssetAtPath<T>(path);
  125. if (asset != null) return asset;
  126. var dir = Path.GetDirectoryName(path);
  127. if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) Directory.CreateDirectory(dir);
  128. asset = CreateInstance<T>();
  129. AssetDatabase.CreateAsset(asset, path);
  130. return asset;
  131. }
  132. public static void SaveAsset(Object asset)
  133. {
  134. EditorUtility.SetDirty(asset);
  135. AssetDatabase.SaveAssets();
  136. AssetDatabase.Refresh();
  137. }
  138. public static IEnumerable<string> GetDependencies(string path)
  139. {
  140. var set = new HashSet<string>(AssetDatabase.GetDependencies(path, true));
  141. set.Remove(path);
  142. return set;
  143. }
  144. }
  145. }