腾讯开源插件Puerts,用Typescript编写Unity3D脚本
puerts是游戏引擎下的TypeScript编程解决方案
- 提供了一个JavaScript运行时
- 提供通过TypeScript访问宿主引擎的能力(JavaScript层面的绑定以及TypeScript声明生成)
最近在学U3D,偶然发现腾讯开源了个插件,支持用TS写U3D脚本,666。 于是看了下github说明,想看看怎么用,结果发现好像没什么指引教程。
官方给了Demopuerts_unity_demo,可以直接用官方的Demo来初始化项目;如果是从unity hub 直接创建的化,官方文档好像没有这部分的指引;于是我结合了Unity TypeScript 脚本解决方案 Puerts 实例解析快速上手这UP主的视频,终于是跑成功了。 接下来就记录一下吧~
第一步:Puerts/releases
下载发行版的puerts unity版 PuerTS_V8
然后解压
第二步:创建一个Unity工程
将刚才解压的Puerts文件夹拉到工程的Assets目录下
PS: 有报warning不用管,完成后面的操作,就不会报了。
第三步:生成TS声明文件
生成TS声明文件,需要配置Puerts,如果没有配置,生成出来的TS声明文件基本上没有类型提示的。 官方已经提供了一份比较全的Puerts配置文件
首先,将官方提供的PuertsConfig.cs文件下载下来;
然后,在工程的Assets目录下创建Editor
文件夹,将下载的PuertsConfig.cs
文件复制到Editor
目录下。
再然后,点击Unity工具栏的PuerTS
选项,选择Generate Code
等待生成完成,Console的warning就会消失,工程的Assets目录下会生成Gen文件夹,里面存放了UnityC#桥接到TS的各种类/方法/类型声明。
第四步:创建TS工程
在Assets目录下创建TsProject
(名字可以任取);进入TsProject
,在命令行中执行npm init -y
先初始化初始化package.json(要安装node.js,前端开发应该不陌生);
然后再执行npm i typescript -D
,安装TS依赖
在TsProject
目录下创建tsconfig.json
文件
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"sourceMap": true,
"noImplicitAny": true,
"typeRoots": [
"../Puerts/Typing",
"../Gen/Typing",
"./node_modules/@types"
],
"outDir": "output"
}
}
再然后:下载官方Demo的copyJsFile.js到TsProject
目录下。
在package.json
文件夹中,编写执行脚本命令
{
"scripts": {
"build": "tsc -p tsconfig.json",
"postbuild": "node copyJsFile.js output ../Resources"
}
}
第五步: 编写TS脚本和CS中加载TS文件
在TsProject
目录下创建一个TS文件
// Player.ts
import {UnityEngine, System} from "csharp";
UnityEngine.Debug.Log("hello world ts");
然后在Assets
目录下创建一个Resources
文件夹,用于存放CS加载的TS文本文件。
然后在TsProject路径下执行 npm run build
编译完成之后,Resources
目录下会出现对应的文本文件
再然后,在Assets
目录下创建一个CS脚本文件,我这里是将CS放在了Scripts
目录下:
在CS中引入Puerts库, 声明jsEnv变量,实例化一个JsEnv,并引入生成的Player.js.txt,Eval会执行该txt的代码。
然后在Unity将CS拖到对应的Object上, playgame,
这样就可以愉快地在Unity使用TS啦~
PS: 目前发现个小问题,在TS中,获取游戏物体的component,当我获取物体的刚体组件,返回的值类型是Component而非Rigidbody,这会导致返回的值无法调用Rigidbody的属性/方法。只需要对返回的值指定Rigidbody类型即可。(不知道是我不会用,还是确实是index.d.ts定义缺失)
菜鸟,请多指教,如有不对,请在评论区指出,谢谢~
转载自:https://juejin.cn/post/7131753546994679844