01 Puerts for Unity 基本接入

Puerts for Unity 基本接入

關于 Puerts

Puerts 是騰訊開源的一套游戲引擎(Unity、Unreal)下能使用 TypeScript(將簡稱為 Ts) 編程解決方案。

其作者 @chexiongsheng 大名鼎鼎, 普遍應用在國內(nèi)網(wǎng)游中的 xLua 也出自他手金赦。

為什么要使用 Puerts?

  • 基于 Ts 的類型系統(tǒng)
    • 增強代碼的可讀性和可維護性
      • 類型即最好的文檔
      • 編譯階段即發(fā)現(xiàn)大部分錯誤
      • 增強的 IDE 功能今野,包括:代碼補全照藻、接口提示、跳轉(zhuǎn)定義彼水、重構...
    • 活躍的社區(qū)
  • 繼承腳本語言的所有優(yōu)點
    • 輕量級的開發(fā)環(huán)境
    • 可熱更
  • 擁有完善的生態(tài)鏈
    • JavaScrtip 整個生態(tài)鏈的工具和庫都可以拿來即用
      • npm崔拥、vscode、wasm凤覆、Chrome DevTools...
  • 高效的運行環(huán)境(V8
    • JIT链瓦、JIT-less
  • 輕巧的運行環(huán)境 (QuickJS)
  • 堅實的爸爸們
    • Google、Microsoft

如何接入盯桦?

由于是入門教程慈俯,這里會盡可能描述得詳細些。這里將從創(chuàng)建一個空的 Unity 工程開始拥峦。

  • 創(chuàng)建一個新的 Unity 工程
    • Unity Hub -> 新建 -> 3D
    • 填寫好項目名稱贴膘、及工程保存位置 -> 創(chuàng)建
  • 將 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突梦,創(chuàng)建一個 Main 名稱的空節(jié)點
    • 在項目 Assets 目錄下創(chuàng)建 Cs 目錄用來存放 CSharp 文件
    • Cs 目錄下創(chuàng)建一個 Main.cs 文件,并拖放掛載到 Hierarchy 的 Main 節(jié)點上随闪,并保存場景
    • Main.cs 代碼內(nèi)容如下:
/**
* Assets/Cs/Main.cs 文件內(nèi)容
*/
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 腳本創(chuàng)建的 test GameObject撮奏,控制臺輸出了其名稱 test 字樣俏讹。

最終項目結構目錄大至如下:

# 現(xiàn)在項目目錄結構大至如下:

├── Assets
│   ├── Cs
│   │   └── Main.cs                 # 入口腳本文件
│   ├── Gen
│   ├── Plugins                     # V8 擴展目錄
│   ├── Puerts                      # Puerts 目錄
│   └── Scenes
│       └── Main.unity              # 入口場景
├── Library
├── Packages
├── ProjectSettings
└── puerts.sln

提示:在 Mac 系統(tǒng)中,首次運行游戲可能會提示: "puerts.bundle" 已損壞...

參考以下步驟解決:

# 切換到項目/Assets/Plugins
cd Assets/Plugins/

# 移除 puerts.bundle 的安全隔離屬性
sudo xattr -r -d com.apple.quarantine puerts.bundle

擴展閱讀

什么是 V8畜吊?

V8 是 Google 發(fā)布的開源 JavaScript 引擎泽疆,采用 C++ 編寫。在 Chrome 瀏覽器玲献、Node.js中都是使用的 V8 引擎殉疼。

Ts 與 Lua對比

Ts 會被編譯為 Js 運行,所以確切地說捌年。在運行時即是拿 Js 對比 Lua瓢娜。

性能

得益于 V8 的運行時,兩者的運行效率基本可以忽略不計礼预。

體積

打包為ipa/apk眠砾,V8 的體積在5MB左右。實在對體積有更小的需求托酸,Puerts 也提供了更小的 quickjs 運行時褒颈。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市励堡,隨后出現(xiàn)的幾起案子谷丸,更是在濱河造成了極大的恐慌,老刑警劉巖应结,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨疼,死亡現(xiàn)場離奇詭異,居然都是意外死亡摊趾,警方通過查閱死者的電腦和手機币狠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砾层,“玉大人漩绵,你說我怎么就攤上這事「嘏冢” “怎么了止吐?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侨糟。 經(jīng)常有香客問我碍扔,道長,這世上最難降的妖魔是什么秕重? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任不同,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘二拐。我一直安慰自己服鹅,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布百新。 她就那樣靜靜地躺著企软,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饭望。 梳的紋絲不亂的頭發(fā)上仗哨,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音铅辞,去河邊找鬼厌漂。 笑死,一個胖子當著我的面吹牛巷挥,可吹牛的內(nèi)容都是我干的桩卵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倍宾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胜嗓?” 一聲冷哼從身側響起高职,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辞州,沒想到半個月后怔锌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡变过,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年埃元,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媚狰。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡岛杀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崭孤,到底是詐尸還是另有隱情类嗤,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布辨宠,位于F島的核電站遗锣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗤形。R本人自食惡果不足惜精偿,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笔咽,春花似錦墓阀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扶叉,卻和暖如春勿锅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枣氧。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工溢十, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人达吞。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓张弛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酪劫。 傳聞我的和親對象是個殘疾皇子吞鸭,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容