• Stars
    star
    121
  • Rank 292,403 (Top 6 %)
  • Language
    JavaScript
  • License
    BSD 2-Clause "Sim...
  • Created about 4 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

puerts unity 项目手脚架

Unity Puerts 起始项目

使用 puerts 的 Unity 空项目,搭建好 TypeScript 编译调试工具,IDE配置等常用手脚架,不含任何游戏框架。仅提供 webapi 兼容层,实现部分常用的 WebAPI,并针对 Unity 优化了 Console API。

Features

  • 基础单元测试功能
  • 最常用的 WebAPI 功能实现
  • 使用 Webpack 构建脚本,开发模式下默认使用ESBuild加速代码编译
  • 发布代码时混淆压缩支持
  • 配置好 SourceMap 和 VSCode 调试支持, 开箱即用

必备知识

  • Unity 基础操作
  • TypeScript/JavaScript 语言
  • NodeJS 和 npm/yarn

如何使用

  1. 确保已安装如下所需的开发工具
    • NodeJS 16+
    • Visual Studio Code
    • Unity 2019.4.8f1 及以后版本
  2. 克隆该项目,项目结构如下
    • src TypeScript 脚本目录
    • Assets/main.unity 入口场景
    • Assets/Scripts/Resources/scripts 编译生成的 JavaScript 脚本
    • Assets/Scripts/Editor/PuertsConfig.cs puerts 导出配置
  3. 使用Unity打开项目,执行菜单中的Puerts -> Generate index.d.ts 导出 C# API
    • 注意使用 global.CS 模式
  4. 安装依赖:进入项目目录执行 yarn install,国内推荐设置淘宝镜像
  5. 使用 VSCode 打开该项目,执行yarn bundle:dev命令编译 JavaScript 库
  6. 打开 main 场景,选中其中的 main 节点,点击属性面板中的重置调试目录按钮
  7. 点击运行,启动游戏,如果一切顺利可以看到如下的日志,大功告成
    已启动 JavaScript 虚拟机
    	at new JavaScriptApplication (src/main.ts:25:11 )
    	at main (src/main.ts:10:9 )
    

调试

  • Unity 顺利启动JavaScript项目后可在 VSCode 中按 F5 键添加到运行中的调试器,之后便可在 TypeScript 文件中设置断点。
  • 如需要调试启动相关的JavaScript代码,请在入口场景中选中main节点,勾选 Wait For Debugger 选项框。启动游戏后Unity会等待VSCode调试器连接,此时到VSCode中需要调试地方设置好断点后按F5连接调试器。
  • 如需调试远程设备(手机真机调试),则打包前确保点击一次main.unity -> main节点属性面板的重置调试目录将脚本调试目录设置为你本地目录

npm 命令简介

命令 功能
bundle:dev 启动main.ts为入口的编译服务,项目中的脚本变动会自动增量编译到 bundle.js
bundle:publish 使用发布模式编译 bundle.js
bundle:analyze 使用发布模式编译 bundle.js 并打开源代码分析服务
test:dev 启动单元测试的编译服务

上述所有命令可以在在VSCode编辑的 NPM 脚本面板中一键启动

单元测试

提供简单的单元测试,支持表达式、函数、Promise 三种测试规则,能够覆盖大多数单元测试需要。测试入口在 src/test/GameTest.ts 脚本中,可参考现有例子使用。

执行 test 单元测试后编译单元测试代码,Unity中运行项目可以进行单元测试

单元测试截图

FAQ

  • 无法下断点/日志中的堆栈总是在 bundle 文件内
    • 到 main 场景中重置调试目录
  • 如何加载远程脚本,热更新脚本?
    • 实现 JavaScriptLoader 对应的接口
  • 如何配置 C# 导出的接口
    • 修改 Assets/Scripts/Editor/PuertsConfig.cs 文件
  • puerts 的 Unity 文档

Linux 环境使用说明

  • UPM 包中没有包含 Linux 版本的动态库如无法使用,建议到Release页面 下载对应版本的V8库,并将解压到的 libpuerts.so 放到 Assets/[plugins]/x86_64/libpuerts.so
  • 下载下来的动态库需要添加可执行权限
  • 如果报错库中的依赖丢失,可以参考 Tencent/puerts#941