Engine

Игровой движок: граф сцены, компоненты, скриптинг, физика, PBR-конвейер, редакторы мира и нативные сборки для десктопа и мобильных устройств.

Коротко#

Полноценный игровой движок в браузере: постройте сцену, задайте ей поведение, нажмите Play и экспортируйте её в веб или в нативный бинарник для десктопа и мобильных устройств.

Это самая крупная студия в aukimi, и с большим отрывом. Эта страница описывает её так же, как это делает сам интерфейс: по секции, в которой находится каждая панель, а не по алфавитному списку возможностей.

Интерфейс#

Engine с графом сцены, вьюпортом, инспектором и консолью

Строка менюFile · Edit · View · Windows · Run · Plugins
Панель инструментовназвание проекта, undo/redo, переключатель режима вьюпорта (3D · 2.5D · 2D · TXT), селектор сцены, четыре кнопки панелей, FX Master, HUD, поле разрешения, транспорт (play, pause, stop) и Build
Слеваиконочная панель, граф сцены, список, аудио, консоль и панель, которую она открывает
Центрвьюпорт со своей панелью гизмо (translate, rotate, scale, world/local, grid, snapping, framing) и селектором качества
Справаинспектор для выбранной сущности
СнизуConsole и Profiler, рядом друг с другом
Строка состояниярежим, размерность вьюпорта, количество сущностей, состояние сетки

Четыре кнопки панелей#

Панель инструментов Engine: имя сцены, undo, переключатель режима вьюпорта, четыре кнопки панелей и транспорт

Они ведут себя не одинаково, и разницу стоит знать заранее, прежде чем искать что-то по интерфейсу:

КнопкаПоведение
Systemsоткрывает секцию
Toolsоткрывает ту же самую секцию, Systems и Tools закрывают друг друга
Assetsпереключает постоянную панель (dock)
Scriptsоткрывает модальное окно

Systems и Tools намеренно делят один слот: они размещены рядом, чтобы было видно, что это так.

Systems#

Собственные подсистемы движка: то, что сцена имеет, а не то, из чего вы что-то делаете.

ГруппаПанели
Pluginsбраузер плагинов
RenderingRendering · Rendering Pipeline · Look Presets · Shader Lab · Render Style · Shadows · Mesh LOD · Post Process Volumes
GameplayMultiplayer room · Physics · AI & Navigation · Gameplay Zones
WorldScene Graph · Level Streaming · Baking · Light Probes · Decals

Rendering#

Переключатель FX Master на панели инструментов включает и выключает весь конвейер постобработки одним щелчком: самый быстрый способ увидеть, во что он вам обходится. По отдельности: bloom, depth of field, SSR, SSAO, GTAO, SSGI, temporal AA, FXAA, motion blur, volumetric fog, contact shadows, colour grading, film grain, chromatic aberration, vignette и tonemapping, плюс геометрия в стиле Nanite и Hi-Z occlusion.

Look Presets: это целиком собранные конфигурации всего перечисленного. Render Style меняет саму манеру изображения на стилизованную, а не фотографическую. Shader Lab: место, где вы пишете собственные шейдеры. Mesh LOD и Post Process Volumes: это те два, что окупаются на большой сцене (уровень детализации на каждый mesh и постобработка, применяемая только внутри объёма).

Рендерер: Babylon.js. Он стартует на WebGL и сам переключается на WebGPU, когда браузер это поддерживает, и сам же откатывается назад, если это не удаётся.

Игровые системы#

Physics покрывает и 3D-решатель (Havok), и 2D-решатель. AI & Navigation: это navmesh и агенты на нём. Gameplay Zones: триггерные объёмы с привязанным к ним поведением. Multiplayer room подключает сцену к серверу Colyseus (см. ниже).

Системы мира#

Level Streaming подгружает и выгружает части уровня по мере перемещения игрока. Baking заранее просчитывает освещение; Light Probes захватывают непрямой свет и отражения в точках пространства. Decals проецируют деталь на поверхности, не добавляя геометрии.

Tools#

