找回密码
 立即注册
查看: 187|回复: 0

【XLua】简单使用

[复制链接]
发表于 2023-1-13 08:28 | 显示全部楼层 |阅读模式
文章目录

    前言1 配置
      1.1 配置宏1.2 XLua配置
    2 lua和C#相互调用
      2.1 XLua.CSharpCallLua2.2 XLua.LuaCallCSharp
    3 加载器



前言

XLua本质上是为Unity提供了使用lua的能力,实际多用于热更新。
热更新,因为要给代码打标签才能生效,所以需要预测修改的部分,如果恰好需要修改的代码没有打上,就只能大版本更新了。
笔者使用环境:
    Unity 2021.3.8vs2022XLua 2.1.15


1 配置

1.1 配置宏

参考热补丁操作指南
unity2021修改了位置,我找了半天
Edit -> Project settings… -> Player -> Other Settings -> Scrpiting Define Symbols



1.2 XLua配置

参考Xlua配置
文章里的二级标题都是特性,比如文章中倒数第二个标题CSObjectWrapEditor.GenPath对应特性[CSObjectWrapEditor.GenPath],它用于修改XLua生成代码的目录,必须在Editor程序集里使用。
官方建议使用列表方式打标签,并且在Editor程序集里的静态类实现,下面举例给命名空间XluaExample下的所有类打[Hotfix]标签。
顺便记录一下,在lua中调用有命名空间的类:CS.XluaExample.Test
  1. namespaceXluaExample{publicstaticclassXluaConfig{[CSObjectWrapEditor.GenPath]publicstaticstring genPath = Application.dataPath +@"/Projects/XluaExample/XLua/Gen";// 需要热更新的类[Hotfix]publicstaticList<Type> by_property
  2.         {get{var t =(from type in Assembly.Load("Assembly-CSharp").GetTypes()wheretype.Namespace =="XluaExample"select type).ToList();return t;}}}}
复制代码
2 lua和C#相互调用

参考XLua教程
参考Tutorial(不同于Example)
没打标签就使用反射调用。
2.1 XLua.CSharpCallLua

一般用在委托和接口上,委托获取lua方法,接口获取类。
2.2 XLua.LuaCallCSharp

一般用于类(包括内部类、枚举类)、类方法。
3 加载器

参考XLua教程
参考LoadLuaScript
在xLua加自定义loader是很简单的,只涉及到一个接口:
  1. publicdelegatebyte[]CustomLoader(refstring filepath);publicvoid LuaEnv.AddLoader(CustomLoader loader);
复制代码
代码参考
  1. namespaceXLuaExample{publicclassXLuaExample:MonoBehaviour{publicstaticXLuaExample Instance;publicLuaEnv luaEnv =newLuaEnv();privatevoidAwake(){
  2.            luaEnv.AddLoader(MyLoader);
  3.            luaEnv.DoString("require'luamain'");
  4.            Instance =this;
  5.            Debug.Log(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase);}staticbyte[]MyLoader(refstring filePath){string path = Application.streamingAssetsPath +@"\Lua" + filePath + ".lua.txt";return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));}}}
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 12:02 , Processed in 0.088931 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表