Settings.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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 BuildPlayerDataPath =>
  36. string.Format("{0}/{1}", Application.streamingAssetsPath, Utility.buildPath);
  37. public static PlayerSettings GetPlayerSettings()
  38. {
  39. return LoadAsset<PlayerSettings>("Assets/Resources/PlayerSettings.asset");
  40. }
  41. public static Settings GetDefaultSettings()
  42. {
  43. var guilds = AssetDatabase.FindAssets("t:Settings");
  44. foreach (var guild in guilds)
  45. {
  46. var assetPath = AssetDatabase.GUIDToAssetPath(guild);
  47. if (string.IsNullOrEmpty(assetPath)) continue;
  48. var settings = LoadAsset<Settings>(assetPath);
  49. if (settings == null) continue;
  50. return settings;
  51. }
  52. return LoadAsset<Settings>("Assets/Settings.asset");
  53. }
  54. public static Manifest GetManifest()
  55. {
  56. var manifest = CreateInstance<Manifest>();
  57. manifest.name = nameof(Manifest);
  58. var path = GetBuildPath(manifest.name);
  59. if (!File.Exists(path)) return manifest;
  60. manifest.Load(path);
  61. return manifest;
  62. }
  63. public static List<ManifestBundle> GetBundlesInBuild(bool includeManifest)
  64. {
  65. var bundles = new List<ManifestBundle>();
  66. var manifest = GetManifest();
  67. bundles.AddRange(manifest.bundles);
  68. if (includeManifest)
  69. {
  70. var manifestName = $"{manifest.name}";
  71. var manifestVersionName = Manifest.GetVersionFile(manifestName);
  72. bundles.Add(new ManifestBundle
  73. {
  74. name = manifestVersionName,
  75. nameWithAppendHash = manifestVersionName
  76. });
  77. bundles.Add(new ManifestBundle
  78. {
  79. name = manifestName,
  80. nameWithAppendHash = manifestName
  81. });
  82. }
  83. return bundles;
  84. }
  85. public static string GetBuildPath(string file)
  86. {
  87. return $"{PlatformBuildPath}/{file}";
  88. }
  89. public static string GetPlatformName()
  90. {
  91. switch (EditorUserBuildSettings.activeBuildTarget)
  92. {
  93. case BuildTarget.Android:
  94. return "Android";
  95. case BuildTarget.StandaloneOSX:
  96. return "OSX";
  97. case BuildTarget.StandaloneWindows:
  98. case BuildTarget.StandaloneWindows64:
  99. return "Windows";
  100. case BuildTarget.iOS:
  101. return "iOS";
  102. case BuildTarget.WebGL:
  103. return "WebGL";
  104. default:
  105. return Utility.unsupportedPlatform;
  106. }
  107. }
  108. public static void PingWithSelected(Object target)
  109. {
  110. Selection.activeObject = target;
  111. EditorGUIUtility.PingObject(target);
  112. }
  113. public static T LoadAsset<T>(string path) where T : ScriptableObject
  114. {
  115. var asset = AssetDatabase.LoadAssetAtPath<T>(path);
  116. if (asset != null) return asset;
  117. var dir = Path.GetDirectoryName(path);
  118. if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) Directory.CreateDirectory(dir);
  119. asset = CreateInstance<T>();
  120. AssetDatabase.CreateAsset(asset, path);
  121. return asset;
  122. }
  123. public static void SaveAsset(Object asset)
  124. {
  125. EditorUtility.SetDirty(asset);
  126. AssetDatabase.SaveAssets();
  127. AssetDatabase.Refresh();
  128. }
  129. public static IEnumerable<string> GetDependencies(string path)
  130. {
  131. var set = new HashSet<string>(AssetDatabase.GetDependencies(path, true));
  132. set.Remove(path);
  133. return set;
  134. }
  135. }
  136. }