Verse

Разработчику

Verse — язык программирования Epic Games для игровой логики в UEFN (Unreal Editor for Fortnite) и в будущем Unreal Engine 6. На нём описывают правила матча, счёт, спавн врагов, экономику острова и сетевые события. Графику и анимацию по-прежнему собирают в редакторе; Verse отвечает за поведение.

Контекст движка — Unreal Engine. Термин в глоссарии.


Где Verse уже работает и куда движется

Среда Роль Verse
UEFN (сейчас) Основной текстовый язык логики островов Fortnite. Редактор только на ПК, публикация через клиент Fortnite.
UE6 (с конца 2027) Планируется как главный язык сценариев во всём движке — рядом с C++ на уровне ядра.
Классический UE5 Verse не заменяет Blueprints и C++ в обычных проектах до выхода UE6.

Epic задумывал Verse под онлайн-миры с тысячами игроков — постоянное состояние, сетевые транзакции, масштабирование на серверах. Именно поэтому в языке с самого начала заложены откаты состояния и явная работа с ошибками, а не классические исключения try/catch.


Словарь новичка

Термин Значение
Failable expression Выражение, которое может не дать результата (нет элемента в массиве, неудачное приведение типа). В Verse это нормальный путь, а не "авария".
<decides> Модификатор функции — она может завершиться неудачей (failure).
<transacts> Модификатор функции с транзакционной семантикой — при неудаче откатываются изменения состояния внутри вызова.
suspends Асинхронная функция — может ждать (Sleep, Await) и уступать поток.
spawn / race / sync Встроенная конкурентность — параллельные задачи, гонка, ожидание всех веток.
Device Готовый игровой блок в UEFN (спавнер, кнопка, зона урона). К Verse подключают обработчики событий.
Effect system Система эффектов — язык помечает, может ли код откатываться, обращаться к сети и т.д.

Общая база "что такое код" — Что такое код. Параллельность в других языках — многопоточность.


Чем Verse похож и чем отличается от других стеков

Стек Аналогия для новичка
Blueprints (UE5) Тоже логика в движке, но визуальные узлы. Verse — текст, проще версионировать в Git и рефакторить в больших проектах.
C++ (UE5) Низкий уровень, максимальная скорость. Verse выше — безопаснее для геймплея, рантайм сам думает про сеть и откаты.
Luau (Roblox) Тоже скрипт внутри UGC-платформы. Luau ближе к Lua; Verse — отдельный язык с failable-логикой и транзакциями.
C# (Unity) Оба — "скриптовый" слой поверх движка. Verse сильнее заточен под массовый онлайн и спекулятивное выполнение.

Ключевые идеи языка

Статическая типизация

У каждой переменной и функции есть тип (int, float, string, свои игровые типы). Ошибки типов ловятся до запуска в редакторе UEFN. Это ближе к C#, чем к динамическому Lua.

Failable-выражения вместо исключений

Операции вроде доступа к массиву или поиска игрока могут не сработать. В Verse это выражается явно:

# Упрощённый учебный пример — синтаксис UEFN
if (Player := GetPlayer[Agent]):
    Print("Нашли игрока")
  • GetPlayer[Agent]failable-вызов (квадратные скобки).
  • if (...) — ветка выполняется только при успехе.
  • Оператор or задаёт значение по умолчанию, если выражение не удалось.

Такой стиль убирает целый класс багов "забыли проверить null".

Транзакции <transacts>

Функции с <transacts> могут менять состояние мира спекулятивно. Если внутри что-то пошло не так, рантайм откатывает все изменения этой функции.

Типичный сценарий — покупка предмета:

  1. списать валюту;
  2. добавить предмет в инвентарь;
  3. если инвентарь переполнен — вся операция отменяется, золото возвращается.

В C++ или Python такую логику пишут вручную (if + откат). Verse делает это на уровне языка.

Асинхронность и spawn

Игровые события часто ждут таймер или ответ сервера. Функции помечают suspends и могут вызывать Sleep(). Для параллельных задач есть spawn{} (запустить и не ждать), race{} (кто первый), sync{} (дождаться всех).

Отступы вместо фигурных скобок

Тело функции и блоки if задаются отступами (как в Python). Комментарии — через #, не //.


Минимальный синтаксис

Модуль и функция

using { /Fortnite.com/Devices }

my_device := class(creative_device):

    OnBegin<override>()<suspends>:void =
        Print("Остров запущен")
  • creative_device — базовый класс устройства UEFN.
  • OnBegin — точка входа при старте сессии (аналог BeginPlay в Unreal).
  • <suspends> — можно использовать асинхронные вызовы внутри.

Переменные и циклы

Score : int = 0

AddPoint():void =
    set Score = Score + 1

CountDown():void =
    for (I := 3..1):
        Print("Старт через {I}")
  • set — изменение изменяемой переменной.
  • for (I := 3..1) — цикл по диапазону.
  • {I} в строке — подстановка значения.

Паттерны по значению

DescribeRound(Winner:int):void =
    case (Winner):
        1 => Print("Победил синий")
        2 => Print("Победил красный")
        _ => Print("Ничья")

case похож на switch в C# или match в современных языках.


Типичные ошибки начинающих

Ошибка Как правильно
Писать // для комментария Только #
Вызывать failable-функцию с () Failable — с квадратными скобками []
Цепочка else if Отдельные блоки if: для каждого условия
Бесконечный loop без suspends В теле цикла нужна хотя бы одна асинхронная операция
Путать Verse с C++ синтаксисом Verse — отдельный язык, не надмножество C++

Как начать учить Verse

  1. Установить Epic Games Launcher → Fortnite → UEFN (только Windows PC с достаточным GPU).
  2. Создать проект острова по шаблону Blank или Gameplay.
  3. Разместить Player Spawner, Button, Mutator Zone — устройства из палитры.
  4. Прикрепить Verse-скрипт к устройству (счётчик очков, открытие двери по кнопке).
  5. Start Session в редакторе — тест локально; друзьям — код острова 1234-5678-9012.
  6. Публиковать и смотреть метрики в Creator Portal.

Пошаговый workflow UEFN — UGC-платформы. Для детей короче — UEFN в разделе для детей.

Официальные материалы

  • Verse Language Reference — справочник Epic (нужен аккаунт Developer).
  • UEFN Documentation — редактор и устройства.
  • Book of Verse — неофициальная книга сообщества с разбором транзакций и failable-логики.

Verse и Unreal Engine 6

В UE6 Epic расширяет Verse на весь движок:

  • единые API для материалов, мешей, Niagara и ассетов Fab;
  • тот же код для десктопного релиза и острова в Fortnite;
  • MCP-ассистенты в редакторе помогают писать и объяснять Verse.

C++ останется для ядра движка и плагинов. Blueprints в ранних сборках UE6 ещё поддерживаются, позже появятся конвертеры в Verse.


См. также