意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

XLua热更新框架学习(一)

来源:恒创科技 编辑:恒创科技编辑部
2022-10-01 19:36:04


欢迎加入Unity业内qq交流群:956187480



XLua热更新框架学习(一)


Xlua源码地址:​​https://github.com/Tencent/xLua​​

Xlua热更其实是补丁式的热更,跟其他的方式不一样的是初始版本都是用的c#开发,只要在后期需要更新的地方打上补丁标签,而补丁逻辑就用lua替换掉原有的逻辑。xlua降低了初始版本的开发成本。此框架只有更新逻辑,下载更新功能需要另外处理

一:下载Xlua

Xlua源码分为完整版跟开发版两种,完整版里面包含很多演示案例工具等,我们用于开发的直接下载开发版即可

XLua热更新框架学习(一)_Xlua热更新

XLua热更新框架学习(一)_Xlua热更新_02

二.导入Xlua

1.创建新的unity项目,创建好资源管理文件夹

2.将XLua中的Plugins和XLua文件夹拷贝到项目中

三.C#调用Lua

a.调用内部lua代码

1.引入XLua命名空间,在XLua中运行Lua代码的虚拟机就是LuaEnv

2.一个LuaEnv实例就是一个Lua虚拟机,建议全局唯一

LuaEnv luaEnv = new LuaEnv();
luaEnv.DoString("print('My Name Is HSJ')");

b.调用外部Lua文件

1.在Resources文件夹下创建一个Lua文件,文件的后缀需要是txt,格式:fileName.lua.txt

2.在c#的代码中通过lua虚拟机调用DoString()方法加载执行该lua文件;luaEnv.DoString("require 'fileName'");

不需要写lua文件的准确路径,只要把lua文件放到resources路径下即可。(此处存疑)

luaEnv.DoString("require 'Hsj'");

XLua热更新框架学习(一)_Xlua热更新_03

c.c#获取Lua代码中的数据

lua代码:

a = 100
b = '幻世界'
c = true

function MyName()
print('My Name Is Hsj')
end

c#代码

LuaEnv luaEnv = new LuaEnv();
luaEnv.DoString("print('My Name Is HSJ')");
luaEnv.DoString("require 'Hsj'");

int a = luaEnv.Global.Get<int>("a");
string b = luaEnv.Global.Get<string>("b");
bool c = luaEnv.Global.Get<bool>("c");
LuaFunction MyName = luaEnv.Global.Get<LuaFunction>("MyName");
Debug.Log(a);
Debug.Log(b);
Debug.Log(c);
MyName.Call();

XLua热更新框架学习(一)_lua_04

四:lua调用c#

1.Lua调用c#需要在c#的命名空间之前加前缀:“CS.”

2.CS.UnityEngine.GameObject 获取c#中的类

CS.UnityEngine.Debug.Log 获取c#中的方法

CS.UnityEngine.GameObject.Find 获取c#中的方法

3.演示

lua代码:

local GameObject = CS.UnityEngine.GameObject
local Debug = CS.UnityEngine.Debug

local go = GameObject('Hsj_LUa')
Debug.Log(go.name)
local myCamera = GameObject.Find('Main Camera')
Debug.Log(myCamera.name)

XLua热更新框架学习(一)_开发版_05


欢迎加入Unity业内qq交流群:956187480


上一篇: 租用美国服务器:潜在的风险与应对策略。 下一篇: MongoDB 5.0 扩展开源文档数据库操作