То, из чего вы что-то делаете.

ГруппаПанели
EditorsScripts · Blueprint Editor · UI Editor · Tilemap
WorldSky Studio · Terrain · Water · Tree Generator · Plant Generator · Rock Generator · Kitbash
GameplayInventory · Data tables · Dialogue Trees
AnimationTimeline · Cinematic Sequencer · Camera Tools
AudioAudio Manager
DebugProfiler

Генераторы мира#

Terrain, water, sky и четыре генератора контента: деревья, растения, камни и детали для kitbash. У них своя отдельная глава ниже.

Создание игрового контента#

Inventory, Data tables (Tools → Data) и Dialogue Trees: три редактора, позволяющие игре иметь контент, который не живёт в коде подробнее ниже.

Анимация#

Timeline для анимации сущностей, Cinematic Sequencer для монтажных планов и Camera Tools для кадрирования. См. Анимация и камера.

Редакторы мира#

Семь панелей в Tools → World. Это самый быстрый способ наполнить сцену, и именно поэтому уровень не обязан начинаться с сессии моделирования.

Terrain#

Сцена может содержать несколько ландшафтов; каждый из них: это строка в списке Terrains, создаваемая с одним из трёх разрешений: 128² (быстро), 256² (сбалансированно) или 512² (детально).

У панели десять режимов, и у них есть общая черта: маска, нарисованная в Masks, ограничивает действие каждого из них.

РежимЧто делает
Sculptсемнадцать кистей для карты высот
Paintдо восьми текстурных слоёв на двух splatmap
Generateшум, автотекстурирование и импорт реального рельефа
Sketchрисуйте хребты и долины, синтезируя ландшафт под них
Masksограничивает любой другой режим частью поверхности
Waterуровень моря и выбор между водой ландшафта и FFT-океаном
Pathsдорога на кривой Безье, впечатанная в землю
Vegetationрасстановка кистью или по правилам
SDFрэймарчинговый ландшафт, рендерящийся, а не образующий mesh
Biomesпочва, растения, деревья и камни за один проход

Sculpt. Raise 1, Lower 2, Smooth 3, Flatten 4, Pinch 5, Inflate 6, Noise 7, Sharpen 8, Stamp 9, Terrace 0, Erode E, Fill F, Clone C (Alt+клик задаёт источник), Blur B, Ramp R, плюс два водных инструмента: River рисует русло, Lake заполняет точку.

У самой кисти есть динамика: кривая нажима, «ленивая мышь» (lazy mouse), falloff, симметрия, паттерн и джиттер как размера, так и силы. Stamp несёт шесть форм: кратер, горная вершина, плато, речная долина, купол, шумовой холм. Эрозия существует в двух видах: кисть E действует локально, а Adjustments прогоняет hydraulic, thermal и wind эрозию по всему ландшафту.

Paint. Восемь слоёв, потому что два RGBA-splatmap хранят по четыре канала каждая. Библиотека материалов рассортирована по категориям: трава, грязь, лес, камни, дороги и покрытия, скалы, песок, снег, вулканика, болото, фэнтези и собственные материалы, и у каждого слоя есть UV scale, displacement, детальная карта и рельеф поверхности (сила bump и глубина parallax). Break texture tiling (cell bombing): настройка, которая мешает повторяющейся текстуре земли читаться как сетка.

Generate строит ландшафт из шума, затем Generate Textures назначает материалы по высоте и уклону, с вариацией светотени север/юг и песчаными или галечными берегами там, где есть вода. Real World импортирует открытые данные высот NASA/USGS: выберите ориентир или введите координаты, задайте масштаб, и панель сообщит, какой диапазон высот она получила.

Sketch: другой путь, рисуете штрихи хребтов и долин на 2D-карте, выбираете до трёх реальных ландшафтов-источников, и ландшафт синтезируется по эскизу, при желании смешиваясь с уже существующим, автоматически текстурируясь и подвергаясь эрозии за тот же проход.

Masks рисуются кистью, а затем редактируются целиком: clear, invert, blur, grow, shrink. Умные маски (smart masks) выводят маску из самого ландшафта: по высоте, по уклону, по слою или по вогнутости.

