puerts提供了通过TypeScript访问宿主引擎的能力(如通过ts语言可以获取到gameobject身上的组件),相比于lua脚本,typeScript的静态类型检查有助于更好地去编写代码。高效(全引擎,全平台支持反射binding,无需额外生成代码)、高性能(全引擎,全平台支持静态binding)
带静态类型检查的脚本;拷贝即可使用,无需生成胶水代码(使不兼容程序或部分组合起来);基于指针的Blittable结构体GC优化;跨语言异步(TypeScript的async方法可以await C#的async方法)
Unity+Puerts实现JsBehaviour,主要是通过JsBehaviour实现对GameObject和组件的引用以及提供可编辑的参数,实现资源和代码更好的解耦。
我在写JsBehaviour中,通过深度遍历获得子结点,比较子结点和我定义好的前缀信息(将配置文件移动到Editor/Puerts文件夹下,通过配置字段来支持跨DLL使用)相比较,相同的则收集该结点信息。通过正则表达式将这些收集到的组件规范化书写在TS文件里,如果无文件,则要先生成TS文件(分为Mono.ts和Ctrl.ts)。利用cmd命令行,在unity中点击按钮会传入Ts文件的地址,直接在vscode中打开,提高开发效率。
补充说明:配置文件此处是以字典的形式写入数据,通过打在类和属性上的标签(标签可以自定义),做到可以在dll域中找到这些数据,返回回去(找数据的功能可以封装成一个方法,这个类可以不在Editor文件夹下,但配置文件需要在Assets/App/Editor文件夹下)。此外Mono.ts作页面显示处理,Ctrl.ts作数据处理,l实现数据和显示分离。
1、V8: 稳定性是最主要的因素,程序稳定了,才能考虑其它的,v8已经在chrome浏览器各平台经过了无数人的蹂躏和无数时间的考验。况且它的性能也十分优秀。
2、quickjs:除了体积小并没有太多特别的地方。
3、node.js:是js的运行环境,V8是node.js内的JavaScript引擎,用于解析和运行JavaScript。如果没有V8,当前的node.js二进制文件将无法进行运行,因为没有JavaScript引擎也就没有能力运行JavaScript代码,node.js也可以理解为浏览器的作用,Chrome内部使用了V8,所以可以在浏览器中运行JavaScript。
① 强类型语言
② 基于类的面向对象编程
① 支持静态类型检查
② 有良好的生态:包括工具链,库,文档
TS最好的地方就是它即是动态语言,却也能带来静态语言的使用体验,出现错误能够尽早发现。
动态语言:是运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型。如JavaScript
var s = "string";
var n = "number";
var b = "boolean"
静态语言:是编译时变量的数据类型就可以确定的语言,大多数静态语言要求在使用变量之前必须声明数据类型。如C#
String s = "string";
int n = "int";
boolean b = "boolean";
弱类型语言:数据类型可以被忽略的语言。一个变量可以赋不同数据类型的值。一个变量的类型是由其上下文决定的,效率更高。
强类型语言:必须强制确定数据类型的语言,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这种数据类型,不允许隐式的类型转换。一个变量的类型是申明的时候就已经确定的,更安全。