Unity Addressables 在资源导入时自动勾选并设置标签

因为项目中用到lua脚本,每次导入新脚本时都得手动勾选,太麻烦了就翻了下API

一顿分析发现结构是 AddressableAssetSettings - AddressableAssetGroup - AddressableAssetEntry

每勾选一次都生成一个AddressableAssetEntry,所以思路是通过代码创建这个东西,放到组中,再设置标签。

一顿乱翻发现个方法 AddressableAssetSettings.CreateOrMoveEntry(String, AddressableAssetGroup, Boolean, Boolean)

https://docs.unity3d.com/Packages/[email protected]/api/UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.html?q=AddressableAssetSettings

设置标签的方法 AddressableAssetEntry.SetLabel(String, Boolean, Boolean, Boolean)

https://docs.unity3d.com/Packages/[email protected]/api/UnityEditor.AddressableAssets.Settings.AddressableAssetEntry.html

再结合之前写的一篇文章 

Unity自定义资源导入处理,*.lua文件为例

实现代码

class LuaPostprocessor : AssetPostprocessor
{
    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        var setting = AssetDatabase.LoadAssetAtPath("Assets/AddressableAssetsData/AddressableAssetSettings.asset");

        var group = setting.FindGroup("LuaSctipt");

        foreach (string str in importedAssets)
        {
            if (str.EndsWith(".lua"))
            {
                //Debug.Log("LuaPostprocessor:" + str);

                var guid = AssetDatabase.AssetPathToGUID(str); //获得GUID

                var entry = setting.CreateOrMoveEntry(guid, group); //通过GUID创建entry

                entry.SetLabel("LuaScript",true); 

                //var lua_obj = AssetDatabase.LoadAssetAtPath(str);

                //AssetDatabase.SetLabels(lua_obj, new string[] { "lua" });
            }
        }

    }

}

 

你可能感兴趣的:(Unity学习之路)