Paths. Щёлкните, чтобы поставить контрольные точки, и через них пройдёт плавная кривая; перетаскивайте янтарные точки, чтобы двигать их, и голубые рычаги, чтобы изгибать кривую. Bake Path выравнивает землю под дорогой, рисует текстуру и поднимает насыпи.

У Vegetation две половины. Кисть расставляет и убирает экземпляры вручную; правила расстановки (scatter rules) размещают их по условию, весам слоёв, seed, минимальному и максимальному масштабу и диапазону высоты и уклона, который допускает каждый ассет. Трава и цветы плавно исчезают за настраиваемой дистанцией отрисовки, а Export to Scene превращает экземпляры в объекты сцены.

Biomes: версия всего вышеперечисленного в один клик, выберите биом, отметьте нужные категории (почва, деревья, растения и трава, цветы, водоросли у воды, камни), задайте плотность, и Apply Biome раскрасит землю и расставит всё, сообщив, сколько экземпляров каждого типа было размещено. Возрастное разнообразие (age variety) деревьев смешивает саженцы и старые деревья, а не штампует одно и то же дерево повсюду, а ground blend (RVT) сплавляет основание каждого камня с цветом ландшафта под ним.

SDF: это другой рендерер, а не другой инструмент: ландшафт рэймарчится из функции расстояния, форма задаётся октавами, lacunarity и persistence, текстурирование идёт по траве/камню/снегу со снеговой линией и порогом уклона, а собственные мягкие тени, ambient occlusion и туман принадлежат только ему.

У больших ландшафтов есть система LOD с юбочной геометрией (skirt geometry, именно она закрывает щели между уровнями), плавными переходами уровней, отсечением по фрустуму (frustum culling) и оверлеем статистики. Карты высот импортируются и экспортируются как 16-битный PNG, 8-битный PNG или RAW 16-бит; splatmap: как один RGBA PNG или как файл на каждый слой; а весь ландшафт, или только его настройки, можно сохранить как пресет.

Sky Studio#

Атмосфера. Четыре типа неба: solid, gradient, HDRI и physical atmosphere с рэлеевским и ми-рассеянием, ми-поглощением, озоном, альбедо почвы, мутностью, радиусом планеты и толщиной атмосферы.

Всё привязано к времени суток, которое может идти само по себе: солнце по высоте, азимуту и интенсивности, со своей интенсивностью тени; луна по фазе; звёзды с мерцанием; и полярное сияние. У объёмных облаков есть толщина, эрозия, масштаб шума и curl-искажение, а также освещение через поглощение, рассеяние, ambient-составляющую и powder-эффект; перистые облака и пояс Венеры заданы отдельно. Aerial perspective: дымка, сгущающаяся с расстоянием и растворяющая далёкую геометрию в горизонте: именно эта настройка делает ландшафт по-настоящему большим.

Десять пресетов для старта: ясный день, рассвет, закат, сумерки, ночь, пасмурно, гроза, пустыня, арктика и космос.

Water#

Две вкладки: Ocean (FFT) для открытого моря, Shore & lakes для всего остального.

⚠️ Вода создаётся в редакторе Terrain: инструментами River и Lake, или через Show Water, а настраивается уже здесь. Открытие этой панели на сцене без воды даёт вам настройки, которые не к чему применить.

У береговой воды есть цвет, непрозрачность, сила и скорость волн, choppiness, ширина пены и Fresnel, с отражениями в экранном пространстве и размытием преломления. Под этим находится сам WGSL-шейдер: два масштаба нормалей со своими направлениями и скоростью прокрутки, порог и мягкость пены, сила преломления и индекс преломления, а также свет внутри воды: поглощение, мутность, рассеяние и просвечиваемость (translucency).

Tree Generator#

Два режима: Tree и Trunk. Дерево бывает листопадным или вечнозелёным, имеет возраст от саженца до древнего, и может быть живым, мёртвым, сухостоем (snag) или упавшим стволом. Всё завязано на seed, так что Randomize seed это самый быстрый способ получить другое дерево того же характера.

