features.md 4.1 KB
Newer Older
J
johnche(车雄生) 已提交
1
# 特性
J
johnche(车雄生) 已提交
2

J
johnche(车雄生) 已提交
3
## 总体
J
johnche(车雄生) 已提交
4

J
johnche(车雄生) 已提交
5
* Lua虚拟机支持
J
johnche(车雄生) 已提交
6 7
 * Lua5.3
 * Luajit2.1
J
johnche(车雄生) 已提交
8
* Unity3D版本支持
J
johnche(车雄生) 已提交
9
 * 各版本均支持
J
johnche(车雄生) 已提交
10
* 平台支持
J
johnche(车雄生) 已提交
11 12 13 14
 * windows 64/32
 * android
 * ios 64/32/bitcode
 * osx
J
johnche(车雄生) 已提交
15 16
 * uwp
 * webgl
J
johnche(车雄生) 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
* 互访技术
 * 生成适配代码
 * 反射
* 易用性
 * 解压即可用
 * 开发期无需生成代码
 * 生成代码和反射间可无缝切换
 * 更简单的无GC api
 * 菜单简单易懂
 * 配置可以多份,按模块划分,也可以直接在目标类型上打Attribute标签
 * 自动生成link.xml防止代码剪裁
 * Plugins部分采用cmake编译,更简单
 * 核心代码不依赖生成代码,可以随时删除生成目录
* 性能
 * Lazyload技术,避免用不上的类型的开销
 * lua函数映射到c# delegate,lua table映射到interface,可实现接口层面无C# gc alloc开销
 * 所有基本值类型,所有枚举,字段都是值类型的struct,在Lua和C#间传递无C# gc alloc
 * LuaTable,LuaFunction提供无gc访问接口
 * 通过代码生成期的静态分析,生成最优代码
 * 支持C#和Lua间指针传递
 * 自动解除已经Destroy的UnityEngine.Object的引用
* 扩展性
 * 不用改代码就可以加入Lua第三方扩展
 * 生成引擎提供接口做二次开发
J
johnche(车雄生) 已提交
41
 
J
johnche(车雄生) 已提交
42
## 支持为如下C#实现打补丁
J
johnche(车雄生) 已提交
43

J
johnche(车雄生) 已提交
44 45 46 47
 * 构造函数
 * 析构函数
 * 成员函数
 * 静态函数
48
 * 泛化函数
J
johnche(车雄生) 已提交
49 50 51 52
 * 操作符重载
 * 成员属性
 * 静态属性
 * 事件
J
johnche(车雄生) 已提交
53
 
J
johnche(车雄生) 已提交
54
## Lua代码加载
J
johnche(车雄生) 已提交
55

J
johnche(车雄生) 已提交
56 57 58 59 60 61 62 63 64 65
* 加载字符串
 * 支持加载后立即执行
 * 支持加载后返回一个delegate或者LuaFunction,调用delegate或者LuaFunction后可传脚本参数
* Resources目录的文件
 * 直接require
* 自定义loader
 * Lua里头require时触发
 * require参数透传给loader,loader读取Lua代码返回
* Lua原有的方式
 * Lua原有的方式都保留
J
johnche(车雄生) 已提交
66
 
J
johnche(车雄生) 已提交
67
## Lua调用C#
J
johnche(车雄生) 已提交
68

J
johnche(车雄生) 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
* 创建C#对象
* C#静态属性,字段
* C#静态方法
* C#成员属性,字段
* C#成员方法
* C#继承
 * 子类对象可以直接调用父类的方法,访问父类属性
 * 子类模块可以直接调用父类的静态方法,静态属性
* 扩展方法(Extension methods)
 * 就像普通成员方法一样使用
* 参数的输入输出属性(out,ref)
 * out对应一个lua返回值
 * ref对应一个lua参数以及一个lua返回值
* 函数重载
 * 支持重载
 * 由于lua数据类型远比C#要少,会出现无法判断的情况,可通过扩展方法来来调用。
* 操作符重载
 * 支持的操作符:+,-,*,/,==,一元-,<,<=, %,[]
 * 其它操作符可以借助扩展方法调用
* 参数默认值
 * C#参数有默认值,在lua可以不传
* 可变参数
 * 在对应可变参数部分,直接输入一个个参数即可,不需要把这些参数扩到一个数组里头
* 泛化方法调用
 * 静态方法可以自行封装使用
 * 成员函数可通过扩展方法封装使用
* 枚举类型
 * 数字或字符串到枚举的转换
J
johnche(车雄生) 已提交
97
* delegate
J
johnche(车雄生) 已提交
98 99 100 101
 * 调用一个C# delegate
 * +操作符
 * -操作符
 * 把一个lua函数作为一个c# delegate传递给c#
J
johnche(车雄生) 已提交
102
* event
J
johnche(车雄生) 已提交
103 104 105 106 107 108 109 110 111
 * 增加事件回调
 * 移除事件回调
* 64位整数
 * 传递无gc而且无精度损失
 * lua53下使用原生64位支持
 * 可以和number运算
 * 以java的方式支持无符号64位整数
* table的自动转换到C#复杂类型
 * obj.complexField = {a = 1, b = {c = 1}},obj是一个C#对象,complexField是两层嵌套的struct或者class
J
johnche(车雄生) 已提交
112
* typeof
J
johnche(车雄生) 已提交
113 114
 * 对应C#的typeof操作符,返回Type对象
* lua侧直接clone
J
johnche(车雄生) 已提交
115
* decimal
J
johnche(车雄生) 已提交
116
 * 传递无gc而且无精度损失
J
johnche(车雄生) 已提交
117

J
johnche(车雄生) 已提交
118
## C#调用Lua
J
johnche(车雄生) 已提交
119

J
johnche(车雄生) 已提交
120 121 122 123 124 125 126
* 调用Lua函数
 * 以delegate方式调用Lua函数
 * 以LuaFunction调用lua函数
* 访问Lua的table
 * LuaTable的泛化Get/Set接口,调用无gc,可指明Key,Value的类型
 * 用标注了CSharpCallLua的interface访问
 * 值拷贝到struct,class
J
johnche(车雄生) 已提交
127
 
J
johnche(车雄生) 已提交
128
## Lua虚拟机
J
johnche(车雄生) 已提交
129

J
johnche(车雄生) 已提交
130
* 虚拟机gc参数读取及设置
J
johnche(车雄生) 已提交
131

J
johnche(车雄生) 已提交
132
## 工具链
J
johnche(车雄生) 已提交
133 134

* Lua Profiler
J
johnche(车雄生) 已提交
135 136 137 138
 * 可根据函数调用总时长,平均每次调用时长,调用次数排序
 * 显示lua函数名及其所在文件的名字及行号
 * 如果C#函数,会显示这个是C#函数
* 支持真机调试
J
johnche(车雄生) 已提交
139