美文网首页
01 Puerts for Unity 基本接入

01 Puerts for Unity 基本接入

作者: 单炒饭 | 来源:发表于2021-03-16 20:37 被阅读0次

    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 基本接入

          本文链接:https://www.haomeiwen.com/subject/kscjcltx.html