Форма задаётся по уровню ветвления: количество детей, длина, радиус, сужение, искривлённость, скрутка, секции, сегменты, угол и высота старта, плюс естественная вариация, фототропизм и гравитропизм: два свойства, заставляющие дерево тянуться к свету и обвисать под собственным весом, и общая сила со своей величиной. У основания есть корневой раструб (лепестки и высота) и контрфорс (buttress).

Листья: это биллборды, одно- или двусторонние, с количеством, размером, углом, вариативностью, скучиванием (clump), завивом, обвисанием, блеском и скруглёнными нормалями. Кора представлена в шести стилях: ребристая, осиновая, сосновая, берёзовая, гладкая, пальмовая, с рельефом, мхом, влажным основанием, выгоранием на солнце, ambient occlusion кроны и осенним преображением. Четыре сезона переключают весь облик разом.

Forest расставляет сразу много: количество, радиус разброса, вариация масштаба и микс возрастов (одиночный, естественный, молодой, старый, ровный). Add age progression размещает все пять стадий жизни подряд, что является самым быстрым способом сравнить их бок о бок. Дерево уходит либо как сущность сцены, либо как GLB, а любую настройку можно сохранить как пресет.

Plant Generator#

Пять видов: flower, cluster, herb, fern, grass, у которых общий стебель (количество, высота, толщина, изгиб, цвет) и листья (количество, размер, ширина, угол). У папоротников (fern) добавляются пары листочков, разлёт листочков и изгиб вайи; у травы (grass) добавляются количество и изгиб лезвий.

Цветок опционален для любого из них: лепестки, ряды лепестков, длина, ширина, завив, острота кончика, раскрытие, размер центра и три цвета: лепестка, кончика лепестка и центра, с просвечиваемостью (translucency) и roughness, определяющими, как свет проходит сквозь лист. Добавьте один в сцену, расставьте много или экспортируйте как GLB.

Rock Generator#

Три вида: rock, stone, cliff, в трёх стилях: реалистичный, toon или low poly с обводкой.

Форма: это шум по сфере: масштаб, сила, октавы, persistence, warp и опция ridged, плюс strata со своей частотой и facet cuts с глубиной и резкостью для угловатого камня. Радиус, детализация, сплющивание, вариация формы и плоское основание задают силуэт, а четыре пресета эрозии: свежий, выветренный, естественный, эродированный: двигают всё это разом.

У поверхности есть вариация цвета, минеральные прожилки, лишайник и мох, детальная текстура с тайлингом и силой, triplanar-смешивание и рельеф parallax. По умолчанию используется встроенный материал Stone; отправьте материал из Matter в Engine, чтобы его заменить.

Kitbash, та же библиотека, что и в Sculpt#

Kitbash использует общую библиотеку с Sculpt: эта панель и Edit Forge в Sculpt читают одну и ту же библиотеку. Деталь, собранная там, размещается здесь, а деталь, доработанная здесь, может быть сохранена обратно в библиотеку.

Сцена хранит саму деталь и её размеры, а не её вершины: именно поэтому здание, собранное из kitbash, почти ничего не стоит в файле проекта и может быть обновлено позже из своего источника.

Возьмите деталь из каталога, и каждый клик левой кнопкой размещает её. Три режима привязки решают, куда она попадёт: on terrain (детали следуют за высотой земли под ними), on water (плоскость построения находится на уровне воды) и snap to sockets (наведите точку соединения на уже размещённую деталь, и новая повернётся, чтобы состыковаться с ней). Цепочка растёт от своего свободного конца, занятые сокеты выпадают из кандидатов, а каждый клик: это отдельный шаг отмены. Ctrl/Cmd по-прежнему зарезервирован под выделение, а Alt отвечает за поворот. Коллекции хранят свой источник и версию, поэтому экземпляр можно обновить при изменении оригинала.

Другие редакторы#

