Verse Scripting для начинающих: ваш первый UEFN Device
Что такое Verse?
Verse — это язык программирования Epic Games, разработанный специально для UEFN. Если вы использовали Python, Verse покажется вам знакомым — он использует синтаксис на основе отступов и читается почти как английский. Но он также заимствует идеи из функциональных языков программирования, таких как Haskell, что делает его мощным для игровой логики.
Любое пользовательское поведение в UEFN, выходящее за рамки базовых устройств Creative, требует Verse. Системы подсчёта очков, пользовательский UI, менеджеры экипировки, управление раундами, ранговая прогрессия — всё на Verse.
Настройка вашего первого Verse Device
В UEFN создайте новый Verse device:
- Откройте ваш проект в UEFN
- Перейдите в меню Verse → Create New Verse File
- Выберите Creative Device в качестве шаблона
- Назовите его
my_first_device
UEFN генерирует шаблонный файл, который выглядит так:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
my_first_device := class(creative_device):
OnBegin<override>()<suspends>:void=
Print("Hello, Fortnite!")Давайте разберём этот код.
Понимание основ
Инструкции `using` — они импортируют API. /Fortnite.com/Devices предоставляет доступ к устройствам Creative. /Verse.org/Simulation предоставляет основные функции симуляции. /UnrealEngine.com/Temporary/Diagnostics даёт вам Print() для отладки.
Определение класса — my_first_device := class(creative_device) создаёт новый класс устройства, наследующий от creative_device. Это ваше пользовательское устройство, которое вы размещаете в мире.
OnBegin — эта функция запускается при старте игры. Тег <override> означает, что вы заменяете OnBegin родительского класса. Тег <suspends> означает, что эта функция может использовать асинхронные операции (например, Sleep()).
Создание Kill Counter
Давайте создадим что-то полезное — устройство, которое отслеживает килы и отображает их. Сначала вам нужно сослаться на UI-устройство в вашем уровне:
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
kill_counter := class(creative_device):
@editable
EndGameDevice : end_game_device = end_game_device{}
var KillCounts : [agent]int = map{}
OnBegin<override>()<suspends>:void=
# Subscribe to elimination events
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
OnPlayerAdded(Player : player):void=
if (FortCharacter := Player.GetFortCharacter[]):
FortCharacter.EliminatedEvent().Subscribe(OnEliminated)
OnEliminated(Result : elimination_result):void=
if (Eliminator := Result.EliminatingCharacter):
if (Player := player[Eliminator.GetAgent[]]):
if (set KillCounts[Player] += 1) {}Ключевые концепции Verse
Выражения, которые могут завершиться неудачей — Verse использует if для операций, которые могут не выполниться. Player.GetFortCharacter[] может ничего не вернуть, если у игрока нет персонажа. Скобки [] указывают на вызов, который может завершиться неудачей, а оборачивание в if элегантно обрабатывает случай неудачи.
Мутабельность — переменные, объявленные с var, могут быть изменены. Без var значения по умолчанию неизменяемы. Это предотвращает случайные мутации состояния.
События и подписки — Verse использует событийно-ориентированный паттерн. Вы подписываетесь на события (PlayerAddedEvent, EliminatedEvent) и предоставляете функции обратного вызова. Так вы реагируете на геймплей без поллинга.
Словари и массивы — [agent]int — это тип map (словарь), сопоставляющий агентов с целыми числами. map{} создаёт пустой словарь.
Распространённые паттерны
Вот паттерны, которые вы будете использовать практически в каждом Verse device:
Таймер/задержка:
Sleep(5.0) # Ждать 5 секундЦикл:
loop:
DoSomething()
Sleep(1.0)Итерация по игрокам:
Players := GetPlayspace().GetPlayers()
for (Player : Players):
# Сделать что-то с каждым игрокомСледующие шаги
Это руководство охватывает абсолютные основы. Чтобы углубиться:
- Прочитайте официальную документацию Verse от Epic
- Изучайте open-source проекты на Verse на GitHub
- Практикуйтесь, воссоздавая существующие устройства Creative на Verse
- Присоединяйтесь к сообществу UEFN Discord для получения помощи
Создание пользовательских Verse devices — это то, что отличает профессиональных UEFN developers от любителей. Если вам нужны сложные пользовательские механики для вашей карты, наша команда специализируется на Verse scripting — от пользовательских систем подсчёта очков до полноценных фреймворков игровых режимов.
Ознакомьтесь с нашим портфолио, чтобы увидеть Verse в действии на 10 опубликованных картах с более чем 4,8 миллиарда минут игры.
Kaio
Разработчик карт UEFN в Kaio Corporation
Профессиональный разработчик карт Fortnite UEFN. Более 4,8 млрд минут сыграно . Подробнее →
Нужна пользовательская карта?
Свяжитесь с нами →