1 导入xLua源文件
去github下载最新版本,解压后把Assets和Tools复制到自己项目

要是出错就导入这3个文件到XLua文件夹下(在Unity安装目录搜索就行了)

注意:各种文件最好别放在中文目录下,不然可能会出错
2 使用方式
1、添加HOTFIX_ENABLE宏打开该特性(在Unity3D的File->Build Setting->Scripting Define Symbols下添加)。编辑器、各手机平台这个宏要分别设置!如果是自动化打包,要注意在代码里头用API设置的宏是不生效的,需要在编辑器设置。

(建议平时开发业务代码不打开HOTFIX_ENABLE,只在build手机版本或者要在编译器下开发补丁时打开HOTFIX_ENABLE)
2、执行XLua/Generate Code菜单。

3、注入,构建手机包这个步骤会在构建时自动进行,编辑器下开发补丁需要手动执行"XLua/Hotfix Inject In Editor"菜单。注入成功会打印“hotfix inject finish!”或者“had injected!”。

官方例子

实例 如何使用xlua读取自己写的lua代码
using System.IO;
using UnityEngine;
using XLua;
/// <summary>
/// 配置xlua
/// </summary>
public class HotfixScripts : MonoBehaviour {
private LuaEnv luaEnv;
private void Awake()
{
luaEnv = new LuaEnv();
luaEnv.AddLoader(MyLoader);
luaEnv.DoString("require 'ChangeColor'");//读取lua文件
}
private byte[] MyLoader(ref string filePath)//地址
{
string absPath = @"F:\Unity\change\" + filePath + ".lua.txt";
return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));
}
private void OnDisable()//用来注销改过的方法
{
luaEnv.DoString("require 'Dispose'");
}
private void OnDestroy()
{
luaEnv.Dispose();
}
}
要热更新的脚本
using UnityEngine;
using XLua;
[Hotfix] //要热更新的脚本要打上这个标签
public class ChangeColor : MonoBehaviour {
public MeshRenderer go;
[LuaCallCSharp] //打上这个标签才能调用C#里面的代码
public void ChangeSphereColor()//改下物体颜色,下面注释的代码和lua中的代码功能一样
{
//go.material.color = Color.red;
}
}
lua脚本(lua脚本起名(xxx.lua.txt))
xlua.hotfix(CS.ChangeColor,'ChangeSphereColor',function(self)
self.go.material.color = CS.UnityEngine.Color.red;
end)
--[[
套路是 xlua.hotfix(类名,'方法名',function(self,参数1,参数2...)
end)
--]]
网友评论