Редакторы мира наполняют сцену; эти же дают ей интерфейс, карту, таблицы контента и инструменты, чтобы проверить, во что всё это обходится.

Редактор HUD#

Tools → Editors → UI. Шесть вкладок: Templates, Elements, Layers, Preview, Style и Script, поверх предпросмотра, переключающегося между тремя размерами устройств: desktop 960×540, tablet 768×432, mobile 375×667.

Элементы делятся на три группы (Display, Data, Input) и умеют вкладываться друг в друга: panel и flex содержат детей, поэтому вкладка Layers: это настоящее дерево, а не плоский список. История хранит пятьдесят шагов.

⚠️ Вкладка Style похожа на CSS, и в этом различии вся суть. HUD рисуется на канвасе средствами GUI Babylon, и настоящий CSS до него не доходит. Правила, которые вы пишете здесь, отображаются на свойства GUI; селекторы: #name для одного элемента, .type для типа (.text, .panel) и * для всего сразу.

Вкладка Script: другой способ построить интерфейс, API ui.*, createText, createPanel, createProgress, createButton, с двумя способами запуска. Build Layout выполняет код во время разработки и оставляет вам реальные элементы, которые можно поправить руками; Run Live запускает его прямо в игре.

Две связи наружу: графика HUD открывается в Inkwell или Vectra и привязывается обратной ссылкой, а не копируется, а документ Vectra можно импортировать как элементы HUD. Элемент мини-карты: это отдельная сущность, с дальностью, сеткой и маркерами игрока, врагов, союзников, предметов и целей.

Редактор тайлмапов#

Одиннадцать инструментов: brush, eraser, fill, rectangle, select, eyedropper, stamp, autotile, prop, zone и path, на четырёх проекциях карты: orthogonal, isometric, staggered isometric и hexagonal.

Автотайлинг поставляется с четырьмя шаблонами, и число в каждом имени означает количество тайлов, которое он ожидает: Blob 47 (полные углы и края), Wang 16 (по краям), Simple 4 (NSEW) и RPG Maker A2 (48 тайлов, совместимо с картами, созданными там).

Над самими тайлами лежат ещё два слоя. Zones размечают игровой смысл: buildable, water, forest, road, farm, residential, commercial, blocked, а props размещают объекты по категориям: деревья, камни, здания, растительность, вода, дорожки. Карты живут в собственной базе данных браузера, поэтому несохранённая карта переживает перезагрузку.

Инвентарь, таблицы данных и диалоги#

Три редактора, позволяющие игре иметь контент, который не живёт в коде.

Inventory редактирует каталог и применяет его к сцене. У предмета есть действия, а действие: это триггер: use, equip, unequip, плюс один из восьми типов: message, heal, damage, grant, remove, event, toast, scene. У самой панели три раскладки (grid, list, compact), три пресета внешнего вида (graphite, midnight, warm) и четыре визуальных слота: background, slot, equipment, tooltip, которые открываются в другом модуле для полноценной перерисовки.

Data tables типизированы: колонка бывает text, number, bool или ref. CSV импортируется и экспортируется. Каждое изменение проходит через чистые функции, и именно это гарантирует, что таблица, которую пишет экспорт, идентична таблице, которую читает сборка.

Dialogue trees: это узлы с говорящим и репликой. Узел либо продолжается в один next, либо разветвляется на choices, каждый со своим текстом и своим назначением: переключатель ветвления является единственным структурным решением в этом редакторе.

Анимация и камера#

Cinematic Sequencer строит последовательности с длительностью и флагом цикла, по одной дорожке на сущность, и ключевыми кадрами, захватываемыми на позиции плейхеда: Add Key берёт текущее значение сущности, а не просит вас его вписать. Редактор графа под ним показывает время относительно прогресса, с круглыми рычагами для сглаживания: наклон и есть скорость. У монтажных планов свои длительности, а для леттербокса доступно кадрирование Cinemascope (1.422:1).

Camera Tools покрывает FOV, позицию, цель, режим и скорость, плюс закладки (bookmarks) для ракурсов, к которым вы постоянно возвращаетесь, и слои камеры.

