Unity 6.3
0 онлайн 72 гостей 3 в системе
Вход
Разработка платформы Шаг 356 из 387

Настройка конфигурации сервера Node.js для веб-компилирования

Создайте файл конфигурации сервера Node.js, который позволит серверу Node.js работать с веб-сборку Unity.

Node.js — это среда выполнения с открытым исходным кодом, которая позволяет выполнять код JavaScript на сервере. В Unity вы можете использовать приложение Node.js для обслуживания вашей веб-сборки Unity.

Дополнительные сведения о Node.js и о том, как установить и использовать его, см. в документации Node.js.

Настройка файла package.json

Чтобы создать файл package.json, готовый для использования с Unity Web:

  1. Создать файл в текстовом редакторе или IDE.

  2. Назовите файл package.json.

  3. Сохраните файл в каталоге проекта Node.js.

  4. Вставьте в файл следующий код:

    {
      "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:

  1. Создать файл в текстовом редакторе или IDE.

  2. Назовите файл index.js.

  3. Сохраните файл в каталоге проекта Node.js.

  4. Вставьте в файл следующий код:

    #!/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();
    });
    
  5. Если ваша сборка загружается через CORS (например, встроенная на другой сайт), то установите следующую строку в вашем коде на true, в противном случае установите ее на false:

    const enableCORS = true; 
    
  6. Если вы создали свою сборку с поддержкой многопоточности, установите следующую строку в вашем коде на true, в противном случае установите ее на false:

    const enableWasmMultithreading = true;
    

Ваша конфигурация сервера теперь готова для использования с веб-компиляцами Unity.

Дополнительные ресурсы