Что нужно знать перед компиляцией игры под WebGL

Создание игры на WebGL в Unity

Посмотрел вебинар про публикацию игр под WebGL на движке Unity и решил записать основные тезисы.

  • WebGL не поддерживает Threads (поэтому нужно заменить их на Events).
  • WebGL не поддерживает никакие сетевые коммуникации, кроме класса WWW и Raw sockets.
  • Лучше не заморачиваться со звуком и не использовать доступ к камере и микрофону.
  • .NET возможности можно юзать только при динамической генерации кода.
  • Нужно делать code stripping, а не комплексный билд. Вот где он включается:

Где включить Code Stripping в Unity

  • Самая большая засада чтобы найти оптимальный размер выделяемой под игру памяти. Если памяти будет мало, то будет вываливаться ошибка malloc. А если много, то игра не будет грузиться на слабых машинах. Поймать этот оптимум сложно. Вот какие ошибки означают малое или большое количество выделяемой памяти:

Как поймать ошибки если мало или много памяти для WebGL игры

Вот места, где можно править количество выделяемой памяти:
Где править количество выделяемой памяти под игру WebGl в Unity

  • Как улучшить игру (код):
    Как улучшить/ускорить игру (код) JavaScript

Если коротко, то убрать все сторонние плагины, асинхронно загружать контент через бандлы, всегда использовать самую последнюю версию Unity.

  • Для каждого браузера (как и для каждой ОС) нужно определять свой собственный оптимальный размер памяти под игру.
  • Лучше всего оптимизировать игру под WebGL таким образом. В основной поставке оставить только те текстуры, звуки, скрипты, которые нужны для загрузки первой локации. Все другие асеты нужно запаковать в отдельные AssetBundles.

Что нужно знать перед компиляцией игры под WebGL: 2 комментария

  1. Так случилось, что клиентская часть нашей игры и Web сервер находятся в разных доменах. И для общения клиента с сервером нужны кроссдоменные HTTP запросы. Для этого в нашем проекте используется библиотека UniRx. Но при компиляции проекта под WebGL возникла неизвестная ошибка. Подозрения упало на UniRx. Поэтому был проведён ряз экспериментов с классами WWW, UnityWebRequest и WebClient.
    Ошибка возникала во всех случаях.
    В консоли разработчика в браузере Chrome удалось найти запись о том, что браузер заблокировал запрос так как в ответе сервера отсутствовал заголовок CORS ‘Access-Control-Allow-Origin’. Добавление данного заголовка в ответ от Web сервера решило проблему. Заголовок должен иметь значение такое же как пришло в запросе в заголовке Origin или «*».
    UniRx также работает.

  2. Для работы с API соц сетей нужно иметь возможность запускать JavaScript-ы в браузере. Это можно сделать при помощи плагинов. Нужно создать в Assets в папке Plugins папку WebGL и положить туда файлы с плагинами. Расширение файлов должно быть jslib. Файл представляет собой набор JavaScript функций внутри которых можно обращаться к внешним боблиотекам js, которые загружены страницей, а так же к объектной модели браузера (DOM). Но объявление функций отличается. Сначала название функции. Потом двоеточие. Далее function(). Далее в фигурных скобках JavaScript код функции. Функции отделяются друг от друга запятыми.
    Чтобы функция возвратила строку нужно воспользоваться выделением памяти при помощи функции _malloc и записать в выделенную память возвращаемую строку при помощи функции writeStringToMemory. Теперь можно вернуть строку в виде массива байт.

    Пример плагина:

    var MyPlugin = {
    Func1: function() {
    var get = window.location.search;
    console.log(«Строка GET запроса: » + get);
    window.alert(«Строка GET запроса: » + get);
    },
    Func2: function() {
    var num = 12;
    return num;
    },
    Func3: function() {
    var str = «Hello World!!!»;
    var buffer = _malloc(lengthBytesUTF8(str) + 1);
    writeStringToMemory(str, buffer);
    return buffer;
    }
    };

    mergeInto(LibraryManager.library, MyPlugin);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *