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...
- JavaScrtip 整個生態(tài)鏈的工具和庫都可以拿來即用
- 高效的運行環(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/
目錄下
- 拷貝
- 從 Releases 頁面下載對應版本的 Puerts ,并解壓
- 接入 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)容如下:
- 切換到 Unity 編輯器 -> Hierarchy -> 右鍵 -> Create Empty突梦,創(chuàng)建一個
/**
* 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 運行時褒颈。