当前位置: 首页 > 工具软件 > Puerts > 使用案例 >

为什么使用 puerts 及 puerts 在项目中的使用、TS理解

卢书
2023-12-01

一、首先要知道什么是puerts?

puerts提供了通过TypeScript访问宿主引擎的能力(如通过ts语言可以获取到gameobject身上的组件),相比于lua脚本,typeScript的静态类型检查有助于更好地去编写代码。高效(全引擎,全平台支持反射binding,无需额外生成代码)、高性能(全引擎,全平台支持静态binding)

1、关于puerts里的c#标签介绍:
  1. Configure:配置类,只能用于类上,且在Editor文件夹下;
  2. Binding:在 js/ts 调用的时候,可以找到该类(会生成一个静态类,在js调用时,直接静态调用,加快调用速度,否则是通过反射调用)(在index.d.ts中生成函数的声明,在ts调用时,import时可以找到)。该标签只能用在属性,并且需要放在标记了Configure的类里;
  3. Typeing:仅针对TS调用,相比于Binding,该标签仅生成ts声明(即不会生成静态类,只会在index.d.ts中生成函数的声明给ts调用)。该标签仅用于属性上,并且在标记了Configure的类里。
  4. BlittableCopy:对Blittable值类型通过内存拷贝传递,可避免值类型传递产生的GC,需要开启unsafe编译选项。该标签仅用于属性上,并且在标记了Configure的类里。
  5. Filter:过滤函数。该标签只能用在函数上,并且在标记了Configure的类里。
2、关于puerts的4大突破点:

带静态类型检查的脚本;拷贝即可使用,无需生成胶水代码(使不兼容程序或部分组合起来);基于指针的Blittable结构体GC优化;跨语言异步(TypeScript的async方法可以await C#的async方法)

二、puerts在项目中有什么好处?具体使用是什么?

1、关于puerts在项目中的好处:

Unity+Puerts实现JsBehaviour,主要是通过JsBehaviour实现对GameObject和组件的引用以及提供可编辑的参数,实现资源和代码更好的解耦。

2、个人的具体使用过程:

我在写JsBehaviour中,通过深度遍历获得子结点,比较子结点和我定义好的前缀信息(将配置文件移动到Editor/Puerts文件夹下,通过配置字段来支持跨DLL使用)相比较,相同的则收集该结点信息。通过正则表达式将这些收集到的组件规范化书写在TS文件里,如果无文件,则要先生成TS文件(分为Mono.ts和Ctrl.ts)。利用cmd命令行,在unity中点击按钮会传入Ts文件的地址,直接在vscode中打开,提高开发效率。
补充说明:配置文件此处是以字典的形式写入数据,通过打在类和属性上的标签(标签可以自定义),做到可以在dll域中找到这些数据,返回回去(找数据的功能可以封装成一个方法,这个类可以不在Editor文件夹下,但配置文件需要在Assets/App/Editor文件夹下)。此外Mono.ts作页面显示处理,Ctrl.ts作数据处理,l实现数据和显示分离。

三、V8(c++开发)和QuickJS(基于C实现) 同 node.js(基于Chrome V8引擎的JavaScript运行环境)一样吗?

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的个人理解:

1、有两个特点

① 强类型语言
② 基于类的面向对象编程

2、有两个好处

① 支持静态类型检查
② 有良好的生态:包括工具链,库,文档

3、个人理解总结

TS最好的地方就是它即是动态语言,却也能带来静态语言的使用体验,出现错误能够尽早发现。

4、相关说明

动态语言:是运行时才确定数据类型的语言,变量在使用之前无需申明类型,通常变量的值是被赋值的那个值的类型。如JavaScript

var s = "string";
var n = "number";
var b = "boolean" 

静态语言:是编译时变量的数据类型就可以确定的语言,大多数静态语言要求在使用变量之前必须声明数据类型。如C#

String s = "string";
int n = "int";
boolean b = "boolean";

弱类型语言:数据类型可以被忽略的语言。一个变量可以赋不同数据类型的值。一个变量的类型是由其上下文决定的,效率更高。

强类型语言:必须强制确定数据类型的语言,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这种数据类型,不允许隐式的类型转换。一个变量的类型是申明的时候就已经确定的,更安全。

 类似资料: