Unity3D学习之Lua热更新解决方案(二)XLua

本文详细介绍了如何在Unity中使用XLua进行C#与Lua的交互,包括Lua解析器的管理、全局变量和函数调用、C#类和枚举的映射、数组与数据结构处理、C#特殊函数如ref和out,以及C#协程和泛型函数的应用。
摘要由CSDN通过智能技术生成


1 XLua概述

在这里插入图片描述

在资源服务器下载

在这里插入图片描述
下载完成后放入游戏客户端
在这里插入图片描述

2 xLua导入和AB包相关准备

Github 搜索 Xlua
在这里插入图片描述
在这里插入图片描述
拖入到unity项目中
在这里插入图片描述
导入AB包
在这里插入图片描述

3 C#调用Lua

3.1 Lua解析器

在这里插入图片描述

Require会自动调用resources文件夹的内容,但由于unity不能读取.lua后缀的文件
所以使用.txt的后缀
在这里插入图片描述
会在resources文件夹里被自动识别为
在这里插入图片描述

3.2 文件加载重定向

创建一个Lua文件夹,在里面放入后缀为.lua的文件
在这里插入图片描述

在这里插入图片描述
addLoader相当于加一个委托
在这里插入图片描述

在这里插入图片描述

3.3 Lua解析器管理器

在这里插入图片描述
添加函数进行调用XLua
初始化LuaEnv,加载Lua脚本重定向

在这里插入图片描述

在这里插入图片描述

3.3.1 重定向AB包内的Lua

AB包.lua不能识别,所以要把.lua改成txt
准备一个Lua包
在这里插入图片描述
创建加载指定ab包的函数

在init中新加委托
在这里插入图片描述
在这里插入图片描述
优化流程,和博客(一)中的ab包管理器联动
lua只能同步加载,不能异步加载

在这里插入图片描述
优化方法,让执行lua语句不需要加上require

在这里插入图片描述

3.3.2 获得_G大表

在这里插入图片描述

3.4 全局变量的获取

启动脚本Main,在Main中调用其他脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
通过c#无法获取本地变量

在这里插入图片描述

3.5 全局函数的获取

在这里插入图片描述

在这里插入图片描述

3.5.1 无参无返回

在这里插入图片描述

在这里插入图片描述

3.5.2 有参有返回

如果是自定义委托
在这里插入图片描述
需要生成脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他委托

在这里插入图片描述

3.5.3 多返回值

用out接
在这里插入图片描述

会返回第一个值,剩下的值使用 out接

在这里插入图片描述

在这里插入图片描述
用ref接
在这里插入图片描述
在这里插入图片描述

3.5.4 变长参数

在这里插入图片描述
在这里插入图片描述

3.6 List和Dictionary映射table

在这里插入图片描述

3.6.1 同一类型List

在这里插入图片描述

在这里插入图片描述

3.6.2 不指定类型List

在这里插入图片描述
在这里插入图片描述

3.6.3 指定类型的Dic

在这里插入图片描述

3.6.4 不指定类型的Dic

在这里插入图片描述

3.7 类映射table

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.7.1 类中的类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.8 接口映射table

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果用接口来接Get的内容,需要使用
在这里插入图片描述
然后编译
接口是引用拷贝

嵌套和类一样

3.9 LuaTable映射table

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 Lua使用C#类

4.1 在Main函数中调用Lua脚本

Lua没办法直接访问C# 一定从C# 调用Lua脚本后才把逻辑给Lua编写
在这里插入图片描述

4.2 调用类

4.2.1 调用C#类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 自定义类

在这里插入图片描述
在这里插入图片描述

4.4 继承了MONO的类

在这里插入图片描述
在这里插入图片描述

5 Lua使用C#枚举

5.1 自带枚举

在这里插入图片描述

5.2 自定义枚举

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 Lua使用C#数组、list、Dictionary

6.1 数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2 List

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3 Dictionary

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

6.4 Lua使用C#拓展方法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
建议在Lua中要使用的类都加上该特性 可以提升性能

7 Lua使用C# ref和out函数

7.1 Ref

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Ref函数不传完,默认补充为0

7.2 Out

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.3 ref和out

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8 Lua使用C#重载函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9 Lua使用C#委托和事件

9.1 委托

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.2 事件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10 Lua使用C#二维数组

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

11 Lua使用C#的null和nil比较

在这里插入图片描述
可以自己写一个公共方法
在这里插入图片描述
还可以在C# 中加扩展方法

在这里插入图片描述

在这里插入图片描述

12 Lua和系统类及委托相互使用

无法为系统类或者第三方库代码加上[CsharpCallLua] 和 [LuaCallCsharp]
在这里插入图片描述
会报错
会提示需要给委托加特性 [LuaCallCsharp]
在这里插入图片描述
然后生成xlua的代码
在这里插入图片描述
[LuaCallCSharp]也是一样的
在这里插入图片描述

13 Lua使用C#协程

在这里插入图片描述
调用 xlua.util 把Lua函数转成Coroutine
在这里插入图片描述
关闭线程
在这里插入图片描述

14 Lua使用C#泛型函数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 29
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值