Audio#

Audio Manager хранит аудио-события, дорожки и микшер с каналами и категориями. Эффекты на каждый источник: low-pass, high-pass и reverb send; режим random выбирает между несколькими клипами, чтобы повторяющийся звук перестал читаться как петля. Скраббинг проигрывает звук во время перетаскивания плейхеда.

Профайлер#

Разбивка по кадру, а не просто счётчик кадров: рендер камеры, вычисление mesh, частицы, спрайты и компиляция шейдеров, каждая величина помечена как реальная или оценочная, поэтому число, полученное измерением, никогда не спутать с числом, полученным из модели. Рядом счётчики: mesh и активные mesh, источники света, камеры, физические тела.

Запись явная и завершается списком проблем, а не графиком для интерпретации: низкий FPS, много draw call, много треугольников, много памяти: относительно заданной вами целевой частоты кадров.

Строим сцену#

Сущности#

Вьюпорт Engine с гизмо на выбранной сущности

Новая сцена приходит с Main Camera, Directional Light, Skybox и Ground Plane.

Граф сцены с четырьмя сущностями, с которых начинается новая сцена

Что можно добавить: Empty, Cube, Sphere, Cylinder, Plane, Light, Camera, Script, Mesh, плюс два семейства, приходящих уже подключёнными:

  • Characters: Third-Person, First-Person (FPS), Top-Down, Platformer, Basic.
  • Props: Pickup (heal) и Hazard (damage).

Граф сцены умеет искать, фильтровать по типу, добавлять, дублировать и удалять; сущности вкладываются друг в друга, а сменить родителя можно перетаскиванием. У размещения есть привязка и кисть расстановки (scatter brush) для быстрого заполнения земли.

Инспектор#

Трансформация (позиция, поворот, масштаб), переключатель Enabled и компоненты сущности: добавляются, настраиваются и удаляются здесь, с Add Script внизу. Выберите несколько сущностей, и инспектор переключится на пакетное редактирование, так что изменение одного поля затронет их все.

Консоль#

Не просто журнал. Она фильтрует по уровню (all, logs, info, warning, error), привязывает сообщение обратно к сущности, которая его вызвала, и несёт строку выражений: введите выражение, Enter выполняет его прямо на живой сцене, стрелки перемещают по истории.

Придаём поведение#

Три пути, и они сосуществуют.

Scripts#

JavaScript с хуками жизненного цикла, и у него есть собственный справочник:

function start() {}                     // once, when the entity starts
function update(dt) {}                  // every frame
function fixedUpdate(dt) {}             // fixed timestep, for physics
function onCollisionEnter(other) {}     // first frame of contact
function onCollisionStay(other) {}      // every frame while touching
function onCollisionExit(other) {}      // contact just ended
function onTriggerEnter(other) {}       // entered a trigger volume
function onTriggerExit(other) {}
function onMessage(msg, data, senderId) {}   // entity-to-entity messaging
function onAnimationEvent(name, data) {}
function onDestroy() {}

Столкновения и триггеры срабатывают и в 2D, и в 3D, и каждая сторона получает собственную нормаль контакта: other.contact.normal направлена от другой сущности к этой. Именно это позволяет скрипту отличить «я приземлился на него» от «он приземлился на меня»: платформерный stomp читает other.contact.normal.y > 0.5.

Редактор скриптов#

F2, или Add Script на сущности. Редактор Monaco с вкладками, несколько скриптов открыты одновременно, каждый хранится в собственной базе данных браузера, а не в файле проекта, поэтому несохранённый буфер переживает перезагрузку.

Пять диалектов, одна программа. Переключатель языка предлагает JavaScript, BASIC, Python, C# и Rust. Работает это не так, как выглядит: источник истины: JavaScript, а остальные четыре: это представления, транспилированные из хранимого JS. Переключение с Python на Rust не переводит Python: оно возвращается к JS, из которого был сгенерирован Python, и переводит уже его. Именно многошаговый перевод портит программу, и редактор отказывается его делать.

