AssetDatabase是编辑器下的处理资源操作的重要类,主要用于访问资源并针对资源执行操作的接口。
- 这里面所有的操作路径都是基于Unity项目的相对路径也就是Assets/xxx或者Assets/xxx.jpg这种。
CacheServer
主要解决的是缩短大型团队导入资源的时间。当配置后,其它队员进行资源导入后,新成员不用再生成一遍导入数据。- CacheServer安装
https://github.com/Unity-Technologies/unity-cache-server#server-setup
- CacheServer安装
- 涉及版本控制相关的指的是Unity的版本控制比如
Perforce VCS
。
静态变量
ActiveRefreshImportMode
public static extern RefreshImportMode ActiveRefreshImportMode{get;set;}
用于获取或者设置资源刷新和导入的模式。
RefreshImportMode.InProcess
默认选项,所有资源在编辑器流程中依次导入。RefreshImportMode.OutOfProcessPerQueue
在遵循导入队列和依赖的情况下,进行并行资源导入。- 常规项目速度差距不会特别大。
DesiredWorkerCount
public static extern int DesiredWorkerCount{get;set;}
用于获取或者设置资源刷新和导入期间分配的进程数。
- 不保证完全分配相同的进程数,可能高于或者低于,尽可能趋近于此值。
- 常规项目速度差距影响不会特别大。
- 默认值为
4
GlobalArtifactDependencyVersion
public static extern uint GlobalArtifactDependencyVersion{get;}
全局工件/资源依赖版本。
- 重启编辑器后归0,这里有前提是没有其它依赖处理。
- 当资源依赖发生变化时,进行计数。
- 发生时必须在资源刷新或者导入。
- 当标记脏的时候,不会计数因为并没有进行资源刷新和导入,可以保存下项目或者运行下游戏,会对脏资源进行保存或者刷新。
GlobalArtifactProcessedVersion
public static extern uint GlobalArtifactProcessedVersion{get;}
全局工件/资源进度版本。
- 重启编辑器后归0
- 每个脚本编译都算一个计数。
- 第一次选择脚本算一个计数。
- 导入刷新都算一个计数,相关脚本也算。
- 当次数据没变代表没有新的工件/资源被导入。
onImportPackageItemsCompleted
public static Action<string[]> onImportPackageItemsCompleted;
当导入的Unity Package包完成时,返回所有的资源相对路径。
- 只对Unity Package包有效,对UPM(Unity Package Manager)包无效。
静态函数
AddObjectToAsset
public static void AddObjectToAsset (Object objectToAdd, string path);
public static void AddObjectToAsset (Object objectToAdd, Object assetObject);
将现有资源添加到指定路径或者资源中
- 添加完成后如果期望编辑器及时刷新,需要
AssetDatabase.SaveAssetIfDirty(assetObject);
进行保存。有些操作不会进行标记脏,所以需要先调用EditorUtility.SetDirty(assetObject);
标记脏。 - 可以通过
AssetDatabase.RemoveObjectFromAsset(assetObject);
移除子资源,及时刷新参考上面。 - 设置资源名可以通过
assetObject.name="Font Material"
。 - 添加后类似如下效果:
AllowAutoRefresh
public static extern void AllowAutoRefresh();
允许自动 AssetDatabase 刷新行为。
- 此方法和
AssetDatabase.DisallowAutoRefresh
配合使用。 - 通常用于某些操作过程中禁止自动刷新。
- 此方法组通过bool方式实现而是通过计数器实现,也就是说当有n多个的时候,必须全部允许后也就是计数器为0,才会执行Unity自动刷新。
- 此方法不会影响
AssetDatabase.Refresh()
的行为。如果调用AssetDatabase.Refresh()
,则AssetDatabase会始终执行刷新。 - 此方法与Unity Preferences窗口中的自动刷新设置不同,该设置不修改此内部计数器。如果禁用了 Unity 的自动刷新偏好设置,调用
AllowAutoRefresh
和DisallowAutoRefresh
仍会修改内部计数器,但是编辑器不会自动刷新,无论内部计数器是否为零。
AssetPathExists
public static bool AssetPathExists (string path);
资源是否存在。
- 此方法存在于Unity 2023+。
AssetPathToGUID
public static string AssetPathToGUID(string path)
public static string AssetPathToGUID (string path, AssetPathToGUIDOptions options= AssetPathToGUIDOptions.IncludeRecentlyDeletedAssets);
通过资源路径获取资源GUID。
- 所有路径均是相对于项目文件夹的路径,例如:Assets/MyTextures/hello.png。
- 当你删除一个资源时,该资源的GUID仍然会保留在Unity的资源数据库中,直到你关闭编辑器。因此,默认情况下,此方法仍将返回在Unity编辑器当前会话中删除的资产的GUID。
- 对于不存在且未在当前Editor会话中删除的资源,此方法返回一个空字符串。
- 如果你需要它为在当前编辑器会话中被删除的资产返回一个空字符串,那么传递值
AssetPathToGUIDOptions.OnlyExistingAssets
作为options
参数。 AssetPathToGUIDOptions.ncludeRecentlyDeletedAssets
:如果资源存在,或者最近被删除,则返回GUID。AssetPathToGUIDOptions.OnlyExistingAssets
:只有资源在磁盘中存在返回GUID。
CanConnectToServer
public static bool CanConnectToServer (string ip, ushort port);
是否可以连接到缓存服务器。
- 主要检查当前资源缓存服务器是否可用。
- 可以通过以下代码建立缓存服务器连接
var correctEndpoint = "192.168.1.210:8080";
EditorSettings.ServerEndpoint = correctEndpoint;
AssetDatabase.RefreshSettings();
CanOpenAssetInEditor
public static bool CanOpenAssetInEditor (int instanceID);
判断这个资源是否在编辑中可以打开。
- 可以通过
[OnOpenAsset(OnOpenAssetAttributeMode.Validate)]
自定义资源告诉Unity是否可以被Unity编辑器打开或者禁止打开。
CanOpenForEdit
public static bool CanOpenForEdit (Object assetObject, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool CanOpenForEdit (string assetOrMetaFilePath, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool CanOpenForEdit (Object assetObject, out string message, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool CanOpenForEdit (string assetOrMetaFilePath, out string message, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static void CanOpenForEdit (string[] assetOrMetaFilePaths, List<string> outNotEditablePaths, StatusQueryOptions statusQueryOptions= StatusQueryOptions.UseCachedIfPossible);
查询哪些提供的资源文件可以在版本控制系统中打开进行编辑,并且没有被远程锁定或以其他方式不可用。
assetObject
:一个代表要查询其状态的资源的对象。statusOptions
:有关应如何查询版本控制系统的选项。这些选项可能会影响查询的速度和准确性。assetOrMetaFilePath
:资源文件或其 .meta 文件在磁盘上的路径,此路径是相对于项目文件夹的路径。message
:返回资源不可用于编辑的原因。assetOrMetaFilePaths
:资源或其 .meta 文件的路径,相对于项目文件夹。outNotEditablePaths
:不可编辑的资源路径的目标列表。
ClearImporterOverride
public static void ClearImporterOverride (string path);
清理导入器重写。
- 重写的导入器类特性应为
[ScriptedImporter(1, null, new[] { "xlsx" })]
。
ClearLabels
public static void ClearLabels (Object obj);
清理对象的资源标签。
CloseServerConnection
public static void CloseServerConnection ();
关闭当前活跃的缓存服务器连接。
Contains
public static bool Contains (Object obj);
public static bool Contains (int instanceID);
对象是否为资源?
- 如果对象是资源(对应于 Assets 文件夹的一个文件),则返回 true; 如果不是资源(例如,场景中的对象,或者在运行时创建的对象),则返回 false。
CopyAsset
public static bool CopyAsset (string path, string newPath);
复制path下的资源并将其存储在newPath下,如果复制操作成功,则返回true;如果部分操作失败,则返回false。
- 所有路径均是相对于项目文件夹的路径,例如:Assets/MyTextures/hello.png。
CopyAssets
public static bool CopyAssets (string[] paths, string[] newPaths);
复制paths下的资源并将其存储在newPaths下,如果复制操作成功,则返回true;如果部分操作失败,则返回false。
- 所有路径均是相对于项目文件夹的路径,例如:Assets/MyTextures/hello.png。
- paths和newPaths数量要相同。
- 不能再导入流程中运行这个方法。
CreateAsset
public static void CreateAsset (Object asset, string path);
创建一个Unity原生资源。
- 原生资源是指那些由Unity(通过编辑器或脚本)创建的,并以Unity的序列化格式呈现的资源。
- 如果资源已经存在,那么您指定的路径将被您的新资源覆盖。
- 路径均是相对于项目文件夹的路径,例如:Assets/MyTextures/hello.png。
- 一个资源文件可以包含多个资源。创建资源文件后,可以使用
AssetDatabase.AddObjectToAsset
向文件添加更多的资源。 - 不能用这个方法从GameObject中创建一个资源。如果想这么干要用
PrefabUtility
工具类。 - 要确保保存的后缀是符合Unity资源类型的。Unity内置资源类型
- 不能在StreamingAssets中创建资源。
- 不能再导入过程中创建资源,如
ScriptedImporter
或者Postprocessor
这些处理中。
CreateFolder
public static string CreateFolder (string parentFolder, string newFolderName);
创建一个文件夹,创建成功返回文件夹的GUID否则是空字符串。
- 如果父路径存在同名文件夹则会增加一个序号。
- 必须要在项目文件夹下创建,如"Assets"中创建"New Folder",则会创建"Assets/New Folder"。
DeleteAsset
public static bool DeleteAsset (string path);
删除一个资源,如果返回true则删除成功,否则资源不存在或无法移除。
- 所有路径均是相对于项目文件夹的路径,例如:Assets/MyTextures/hello.png。
DeleteAssets
public static bool DeleteAssets (string[] paths, List<string> outFailedPaths);
删除一批资源,所有资源都已成功删除,则返回true否则false。
- 所有路径均是相对于项目文件夹的路径,例如:Assets/MyTextures/hello.png。
- 当有失败的路径会存放在
outFailedPaths
中。
DisallowAutoRefresh
public static extern void DisallowAutoRefresh();
禁用自动刷新功能。
- 每次调用
DisallowAutoRefresh
时,都必须确保也对应地调用AllowAutoRefresh
。 - 更多详情参阅
AllowAutoRefresh
。
ExportPackage
public static void ExportPackage (string assetPathName, string fileName);
public static void ExportPackage (string assetPathName, string fileName, ExportPackageOptions flags);
public static void ExportPackage (string[] assetPathNames, string fileName, ExportPackageOptions flags= ExportPackageOptions.Default);
导出一个Unity资源包
assetPathName
:资源路径fileName
:导出的资源包名,需要带.unitypackage
后缀,如果是资源名则会在Assets同级目录生成,如果是路径则会在指定路径生成。assetPathNames
:资源路径数组。flags
:导出资源的选项,可使用 | 运算符将多个选项合并在一起。
–Default
:默认模式。既不包括依赖项或子目录,也不包括库资源(除非特别包含在资源列表中)。
–Interactive
:导出操作将异步运行,并且在导出完成后,将在文件浏览器窗口中显示导出的包文件。
–Recurse
:将遍历列出的任何子目录,并包含其中的所有资源。
–IncludeDependencies
:除了列出的资源路径,所有依赖资源也会包含在内。
–IncludeLibraryAssets
:导出的包将包括所有库资源(例如,位于项目 Library 文件夹中的项目设置)。
ExtractAsset
public static string ExtractAsset (Object asset, string newPath);
提取资源中的资源。
- 目前仅适用于模型资源中嵌入的材质。
FindAssets
public static string[] FindAssets (string filter);
public static string[] FindAssets (string filter, string[] searchInFolders);
查找资源.
filter
:筛选器字符串searchInFolders
:搜索的指定文件夹列表。- 搜索不区分大小写,不需要资源后缀。
- 支持
Labels=l:
标签,Types=t:
类型。
ForceReserializeAssets
public static void ForceReserializeAssets ();
public static void ForceReserializeAssets(IEnumerable<string> assetPaths, ForceReserializeAssetsOptions options = ForceReserializeAssetsOptions.ReserializeAssetsAndMetadata)
强制加载给定资源并将其重新序列化,并将所有待定数据更改都刷新到磁盘。
- Unity 加载来自资源或场景文件的旧数据时,数据会在内存中动态升级,但不会写回到磁盘,除非用户执行脏操作(比如修改值)。该方法允许您将任何资源或者场景文件预先加载、升级并写回到磁盘,不需要手动执行脏操作。
assetPaths
:应该重新序列化的资源的路径。如果省略该属性,系统将重新序列化项目中的所有资源。options
:指定是重新序列化资源本身,还是它们的 .meta 文件,亦或者是重新序列化这两者。如果省略该属性,则默认重新序列化这两者。- 借助该方法,能够以一种可控方式主动准确地确定要升级的资源以及升级时间。
ForceToDesiredWorkerCount
public static extern void ForceToDesiredWorkerCount();
强制编辑器使用所需数量的辅助进程。Unity要么生成新的工作进程,要么关闭空闲的工作进程以达到所需的数量。
AssetDatabase.DesiredWorkerCount
:可以设置对应的工作进程数。
GenerateUniqueAssetPath
public static string GenerateUniqueAssetPath (string path);
为资源创建一个新的唯一路径。
- 调用此方法时,会检查是否已存在具有所提供的匹配路径和文件名的资源。如果不存在,则 Unity 返回所提供的相同字符串。如果存在具有匹配路径和文件名的现有资源,则会将数字 1 附加到文件名并再次检查。它会持续递增此数字并再次检查,直到找到当前不存在的文件名,并返回包含这一新的唯一文件名的路径。
GetAllAssetBundleNames
public static string[] GetAllAssetBundleNames ();
获取所有AssetBundle名字数组。
GetAssetBundleDependencies
public static string[] GetAssetBundleDependencies (string assetBundleName, bool recursive);
返回其依赖的 AssetBundle 列表。
assetBundleName
:需要依赖项的 AssetBundle 的名称。recursive
:如果为 false,仅返回其为输入直接依赖项的 AssetBundle;如果为 true,则包含输入的所有间接依赖项。
GetAssetDependencyHash
public static Hash128 GetAssetDependencyHash (string path);
public static Hash128 GetAssetDependencyHash (GUID guid);
返回资源所有依赖项的哈希值。
- 哈希值包含源资源路径、源资源、元文件、目标平台以及导入器版本。
- 如果此哈希值发送变化,则说明导入资源可能已更改。
GetAssetOrScenePath
public static string GetAssetOrScenePath (Object assetObject);
相对于存储资源的项目文件夹的路径名称。
- 所有路径均相对于项目文件夹。
- 当对象是场景的一部分时,返回场景路径。
GetAssetPath
public static string GetAssetPath (int instanceID);
public static string GetAssetPath (Object assetObject);
返回相对于存储资源的项目文件夹的路径,如果资源不存在,则为 null 或空字符串。
- 所有路径均是相对于项目文件夹的路径。
GetAssetPathFromTextMetaFilePath
public static string GetAssetPathFromTextMetaFilePath (string path);
获取与 .meta 文本文件关联的资源文件的路径。
GetAssetPathsFromAssetBundle
public static string[] GetAssetPathsFromAssetBundle (string assetBundleName);
获取使用指定资源包名称标记的所有资源的路径。
- 返回的所有路径均相对于项目文件夹。
GetAssetPathsFromAssetBundleAndAssetName
ublic static string[] GetAssetPathsFromAssetBundleAndAssetName (string assetBundleName, string assetName);
获取所有标有
assetBundleName
且有指定assetName
的资源路径。
- 与其扩展名或路径无关, 例如当
assetName
为"House"时,资产的路径可为 “Assets/House.prefab”, “Assets/Textures/House.png” 和Assets/Data/House.xml"。
GetAvailableImporters
public static Type[] GetAvailableImporterTypes (string path);
获取可处理指定资源的导入器类型数组。
GetCachedIcon
public static Texture GetCachedIcon (string path);
在给定资源路径下获取资源的图标。
GetServerAddress
public static string GetServerAddress ();
获取Server地址
AssetDatabase.GetServerPort()
可以获取端口。
GetServerEnableDownload
public static bool GetServerEnableDownload ();
获取是否从缓存服务器下载。
GetServerEnableUpload
public static bool GetServerEnableUpload();
获取是否从缓存服务器上传。
GetServerNamespacePrefix
public static string GetServerNamespacePrefix ();
获取缓存服务器的命名空间前缀。
- 如果你为命名空间前缀设置了一个新值,你要调用
AssetDatabase.RefreshSettings()
才会被应用。 - 无论是否应用了该设置,此方法都将返回所设置的值。
GetServerPort
public static ushort GetServerPort ();
获取Server地址端口号。
- 如果在编辑器设置中未设置端口号,则返回0。
- 如果你设置了一个新值,你要调用
AssetDatabase.RefreshSettings()
才会被应用。 - 无论是否应用了该设置,此方法都将返回所设置的值。
GetCurrentServerIp
public static string GetCurrentServerIp ();
返回当前缓存服务器 IP 地址的字符串表示形式。
GetDefaultImporter
public static Type GetDefaultImporter (string path);
返回资源相关联的默认导入器。如果没有设置重写的Importer,则使用默认的Importer。
GetDependencies
public static string[] GetDependencies (string pathName);
public static string[] GetDependencies (string pathName, bool recursive);
public static string[] GetDependencies (string[] pathNames);
public static string[] GetDependencies (string[] pathNames, bool recursive);
获取指定
pathName
资源依赖关系的所有资源。
recursive
:是否以递归方式检查并返回包括间接依赖关系在内的所有依赖关系(设置为 true 时),或是否仅返回直接依赖关系(设置为 false 时)。
GetImplicitAssetBundleName
public static string GetImplicitAssetBundleName (string assetPath);
返回给定资源所属的 AssetBundle 的名称。
- 如果资源不属于 AssetBundle,则会遍历其父文件夹,直到找到属于 AssetBundle 的资源。如果找到与此条件匹配的文件夹,则返回其 AssetBundle 名称。如果未找到,则返回空字符串。
GetImplicitAssetBundleVariantName
public static string GetImplicitAssetBundleVariantName (string assetPath);
返回给定资源所属的 AssetBundle 变体的名称。
- 如果资源不属于 AssetBundle 变体,则会遍历其父文件夹,直到找到属于 AssetBundle 变体的资源。如果找到与此条件匹配的文件夹,则返回其 AssetBundle 变体名称。如果未找到,则返回空字符串。
-
GetImporterOverride
public static Type GetImporterOverride (string path);
返回覆盖导入器的类型。
GetImporterType
public static Type GetImporterType (GUID guid);
public static Type GetImporterType (string assetPath);
返回与资源关联的导入器类型,但是不加载该资源的导入器。
- 相对于
AssetImporter. GetAtPath
,它不需要加载该资源的导入器。 - 大批量的获取请使用
AssetDatabase.GetImporterTypes
。
GetImporterTypes
public static Type[] GetImporterTypes (ReadOnlySpan<GUID> guids);
public static Type[] GetImporterTypes (string[] paths);
返回与指定的资源数组关联的导入器的类型,而不加载这些资产导入器。
- 可以使用
ReadOnlySpan
:表示任意连续内存区域的类型安全和内存安全只读表示数组;
GetLabels
public static string[] GetLabels (Object obj);
获取资源标签
GetMainAssetTypeAtPath
public static Type GetMainAssetTypeAtPath (string assetPath);
获取主资源对象的类型。
- 所有路径均是相对于项目文件夹的路径
GetSubFolders
public static string[] GetSubFolders (string path);
获取
path
所有子目录的路径。
GetMainAssetTypeFromGUID
public static Type GetMainAssetTypeFromGUID (GUID guid);
返回带有
guid
的主资源对象的类型。
GetScriptableObjectsWithMissingScriptCount
public static int GetScriptableObjectsWithMissingScriptCount (string assetPath);
检查指定ScriptableObject实例中存在多少个不可加载的脚本。
GetTextMetaFilePathFromAssetPath
public static string GetTextMetaFilePathFromAssetPath (string path);
获取与资源关联的 .meta 文本文件的路径。
GetTypeFromPathAndFileID
public static Type GetTypeFromPathAndFileID (string assetPath, long localIdentifierInFile);
从资源路径和本地文件标识符获取对象的类型。
localIdentifierInFile
:本地文件标识符。
GetUnusedAssetBundleNames
public static string[] GetUnusedAssetBundleNames ();
返回资源中所有未使用的 AssetBundle 名称。
GUIDFromAssetPath
public static GUID GUIDFromAssetPath (string path);
获取
path
下资源的GUID
。
GUIDToAssetPath
public static string GUIDToAssetPath (string guid);
public static string GUIDToAssetPath (GUID guid);
获取资源路径通过
GUID
。
ImportAsset
public static void ImportAsset (string path, ImportAssetOptions options= ImportAssetOptions.Default);
导入指定路径下的资源。
- 会触发
AssetModificationProcessor.OnWillSaveAssets
和AssetPostProcessor.OnPostProcessAllAssets
。 - 所有路径均是相对于项目文件夹的路径。
ImportPackage
public static void ImportPackage (string packagePath, bool interactive);
将
packagePath
下的包导入到当前项目。
interactive
为 true,系统将打开一个导入包对话框;否则包内的所有资源都将导入到当前项目中。
InstanceIDsToGUIDs
public static void InstanceIDsToGUIDs (NativeArray<int> instanceIDs, NativeArray<GUID> guidsOut);
设置资源的每个有效实例ID的guid。
- 两个数组必须具有相同的长度,并在调用之前进行初始化。
- 如果实例ID无效或没有引用作为资源的对象,则GUID将被设置为默认值。
IsServerEnabled
public static bool IsServerEnabled ();
在Project Settings中是否启用了缓存服务器。
IsConnectedToServer
public static bool IsConnectedToServer ();
缓存服务器是否处于连接状态。
IsDirectoryMonitoringEnabled
public static bool IsDirectoryMonitoringEnabled ();
是否已启用目录监控报告?
- 在
Preferences settings
中可以设置Directory Monitoring
。 EditorPrefs.SetBool("DirectoryMonitoring", true)
也可以设置。- 可以用命令行标志
-DisableDirectoryMonitor
禁用。 - 当Unity检测到项目中的符号链接时,目录监控会自动禁用。
- 仅在Windows上可用。
- 启用此设置将监视目录,而不是扫描所有项目文件以检测资源是否更改。
IsForeignAsset
public static bool IsForeignAsset (Object obj);
public static bool IsForeignAsset (int instanceID);
资源是否为外部资源?
- 外部资源是导入到 Unity 项目中的外部文件,例如,.png 。
- 导入外部资源后,Unity 将在项目的 Library 文件夹中生成数据的序列化表示形式。
IsMainAsset
public static bool IsMainAsset (Object obj);
public static bool IsMainAsset (int instanceID);
资源是否为主资源?
- 模型资源有一个游戏对象作为其根,以及几个处于展开状态的网格和子游戏对象 。在这种情况下,根游戏对象就是主资源。
IsMainAssetAtPathLoaded
public static bool IsMainAssetAtPathLoaded (string assetPath);
如果在内存中加载了
assetPath
下的主资源对象,则返回 true。
- 可以通过Resources.UnloadAsset卸载对应的资源。
IsMetaFileOpenForEdit
public static bool IsMetaFileOpenForEdit (Object assetObject, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool IsMetaFileOpenForEdit (Object assetObject, out string message, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
查询资源的元数据 (.meta) 文件是否在版本控制中打开以供编辑。
- 版本控制系统可能配置为每次仅允许一个用户编辑特定类型的文件,以避免在多个用户同时编辑文件时会出现的冲突。在此情况下,用户必须“打开”该文件进行编辑(也称为“签出”)以确保他们有编辑文件的权限。使用此函数可在支持它的版本控制系统中查询文件的“打开以进行编辑”状态。
IsNativeAsset
public static bool IsNativeAsset (Object obj);
public static bool IsNativeAsset (int instanceID);
确定资源是否为Unity原生资源。
- 原生资源是 Unity 的序列化系统直接生成的文件,例如,.mat。
scenes
,prefabs
和assembly definitions
不算原生资源。
IsOpenForEdit
public static bool IsOpenForEdit (Object assetObject, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool IsOpenForEdit (string assetOrMetaFilePath, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool IsOpenForEdit (Object assetObject, out string message, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
public static bool IsOpenForEdit (string assetOrMetaFilePath, out string message, StatusQueryOptions statusOptions= StatusQueryOptions.UseCachedIfPossible);
查询是否在版本控制中打开资源文件进行编辑?
- 版本控制系统可能配置为每次仅允许一个用户编辑特定类型的文件,以避免在多个用户同时编辑文件时会出现的冲突。
- 没有版本控制系统处于活动状态时,项目中的文件路径全都被视为打开以进行编辑。
- 有版本控制系统处于活动状态时,例如在 Perforce VCS 下,“已添加”和“已在本地签出”文件 被视为打开以进行编辑,其他文件则不是。
IsSubAsset
public static bool IsSubAsset (Object obj);
public static bool IsSubAsset (int instanceID);
资源是否是其它资源的子资源?
IsValidFolder
public static bool IsValidFolder (string path);
文件夹是否存在?
- 资源是否构成了其他资源的一部分?
LoadAllAssetRepresentationsAtPath
public static Object[] LoadAllAssetRepresentationsAtPath (string assetPath);
返回路径下所有可见的子资源。
- 要是不可见的也加载就用
AssetDatabase.LoadAllAssetsAtPath
,自己过滤下主资源。
LoadAllAssetsAtPath
public static Object[] LoadAllAssetsAtPath (string assetPath);
获取路径下所有资源对象。
- 主资源不保证在数组 0 处
LoadAssetAtPath
public static Object LoadAssetAtPath (string assetPath, Type type);
获取给定路径
assetPath
下type
类型的第一个资源对象。
- 相对于项目文件夹的路径
assetPath
参数不区分大小写。- 所有资源名称和路径都使用正斜杠 /
- 仅返回在 Project 视图中可见的资源对象。
LoadMainAssetAtPath
public static Object LoadMainAssetAtPath (string assetPath);
返回路径下主资源对象。
- 相对于项目文件夹的路径。
LoadObjectAsync
public static AssetDatabaseLoadOperation LoadObjectAsync (string assetPath, long localId);
异步加载资源。
localId
:要加载的对象的本地标识符。这允许加载特定对象及其依赖项,而不是整个资源。可以通过AssetDatabase.TryGetGUIDAndLocalFileIdentifier
获取。
MakeEditable
public static bool MakeEditable (string path);
public static bool MakeEditable (string[] paths, string prompt, List<string> outNotEditablePaths);
在版本控制中使文件成为“打开以进行编辑”状态。
prompt
:要向用户显示的对话框提示,如果是null就不显示。outNotEditablePaths
:无法设置此状态的列表。
MoveAsset
public static string MoveAsset (string oldPath, string newPath);
将资源文件(或文件夹)从一个文件夹移动到另一个文件夹。如果资源已成功移动,则返回一个空字符串;否则,返回一条错误消息。
- 相对于项目文件夹的路径
MoveAssetsToTrash
public static bool MoveAssetsToTrash (string[] paths, List<string> outFailedPaths);
一次移动多个资源或文件夹到垃圾箱中,所有资源都已成功删除,则返回true;如果指定的任何路径不存在或无法删除,则返回false。
- 在版本控制中具有性能优势。
- 在Asset Database v2比
AssetDatabase.MoveAssetToTrash
更快。 - 在版本控制下的文件不能保证最终会出现在操作系统的垃圾箱中。
MoveAssetToTrash
public static bool MoveAssetToTrash (string path);
移动资源或文件夹到垃圾箱中。资源成功删除,则返回true;如果指定的任何路径不存在或无法删除,则返回false。
- 在版本控制中具有性能优势。
- 多个资源或者文件夹删除,使用
AssetDatabase.MoveAssetsToTrash
。
OpenAsset
public static bool OpenAsset (int instanceID, int lineNumber= -1);
public static bool OpenAsset (int instanceID, int lineNumber, int columnNumber);
public static bool OpenAsset (Object target, int lineNumber= -1);
public static bool OpenAsset (Object target, int lineNumber, int columnNumber);
public static bool OpenAsset (Object[] objects);
使用关联的应用程序打开资源。 如果成功打开资源则返回 true。
- 在外部编辑器、纹理应用程序或是建模工具中打开资源,具体取决于资源的类型。
- 如果是一个文本文件,
lineNumber
和columnNumber
会指示文本编辑器跳到该行和列。
Refresh
public static void Refresh (ImportAssetOptions options= ImportAssetOptions.Default);
导入所有更改的资源。
- 将导入已更改其内容修改数据或已在项目文件夹中添加/删除的所有资源。
- 此方法会隐式触发资源垃圾回收
Resources.UnloadUnusedAssets
。 - ImportAssetOptions:
Default
:默认选项ForceUpdate
:由用户发起的资源导入。ForceSynchronousImport
:同步导入所有资源。ImportRecursive
:同步导入所有资源。DontDownloadFromServer
:强制完全重新导入,但不从缓存服务器下载资源。ForceUncompressedImport
: 强制资源以版本工具的未压缩形式导入。
RefreshSettings
public static void RefreshSettings ();
将编辑器设置更改应用于资源管线里。
- 就是应用设置。
- 受用于下面设置
- EditorSettings.ServerNamespacePrefix
- EditorSettings.ServerMode
- EditorSettings.ServerEndpoint
- EditorSettings.ServerEnableTls
RegisterCustomDependency
public static void RegisterCustomDependency (string dependency, Hash128 hashOfValue);
允许资源可以注册一个自定义依赖项。
- 如果注册一个自定义依赖项,并指定一个资源依赖于它,那么当自定义依赖项发生变化时,该资源将被重新导入。
- 如果一个资产对自定义依赖项有依赖,并且自定义依赖项的哈希值被更改,那么该资产将被重新导入。
- 可以通过再次调用
AssetDatabase.RegisterCustomDependency
来更改散列值,并传递相同的名称和散列的新值。 - 重新导入发生在
AssetDatabase.Refresh
或AssetDatabase.ImportAsset
。 - 不应该在资源导入过程中执行。
ReleaseCachedFileHandles
EditorSettings.ServerEnableTls。
释放 Unity 内部缓存的文件句柄。
- 主要用于在修改资源或元文件…mate时造成文件共享 IO 错误。
RemoveAssetBundleName
public static bool RemoveAssetBundleName (string assetBundleName, bool forceRemove);
从资源数据库中删除AssetBundle名称。
forceRemove
:在使用中的AssetBundle名称,也强制删除。
RemoveObjectFromAsset
移除指定对象资源
public static void RemoveObjectFromAsset (Object objectToRemove);
- 移除完成后如果期望编辑器及时刷新,需要
AssetDatabase.SaveAssetIfDirty(assetObject);
进行保存。有些操作不会进行标记脏,所以需要先调用EditorUtility.SetDirty(assetObject);
标记脏。 - 可以通过
AddObjectToAsset (objectToAdd, assetObject);
添加子资源,及时刷新参考上面。
RemoveScriptableObjectsWithMissingScript
public static int RemoveScriptableObjectsWithMissingScript (string assetPath);
移除ScriptableObject实例上找不到的脚本,返回值是移除的数量。
- 如果删除了定义ScriptableObject类型的脚本,那么资源中该ScriptableObject的所有实例将变得不可加载。如果在Unity之外移动或重命名脚本,而没有相应地移动或重命名脚本的.meta文件,也会发生这种情况。
- 可以使用
AssetDatabase.GetScriptableObjectsWithMissingScriptCount()
来获取丢失脚本的数量。
RemoveUnusedAssetBundleNames
public static void RemoveUnusedAssetBundleNames ();
删除资源数据库中所有未使用的 AssetBundle 名称。
AssetDatabase.GetUnusedAssetBundleNames()
:可以获取所有未使用的 AssetBundle 名称。
RenameAsset
public static string RenameAsset (string pathName, string newName);
为资源文件重命名。如果资源重命名成功,则返回一个空字符串;否则,返回一条错误消息。
- 所有路径均是相对于项目文件夹的路径。
ResetServerReconnectTimer
public static void ResetServerReconnectTimer ();
重置缓存服务器连接重新连接计时器值。缺省值为1秒,最大延迟值为5分钟。每次连接尝试失败,它将延迟计时器值加倍,直到最大时间的最大值。
- Server 主要解决的是缩短大型团队导入资源的时间。当配置后,其它队员进行资源导入后,新成员不用再生成一遍导入数据。
- Server安装
https://github.com/Unity-Technologies/unity-cache-server#server-setup
SaveAssetIfDirty
如果资源具有脏标记,进行保存。
public static void SaveAssetIfDirty (Object obj);
public static void SaveAssetIfDirty (GUID guid);
- 不能在资源序列化期间调用。
- 此方法不会触发
AssetModificationProcessor.OnWillSaveAssets
回调。
SaveAssets
public static void SaveAssets ();
将所有未保存的资源更改写入磁盘。
- 与
EditorApplication.SaveAssets
相同,但不允许在序列化期间调用。 - 调用此函数时,会调用
AssetModificationProcessor.OnWillSaveAssets
,从而允许覆盖保存到磁盘的文件。
SetImporterOverride
public static void SetImporterOverride (string path);
将特定导入器设置于资源。
- 只有
AutoSelect = false
的脚本导入器才可以使用。 AssetDatabase.GetImporterOverride()
可以获取重写的导入器。AssetDatabase.ClearImporterOverride()
可以清理重写的导入器。
SetLabels
public static void SetLabels (Object obj, string[] labels);
替换资源上的资源标签
- 设置标签后可以通过l:标签名快速搜索
SetMainObject
public static void SetMainObject (Object mainObject, string assetPath);
指定资源文件中的哪个对象在下次导入后应成为主对象。
mainObject
:主资源assetPath
资源路径- 资源中的所有其他对象都成为主对象的子项。
- 此函数修改的是导入器对象,不是资源本身。下次导入反映的是导入资源中的变化。
StartAssetEditing
public static void StartAssetEditing ();
开始资源导入状态。
- 用于将多个资源导入组合成一个更大的导入。
- 与
AssetDatabase.StopAssetEditing()
配套使用。 - 强烈建议根据需要将对
AssetDatabase.StartAssetEditing()
和AssetDatabase.StopAssetEditing()
的调用置于try..catch
代码块或try..finally
代码块中。
StopAssetEditing
public static void StopAssetEditing ();
结束资源导入状态。
- 用于将多个资源导入组合成一个更大的导入。
- 与
AssetDatabase.StartAssetEditing()
配套使用。 - 强烈建议根据需要将对
AssetDatabase.StartAssetEditing()
和AssetDatabase.StopAssetEditing()
的调用置于try..catch
代码块或try..finally
代码块中。
TryGetAssetFolderInfo
public static bool TryGetAssetFolderInfo (string path, out bool rootFolder, out bool immutable);
获取资源的文件夹特定信息。返回
true
代表是AssetDatabase管理的文件夹。
path
:目标路径rootFolder
:是不是根文件夹immutable
:给定的文件或文件夹不能被AssetDatabase修改
TryGetGUIDAndLocalFileIdentifier
public static bool TryGetGUIDAndLocalFileIdentifier (Object obj, out string guid, out long localId);
public static bool TryGetGUIDAndLocalFileIdentifier (int instanceID, out string guid, out long localId);
public static bool TryGetGUIDAndLocalFileIdentifier (LazyLoadReference<T> assetRef, out string guid, out long localId);
从对象实例 ID 中获取 GUID 和本地文件 ID。如果成功找到 GUID 和文件 ID,则返回 true。
assetRef
:要为其获取 GUID 和文件 ID 的资源引用。- 某些版本使用int作为
localId
参数而不是long - 在某些情况下,
localId
可以大于32位,例如prefab。 - 当Unity序列化一个资源引用时,它指向两个东西:
GUID
和localId
。GUID
是唯一的散列值,localId
是相对于资源的值。当一个序列化的资源引用另一个资源时,使用这两个值。 - 如果使用文本序列化项目,可能需要手动修改此信息,详情。
UnregisterCustomDependencyPrefixFilter
public static uint UnregisterCustomDependencyPrefixFilter (string prefixFilter);
移除与
prefixFilter
匹配的自定义依赖。返回移除的个数。
prefixFilter
:用于取消注册的自定义依赖项的前缀过滤器。
ValidateMoveAsset
public static string ValidateMoveAsset (string oldPath, string newPath);
检查是否可以将资源文件从一个文件夹移动到另一文件夹。如果资源可移动,则返回一个空字符串;否则,返回一条错误消息。
- 不是真正移动文件。
- 所有路径均是相对于项目文件夹的路径。
WriteImportSettingsIfDirty
public static bool WriteImportSettingsIfDirty (string path);
如果资源标记脏将导入设置写入磁盘。
事件
cacheServerConnectionChanged
public static event Action<CacheServerConnectionChangedParameters> cacheServerConnectionChanged;
缓存服务器连接被改变时引发此事件。
- CacheServer 主要解决的是缩短大型团队导入资源的时间。当配置后,其它队员进行资源导入后,新成员不用再生成一遍导入数据。
- CacheServer安装
https://github.com/Unity-Technologies/unity-cache-server#server-setup
importPackageCancelled
public static event ImportPackageCallback importPackageCancelled{add;remove;}
public delegate void ImportPackageCallback(string packageName);
当Unity Package取消时引发此事件。
- 只对Unity Package包有效,对UPM(Unity Package Manager)包无效。
- 导入准备面板点击x不会触发此事件。
importPackageCompleted
public static event ImportPackageCallback importPackageCompleted{add;remove;}
public delegate void ImportPackageCallback(string packageName);
当Unity Package导入完成时引发此事件。
- 只对Unity Package包有效,对UPM(Unity Package Manager)包无效。
importPackageFailed
public static event ImportPackageFailedCallback importPackageFailed{add;remove;}
public delegate void ImportPackageFailedCallback(string packageName, string errorMessage);
当Unity Package导入错误时引发此事件。
- 只对Unity Package包有效,对UPM(Unity Package Manager)包无效。
importPackageStarted
public static event ImportPackageCallback importPackageStarted{add;remove;}
public delegate void ImportPackageCallback(string packageName);
当Unity Package打开时引发此事件。
- 只对Unity Package包有效,对UPM(Unity Package Manager)包无效。