【脚本笔记】AssetDatabase

news2024/11/19 2:37:06

AssetDatabase是编辑器下的处理资源操作的重要类,主要用于访问资源并针对资源执行操作的接口。

  • 这里面所有的操作路径都是基于Unity项目的相对路径也就是Assets/xxx或者Assets/xxx.jpg这种。
  • CacheServer 主要解决的是缩短大型团队导入资源的时间。当配置后,其它队员进行资源导入后,新成员不用再生成一遍导入数据。
    • CacheServer安装 https://github.com/Unity-Technologies/unity-cache-server#server-setup
  • 涉及版本控制相关的指的是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 的自动刷新偏好设置,调用AllowAutoRefreshDisallowAutoRefresh仍会修改内部计数器,但是编辑器不会自动刷新,无论内部计数器是否为零。

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
  • pathsnewPaths数量要相同。
  • 不能再导入流程中运行这个方法。

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.OnWillSaveAssetsAssetPostProcessor.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, prefabsassembly 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);

获取给定路径assetPathtype类型的第一个资源对象。

  • 相对于项目文件夹的路径
  • 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。

  • 在外部编辑器、纹理应用程序或是建模工具中打开资源,具体取决于资源的类型。
  • 如果是一个文本文件,lineNumbercolumnNumber会指示文本编辑器跳到该行和列。

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.RefreshAssetDatabase.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序列化一个资源引用时,它指向两个东西:GUIDlocalIdGUID是唯一的散列值,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)包无效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8S部署应用时从harbor拉取镜像失败

问题描述 K8S部署服务拉取镜像失败&#xff1a;ImagePullBackOff K8S拉取镜像提示&#xff1a;Failed to pull image “IP:PORT/zcy-project/nginx:1.16.1”: rpc error: code Unknown desc Error response from daemon: unauthorized: unauthorized to access repository: …

mediapipe 训练自有图像数据分类

参考&#xff1a; https://developers.google.com/mediapipe/solutions/customization/image_classifier https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/customization/image_classifier.ipynb#scrollToplvO-YmcQn5g 安装&#xff1a…

配音软件怎么选?推荐三款自用好评的

会刷短视频的小伙伴肯定知道&#xff0c;很多创作者想让自己的视频更加丰富&#xff0c;呈现更加完美的视频效果&#xff0c;往往会在视频里的空境部分加入一些旁白解说&#xff0c;你们难道就不好奇吗&#xff1f;这些声音为什么这么想真人说的话&#xff0c;而且还可以这么自…

虚幻C++基础 day1

虚幻C概念 虚幻C类的继承结构 虚幻引擎C类层级结构(Hierarchy) 这些基本类又派生出了很多子类&#xff0c;例&#xff1a; UE中的反射与垃圾回收系统 例如一个创建了一个Actor类&#xff0c;有一个Actor类型指针去指向这个Actor类&#xff0c;如果的指针被销毁了&#xff…

编译环境里存在yaml-cpp的多个版本时可能引起的问题

有时要编译的程序自带了特定版本的yaml-cpp&#xff0c;同时系统目录下也安装了更高版本的yaml-cpp&#xff0c;这时可能引起编译错误&#xff0c;就是某些yaml-cpp的API不认识&#xff0c;例如&#xff1a; 出现这种问题倒好办&#xff0c;正常情况下不可能&#xff0c;肯定能…

目标检测算法发展史

前言 比起图像识别&#xff0c;现在图片生成技术要更加具有吸引力&#xff0c;但是要步入AIGC技术领域&#xff0c;首先不推荐一上来就接触那些已经成熟闭源的包装好了再提供给你的接口网站&#xff0c;会使用别人的模型生成一些图片就能叫自己会AIGC了吗&#xff1f;那样真正…

电脑突然提示找不到msvcp140.dll怎么办,解决msvcp140.dll丢失的办法

当我们在电脑上运行某些软件或游戏时&#xff0c;可能会遇到一个常见的错误消息&#xff1a;“找不到msvcp140.dll”。出现这样的情况通常意味着系统缺少一个重要的动态链接库文件&#xff0c;而这可能会导致程序无法正常启动。如果你现在遇到了这个问题&#xff0c;哪有可以用…