Тринадцать шаблонов в пяти категориях, каждый с меткой сложности:

КатегорияШаблоны
Basicsпустой скрипт с заглушками жизненного цикла
Movementавтовращение · WASD · движение по осям в 3D · физический прыжок с определением земли · камера от третьего лица, следующая за персонажем
Gameplayтриггерная зона · полоса здоровья с уроном и лечением · таймерный спавнер
AIпатрулирование с оповещением о близости игрока
Advancedасинхронная катсцена в стиле Verse · структурированная конкурентность · полный тест поверхности API

Пресеты контроллера персонажа и стартовые props (pickup, hazard) находятся в том же списке, что на практике удобно для установки готового контроллера на импортированного персонажа.

Запуск и отладка. F5 запускает, F9 ставит точку останова. Отладчик останавливается на строке, шагает по одному кадру и показывает актуальные значения через watch-выражения. Script Lab запускает программу вообще без привязанной сущности: черновик для работы с API, а не компонент на объекте.

Рядом с кодом: справочник API, список символов открытого файла и библиотека сниппетов с избранным и недавними. Ctrl+S сохраняет, Ctrl+F ищет, Ctrl+H заменяет, а редактор поставляется с восемью темами.

Blueprints и поведения#

Визуальный граф, библиотека готовых поведений и слой конечного автомата поверх стека поведений.

Граф содержит 267 нод в двадцати двух группах: Math, Scene, Entity, Animation, Flow Control, String, Events, Physics, UI, Array, Vector, Transform, Debug, Input, Utility, Game, Boolean, Camera, Tween, Variables, Audio и семейства 2D и 3D. Их разделяют три свойства, и именно из них состоит граф: 17 event-нод запускают выполнение, 117 pure-нод вычисляют значение без побочного эффекта и без пина выполнения, а 9 latent-нод завершаются позже: именно они позволяют выразить задержку или tween без собственного конечного автомата.

Четыре инструмента: select V, pan H, comment C, reroute R, на канвасе, масштабируемом от 0.1× до 3× с мини-картой. Переменные бывают шести типов: boolean, integer, float, string, vector3 и object. Описание каждой ноды находится в её подсказке, и это единственное место, где библиотека такого размера может себя объяснить.

Конечный автомат#

Собственная панель, и намеренно не панель Animator: условия в Animator представляют собой плоский enum с написанной вручную интерфейсной частью на каждый случай, тогда как здесь условия структурированы и говорят о мире.

Семь условий, и каждое из них представляет собой вопрос о сцене: sees (помеченная цель в радиусе, опционально в пределах угла и в прямой видимости), lost (нет цели N секунд), distance относительно порога, health, message received, timer (время, проведённое в текущем состоянии) и flag (значение на общей доске blackboard). Два комбинатора, and и or, перечислены оба, хотя or уже существовал неявно: два перехода в одно и то же состояние: это и есть or, но у условия «оно видит меня И у меня всё ещё есть здоровье» вообще не было формы.

⚠️ Health сравнивается как доля от максимума, а не как абсолютное значение. Порог «меньше 30 HP» не переживёт перебалансировку; «меньше 0.3» переживёт.

При входе в состояние или выходе из него доступны четыре эффекта: отправить сообщение, установить ключ на blackboard, воспроизвести клип анимации или вызвать именованный эффект. Ни один из них ничего не двигает: движение остаётся за поведениями, а автомат решает, какое поведение активно.

Переход может начинаться из *, то есть из любого состояния. Валидатор возвращает список проблем, а не падает на первой же, поэтому недописанный автомат всё равно отрисовывается, и вы видите сразу всё, что не так. Позиции нод являются частью данных: граф, чья раскладка хранится вне сцены, у следующего, кто его откроет, окажется перетасованным.

BASIC#

