AssetDatabase的灵活运用

C#

浏览数:51

2019-9-1

前言

  • 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类一些总结,会日益完善哦

作者:SunnyShao