Xlua热更新示例教程

Xlua环境配置

  1. Xlua中 Plugin Xlua复制到 需要热更新的工程中—Assets子目录
    在这里插入图片描述
  2. 开启宏HOTFIX_ENABLE
    File->buildSetting->playerSetting->scriptsDefineSymbols
    在这里插入图片描述
  3. Tool工具文件夹 复制到Assets同级目录
  4. 拷贝unity安装目录
    在这里插入图片描述

    在这里插入图片描述

Lua和C#的链接 步骤

  1. 清除C#和lua链接文件
  2. 生成链接的中间文件
  3. 注入

xlua热更新流程

  1. 从项目启动 用C#开发
  2. 将来哪一块需要更新 [hotfix] C# 方法(ShowPet)
  3. 对应的 写lua文件 进行热更新(ShowPet)
    a) ShowPet
    b) ShowPet

需要更新的 脚本处理

  1. 引入命名空间 using Xlua
  2. 在需要热更新的类上加标签[hotfix]
  3. 在需要更新的方法上加[LuaCallCSharp]
  4. 生成lua和C#链接的中间脚本
  5. 注入

xlua热更新流程

每次打开客户端的时候
从服务器下载一个码 MD5 和 客户端本地的MD5码进行校验对比
若有区别 需要更新 从服务器下载 lua脚本更新 Ab包

自定义Loader文件加载

  1. 先写一个链接脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using System.IO;

public class FishHotFixTest : MonoBehaviour {
    private LuaEnv luaEnv;//虚拟机
    // Use this for initialization
    void Start()
    {
        
        luaEnv = new LuaEnv();
        //新增一个Loader
        luaEnv.AddLoader(MyLoader);
        luaEnv.DoString("require 'fishHotfix'");//加载文件
        
    }


    private byte[] MyLoader(ref string filePath)
    {
        string path = @"C:\Users\Administrator\Desktop\fishHotfix\" + filePath + ".lua.txt";//更新的文件路径
        //返回一个bytes类型                             //读取文件
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
    }
    private void OnDisable()
    {
        //方法   nil
        luaEnv.DoString("require 'fishHotFixDispose'");
        //lua虚拟机释放
        luaEnv.Dispose();
    }
}
  1. 需要更新的文件,以lua.txt结尾的文档
    例如下,以lua语言调用C#方法,然后把文件名以及路径正确填写入链接脚本中
--print("fish");
--引用命名空间
UnityEngine=CS.UnityEngine
xlua.hotfix(
            --CS.脚本,'方法名',方法(参数)
            CS.GameController,'OnBigCountDownBtnClick',function(self)
			--方法主体lua改写,成员变量用:,静态函数用.
            self.playerGold=self.playerGold+10000
			UnityEngine.Object.Instantiate(self.goldEffect)
			self.bigCountDownBtn.gameObject:SetActive(false)
			self.bigTimerText.gameObject:SetActive(true)
			self.bigTimer=5
            end
            )

由于每次调用方法后还需要写一个文档来释放此方法,故又写一个文档

xlua.hotfix(CS.GameController,'OnBigCountDownBtnClick',nil);--把方法释放掉,不然会报错

需要注意的是,每次代码变动都需要重新清除unity中的xlua文档,重新生成,插入
单例模式无法调用,需在更新的方法所在脚本中写出单例模式的成员变量来调用

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值