Переменные веб-шаблона
Во время процесса сборки Unity предварительно обрабатывает файлы шаблона и оценивает все макросы и условные директивы, включенные в эти файлы. В рамках этого процесса Unity находит и заменяет все макросы на значения, предоставленные Unity Editor. Unity автоматически предварительно обрабатывает все файлы .html, .php, .css, .js и .json в папке шаблона.
Внутренние переменные препроцессора
Перечисленные ниже внутренние переменные препроцессора ссылаются на данные проекта, и Unity подставляет их значения при сборке в соответствии с тем, что даёт редактор. Эти внутренние переменные можно использовать в макросах JavaScript и условных директивах.
| Переменная | Тип | Описание |
|---|---|---|
| COMPANY_NAME | Струна | Название компании, определенное в настройках игрока. |
| PRODUCT_NAME | Струна | Название продукта, определенное в настройках плеера. |
| PRODUCT_VERSION | Струна | Версия, определенная в Настройках Игрока. |
| WIDTH | Цифры | Ширина по умолчанию Canvas определяется в Настройках Проигрывателя > Разрешение и представление. |
| HEIGHT | Цифры | Высота по умолчанию Canvas в Настройках Проигрывателя > Разрешение и Представление. |
| SPLASH_SCREEN_STYLE | Струна | Этот параметр устанавливается на значение "Темный", если в настройках стиля Splash Player > Splash Image установлено значение "Светлый на темном", в противном случае он устанавливается на значение "Светлый". |
| BACKGROUND_COLOR | Струна | Представляет собой цвет фона, определенный в виде шестнадцатеричной тройки. |
| UNITY_VERSION | Струна | Версия Unity. |
| DEVELOPMENT_PLAYER | Булева функция | Этот параметр устанавливается в значение true, если включена опция Разработка сборки. |
| DECOMPRESSION_FALLBACK | Струна | В зависимости от используемого метода сжатия и типа декомпрессора, включённого в сборку, эта переменная имеет значение Gzip или Brotli. Если ни одно из этих значений не указано, переменная имеет значение пустой строки. |
| USE_WASM | Булева функция | Этот параметр устанавливается в true, если текущая сборка является сборкой WebAssembly. |
| USE_THREADS | Булева функция | Этот параметр устанавливается в true, если текущая сборка использует потоки. |
| USE_WEBGL_1_0 | Булева функция | Это установлено на true, если текущая сборка поддерживает WebGL1.0 графики API. |
| USE_WEBGL_2_0 | Булева функция | Это установлено на true, если текущая сборка поддерживает WebGL2.0 графики API. |
| USE_DATA_CACHING | Булева функция | Это значение устанавливается в true, если текущая сборка использует indexedDB кэширование для загружаемых файлов. |
| LOADER_FILENAME | Струна | Этот параметр устанавливается на имя файла скрипта загрузчика сборки. |
| DATA_FILENAME | Струна | Этот параметр устанавливается на имя файла главного файла данных. |
| FRAMEWORK_FILENAME | Струна | Этот параметр устанавливается на имя файла скрипта структуры построения. |
| CODE_FILENAME | Струна | Этот параметр устанавливается на имя файла WebAssembly модуль, когда текущая сборка является WebAssembly build, в противном случае он устанавливается на имя файла asm.js модуль. |
| MEMORY_FILENAME | Струна | Этот параметр устанавливается на имя файла памяти, когда память хранится во внешнем файле, в противном случае он устанавливается на пустую строку. |
| SYMBOLS_FILENAME | Струна | Этот параметр устанавливается на имя файла JSON, содержащего символы отладки, если текущая сборка использует символы отладки, в противном случае он устанавливается на пустую строку. |
| BACKGROUND_FILENAME | Струна | Этот параметр устанавливается на имя файла фонового изображения, когда фоновое изображение выбрано в Настройки плеера > Сплайс-изображение, в противном случае он устанавливается на пустую строку. |
JavaScript макросы
Макросы JavaScript — это блоки кода JavaScript в файлах шаблонов, заключённые в тройные фигурные скобки. В таком коде можно использовать перечисленные выше внутренние переменные препроцессора. Эти переменные подставляются во время сборки в соответствии со значениями, которые даёт редактор. В ходе сборки препроцессор вычисляет все макросы и заменяет их результатом.
Вы можете использовать макросы JavaScript для предварительной обработки значений, предоставленных Редактором. Эти макросы могут быть настолько сложными, насколько вы хотите. Они могут включать множество операторов, циклов, функций и любых других конструкций JavaScript.
Следующая примерная строка взята из файла index.html, используемого в шаблоне по умолчанию:
<div id="unity-build-title">{{{ PRODUCT_NAME }}}</div>
Если значение Название продукта в настройках проигрывателя установлен на My WebGL Game, внутренняя переменная препроцессора PRODUCT_NAME имеет значение My WebGL Game. В выходе index.html файл, строка выглядит следующим образом:
<div id="unity-build-title">My WebGL Game</div>
Ниже приведен более сложный пример из того же файла шаблона index.html:
canvas.style.background = "url('" + buildUrl + "/{{{ BACKGROUND_FILENAME.replace(/'/g, '%27') }}}') center / cover";
Если вызвана целевая папка сборки Let’s try WebGL, и если вы выберете фоновое изображение в Player Settings, внутренняя переменная препроцессора BACKGROUND_FILENAME имеет значение Let’s try WebGL.jpg. В выходе index.html файл, строка изменяется на:
canvas.style.background = "url('" + buildUrl + "/Let%27s try WebGL.jpg') center / cover";
Условные директивы
Условные директивы Если, #другие, и Конец контроля, если Unity включает определенную часть предварительно обработанного файла в выходной файл или отбрасывает его для текущей сборки.
Код, начинающийся с Если и заканчивается Конец Директива называется условной группой. Условные группы могут также включать #другие руководящие принципы. Unity оценивает выражение, написанное после Если как JavaScript выражение. Если это выражение имеет истинное значение, которое переводится в true при оценке в булевом контексте, то Unity сохраняет группу строк, следующую непосредственно за Если директивы в выходном файле. Если Если выражение является ложным, и #другие директива включена в условную группу, Unity сохраняет группу строк, следующую непосредственно за #другие Пример условной группы выглядит следующим образом:
#if EXPRESSION
// this block is included in the output if EXPRESSION has a truthy value
#else
// this block is included in the output otherwise
#endif
Оцененные выражения JavaScript могут включать скобки, логические операторы и другие конструкции JavaScript. Условные директивы могут быть вложены.