44.AssetDatabase-AssetDatabase常用API
44.1 知识点
AssetDatabase中的常用API
创建资源
private void OnGUI()
{
// 创建资源,我们可以通过代码动态创建一些资源
// 路径从 Assets/...开始
// AssetDatabase.CreateAsset(资源,路径);
// 注意:
// 不能在StreamingAssets中创建资源,
// 不能创建预设体(预设体创建之后会讲),
// 只能创建资源相关,例如材质球等
// 路径需要写后缀
if (GUILayout.Button("创建资源"))
{
Material mat = new Material(Shader.Find("Specular"));
AssetDatabase.CreateAsset(mat, "Assets/Resources/MyMaterial.mat");
}
}
创建文件夹
private void OnGUI()
{
// 创建文件夹,路径从 Assets/...开始
// AssetDatabase.CreateFolder(父文件夹,新文件夹名)
if (GUILayout.Button("创建文件夹"))
{
AssetDatabase.CreateFolder("Assets/Resources", "MyTestFolder");
}
}
拷贝资源
private void OnGUI()
{
// 拷贝资源,路径从 Assets/...开始
// AssetDatabase.CopyAsset(源资源,目标路径)
// 注意:
// 需要写后缀名
if (GUILayout.Button("拷贝资源"))
{
AssetDatabase.CopyAsset("Assets/Editor Default Resources/head.png",
"Assets/Resources/MyTestFolder/head.png");
}
}
移动资源
private void OnGUI()
{
// 移动资源,路径从 Assets/...开始
// AssetDatabase.MoveAsset(老路径, 新路径);
if (GUILayout.Button("移动资源"))
{
AssetDatabase.MoveAsset("Assets/Resources/MyTestFolder/head.png",
"Assets/Resources/head.png");
}
}
删除资源
private void OnGUI()
{
// 删除资源,路径从 Assets/...开始
// AssetDatabase.DeleteAsset(资源路径)
if (GUILayout.Button("删除资源"))
{
AssetDatabase.DeleteAsset("Assets/Resources/head.png");
}
}
批量删除资源
private void OnGUI()
{
// 批量删除资源,路径从 Assets/...开始
// AssetDatabase.DeleteAssets(string[] 路径们, List<string> 用于存储删除失败的路径)
if (GUILayout.Button("批量删除资源"))
{
List<string> failList = new List<string>();
AssetDatabase.DeleteAssets(
new string[] { "Assets/Resources/head.png", "Assets/Resources/head2.png" }, failList);
for (int i = 0; i < failList.Count; i++)
{
Debug.Log(failList[i]);
}
}
}
获取资源路径
private void OnGUI()
{
// 获取资源路径 可以配合Selection选中资源一起使用
// AssetDatabase.GetAssetPath(资源)
if (GUILayout.Button("获取资源路径"))
{
Debug.Log(AssetDatabase.GetAssetPath(Selection.activeObject));
}
}
根据路径加载资源
private void OnGUI()
{
// 根据路径加载资源,路径从Assets/开始
// AssetDatabase.LoadAssetAtPath(资源路径)
// 编辑器下才会使用
if (GUILayout.Button("加载资源"))
{
Texture txt = AssetDatabase.LoadAssetAtPath<Texture>("Assets/Resources/head.png");
Debug.Log(txt.name);
}
}
刷新,当对资源进行移动、导入、删除等操作后,需要执行刷新
private void OnGUI()
{
// 刷新,当对资源进行移动、导入、删除等操作后,需要执行刷新
// AssetDatabase.Refresh()
if (GUILayout.Button("测试刷新"))
{
// 创建文件时不使用Unity相关API的话就要调用刷新 才能在Project窗口中显示
File.WriteAllText(Application.dataPath + "/Resources/test2.txt", "123123123");
AssetDatabase.Refresh();
}
}
返回资源所属的AB包名
private void OnGUI()
{
// 返回资源所属的AB包名,路径从Assets/开始
// GetImplicitAssetBundleName(资源路径);
if (GUILayout.Button(""))
{
}
}
更多内容
官方文档:AssetDatabase
44.2 知识点代码
Lesson44_AssetDatabase_AssetDatabase常用API
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson44_AssetDatabase_AssetDatabase常用API : MonoBehaviour
{
void Start()
{
#region 知识点一 AssetDatabase中的常用API
//1.创建资源,我们可以通过代码动态创建一些资源
// 路径从 Assets/...开始
// AssetDatabase.CreateAsset(资源,路径);
// 注意:
// 不能在StreamingAssets中创建资源,
// 不能创建预设体(预设体创建之后会讲),
// 只能创建资源相关,例如材质球等
// 路径需要写后缀
//2.创建文件夹,路径从 Assets/...开始
// AssetDatabase.CreateFolder(父文件夹,新文件夹名)
//3.拷贝资源,路径从 Assets/...开始
// AssetDatabase.CopyAsset(源资源,目标路径)
// 注意:
// 需要写后缀名
//4.移动资源,路径从 Assets/...开始
// AssetDatabase.MoveAsset(老路径, 新路径);
//5.删除资源,路径从 Assets/...开始
// AssetDatabase.DeleteAsset(资源路径)
//6.批量删除资源,路径从 Assets/...开始
// AssetDatabase.DeleteAssets(string[] 路径们, List<string> 用于存储删除失败的路径)
//7.获取资源路径 可以配合Selection选中资源一起使用
// AssetDatabase.GetAssetPath(资源)
//8.根据路径加载资源,路径从Assets/开始
// AssetDatabase.LoadAssetAtPath(资源路径)
//9.根据路径加载所有资源,路径从Assets/开始
// AssetDatabase.LoadAllAssetsAtPath(资源路径);
// 一般可以用来加载图集资源,返回值为Object数据
// 如果是图集,第一个为图集本身,之后的便是图集中的所有Sprite
//10.刷新,当对资源进行移动、导入、删除等操作后,需要执行刷新
// AssetDatabase.Refresh()
//11.返回资源所属的AB包名,路径从Assets/开始
// GetImplicitAssetBundleName(资源路径);
#endregion
#region 知识点二 更多内容
//官方文档:https://docs.unity3d.com/ScriptReference/AssetDatabase.html
#endregion
}
}
MyAssetDatabaseLearnWindow
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class MyAssetDatabaseLearnWindow : EditorWindow
{
[MenuItem("编辑器拓展教程/MyAssetDatabaseLearnWindow")]
private static void OpenMyAssetDatabaseLearnWindow()
{
MyAssetDatabaseLearnWindow win = EditorWindow.GetWindow<MyAssetDatabaseLearnWindow>("AssetDatabase知识学习");
win.Show();
}
private void OnEnable()
{
}
private void OnGUI()
{
//1.创建资源,我们可以通过代码动态创建一些资源
// 路径从 Assets/...开始
// AssetDatabase.CreateAsset(资源,路径);
// 注意:
// 不能在StreamingAssets中创建资源,
// 不能创建预设体(预设体创建之后会讲),
// 只能创建资源相关,例如材质球等
// 路径需要写后缀
if (GUILayout.Button("创建资源"))
{
Material mat = new Material(Shader.Find("Specular"));
AssetDatabase.CreateAsset(mat, "Assets/Resources/MyMaterial.mat");
}
//2.创建文件夹,路径从 Assets/...开始
// AssetDatabase.CreateFolder(父文件夹,新文件夹名)
if (GUILayout.Button("创建文件夹"))
{
AssetDatabase.CreateFolder("Assets/Resources", "MyTestFolder");
}
//3.拷贝资源,路径从 Assets/...开始
// AssetDatabase.CopyAsset(源资源,目标路径)
// 注意:
// 需要写后缀名
if (GUILayout.Button("拷贝资源"))
{
AssetDatabase.CopyAsset("Assets/Editor Default Resources/head.png",
"Assets/Resources/MyTestFolder/head.png");
}
//4.移动资源,路径从 Assets/...开始
// AssetDatabase.MoveAsset(老路径, 新路径);
if (GUILayout.Button("移动资源"))
{
AssetDatabase.MoveAsset("Assets/Resources/MyTestFolder/head.png",
"Assets/Resources/head.png");
}
//5.删除资源,路径从 Assets/...开始
// AssetDatabase.DeleteAsset(资源路径)
if (GUILayout.Button("删除资源"))
{
AssetDatabase.DeleteAsset("Assets/Resources/head.png");
}
//6.批量删除资源,路径从 Assets/...开始
// AssetDatabase.DeleteAssets(string[] 路径们, List<string> 用于存储删除失败的路径)
if (GUILayout.Button("批量删除资源"))
{
List<string> failList = new List<string>();
AssetDatabase.DeleteAssets(
new string[] { "Assets/Resources/head.png", "Assets/Resources/head2.png" }, failList);
for (int i = 0; i < failList.Count; i++)
{
Debug.Log(failList[i]);
}
}
//7.获取资源路径 可以配合Selection选中资源一起使用
// AssetDatabase.GetAssetPath(资源)
if (GUILayout.Button("获取资源路径"))
{
Debug.Log(AssetDatabase.GetAssetPath(Selection.activeObject));
}
//8.根据路径加载资源,路径从Assets/开始
// AssetDatabase.LoadAssetAtPath(资源路径)
// 编辑器下才会使用
if (GUILayout.Button("加载资源"))
{
Texture txt = AssetDatabase.LoadAssetAtPath<Texture>("Assets/Resources/head.png");
Debug.Log(txt.name);
}
//9.根据路径加载所有资源,路径从Assets/开始
// AssetDatabase.LoadAllAssetsAtPath(资源路径);
// 一般可以用来加载图集资源,返回值为Object数据
// 如果是图集,第一个为图集本身,之后的便是图集中的所有Sprite
//if (GUILayout.Button(""))
//{
// //AssetDatabase.LoadAllAssetsAtPath(资源路径);
//}
//10.刷新,当对资源进行移动、导入、删除等操作后,需要执行刷新
// AssetDatabase.Refresh()
if (GUILayout.Button("测试刷新"))
{
//创建文件时不使用Unity相关API的话就要调用刷新 才能在Project窗口中显示
File.WriteAllText(Application.dataPath + "/Resources/test2.txt", "123123123");
AssetDatabase.Refresh();
}
//11.返回资源所属的AB包名,路径从Assets/开始
// GetImplicitAssetBundleName(资源路径);
//if (GUILayout.Button(""))
//{
//}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com