Puerts for Unity 基本接入
关于 Puerts
Puerts 是腾讯开源的一套游戏引擎(Unity、Unreal)下能使用 TypeScript(将简称为 Ts) 编程解决方案。
其作者 @chexiongsheng 大名鼎鼎, 普遍应用在国内网游中的 xLua 也出自他手。
为什么要使用 Puerts?
- 基于 Ts 的类型系统
- 增强代码的可读性和可维护性
- 类型即最好的文档
- 编译阶段即发现大部分错误
- 增强的 IDE 功能,包括:代码补全、接口提示、跳转定义、重构...
- 活跃的社区
- 增强代码的可读性和可维护性
- 继承脚本语言的所有优点
- 轻量级的开发环境
- 可热更
- 拥有完善的生态链
- JavaScrtip 整个生态链的工具和库都可以拿来即用
- npm、vscode、wasm、Chrome DevTools...
- JavaScrtip 整个生态链的工具和库都可以拿来即用
- 高效的运行环境(V8)
- JIT、JIT-less
- 轻巧的运行环境 (QuickJS)
- 坚实的爸爸们
- Google、Microsoft
如何接入?
由于是入门教程,这里会尽可能描述得详细些。这里将从创建一个空的 Unity 工程开始。
- 创建一个新的 Unity 工程
- Unity Hub -> 新建 -> 3D
- 填写好
项目名称
、及工程保存位置
-> 创建
- 将 Puerts 添加到项目中(撰写本文时最新的Puerts版本为 v1.0.12)
- 从 Releases 页面下载对应版本的 Puerts ,并解压
-
Plugins_V8_verx.tgz
,编译好的 V8 文件(自己编译很麻烦) -
Sources_code(zip)
,Puerts 源码。下载的版本一定要对应,不要窜版本
-
- 添加 Puerts 到项目中
- 拷贝源码
puerts-x.x.x.zip
解压出来的unity/Assets/Puerts/
目录到项目/Assets/
目录下
- 拷贝源码
- 添加 V8 到项目中
- 拷贝
Plugins_V8_verx.tgz
解压出来的Plugins/
目录到项目/Assets/
目录下
- 拷贝
- 从 Releases 页面下载对应版本的 Puerts ,并解压
- 接入 Puerts
- 切换到 Unity 编辑器 -> Hierarchy -> 右键 -> Create Empty,创建一个
Main
名称的空节点 - 在项目 Assets 目录下创建
Cs
目录用来存放 CSharp 文件 - 在
Cs
目录下创建一个Main.cs
文件,并拖放挂载到 Hierarchy 的 Main 节点上,并保存场景 -
Main.cs
代码内容如下:
- 切换到 Unity 编辑器 -> Hierarchy -> 右键 -> Create Empty,创建一个
/**
* Assets/Cs/Main.cs 文件内容
*/
using UnityEngine;
using Puerts; // 引用 Puerts
public class Init : MonoBehaviour{
public JsEnv jsEnv; // 定义 jsEnv
void Start(){
jsEnv = new JsEnv(); // 实例化 js 虚拟机
// 使用虚拟机运行 js 脚本
jsEnv.Eval(@"
const CS = require('csharp');
let gameObject = new CS.UnityEngine.GameObject('test');
CS.UnityEngine.Debug.Log(gameObject.name);
");
}
void Update(){
}
}
至此,基本接入就算完成了。运行游戏,将能看到场景中有通过 JavaScript
脚本创建的 test
GameObject,控制台输出了其名称 test
字样。
最终项目结构目录大至如下:
# 现在项目目录结构大至如下:
├── Assets
│ ├── Cs
│ │ └── Main.cs # 入口脚本文件
│ ├── Gen
│ ├── Plugins # V8 扩展目录
│ ├── Puerts # Puerts 目录
│ └── Scenes
│ └── Main.unity # 入口场景
├── Library
├── Packages
├── ProjectSettings
└── puerts.sln
提示:在 Mac 系统中,首次运行游戏可能会提示: "puerts.bundle" 已损坏...
参考以下步骤解决:
# 切换到项目/Assets/Plugins
cd Assets/Plugins/
# 移除 puerts.bundle 的安全隔离属性
sudo xattr -r -d com.apple.quarantine puerts.bundle
扩展阅读
什么是 V8?
V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写。在 Chrome 浏览器、Node.js中都是使用的 V8 引擎。
Ts 与 Lua对比
Ts 会被编译为 Js 运行,所以确切地说。在运行时即是拿 Js 对比 Lua。
性能
得益于 V8 的运行时,两者的运行效率基本可以忽略不计。
体积
打包为ipa/apk,V8 的体积在5MB左右。实在对体积有更小的需求,Puerts 也提供了更小的 quickjs 运行时。
网友评论