如何将Unity WebGL构建产物上传至个人Node.js Web应用
Unity WebGL 产物部署到 Node.js 应用并实现数据库交互方案
1. 部署Unity WebGL构建产物到Node.js服务
- 先处理Unity侧构建配置:构建WebGL时,压缩方式建议选
gzip/Brotli,如果不想额外配置Node.js压缩规则可直接选禁用,可避免MIME类型加载报错。构建完成后会得到包含index.html、Build/、TemplateData/的完整文件夹。 - 配置Node.js静态资源托管规则,以常用的Express框架为例:将Unity构建的完整文件夹放到Node.js项目的静态资源目录(比如默认的
public/)下,在服务入口文件添加如下配置:
const express = require('express'); const app = express(); // 托管Unity WebGL静态资源,此处假设构建产物放在public/unity-game目录下 app.use('/unity-game', express.static('public/unity-game')); // 配置WebGL专属MIME类型,避免资源加载报错 app.use((req, res, next) => { if (req.path.endsWith('.unityweb')) { res.setHeader('Content-Type', 'application/octet-stream'); } else if (req.path.endsWith('.wasm')) { res.setHeader('Content-Type', 'application/wasm'); } next(); }); app.listen(3000, () => console.log('服务运行在3000端口'));
- 部署完成后访问
http://你的服务地址/unity-game即可直接启动游戏。
2. 实现WebGL游戏与Node.js、数据库交互
- Unity侧封装接口请求逻辑:在C#脚本中使用
UnityWebRequest调用Node.js提供的业务接口,示例代码如下:
IEnumerator GetUserGameData(string userId) { string requestUrl = "http://你的服务地址/api/game-data/" + userId; using (UnityWebRequest req = UnityWebRequest.Get(requestUrl)) { yield return req.SendWebRequest(); if (req.result == UnityWebRequest.Result.Success) { // 直接解析后端返回的JSON数据即可使用 string responseText = req.downloadHandler.text; Debug.Log(responseText); } } }
注意:如果WebGL页面和Node.js接口的域名/端口不一致,需要在Node.js侧配置CORS跨域规则,否则请求会被浏览器拦截。
- Node.js侧编写业务接口操作数据库,以Express+MySQL为例:
const mysql = require('mysql2'); // 初始化数据库连接 const db = mysql.createConnection({ host: 'localhost', user: '数据库用户名', password: '数据库密码', database: '业务库名' }); // 提供游戏侧调用的查询接口 app.get('/api/game-data/:userId', (req, res) => { const userId = req.params.userId; db.query('SELECT * FROM game_data WHERE user_id = ?', [userId], (err, results) => { if (err) return res.status(500).json({error: err.message}); res.json(results[0]); }); });
- 如果需要实现实时交互逻辑,可在Node.js侧引入
ws或socket.io库搭建WebSocket服务,Unity侧接入对应WebSocket客户端SDK即可实现双向通信。
3. 常见问题规避
- Unity构建WebGL前需要在
Player Settings > Other Settings中将Active Input Handling设置为Input System Package (New)或两者兼容模式,避免输入逻辑在网页端失效。 - 禁止在Unity C#代码中直接编写数据库连接逻辑,所有数据库操作必须通过Node.js接口转发,避免数据库账号密码直接泄露到前端。
内容的提问来源于stack exchange,提问作者sagesy 01
相关产品推荐
相关产品推荐

