EditorUtilities.cs 4.1 KB

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.XR.Management
  9. {
  10. internal static class EditorUtilities
  11. {
  12. internal static readonly string[] s_DefaultGeneralSettingsPath = {"XR"};
  13. internal static readonly string[] s_DefaultLoaderPath = {"XR","Loaders"};
  14. internal static readonly string[] s_DefaultSettingsPath = {"XR","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. AssetDatabase.CreateAsset(obj, targetPath);
  90. return obj;
  91. }
  92. }
  93. 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 XR Plug-In Management. See the Unity documentation for XR Plug-In Management for information on resolving this issue.");
  94. return null;
  95. }
  96. }
  97. }