Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

EditorUtilities.cs 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6. using System.Threading;
  7. using UnityEngine;
  8. namespace UnityEditor.AdaptivePerformance.Editor
  9. {
  10. internal static class EditorUtilities
  11. {
  12. internal static readonly string[] s_DefaultGeneralSettingsPath = {"Adaptive Performance"};
  13. internal static readonly string[] s_DefaultLoaderPath = {"Adaptive Performance", "Provider"};
  14. internal static readonly string[] s_DefaultSettingsPath = {"Adaptive Performance", "Settings"};
  15. internal static bool AssetDatabaseHasInstanceOfType(string type)
  16. {
  17. var assets = AssetDatabase.FindAssets(String.Format("t:{0}", type));
  18. return assets.Any();
  19. }
  20. internal static T GetInstanceOfTypeFromAssetDatabase<T>() where T : class
  21. {
  22. var assets = AssetDatabase.FindAssets(String.Format("t:{0}", typeof(T).Name));
  23. if (assets.Any())
  24. {
  25. string assetPath = AssetDatabase.GUIDToAssetPath(assets[0]);
  26. var asset = AssetDatabase.LoadAssetAtPath(assetPath, typeof(T));
  27. return asset as T;
  28. }
  29. return null;
  30. }
  31. internal static ScriptableObject GetInstanceOfTypeWithNameFromAssetDatabase(string typeName)
  32. {
  33. var assets = AssetDatabase.FindAssets(String.Format("t:{0}", typeName));
  34. if (assets.Any())
  35. {
  36. string assetPath = AssetDatabase.GUIDToAssetPath(assets[0]);
  37. var asset = AssetDatabase.LoadAssetAtPath(assetPath, typeof(ScriptableObject));
  38. return asset as ScriptableObject;
  39. }
  40. return null;
  41. }
  42. internal static string GetAssetPathForComponents(string[] pathComponents, string root = "Assets")
  43. {
  44. if (pathComponents.Length <= 0)
  45. return null;
  46. string path = root;
  47. foreach (var pc in pathComponents)
  48. {
  49. string subFolder = Path.Combine(path, pc);
  50. bool shouldCreate = true;
  51. foreach (var f in AssetDatabase.GetSubFolders(path))
  52. {
  53. if (String.Compare(Path.GetFullPath(f), Path.GetFullPath(subFolder), true) == 0)
  54. {
  55. shouldCreate = false;
  56. break;
  57. }
  58. }
  59. if (shouldCreate)
  60. AssetDatabase.CreateFolder(path, pc);
  61. path = subFolder;
  62. }
  63. return path;
  64. }
  65. internal static string TypeNameToString(Type type)
  66. {
  67. return type == null ? "" : TypeNameToString(type.FullName);
  68. }
  69. internal static string TypeNameToString(string type)
  70. {
  71. string[] typeParts = type.Split(new char[] { '.' });
  72. if (!typeParts.Any())
  73. return String.Empty;
  74. string[] words = Regex.Matches(typeParts.Last(), "(^[a-z]+|[A-Z]+(?![a-z])|[A-Z][a-z]+)")
  75. .OfType<Match>()
  76. .Select(m => m.Value)
  77. .ToArray();
  78. return string.Join(" ", words);
  79. }
  80. internal static ScriptableObject CreateScriptableObjectInstance(string typeName, string path)
  81. {
  82. ScriptableObject obj = ScriptableObject.CreateInstance(typeName) as ScriptableObject;
  83. if (obj != null)
  84. {
  85. if (!string.IsNullOrEmpty(path))
  86. {
  87. string fileName = String.Format("{0}.asset", EditorUtilities.TypeNameToString(typeName));
  88. string targetPath = Path.Combine(path, fileName);
  89. obj.hideFlags = HideFlags.HideInInspector;
  90. AssetDatabase.CreateAsset(obj, targetPath);
  91. return obj;
  92. }
  93. }
  94. Debug.LogError($"We were unable to create an instance of the requested type {typeName}. Please make sure that all packages are updated to support this version of Adaptive Performance Provider Management. See the Unity documentation for Adaptive Performance Provider Management for information on resolving this issue.");
  95. return null;
  96. }
  97. }
  98. }