【脚本笔记】AssetDatabase

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.mfbz.cn/a/110617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读——InstructGPT

论文&#xff1a;Training_language_models_to_follow_instructions_with_human_feedback.pdf (openai.com) github&#xff1a;GitHub - openai/following-instructions-human-feedback 将语言模型做得更大并不能从本质上使它们更好地遵循用户的意图。例如&#xff0c;大型语…

命令模式——让程序舒畅执行

● 命令模式介绍 命令模式&#xff08;Command Pattern&#xff09;&#xff0c;是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多条条框框&#xff0c;其实并不是一个很“规矩”的模式&#xff0c;不过&#xff0c;就是基于一点&#xff0c;命令模式相对于…

搭载紫光展锐芯片平台W117,小米手表S3全新上市

近日&#xff0c;搭载紫光展锐W117芯片平台的全新小米手表S3正式上市。该款手表主打“独立通话&#xff0c;强劲续航”&#xff0c;设计延续了经典腕表精致外观&#xff0c;基础表盘质感全⾯提升。同时小米手表S3首创“百变表圈”&#xff0c;用户可以根据需求自行更换不同表圈…

【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer

相关博客 【自然语言处理】【长文本处理】RMT&#xff1a;能处理长度超过一百万token的Transformer 【自然语言处理】【大模型】MPT模型结构源码解析(单机版) 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版) 【自然语言处理】【大模型】BLOOM模型结构源码解析(…

2023年05月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 运行以下程序&#xff0c;如果通过键盘先后输入的数是1和3&#xff0c;输出的结果是&#xff1f;&#xff08; &#x…

学习视频剪辑:如何从指定时段快速抽出视频图片!高效技巧分享

随着数字媒体的普及&#xff0c;越来越多的人开始接触视频剪辑。在视频剪辑过程中&#xff0c;有时候我们需要从指定时段快速抽出视频图片。这不仅可以帮助我们提高剪辑效率&#xff0c;还可以让我们的视频更加丰富多彩。本文将分享一些高效技巧&#xff0c;帮助你轻松实现从指…

企业计算机电脑中了locked勒索病毒怎么办,勒索病毒解密,数据恢复

网络技术的不断发展&#xff0c;为我们的企业带来了很大的便利&#xff0c;大部分企业都会选择合适的办公软件系统&#xff0c;方便自身的生产与运营。近期&#xff0c;网络上的locked勒索病毒又开始攻击企业的计算机服务器了&#xff0c;经过10月份云天数据恢复中心对企业数据…

基于机器视觉的银行卡识别系统 - opencv python 计算机竞赛

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的银行卡识别算法设计 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

水果FL Studio21.2体验版下载安装教程(增加云服务功能)

FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家内容。更新后&#xff0c;现在还可以使用人工智能辅助母带处理和数字发行功能来制作音轨。FL Studio 由最初的 "Fruity Loops" DAW 发展而来&#xff0c;25 年来&#x…

非母语玩家如何撰写英文研究性论文:2 Methodology

参考书——《Science Research Writing for non-native Speakers of English》 文章目录 1 Structure 结构2 语法和写作技巧2.1 Passives and Tense Pairs: 被动语态以及时态对2.2 a与the的使用方法2.3 Adverbs and adverb location: 副词及其位置 3 Build a Model——构建Meth…

Linux系统封装ISO镜像(自动安装)

一、准备一个系统 centos7或者centos8都可以;最小化或者桌面版的都可以,自行选择 二、安装自定义镜像工具 yum -y install createrepo mkisofs openssl rsync syslinux三、挂载镜像 创建挂载点 mkdir /mnt/cdrommount /dev/sr0 /mnt/cdrom四、同步 /mnt/cdrom/ 下的文件到 …

基于深度学习的安全帽识别检测系统(python OpenCV yolov5)

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的内容与方法二、基于深度学习的安全帽识别算法2.1 深度学习2.2 算法流程2.3 目标检测算法2.3.1 Faster R-CNN2.3.2 SSD2.3.3 YOLO v3 三 实验与结果分析3.1 实验数据集3.1.1 实验数据集的构建3.1.2 数据…

【Python】Python语法速成

目录 一、Python中的概念 二、Python和C/C++中的一些不同点 三、分支语句 四、for循环 五、函数 六、列表[]

CTB810 HN800 58914444 NDPI-02 DSTC190

CTB810 HN800 58914444 NDPI-02 DSTC190 控制微系统公司宣布推出SCADASense 4203&#xff0c;这是一款高精度集成气体流量计算机&#xff0c;集成了多变量传感器和完整的SCADAPack PLC。作为SCADASense系列流量和压力变送器的最新成员&#xff0c;4203设计用于各种过程控制应…

微信小程序的踩坑记录

问题记录&#xff1a; 嵌套太深 导致不起作用 点击我的工单 但是打印的结果值却是我的问题 没有点到我的工单上边去 原因&#xff1a;图片粘连在一起 解决方案:给图片100% 达到父元素的100% 最后成功蓝色的不粘连

innovus:命令返回列表元素超过显示上限如何解决

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 相关文章链接&#xff1a; innovus IMPSP-270 place阶段lib_cell找不到可放置位置问题 all_fanout等命令&#xff0c;返回列表太长&#xff0c;超过显示上限&#xff08;默认…

ubuntu 22.04 源码安装 apollo 8.0

对于其他的关于GPU的安装包需求&#xff0c;这里不再列出&#xff0c;因为我之前安装过&#xff0c;偷个懒就不写了&#xff0c;哈哈哈哈1, 安装docker 安装docker命令(这里的安装命令都是在docker官网,还有安装包)&#xff1a; 1&#xff0c; 设置docker的apt仓库 # Add Do…

一张动图告诉你,输入网址之后,发生了什么事情?

让我们一步一步地来看这个过程。 步骤1&#xff1a; 用户在浏览器中输入一个URL&#xff08;比如www.bytebytego.com&#xff09;&#xff0c;然后按下回车键。首先&#xff0c;我们需要将这个URL转换成一个IP地址。通常&#xff0c;这个映射关系会被存储在缓存中&#xff0…

CVE-2021-41773/42013 apache路径穿越漏洞

影响范围 CVE-2021-41773 Apache HTTP server 2.4.49 CVE-2021-42013 Apache HTTP server 2.4.49/2.4.50 漏洞原理 Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码&#xff0c;然后判断是否存在…/的路径穿越符&#xf…

【项目管理】生命周期风险评估

规划阶段目标&#xff1a;识别系统的业务战略&#xff0c;以支撑系统的安全需求及安全战略 规划阶段评估重点&#xff1a;1、本阶段不需要识别资产和脆弱性&#xff1b;2、应根据被评估对象的应用对象、应用环境、业务状况、操作要求等方面识别威胁&#xff1b; 设计阶段目标…
最新文章