Unity游戏引擎, C#原生丶puerts脚本丶xLua脚本性能测试与横向对比
使用node命令行, 快速安装指定版本的puerts到指定目录:
node ./.script/get-puerts.mjs --version 1.4.0-rc.2 --path package
使用node命令行, 快速启动测试:
node ./.script/run-test-cli.mjs --unity `unity editor install absolute path` --pkg package
//例:
node ./.script/run-test-cli.mjs --unity /****/_UNITY_/2020.3.34f1c2/Unity.app/Contents/MacOS/Unity --pkg package
node ./.script/run-test-cli.mjs --unity D:/****/Unity/2020.3.34f1c2/Editor/Unity.exe --pkg package
- 基础
- 反射调用-Editor
- 反射调用-Windows
- 反射调用-Androd
- 静态代码调用-Editor
- 静态代码调用-Windows
- 静态代码调用-Android
- IL2CPP调用-Windows
- IL2CPP调用-Android
- 附加
- ValueType BlittableCopy unsafe编译
- 软件版本
- Unity: 2019.4.28f1c1
- puerts: v1.2.4_version_15
- xLua: v2.1.16_newest_luajit
-
脚本调用CSharp
-
CSharp调用脚本
- Example101: 无参无返回值
- Example103: 1个参数无返回值
- Example104: 3个参数无返回值
- Example105: 3个参数求和返回
- Example106: 无参内部求和返回
- Example107: Transform.Rotate
- Example108: Transform.Rotate传参xyz
- Example109: Transform.Rotate传参Vector3
- xLua性能优于puerts,据作者@John所言,Unity与C++(puerts)相互调用比较与C(xLua)相互调用要慢
- 使用puerts应尽量避免跨语言调用
PS:使用任何脚本框架都应该尽量避免跨语言调用
- puerts没有脚本fix功能: 推荐使用 InjectFix + puerts 混合开发
puerts | xLua | |
---|---|---|
开发语言 | typescript丶javascript | lua丶haxe(不推荐) |
跨语言效率 | 低 | 高 |
IDE支持 | vscode 丶rider | EmmyLua丶LuaPanda丶LuaPerfect |
代码提示 | 完整类型定义 | 局部类型推断+手动注释 |
代码规范 | eslint丶tslint等 | 人工review |
第三方库 | 得益于浏览器丶nodejs的普及, npm上拥有大量可用es库 | 自行编译丶扩展(有限支持) |