Режим вьюпорта TXT: это классическое BASIC-окружение со встроенными демо-программами, и у языка есть собственный справочник. Здесь это настоящий язык, а не игрушка: многофайловые модули (#INCLUDE), типизированные числа (знаковые и беззнаковые 8/16/32/64-бит, float32 и float64), вложенные записи, методы объектов через SELF, ссылки (REF/BYREF), структурированные TRY/CATCH/FINALLY, условная компиляция, корутины, типизированные хендлы и вычисления на WebGPU со storage-буферами и сырым WGSL.

OPTION EXPLICIT включается по желанию; классические неявные переменные остаются поведением по умолчанию, чтобы импортированные программы продолжали работать.

Игра и сборка#

Play#

Play, Pause, Stop. При остановке баннер сообщает, что изменилось за сессию, поэтому правка, сделанная в режиме Play, никогда не сохраняется и не теряется молча. Сессии можно записывать и воспроизводить в отчёт об ошибке, а закладки сценария (scenario bookmarks) позволяют начать плейтест с середины уровня.

Build#

Build принимает тип игры (определяется по сцене или задаётся вручную: sidescroller/platformer, from/third person, текстовая) и цель сборки.

  • Web: WebGPU с откатом на WebGL, опциональный WebXR (VR/AR), минификация, счётчик FPS и опция embed assets, дающая единый файл.
  • Desktop и mobile: нативные сборки. Сцена экспортируется как данные (scene.glb + scene.json) и компилируется через сгенерированный проект на Bevy (Rust); скрипты там работают без изменений на встроенном рантайме QuickJS.

Сжатие настраивается по осям, алгоритму, текстурам, mesh, с пресетом качества, увязывающим всё это вместе. Сборки хранятся в истории со своими размерами (исходный против сжатого) и могут быть скачаны повторно позже.

Нативная сборка содержит только то, что умеет экспортировать экспортёр. glTF не захватывает кастомные шейдеры, thin instances, процедурное небо или постобработку, поэтому система времени выполнения, не перенесённая на сторону Bevy, будет отсутствовать в десктопной или мобильной сборке, выглядя при этом идеально в вебе. Проверяйте нативную сборку, прежде чем на неё полагаться.

Multiplayer#

Панель Multiplayer room подключает сцену к игровому серверу Colyseus. Бесплатный общий тестовый сервер доступен без аккаунта и без настройки; проекту также можно выделить собственный сервер. Комната привязана к коду доступа, который можно оставить у себя или кому-то передать.

Файлы, которые он читает и пишет#

Нативный формат.engine
Импорт.glb, .gltf, .obj, .fbx, .png, .svg, .mp4, .webm, .mov, .scene
Экспортвеб-сборка, нативная desktop/mobile-сборка, scene.glb + scene.json

Передача работы в другие студии#

Принимает mesh из Sculpt, Retopo и Pigment, целые сцены из Render, пиксель-арт, анимации, наборы PBR-материалов из Matter, 2D-риги, видеопроекты, изображения, векторную графику и объекты Vectra.

Создаёт 2D-риги.

Макет экрана из Vectra приходит как структура, а не как картинка. Он становится иерархией HUD, которую Engine может выстроить и озвучить скриптом: разница между дизайном, который можно подключить к логике, и скриншотом этого дизайна.

Горячие клавиши#

Cmd/Ctrl + K открывает собственные команды Engine из палитры, наряду с глобальными. У Engine также есть отдельная панель с поиском по горячим клавишам в собственных настройках: там их куда больше, чем поместилось бы на странице горячих клавиш.

Ограничения и типичные проблемы#

  • Пустой вьюпорт обычно означает проблему браузера, а не сцены. Engine требует WebGL 2; проверьте, что аппаратное ускорение включено.
  • Systems и Tools делят одну секцию. Если панель «пропала», она, скорее всего, в другой из них.
  • Консоль: первое место, куда стоит заглянуть, а не последнее: она привязывает ошибки к вызвавшей их сущности.
  • Компонент, добавленный в режиме Play, может не пережить остановку. Читайте баннер, который появляется при остановке.
  • Физика различается между 2D и 3D по своему решателю, хотя коллбэки скрипта одинаковы. Контакт покоя в 2D определяется с зазором 2 мм, потому что решатель доводит проникновение ровно до нуля, прежде чем срабатывает определение.