39 private static List<String> s_PathsNotDeleted =
new();
50 [ExcludeFromCodeCoverage]
82 public static void BatchEditing([NotNull] Action massAssetFileEditAction)
88 massAssetFileEditAction?.Invoke();
108 public static Object
Create([NotNull] Byte[] contents, [NotNull]
Path path) => CreateInternal(contents, path);
123 public static Object
CreateAsNew([NotNull] Byte[] contents, [NotNull]
Path path) => CreateInternal(contents, path.UniqueFilePath);
137 public static Object
Create([NotNull] String contents, [NotNull]
Path path) => CreateInternal(contents, path);
152 public static Object
CreateAsNew([NotNull] String contents, [NotNull]
Path path) => CreateInternal(contents, path.UniqueFilePath);
168 public static Object
Create([NotNull] Object instance, [NotNull]
Path path) => CreateInternal(instance, path);
184 public static Object
CreateAsNew([NotNull] Object instance, [NotNull]
Path path) => CreateInternal(instance, path.UniqueFilePath);
205 LoadOrCreate(path, getInstance);
219 public static void Save([NotNull] Object asset) => SaveInternal(asset);
239 public static void ForceSave([NotNull] Object asset) => SaveInternal(asset,
true);
250 public static void Save(GUID guid)
252 ThrowIf.NotAnAssetGuid(guid);
254 AssetDatabase.SaveAssetIfDirty(guid);
276 public static void Import([NotNull]
Path path, ImportAssetOptions options = ImportAssetOptions.Default)
278 ThrowIf.ArgumentIsNull(path, nameof(path));
279 ThrowIf.DoesNotExistInFileSystem(path);
281 AssetDatabase.ImportAsset(path, options);
309 ImportAssetOptions options = ImportAssetOptions.Default)
310 where T : Object => Load<T>(path);
326 Import([NotNull] IEnumerable<
Path> paths, ImportAssetOptions options = ImportAssetOptions.Default) =>
327 Import(
Path.ToStrings(paths.ToArray()), options);
343 Import([NotNull] IEnumerable<
string> paths, ImportAssetOptions options = ImportAssetOptions.Default) =>
BatchEditing(
346 foreach (var path
in paths)
347 AssetDatabase.ImportAsset(path, options);
373 ThrowIf.ArgumentIsNull(path, nameof(path));
375 ImportIfNotImported(path);
376 return AssetDatabase.LoadAssetAtPath<T>(path);
395 if (path.ExistsInFileSystem ==
false)
396 return Create(getInstance.Invoke(), path) as T;
416 public static T LoadMain<T>([NotNull]
Path path) where T : Object
418 ThrowIf.ArgumentIsNull(path, nameof(path));
419 ThrowIf.DoesNotExistInFileSystem(path);
421 ImportIfNotImported(path);
422 return AssetDatabase.LoadMainAssetAtPath(path) as T;
440 public static T LoadMain<T>(GUID guid) where T : Object
442 ThrowIf.NotAnAssetGuid(guid);
445 ImportIfNotImported(path);
446 return LoadMain<T>(path);
463 [ExcludeFromCodeCoverage]
464 public static AssetDatabaseLoadOperation
LoadAsync([NotNull]
Path path, Int64 localFileId)
466 return AssetDatabase.LoadObjectAsync(path, localFileId);
488 [ExcludeFromCodeCoverage]
489 public static String[]
Find([NotNull] String filter, String[] searchInFolders =
null) => searchInFolders ==
null
490 ? AssetDatabase.FindAssets(filter)
491 : AssetDatabase.FindAssets(filter, searchInFolders);
513 [ExcludeFromCodeCoverage]
514 public static GUID[]
FindGuids([NotNull] String filter, String[] searchInFolders =
null) =>
515 Find(filter, searchInFolders).Select(guid =>
new GUID(guid)).ToArray();
536 [ExcludeFromCodeCoverage]
537 public static Path[]
FindPaths([NotNull] String filter, String[] searchInFolders =
null) =>
538 Find(filter, searchInFolders).Select(guid =>
Path.
Get(
new GUID(guid))).ToArray();
559 [ExcludeFromCodeCoverage]
580 public static Boolean
Copy([NotNull]
Path sourcePath, [NotNull]
Path destinationPath) =>
581 CopyInternal(sourcePath, destinationPath,
true);
602 CopyInternal(sourcePath, destinationPath.UniqueFilePath,
false);
623 public static Boolean
CanMove([NotNull]
Path sourcePath, [NotNull]
Path destinationPath)
625 if (sourcePath ==
null || destinationPath ==
null)
628 return Succeeded(AssetDatabase.ValidateMoveAsset(sourcePath, destinationPath));
649 public static Boolean
Move([NotNull]
Path sourcePath, [NotNull]
Path destinationPath)
651 if (sourcePath ==
null || destinationPath ==
null)
654 destinationPath.CreateFolders();
655 return Succeeded(AssetDatabase.MoveAsset(sourcePath, destinationPath));
675 public static Boolean
Rename([NotNull]
Path path, String newFileName) => String.IsNullOrEmpty(newFileName) ==
false &&
676 Succeeded(AssetDatabase.RenameAsset(path, newFileName));
689 [ExcludeFromCodeCoverage]
691#if UNITY_6000_3_OR_NEWER
692 AssetDatabase.CanOpenAssetInEditor(instance.GetEntityId());
697#if UNITY_6000_4_OR_NEWER
716 [ExcludeFromCodeCoverage]
717 public static Boolean
CanOpenInEditor(EntityId entityId) => AssetDatabase.CanOpenAssetInEditor(entityId);
730 [ExcludeFromCodeCoverage]
732#if UNITY_6000_3_OR_NEWER
733 AssetDatabase.CanOpenAssetInEditor((EntityId)instanceId);
735 AssetDatabase.CanOpenAssetInEditor(instanceId);
752 [ExcludeFromCodeCoverage]
753 public static void OpenExternal([NotNull] Object asset, Int32 lineNumber = -1, Int32 columnNumber = -1) =>
754 AssetDatabase.OpenAsset(asset, lineNumber, columnNumber);
756#if UNITY_6000_4_OR_NEWER
777 [ExcludeFromCodeCoverage]
778 public static void OpenExternal(EntityId entityId, Int32 lineNumber = -1, Int32 columnNumber = -1) =>
779 AssetDatabase.OpenAsset(entityId, lineNumber, columnNumber);
794 [ExcludeFromCodeCoverage]
795 public static void OpenExternal(Int32 instanceId, Int32 lineNumber = -1, Int32 columnNumber = -1) =>
796#if UNITY_6000_3_OR_NEWER
797 AssetDatabase.OpenAsset((EntityId)instanceId, lineNumber, columnNumber);
799 AssetDatabase.OpenAsset(instanceId, lineNumber, columnNumber);
816 [ExcludeFromCodeCoverage]
817 public static void OpenExternal([NotNull]
Path path, Int32 lineNumber = -1, Int32 columnNumber = -1) =>
818 OpenExternal(Load<Object>(path), lineNumber, columnNumber);
833 path !=
null && path.Exists && AssetDatabase.DeleteAsset(path);
876 public static Boolean
Delete([NotNull] IEnumerable<String> paths) =>
877 AssetDatabase.DeleteAssets(paths.ToArray(), s_PathsNotDeleted =
new List<String>());
894 public static Boolean
Trash([NotNull]
Path path) => path !=
null && AssetDatabase.MoveAssetToTrash(path);
943 public static Boolean
Trash([NotNull] IEnumerable<String> paths) =>
944 AssetDatabase.MoveAssetsToTrash(paths.ToArray(), s_PathsNotDeleted =
new List<String>());
955 public static Type
GetMainType([NotNull]
Path path) => AssetDatabase.GetMainAssetTypeAtPath(path);
970 [ExcludeFromCodeCoverage]
973#if UNITY_2023_2_OR_NEWER
974 return AssetDatabase.GetMainAssetTypeFromGUID(guid);
990 [ExcludeFromCodeCoverage]
991 public static Type
GetSubType([NotNull]
Path path, Int64 fileId) => AssetDatabase.GetTypeFromPathAndFileID(path, fileId);
1012 return (
new GUID(), 0L);
1017 var localId = Int64.MaxValue;
1018 return AssetDatabase.TryGetGUIDAndLocalFileIdentifier(asset, out var guid, out localId)
1019 ? (
new GUID(guid), localId)
1034 public static GUID
GetGuid([NotNull] Object asset)
1042 var localId = Int64.MaxValue;
1043 return AssetDatabase.TryGetGUIDAndLocalFileIdentifier(asset, out var guid, out localId)
1067 var localId = Int64.MaxValue;
1068 return AssetDatabase.TryGetGUIDAndLocalFileIdentifier(asset, out var _, out localId) ? localId : 0L;
1072 [ExcludeFromCodeCoverage]
1073 internal static void StartAssetEditing() => AssetDatabase.StartAssetEditing();
1076 [ExcludeFromCodeCoverage]
1077 internal static void StopAssetEditing() => AssetDatabase.StopAssetEditing();
1079 internal static Object CreateInternal([NotNull] Byte[] bytes, [NotNull]
Path path)
1081 ThrowIf.ArgumentIsNull(bytes, nameof(bytes));
1082 ThrowIf.ArgumentIsNull(path, nameof(path));
1084 path.CreateFolders();
1085 System.IO.File.WriteAllBytes(path, bytes);
1086 return ImportAndLoad<Object>(path);
1089 internal static Object CreateInternal([NotNull] String contents, [NotNull] Path path)
1091 ThrowIf.ArgumentIsNull(contents, nameof(contents));
1092 ThrowIf.ArgumentIsNull(path, nameof(path));
1094 path.CreateFolders();
1095 System.IO.File.WriteAllText(path, contents, Encoding.UTF8);
1096 return ImportAndLoad<Object>(path);
1099 internal static Object CreateInternal([NotNull] Object instance, [NotNull] Path path)
1101 ThrowIf.ArgumentIsNull(instance, nameof(instance));
1102 ThrowIf.ArgumentIsNull(path, nameof(path));
1104 path.CreateFolders();
1105 AssetDatabase.CreateAsset(instance, path);
1109 internal static Boolean CopyInternal([NotNull] Path sourcePath, [NotNull] Path destinationPath,
1110 Boolean overwriteExisting)
1112 ThrowIf.ArgumentIsNull(sourcePath, nameof(sourcePath));
1113 ThrowIf.ArgumentIsNull(destinationPath, nameof(destinationPath));
1114 ThrowIf.AssetPathNotInDatabase(sourcePath);
1115 ThrowIf.SourceAndDestPathAreEqual(sourcePath, destinationPath);
1117 destinationPath.CreateFolders();
1119 var success = AssetDatabase.CopyAsset(sourcePath, destinationPath);
1120 SetLastErrorMessage(success ? String.Empty : $
"failed to copy {sourcePath} to {destinationPath}");
1124 private static void SaveInternal([NotNull] Object asset, Boolean forceSave =
false)
1126 ThrowIf.ArgumentIsNull(asset, nameof(asset));
1127 ThrowIf.NotInDatabase(asset);
1130 EditorUtility.SetDirty(asset);
1132 AssetDatabase.SaveAssetIfDirty(asset);
1135 private static void ImportIfNotImported([NotNull] Path path,
1136 ImportAssetOptions options = ImportAssetOptions.Default)
1140 if (path.Exists ==
false && path.ExistsInFileSystem)