Xlua环境配置
- Xlua中 Plugin Xlua复制到 需要热更新的工程中—Assets子目录
- 开启宏HOTFIX_ENABLE
File->buildSetting->playerSetting->scriptsDefineSymbols
- Tool工具文件夹 复制到Assets同级目录
- 拷贝unity安装目录
到
Lua和C#的链接 步骤
- 清除C#和lua链接文件
- 生成链接的中间文件
- 注入
xlua热更新流程
- 从项目启动 用C#开发
- 将来哪一块需要更新 [hotfix] C# 方法(ShowPet)
- 对应的 写lua文件 进行热更新(ShowPet)
a) ShowPet
b) ShowPet
需要更新的 脚本处理
- 引入命名空间 using Xlua
- 在需要热更新的类上加标签[hotfix]
- 在需要更新的方法上加[LuaCallCSharp]
- 生成lua和C#链接的中间脚本
- 注入
xlua热更新流程
每次打开客户端的时候
从服务器下载一个码 MD5 和 客户端本地的MD5码进行校验对比
若有区别 需要更新 从服务器下载 lua脚本更新 Ab包
自定义Loader文件加载
- 先写一个链接脚本
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();
}
}
- 需要更新的文件,以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文档,重新生成,插入
单例模式无法调用,需在更新的方法所在脚本中写出单例模式的成员变量来调用