人大与加拿大女王大学金融管理硕士项目:开启国际视野,成就金融领袖

生活中&#xff0c;我们总会遇到各种各样的困难和挑战。有时候&#xff0c;我们会感到沮丧、迷茫甚至绝望。但是&#xff0c;正是这些困难和挑战&#xff0c;让我们变得更加坚强、勇敢和成熟。在这个职场竞争愈发激烈的时代&#xff0c;不断地充实自己是非常重要的。如果你从事…

Echats-页面切换时echats图表刷新

在src文件夹下的composables创建echats.ts echats.ts的内容为&#xff1a; import { nextTick, effectScope, onScopeDispose, ref, watch } from vue; import type { ComputedRef, Ref } from vue; import * as echarts from echarts/core; import { BarChart, GaugeChart, L…

Golang | Zinx学习笔记(一)

参考 http://zinx.me/ https://www.kancloud.cn/aceld/zinx/1960213 https://www.yuque.com/aceld/tsgooa/gx01meg5ow4pftac 说明 zinx是一个基于Golang的轻量级并发服务器框架。 目前zinx已经在很多企业进行开发使用&#xff0c;具体使用领域包括:后端模块的消息中转、长链…

Mybatis-Plus通用枚举功能 [MyBatis-Plus系列] - 第493篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 S…

win 下安装 nvm 的使用与配置

nvm 全名 node.js version management&#xff0c;是一个 nodejs 的版本管理工具。通过它可以安装和切换不同版本的 nodejs。 注&#xff1a;如果已经安装了 nodejs 需先卸载后再安装 nvm 为了确保 nodejs 已彻底删除&#xff0c;可以看看安装目录中是否有 node 文件夹&#x…

Linux|安装Nomachine

参考&#xff1a;2022 Nomachine 最简安装与使用指南&#xff08;https://blog.csdn.net/qq_51116518/article/details/127450253&#xff09; 解压 先将目录调整到压缩包所在目录&#xff0c;输入sudo tar zxvf nomachine_7.6.2_3_aarch64.tar.gz 添加权限 sudo chmod -R…

基于Cmake+QT+VS的C++项目构建开发编译简明教程

目前项目是尽量利用开源项目为基础&#xff0c;考虑到跨平台&#xff0c;以及后期便于开发的协同和延续&#xff0c;开发语言基于C/C、UI基于QT&#xff08;5.7.1&#xff09;&#xff0c;集成开发环境&#xff08;IDE&#xff09;使用Visual Studio&#xff08;2015&#xff0…

开心要笑,不开心就待会儿再笑,生活亦如此

90白鸭绒填充&#xff0c;给宝贝满满的安全感 厚实细腻上身真的很舒适&#xff0c;而且不会显得臃肿哦 杜邦三防面料的优点 防水防油防污&#xff0c;耐脏又实穿&#xff01;&#xff01;

Spring Cloud之API网关(Zuul)

目录 Zuul 简介 功能 工作流程 搭建 1.引入依赖 2.添加注解 3.路由转发 4.测试 实现原理 EnableZuulProxy注解 ZuulServlet FilterProcessor Zuul内置过滤器 常用配置 Zuul 简介 zuul是SpringCloud子项目的核心组件之一&#xff0c;可以作为微服务架构中的API网…

MappingMongoConverter原生mongo 枚举类ENUM映射使用的是name

j.l.IllegalArgumentException: No enum constant com.xxx.valobj.TypeEnum.stringat java.lang.Enum.valueOf

dracut添加指定固件

文章目录 linux-firmware1、固件介绍2、Microcode updates for CPUs3、如何添加固件 linux-firmware 1、固件介绍 存放在 /lib/firmware&#xff0c;固件来自kernel 仓库更多的固件可以参考git仓库&#xff0c;https://git.kernel.org/pub/scm/linux/kernel/git/firmware/lin…

day16_IO

今日内容 1.复习 2.IO 3.Hutool 4.Idea会导jar包 一、File[熟悉] 1.1 介绍 文件和目录(文件夹) 路径名的抽象表示形式。 即使用路径来表示一个文件或者一个文件夹对象 路径: 相对路径,相对于当前项目的项目名下绝对路径,按照磁盘来确定 1.2 构造方法 File(String pathname) 通…