Unity编辑器扩展-AssetDatabase公共类
AssetDatabase公共类是用来做什么的?
它是 Unity 引擎中的一个编辑器类
用于在编辑器环境中管理和操作项目中的资源(Assets)
它提供了一系列静态方法
使得开发者能够在编辑器脚本中进行资源的创建、拷贝、移动、删除等操作
在哪里使用AssetDatabase公共类中的相关内容
在编辑器相关处都可以使用AssetDatabase公共类中的相关内容
它主要提供的是一些资源相关的辅助功能,可以在编辑器拓展开发的任意地方使用
但一定注意,它属于编辑器功能,无法被打包出去,只能在Unity编辑器中使用
AssetDatabase API
创建资源
我们可以通过代码动态创建一些资源
路径从 Assets/…开始
AssetDatabase.CreateAsset(资源,路径);
注意:
不能在StreamingAssets中创建资源,
不能使用此方法创建预设体
只能创建资源相关,例如材质球等
路径需要写后缀
if(GUILayout.Button("创建资源"))
{
Material mat = new Material(Shader.Find("Specular"));
AssetDatabase.CreateAsset(mat, "Assets/Resources/MyMaterial.mat");
}创建文件夹
路径从 Assets/…开始
AssetDatabase.CreateFolder(父文件夹,新文件夹名)
if (GUILayout.Button("创建文件夹"))
{
AssetDatabase.CreateFolder("Assets/Resources", "MyTestFolder");
}拷贝资源
路径从 Assets/…开始
AssetDatabase.CopyAsset(源资源,目标路径)
注意:
需要写后缀名
if (GUILayout.Button("拷贝资源"))
{
AssetDatabase.CopyAsset("Assets/Editor Default Resources/EditorTeach.png", "Assets/Resources/MyTestFolder/EditorTeach.png");
}移动资源
AssetDatabase.MoveAsset(老路径, 新路径);
if (GUILayout.Button("移动资源"))
{
AssetDatabase.MoveAsset("Assets/Resources/MyTestFolder/EditorTeach.png", "Assets/Resources/EditorTeach.png");
}删除资源
路径从 Assets/…开始
AssetDatabase.DeleteAsset(资源路径)
if (GUILayout.Button("删除资源"))
{
AssetDatabase.DeleteAsset("Assets/Resources/EditorTeach.png");
}批量删除资源
路径从 Assets/…开始
AssetDatabase.DeleteAssets(string[] 路径们, List<string> 用于存储删除失败的路径)
if (GUILayout.Button("批量删除资源"))
{
List<string> failList = new List<string>();
AssetDatabase.DeleteAssets(new string[] { "Assets/Resources/EditorTeach.png", "Assets/Resources/EditorTeach2.png" }, failList);
for (int i = 0; i < failList.Count; i++)
{
Debug.Log(failList[i]);
}
}获取资源路径
可以配合Selection选中资源一起使用
AssetDatabase.GetAssetPath(资源)
if (GUILayout.Button("获取资源路径"))
{
Debug.Log(AssetDatabase.GetAssetPath(Selection.activeObject));
}根据路径加载资源
AssetDatabase.LoadAssetAtPath(资源路径)
if (GUILayout.Button("加载资源"))
{
Texture txt = AssetDatabase.LoadAssetAtPath<Texture>("Assets/Resources/EditorTeach.png");
Debug.Log(txt.name);
}根据路径加载所有资源
AssetDatabase.LoadAllAssetsAtPath(资源路径);
一般可以用来加载图集资源,返回值为Object数据
如果是图集,第一个为图集本身,之后的便是图集中的所有Sprite
if (GUILayout.Button(""))
{
AssetDatabase.LoadAllAssetsAtPath("资源路径");
}刷新
AssetDatabase.Refresh();返回资源所属的AB包名
路径从Assets/开始
GetImplicitAssetBundleName(资源路径);