01 Puerts for Unity 基本接入

Puerts for Unity 基本接入

关于 Puerts

Puerts 是腾讯开源的一套游戏引擎(Unity、Unreal)下能使用 TypeScript(将简称为 Ts) 编程解决方案。

其作者 @chexiongsheng 大名鼎鼎, 普遍应用在国内网游中的 xLua 也出自他手。

为什么要使用 Puerts?

  • 基于 Ts 的类型系统
    • 增强代码的可读性和可维护性
      • 类型即最好的文档
      • 编译阶段即发现大部分错误
      • 增强的 IDE 功能,包括:代码补全、接口提示、跳转定义、重构...
    • 活跃的社区
  • 继承脚本语言的所有优点
    • 轻量级的开发环境
    • 可热更
  • 拥有完善的生态链
    • JavaScrtip 整个生态链的工具和库都可以拿来即用
      • npm、vscode、wasm、Chrome DevTools...
  • 高效的运行环境(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/ 目录下
  • 接入 Puerts
    • 切换到 Unity 编辑器 -> Hierarchy -> 右键 -> Create Empty,创建一个 Main 名称的空节点
    • 在项目 Assets 目录下创建 Cs 目录用来存放 CSharp 文件
    • Cs 目录下创建一个 Main.cs 文件,并拖放挂载到 Hierarchy 的 Main 节点上,并保存场景
    • Main.cs 代码内容如下:
/**
* 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 运行时。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容