前言
- Unity种提供了AssetDatabase这个类,可以做很多事情,比如在编辑器模式下加载模型,获取当前物体的路径,删除选中的物体等等
编辑器下加载模型
- 首先我们都知道Unity中加载模型的方式有很多种,比如在脚本上赋值模型(不常用),Resources.load加载(常用于单机游戏,部分热更),AssetBundle加载(常用于热更新、网络游戏),还有我们文章中要说的AssetDatabase.LoadAssetAtPath(常用于编辑器)
- 接下来我们在Editor文件夹下创建脚本并写下代码
[MenuItem("Tools/加载模型")]
public static void LoadModel()
{
GameObject go = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefab/Wolf.prefab");
GameObject.Instantiate(go);
}
- "Assets/Prefab/Wolf.prefab"这个属于相对路径,根据你自己的模型位置去填写
- 接下来看看效果
编辑器下删除选中的所有物体(Selection类)
- 在编辑器模式使用Selection.objects可以获取到当前选中的全部物体,借此可以对选中的物体进行操作
[MenuItem("Tools/删除模型(无法撤回)")]
public static void DestroyImmediateModel()
{
foreach (var item in Selection.objects)
{
GameObject.DestroyImmediate(item);
}
}
[MenuItem("Tools/删除模型(可以撤回)")]
public static void UndoDestroyImmediateModel()
{
foreach (var item in Selection.objects)
{
Undo.DestroyObjectImmediate(item);
}
}
获取当前选中文件的路径
- AssetDatabase.GetAssetPath传递对应的文件可以返回路径
- 编辑器模式下点击任意文件,可以返回对应的路径,再本文中看似很鸡肋,实则。。。呵呵
[MenuItem("Tools/文件所在的路径")]
public static void CurrentObjPath()
{
var seletionObjs = Selection.objects;
if(seletionObjs == null)
{
Debug.Log("当前没有选中物体");
return;
}
foreach (var item in seletionObjs)
{
if (AssetDatabase.GetAssetPath(item) != null)
{
Debug.Log(AssetDatabase.GetAssetPath(item));
}
}
}
-
看下貌似很鸡肋的效果把
结语
对AssetDatabaseTest类一些总结,会日益完善哦
网友评论