• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Unity如何处理lua热重载

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

lua热重载就是运行时修改代码不需要重新运行就可以生效的一种方案。首先先上方案链接:

https://github.com/asqbtcupid/lua_hotupdate

git上已经有人做出了现成的方案,拿来即用。

如果在Unity中使用需要检测lua文件的修改,通过以下代码进行:

using UnityEngine;
using UnityEditor;
public class LuaFastProcessor : AssetPostprocessor
{
    protected const string HOT_FIX_STR = "HU.Update()";
    public static void OnPostprocessAllAssets(string[] importedAsset, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        if (Application.isPlaying)
        {
            string path = Application.dataPath + "\\StreamingAssets\\scripts\\hotupdatelist.lua";
            StringBuilder sb = new StringBuilder();
            sb.Append("local FileNameList = {\n");
            for (int i = 0; i < importedAsset.Length; i++)
            {
                bool isLuaFile = importedAsset[i].EndsWith(".lua");
                if (isLuaFile)
                {
                    if (XLuaManager.Instance.LuaEnvIns != null)
                    {
                        sb.Append("\"");
                        string strName = importedAsset[i].Replace(".lua", "");
                        strName = strName.Substring(strName.LastIndexOf("/") + 1);
                        Debug.LogError(strName);
                        sb.Append(strName);
                        sb.Append("\",");
                    }
                }
            }

            sb.Append(@"
                    }
                    return FileNameList");
            File.WriteAllText(path,sb.ToString());
            if(XLuaManager.Instance.LuaEnvIns!=null)
                XLuaManager.Instance.LuaEnvIns.DoString(string.Format(HOT_FIX_STR));
        }
    }
}

我们通过继承AssetPostprocessor来监测lua文件修改。当修改的时候,我们找到哪些地方进行了修改,并写入到hotupdatelistt文件中。

最后在call一次lua中的luahotupdate脚本的Update方法,脚本可以从上面git链接下到。

这里我用了git中的支持lua5.3的脚本,记得在lua的入口调用一次 luahotupdate.Init()方法。

主要原理就是package.loaded中拿到已经加载的信息,然后找到并load新的脚本并进行table的replace,具体如何replace请参照git中的代码。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua学习笔记(四)语句与控制结构发布时间:2022-07-22
下一篇:
nginx+lua的跳转命令发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap