AssetDatabase的灵活运用

作者: 能不写代码么 | 来源:发表于2019-08-22 18:42 被阅读8次

前言

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

相关文章

网友评论

    本文标题:AssetDatabase的灵活运用

    本文链接:https://www.haomeiwen.com/subject/akqosctx.html