Unity WebGL 打包——构建后 PakePlus 直接套壳
PakePlus 文档明确支持
你的 Unity 项目是不是想要跨平台打包为客户端?也完全没有问题。
原理和 Cocos 一样——Unity 的 WebGL 构建产物本质上是一个包含 index.html、一堆 JS、wasm 文件的静态网站。
Unity 的构建流程
1. 设置 WebGL 平台
- 打开 Unity Hub → 打开项目
- 菜单 → File → Build Settings
- Platform 列表里选 WebGL → 点 Switch Platform
- 如果没装 WebGL Build Support:Unity Hub → 安装添加 WebGL 模块
2. WebGL 平台设置
Player Settings → Other Settings:
| 设置项 | 推荐值 | 原因 |
|---|---|---|
| Resolution | Default | PakePlus 会控制窗口尺寸 |
| Run In Background | ✅ 勾选 | PakePlus 窗口在后台时游戏继续运行 |
| WebGL Memory Size | 256 MB(或更高) | 游戏内存分配,小了会崩 |
| Enable Exceptions | Exceptions Only(发布版) | 减少构建体积 |
| Data Caching | ✅ 勾选 | 减少重复下载 |
3. 构建
File → Build Settings → Build。选择一个空输出目录。
4. 产物目录
Build/
├── index.html ← 入口(可能在 TemplateData/ 旁边的根目录)
├── Build/ ← 运行时数据
│ ├── xxx.data ← 游戏数据
│ ├── xxx.framework.js ← JS 框架
│ ├── xxx.wasm ← WebAssembly
│ └── xxx.loader.js ← 加载器
└── TemplateData/ ← HTML 模板资源
├── style.css
└── background.jpg
Unity WebGL 的产物结构可能因 Unity 版本不同略有变化——关键是找到包含 index.html + Build/ + TemplateData/ 的那个根目录。
PakePlus 打包步骤
- 创建项目 → 软件配置页面的"网站地址"选 包含 index.html 的那个根目录
- 预览 → 确认游戏正常加载(等待 wasm 初始化完)
- 发布 → 云端或本地
关键注意事项
Unity WebGL 是 WASM,不是纯 JS
这点和其他 Web 项目不同——Unity 编译出来的是 WebAssembly(.wasm) 文件,体积大(通常 20-50MB+),加载时间长。
| 阶段 | 耗时 |
|---|---|
| PakePlus 启动 | <1 秒 |
| WebView 加载 index.html | <1 秒 |
| 下载 wasm + .data | 3-30 秒(取决于文件大小和设备性能) |
| WASM 初始化 + 场景加载 | 1-10 秒 |
| 总计 | 5-40 秒 |
PakePlus 里加载 Unity 游戏会有明显等待——用户看到的是一个 loading 界面(Unity 默认提供的),等 WASM 加载完才进入游戏。这是 WebGL 的固有特性,不是 PakePlus 的问题。
文件大小可能爆 GitHub 限制
Unity WebGL 构建产物的总大小通常在 50-200MB 之间:
.data文件:游戏资源(贴图、Prefab、音频).wasm文件:编译后的游戏代码.framework.js+.loader.js:加载器
云端打包注意:如果单个 .data 或 .wasm 文件超过 GitHub 单文件 100MB 限制,push 会失败。
| 打包方式 | 建议 |
|---|---|
| 云端打包 | 如果 Unity 产物 <100MB,没问题。大了就改走本地,或者用资源拆分 |
| 本地打包 | ✅ 最稳,无限制 |
Memory Size 设置
PakePlus WebView 有默认的内存限制(Windows 上 WebView2 比较宽松,macOS WKWebView 也不错)。如果 Unity WebGL 运行时崩溃(Exit Code 137 或白屏):
- 增大 Unity Player Settings 里的 WebGL Memory Size
- 检查游戏是否有内存泄漏
Input 事件
Unity WebGL 的 input(键盘、鼠标、触控)在 PakePlus WebView 里能正常工作:
- 鼠标移动 / 点击 / 滚轮:✅
- 键盘按键:✅
- 触控:✅(移动端窗口模式下)
- 游戏手柄:❌ WebView 通常不支持 Gamepad API
为什么用 PakePlus 而不是原生导出
| 对比项 | Unity 原生各平台导出 | PakePlus WebGL 套壳 |
|---|---|---|
| 构建速度 | 各平台各编译一次(总共几十分钟) | WebGL 一次 + PakePlus 30 秒 |
| 最终体积 | APK/EXE 通常 100-300MB | WebGL 产物 + PakePlus 壳 ≈ 5MB + 游戏数据 |
| 各平台一致性 | 需要各平台分别测试 | 一套代码高度一致 |
| 原生能力 | 完整 | 受限(不支持 Gamepad、陀螺仪等) |
| 支持的 Unity 功能 | 全部 | WebGL 不支持的功能(如原生 Plugin、部分平台特性)会跳过 |
结论:轻量级、不依赖原生硬件能力的游戏(卡牌、益智、策略)→ PakePlus 套壳非常合适。重度 3D、依赖手柄/传感器的游戏 → 原生导出更合适。