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

Lua笔记二(xlua)

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

Xlua官网   https://github.com/Tencent/xLua

一、xLua的导入和hotfix的配置

        1.首先在github上下载好xlua插件,解压后有一个xLua-master文件,打开里面的Assets文件夹,将其里面的文件全部复制粘贴到自己的Unity工程项目里面(放在自己工程的Assets目录下)

        2.配置热更新的宏:在Unity中打开File-->Build Settings-->Player Settings-->找到当前发布平台(PC或Android等)的Other Settings中的Scripting Define Symbols, 然后在下面输入:HOTFIX_ENABLE,然后按下回车键即可配置完成。

        2.然后将xLua-master文件里的Tools文件夹复制到自己Unity工程的根目录下(即该Tools文件夹与自己工程Assets文件夹位置并列。

        3.找到自己Unity的安装位置,按D:\Unity\UU\Unity2017.3\Editor\Data\Managed打开(具体情况看个人安装位置),然后找到Unity.Cecil.dll、Unity.Cecil.Mdb.dll、Unity.Cecil.Pdb.dll 三个文件,将其复制粘贴到自己的工程中的Assets/XLua/Src/Editor下

       

可以看到在Unity的顶上窗口中多出了XLua一栏,点击发现有三个选项

Generate Code主要用来生成代码,当自己在VS中的代码发生修改后,必须要先点击该项来重新生成代码,然后控制台会有输出打印信息:

注意一定要等待Unity编译后再选择:Hotfix Inject In Editor,即等待Unity右下方的转动标志消失,然后可以看到控制台打印输出一行:had injected或者finished,说明注入成功。

特别注意1:Unity的工程项目路径一定不要出现中文,否则无法热更新,所有路径一点中文都不能出现,一定一定一定要注意!!!踩坑证实

特别注意2:当发布项目的时候,可能会出现奇怪的报错,这个时候需要将Project视图下的Xlua文件夹里的Example全部删除掉,然后发现又出现各种报错,这个时候需要点击顶上视图的XLua的Clear Generated Code,意思是清空已生成的代码,然后再点击Generate Code、Hotfix Inject In Editor即可全部配置完成

二、正式开始打热补丁

      新建一个类叫HotFixScript,将其挂在场景中的游戏物体中,打开编辑它,首先引入XLua命名空间,然后定义创建lua虚拟机,然后通过loader加载的方式在C#这边调用lua代码,注意lua代码可以用记事本创建,将后缀名改为.lua.txt, 我的脚本叫做fish.lua.txt, 可以在fish.lua.txt中写上几行代码,如写上:print("HelloWorld")

我的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using System.IO;

public class HotFixScript : MonoBehaviour {

    private LuaEnv luaEnv;

    void Start () {
        luaEnv = new LuaEnv();
        luaEnv.AddLoader(MyLoader);
        luaEnv.DoString("require 'fish'");
    }

    void Update () {
        
    }
    private byte[] MyLoader(ref string filePath) {
        string absPath = @"D:\A_Plan\Lua_4Lv_Code\XluaProjects\MyLuaCode\" + filePath + ".lua.txt";
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));
    }

    void OnDisable()
    {
        luaEnv.DoString("require 'fishDispose'");
    }
    void OnDestroy()
    {
        luaEnv.Dispose();
    }
}

编辑好后,在Unity中选择顶上视图中的XLua,选择Generate Code,编辑好后,再选择Hotfix Inject In Editor,可以看到Unity控制台输出HelloWorld。

三、给自己的代码打热补丁

        找到自己需要修改的类中,首先引入命名空间。打开它在类名的上一行打上标签:[HotFix],然后在需要修改的方法名上方打上标签:[LuaCallCSharp]

        然后找到刚刚新建的文本文件fish.lua.txt,打开,编辑它:

 

local UnityEngine = CS.UnityEngine

xlua.private_accessible(CS.Gun)  --由于C#中类的私有成员Lua访问不到,所以需要加该行代码
xlua.hotfix(CS.Treasour,'CreatePrize',function(self)
--  ... 这里面写lua方法体
end)

如上,Treasour是C#需要修改的类,CreatePrize是该类中要修改的方法,后面的function即是lua用来替代该方法的Lua函数

然后还要记得另外创建一个fishDispose.lua.txt文件用来清空方法的引用,否则当lua虚拟机释放后会报错,在上面的HotFixScript的OnDisable方法中已写调用了该方法,在fishDispose.lua.tx写上:
local UnityEngine = CS.UnityEngine
xlua.hotfix(CS.Treasour,'CreatePrize',nil)

然后在Unity中又执行操作:生成代码、注入编辑器。(只有当VS中的代码有改变时才执行这两步,.lua.txt中代码发生改变不需要执行这两步操作)

注意:Clear Genearted Code ,当lua代码出现非语法错误时,可以尝试该选项,然后再重新生成代码,注入编辑器


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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