热更新工具--lua文件迁移脚本学习笔记

一.简介

  在Unity中,使用AssetBundle Browser打包时,这个工具无法识别.lua后缀的文件,lua代码无法直接打包。我们可以为lua文件添加上后缀.txt以修改lua文件格式的方式解决这个问题,文件内容不会修改。但是对于一个项目,lua文件非常多,这时显然一个一个修改太过于麻烦,因此这个脚本让我们可以在Unity中一键复制所有的lua文件到一个新文件夹中,并将这些lua文件添加到名称为lua的AB包中,迁移后直接使用AssetBundle Browser打包即可。

二.代码:

public class LuaCopyEditor : Editor
{
    [MenuItem("XLua//Copy lua to txt file")]
    public static void CopyLuaToTxtFile(){
        //找到lua文件路径
        string path = Application.dataPath + "/Lua/";
        //校验路径是否存在
        if(!Directory.Exists(path))
            return;
        //得到每个lua文件路径
        string[] luaFiles = Directory.GetFiles(path,"*.lua");

        //确定一个新路径
        string txtPath = Application.dataPath + "/LuaTxt/";
        //校验新路径文件是否存在
        if(!Directory.Exists(txtPath))
            //不存在创建
            Directory.CreateDirectory(txtPath);
        else{
            //存在清空文件夹
            string[] oldFiles = Directory.GetFiles(txtPath);
            foreach(string tempOldPath in oldFiles){
                File.Delete(tempOldPath);
            }
        }
        //遍历拷贝
        string tempPath = "";
        List<string> txtFilePaths = new List<string>();
        foreach (string str in luaFiles)
        {
            //得到新路径
            tempPath = txtPath + str.Substring(str.LastIndexOf("/")+1) + ".txt";
            txtFilePaths.Add(tempPath);
            File.Copy(str,tempPath);
        }

        //刷新Unity
        AssetDatabase.Refresh();

        //修改AB包打包
        foreach(string str in txtFilePaths){
            AssetImporter importer = AssetImporter.GetAtPath(str.Substring(str.IndexOf("Assets")));
            if(importer != null)
                importer.assetBundleName = "lua";
        }
    }
}

三.注意事项

  这个脚本在运行时如果xlua生成的代码没有清空会报错,记得清除所有xlua生成的脚本,在迁移完成后重新生成代码。

上一篇:常用DOS命令


下一篇:Windows Server 2019 AD域控搭建