隶属于UnityEditor命名空间,使用时需要using UnityEditor;
基本参考链接:https://docs.unity.cn/cn/2018.4/ScriptReference/AssetDatabase.html
前置了解
公共基础:
知识拓展:
(1)什么是GUID与FileID(本地ID)?
参考源:Unity资源机制 https://www.jianshu.com/p/ca5cb9d910c0
GUID:Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。
fileID(本地ID):用于标识资源内部的资源。
总结:资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。
(2) 什么是InstanceID(实例ID)?
Unity为了在运行时,提升资源管理的效率,会在内部维护一个缓存表,负责将文件的GUID与fileID转换成为整数数值,这个数值在本次会话中是唯一的,称作实例ID(InstanceID)。
程序启动时,实例ID缓存与所有工程内建的对象(例如在场景中被引用),以及Resource文件夹下的所有对象,都会被一起初始化。如果在运行时导入了新的资源,或从AssetBundle中载入了新的对象,缓存会被更新,并为这些对象添加相应条目。实例ID仅在失效时才会被从缓存中移除,当提供了指定文件GUID和fileID的AssetBundle被卸载时会产生移除操作。
卸载AssetBundle会使实例ID失效,实例ID与其文件GUID和fileID之间的映射会被删除以便节省内存。重新载入AssetBundle后,载入的每个对象都会获得新的实例ID。
API接口
AssetPathToGUID
描述:获取 path 下资源的 GUID。
如果资源不存在,AssetPathToGUID 将不返回任何内容。
string texrure = AssetDatabase.AssetPathToGUID(“Assets/texture.jpg”);
返回:string GUID。
public static string AssetPathToGUID (string path);
path | 资源的文件系统路径。 |
---|---|
Contains
描述:对象是否为资源?是(Assets文件夹的一个文件)返回true ; 否(如场景中的对象,或者在运行时创建的对象)返回false 。
public static bool Contains (Object obj);
public static bool Contains (int instanceID);
[MenuItem("Tools/Prefabs/是否是资源")]
static void Resource()
{
Object obj = Selection.activeObject;
if(AssetDatabase.Contains(obj))
{
Debug.Log("是资源");
}
else { Debug.Log("不是资源"); }
}
CopyAsset
描述:复制 path 下的资源并将其存储在 newPath 下。
public static bool CopyAsset (string path, string newPath);
path | 源资源的文件系统路径。 |
---|---|
newPath | 要创建的新资源的文件系统路径。 |
public static string destPath = "Assets/CopyToHere";
[MenuItem("Tools/Prefabs/复制路径内容")]
private static void CopyPathContent()
{
GameObject[] objectArray = Selection.gameObjects;
foreach (GameObject gameObject in objectArray)
{
string sourcePath = AssetDatabase.GetAssetPath(gameObject);
string destinationPath = destPath + gameObject.name + ".prefab";
AssetDatabase.CopyAsset(sourcePath, destinationPath);
}
}
CreateAsset
描述:在此路径下创建一个新资源。
确保路径使用的是支持的扩展名:
(材质是 ‘.mat’、立方体贴图是 ‘.cubemap’、 皮肤是 ‘.GUISkin’、动画是 ‘.anim’、其他任意资源是 ‘.asset’)。
public static void CreateAsset (Object asset, string path);
asset | 创建资源所使用的对象。 |
---|---|
path | 新资源的文件系统路径。 |
FindAssets
描述:使用搜索筛选器字符串搜索资源数据库。
AssetDatabase.CreateAsset(material, “Assets/MyMaterial.mat”);
返回值:string[] 匹配资源的数组。请注意将返回 GUID。
public static string[] FindAssets (string filter);
public static string[] FindAssets (string filter, string[] searchInFolders);
filter | 筛选器字符串可以包含搜索数据。 |
---|---|
searchInFolders | 要从中开始搜索的文件夹。 |
● 筛选器字符串可包含:
①名称:按照文件名(不带拓展名)筛选资源
string[] results = AssetDatabase.FindAssets(“FileName”);
②标签:资源可与标签关联。在每个标签前面使用关键字“l:” 可查找带有特定标签的资源。
public class ScriptObj : ScriptableObject{
public void Awake(){ Debug.Log("ScriptObj created"); }
}
public class PrefabsModify
{
static ScriptObj obj;
[MenuItem("Tools/Prefabs/通过Label获取相对路径")]
static void RelativePathsInProject()
{
obj = (ScriptObj)ScriptableObject.CreateInstance(typeof(ScriptObj));
AssetDatabase.CreateAsset(obj,"Assets/obj.asset");//创建asset资源
string[] setLabels = new string[] { "Label" };//创建标签数组
AssetDatabase.SetLabels(obj, setLabels);//为资源添加标签
var guids = AssetDatabase.FindAssets("l:Label");//实际查询Label语句
foreach (var guid in guids)//遍历显示
{
var path = AssetDatabase.GUIDToAssetPath(guid);
Debug.Log(path);
}
}
③类型:基于显式标识的类型查找资源。关键字“t:”可用于 指定正在查找的资源类型。
var guids = AssetDatabase.FindAssets(“t: Prefab”);
● 使用 searchInFolders 参数 指定一个或多个文件夹时,会将搜索限定到这些文件夹及其 子文件夹。这要比在所有文件夹中搜索所有资源快。
LoadAssetAtPath
描述:返回给定路径 assetPath 下 type 类型的第一个资源对象。
Texture2D t = (Texture2D)AssetDatabase.LoadAssetAtPath(“Assets/texture.jpg”, typeof(Texture2D));
返回:Object 与参数匹配的资源。
public static Object LoadAssetAtPath (string assetPath, Type type);
assetPath | 要加载的资源的路径。 |
---|---|
type | 资源的数据类型。 |
MoveAssetToTrash / DeleteAsset
描述:将路径下的资源移动到垃圾箱。(成功删除,返回true;资源不存在或是不能被移动到垃圾箱,返回false)
AssetDatabase.MoveAssetToTrash(destinationPath);
public static bool MoveAssetToTrash (string path);
path | 要删除的资源的文件系统路径。 |
---|---|
Refresh
描述:导入所有更改的资源。
此函数将导入已更改其内容修改数据或已在项目文件夹中添加/删除的所有资源。
此方法会隐式触发资源垃圾回收
重载函数:
public static void Refresh (ImportAssetOptions options= ImportAssetOptions.Default);
RenameAsset
描述:为资源文件重命名。、
string destPath = AssetDatabase.GetAssetPath(Selection.activeObject); //相对路径 string newdestinationPath = “newName.png”; //新名称 AssetDatabase.RenameAsset(destPath, newdestinationPath);
返回:string 如果资源重命名成功,则返回一个空字符串;否则,返回一条错误消息。
public static string RenameAsset (string pathName, string newName);
pathName | 资源当前所在的路径。 |
---|---|
newName | 应为资源提供的新名称。 |
GetDependencies
描述:string[] 输入依赖的所有资源的路径。
返回:返回一个资源路径数组,这些资源是所提供 pathName 的列表中所有资源的依赖关系。
public static string[] GetDependencies (string pathName);
public static string[] GetDependencies (string pathName, bool recursive);
pathName | 需要依赖项的资源的路径。 |
---|---|
recursive | 控制此方法是否以递归方式检查并返回包括间接依赖关系在内的所有依赖关系(设置为 true 时),或是否仅返回直接依赖关系(设置为 false 时)。 |