Настройка конфигурации сервера Node.js для веб-компилирования
Создайте файл конфигурации сервера Node.js, который позволит серверу Node.js работать с веб-сборку Unity.
Node.js — это среда выполнения с открытым исходным кодом, которая позволяет выполнять код JavaScript на сервере. В Unity вы можете использовать приложение Node.js для обслуживания вашей веб-сборки Unity.
Дополнительные сведения о Node.js и о том, как установить и использовать его, см. в документации Node.js.
Настройка файла package.json
Чтобы создать файл package.json, готовый для использования с Unity Web:
Создать файл в текстовом редакторе или IDE.
Назовите файл
package.json.Сохраните файл в каталоге проекта Node.js.
-
Вставьте в файл следующий код:
{ "name": "node_server_example", "version": "1.0.0", "description": "An example for serving a Unity Web build with Node.js", "main": "index.js", "dependencies": { "express": "^4.19.2" } }
Ваш файл package.json теперь готов к использованию. Код определяет файл index.js в качестве входной точки серверного проекта и определяет библиотеки, от которых будет зависеть ваш проект.
Настройка файла index.js
Чтобы подготовить файл index.js для использования с веб-сайтом Unity:
Создать файл в текстовом редакторе или IDE.
Назовите файл
index.js.Сохраните файл в каталоге проекта Node.js.
-
Вставьте в файл следующий код:
#!/usr/bin/env node const path = require('path'); const express = require('express'); // Create express application const app = express(); // Settings const hostname = 'localhost'; const port = 8080; const enableCORS = true; const enableWasmMultithreading = true; // Serve the current working directory const unityBuildPath = __dirname; // Note: this makes the current working directory visible to all computers over the network. app.use((req, res, next) => { var path = req.url; // Provide COOP, COEP and CORP headers for SharedArrayBuffer // multithreading: https://web.dev/coop-coep/ if (enableWasmMultithreading && ( path == '/' || path.includes('.js') || path.includes('.html') || path.includes('.htm') ) ) { res.set('Cross-Origin-Opener-Policy', 'same-origin'); res.set('Cross-Origin-Embedder-Policy', 'require-corp'); res.set('Cross-Origin-Resource-Policy', 'cross-origin'); } // Set CORS headers if (enableCORS) { res.set('Access-Control-Allow-Origin', '*'); } // Set content encoding depending on compression if (path.endsWith('.br')) { res.set('Content-Encoding', 'br'); } else if (path.endsWith('.gz')) { res.set('Content-Encoding', 'gzip'); } // Explicitly set content type. Files can have wrong content type if build uses compression. if (path.includes('.wasm')) { res.set('Content-Type', 'application/wasm'); } else if (path.includes('.js')) { res.set('Content-Type', 'application/javascript'); } else if (path.includes('.json')) { res.set('Content-Type', 'application/json'); } else if ( path.includes('.data') || path.includes('.bundle') || path.endsWith('.unityweb') ) { res.set('Content-Type', 'application/octet-stream'); } // Ignore cache-control: no-cache // when if-modified-since or if-none-match is set // because Unity Loader will cache and revalidate manually if (req.headers['cache-control'] == 'no-cache' && ( req.headers['if-modified-since'] || req.headers['if-none-match'] ) ) { delete req.headers['cache-control']; } next(); }); app.use('/', express.static(unityBuildPath, { immutable: true })); const server = app.listen(port, hostname, () => { console.log(`Web server serving directory ${unityBuildPath} at http://${hostname}:${port}`); }); server.addListener('error', (error) => { console.error(error); }); server.addListener('close', () => { console.log('Server stopped.'); process.exit(); }); -
Если ваша сборка загружается через CORS (например, встроенная на другой сайт), то установите следующую строку в вашем коде на
true, в противном случае установите ее наfalse:const enableCORS = true; -
Если вы создали свою сборку с поддержкой многопоточности, установите следующую строку в вашем коде на
true, в противном случае установите ее наfalse:const enableWasmMultithreading = true;
Ваша конфигурация сервера теперь готова для использования с веб-компиляцами Unity.