2024-08-23 15:49:34 +08:00
|
|
|
|
# 特性
|
|
|
|
|
|
|
|
|
|
## 总体
|
|
|
|
|
|
|
|
|
|
* Lua虚拟机支持
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* Lua5.3
|
|
|
|
|
* Luajit2.1
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* Unity3D版本支持
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 各版本均支持
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 平台支持
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* windows 64/32
|
|
|
|
|
* android
|
|
|
|
|
* ios 64/32/bitcode
|
|
|
|
|
* osx
|
|
|
|
|
* uwp
|
|
|
|
|
* webgl
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 互访技术
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 生成适配代码
|
|
|
|
|
* 反射
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 易用性
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 解压即可用
|
|
|
|
|
* 开发期无需生成代码
|
|
|
|
|
* 生成代码和反射间可无缝切换
|
|
|
|
|
* 更简单的无GC api
|
|
|
|
|
* 菜单简单易懂
|
|
|
|
|
* 配置可以多份,按模块划分,也可以直接在目标类型上打Attribute标签
|
|
|
|
|
* 自动生成link.xml防止代码剪裁
|
|
|
|
|
* Plugins部分采用cmake编译,更简单
|
|
|
|
|
* 核心代码不依赖生成代码,可以随时删除生成目录
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 性能
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* Lazyload技术,避免用不上的类型的开销
|
|
|
|
|
* lua函数映射到c# delegate,lua table映射到interface,可实现接口层面无C# gc alloc开销
|
|
|
|
|
* 所有基本值类型,所有枚举,字段都是值类型的struct,在Lua和C#间传递无C# gc alloc
|
|
|
|
|
* LuaTable,LuaFunction提供无gc访问接口
|
|
|
|
|
* 通过代码生成期的静态分析,生成最优代码
|
|
|
|
|
* 支持C#和Lua间指针传递
|
|
|
|
|
* 自动解除已经Destroy的UnityEngine.Object的引用
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 扩展性
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 不用改代码就可以加入Lua第三方扩展
|
|
|
|
|
* 生成引擎提供接口做二次开发
|
2024-08-23 15:49:34 +08:00
|
|
|
|
|
|
|
|
|
## 支持为如下C#实现打补丁
|
|
|
|
|
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 构造函数
|
|
|
|
|
* 析构函数
|
|
|
|
|
* 成员函数
|
|
|
|
|
* 静态函数
|
|
|
|
|
* 泛化函数
|
|
|
|
|
* 操作符重载
|
|
|
|
|
* 成员属性
|
|
|
|
|
* 静态属性
|
|
|
|
|
* 事件
|
|
|
|
|
|
2024-08-23 15:49:34 +08:00
|
|
|
|
## Lua代码加载
|
|
|
|
|
|
|
|
|
|
* 加载字符串
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 支持加载后立即执行
|
|
|
|
|
* 支持加载后返回一个delegate或者LuaFunction,调用delegate或者LuaFunction后可传脚本参数
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* Resources目录的文件
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 直接require
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 自定义loader
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* Lua里头require时触发
|
|
|
|
|
* require参数透传给loader,loader读取Lua代码返回
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* Lua原有的方式
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* Lua原有的方式都保留
|
|
|
|
|
|
2024-08-23 15:49:34 +08:00
|
|
|
|
## Lua调用C#
|
|
|
|
|
|
|
|
|
|
* 创建C#对象
|
|
|
|
|
* C#静态属性,字段
|
|
|
|
|
* C#静态方法
|
|
|
|
|
* C#成员属性,字段
|
|
|
|
|
* C#成员方法
|
|
|
|
|
* C#继承
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 子类对象可以直接调用父类的方法,访问父类属性
|
|
|
|
|
* 子类模块可以直接调用父类的静态方法,静态属性
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 扩展方法(Extension methods)
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 就像普通成员方法一样使用
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 参数的输入输出属性(out,ref)
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* out对应一个lua返回值
|
|
|
|
|
* ref对应一个lua参数以及一个lua返回值
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 函数重载
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 支持重载
|
|
|
|
|
* 由于lua数据类型远比C#要少,会出现无法判断的情况,可通过扩展方法来来调用。
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 操作符重载
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 支持的操作符:+,-,*,/,==,一元-,<,<=, %,[]
|
|
|
|
|
* 其它操作符可以借助扩展方法调用
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 参数默认值
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* C#参数有默认值,在lua可以不传
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 可变参数
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 在对应可变参数部分,直接输入一个个参数即可,不需要把这些参数扩到一个数组里头
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 泛化方法调用
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 静态方法可以自行封装使用
|
|
|
|
|
* 成员函数可通过扩展方法封装使用
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 枚举类型
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 数字或字符串到枚举的转换
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* delegate
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 调用一个C# delegate
|
|
|
|
|
* +操作符
|
|
|
|
|
* -操作符
|
|
|
|
|
* 把一个lua函数作为一个c# delegate传递给c#
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* event
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 增加事件回调
|
|
|
|
|
* 移除事件回调
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 64位整数
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 传递无gc而且无精度损失
|
|
|
|
|
* lua53下使用原生64位支持
|
|
|
|
|
* 可以和number运算
|
|
|
|
|
* 以java的方式支持无符号64位整数
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* table的自动转换到C#复杂类型
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* obj.complexField = {a = 1, b = {c = 1}},obj是一个C#对象,complexField是两层嵌套的struct或者class
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* typeof
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 对应C#的typeof操作符,返回Type对象
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* lua侧直接clone
|
|
|
|
|
* decimal
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 传递无gc而且无精度损失
|
2024-08-23 15:49:34 +08:00
|
|
|
|
|
|
|
|
|
## C#调用Lua
|
|
|
|
|
|
|
|
|
|
* 调用Lua函数
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 以delegate方式调用Lua函数
|
|
|
|
|
* 以LuaFunction调用lua函数
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 访问Lua的table
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* LuaTable的泛化Get/Set接口,调用无gc,可指明Key,Value的类型
|
|
|
|
|
* 用标注了CSharpCallLua的interface访问
|
|
|
|
|
* 值拷贝到struct,class
|
2024-08-23 15:49:34 +08:00
|
|
|
|
|
|
|
|
|
## Lua虚拟机
|
|
|
|
|
|
|
|
|
|
* 虚拟机gc参数读取及设置
|
|
|
|
|
|
|
|
|
|
## 工具链
|
|
|
|
|
|
|
|
|
|
* Lua Profiler
|
2024-09-04 02:07:48 +08:00
|
|
|
|
* 可根据函数调用总时长,平均每次调用时长,调用次数排序
|
|
|
|
|
* 显示lua函数名及其所在文件的名字及行号
|
|
|
|
|
* 如果C#函数,会显示这个是C#函数
|
2024-08-23 15:49:34 +08:00
|
|
|
|
* 支持真机调试
|
|
|
|
|
|