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 运行时。

你可能感兴趣的:(01 Puerts for Unity 基本接入)