Перейти к основному содержимому

Патчи

Патч — это поведение, которое вы рисуете. Он аккуратно встаёт между событиями, которые просты, но не умеют хранить значение и считать, и скриптами, которые умеют всё, но требуют писать код.

Тянитесь к патчу в первый же раз, когда поймаете себя на «…но только если счёт больше десяти» или «…сдвинуть чуть дальше каждый раз».

Ваш граф становится настоящим скриптом

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

Каждая нода со своими портами: справочник нод патчей — 203 ноды в 24 категориях.

Четыре вида нод

ВидКак узнатьЧто это
Eventтолько выходы, один из них — пульсоткуда граф начинается: при запуске, по нажатию, каждый кадр
Effectпульс на входе и пульс на выходечто-то делает, по порядку
Controlразветвляет или повторяет пульсветвление, вентиль, повтор, for-each, once, задержка
Dataпульсов нет вообщезначение — число, сумма, поле компонента

Провод пульса — это порядок, в котором всё происходит. Идите по нему от ноды события — и вы читаете последовательность. Провода данных просто несут значения; порядка у них нет.

Порты и провода

Порты типизированы (число, логическое, строка, вектор, цвет, объект), и несовпадающие типы не соединяются — это ловит немало ошибок ещё до запуска.

Порт вектора раскрывается в x, y и z, так что можно подключить один и вписать два остальных.

Неподключённый вход использует то значение, которое вы вписали в ноду. Обычно это то, что нужно: подключайте только то, что меняется.

Как сказать ноде, с каким объектом работать

Ноды компонентов («получить transform», «задать материал») должны знать, у какого объекта.

Оставьте привязку пустой — это означает этот объект, тот, к которому прикреплён патч. Заполните — и нода будет работать с указанным.

Два удобства, о которых стоит знать:

  • Get-ноды снисходительны. Чтение компонента, которого у объекта нет, даёт ничего, а не ломает граф.
  • Set-ноды пишут только то, что вы заполнили. Всё, чего вы не трогали, остаётся как было.
Порты поворота — в градусах

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

Что есть в каталоге

КатегорияЧто там найдёте
events30 отправных точек — запуск, кадр, нажатие, клавиши, столкновения, трекинг
componentsчтение и запись любого компонента
math · vector · logic · stringарифметика, сравнения, векторы, текст
flowветвление, вентиль, повтор, for-each, once, задержка, последовательность
stateсчётчик, переключатель, таймер, сглаживание
entities · lifecycleнайти объекты, создать, породить, уничтожить
physicsимпульсы, силы, скорость, raycast
netмультиплеер — отправить, принять, общее состояние, породить
globals · variables · messagingзначения, общие с другими патчами и скриптами
uiчтение и запись переменных карточки интерфейса
functionsвызвать другой патч или скрипт

Переиспользование патча

Сохраните граф как ресурс — и его можно бросать на другие канвасы. Как он себя поведёт, зависит от того, как вы его собрали:

Вы собралиПолучите
ни входных, ни выходных нодповедение — бросили, и оно работает, провода не нужны
входы, выходы и вход-пульсшаг — выполняется, когда приходит пульс, после чего выходы готовы
входы и выходы, без пульсафункцию — её выходы вычисляются там, где их читают

Его сокеты берутся из входных и выходных нод, которые вы положили внутрь: добавили одну — она появилась у всех вызывающих. Правите патч — всё, что его вызывает, обновляется на лету.

У патча-функции нет собственного объекта

Внутри чистой функции нет «этого объекта», так что ноды объектов и компонентов там не к месту. Держите в функциях данные, математику и логику, а работу со сценой делайте у вызывающего.

Патчи умеют вызывать и скрипты — это обычный способ дотянуться до того, чего нет в каталоге.

Значения, переживающие граф

Три способа что-то сохранить, отличающиеся дальностью:

ХранилищеОбщее с
variablesнодами этого одного патча
globalsвсеми патчами, скриптами и событиями проекта
messagesвсеми, кто слушает, — разовым уведомлением по имени

У globals две области: на весь проект (переживают переход между spaces) и только на space (начинаются с чистого листа). Имена вписываются, а не подключаются проводом, что делает маршрутизацию предсказуемой.

Аварийный люк

Две ноды принимают JavaScript напрямую: expression возвращает значение, action выполняет инструкции. Внутри доступно всё, до чего дотягивается скрипт.

Они существуют ради той одной мелочи, которой не хватает в каталоге, а не как образ жизни. Если вы замечаете, что пишете в них много, — напишите скрипт и вызовите его из графа.

Когда что-то не так

Откройте панель кода. Граф, который не компилируется (петля в проводах данных, сломанный JavaScript в ноде action), скажет вам об этом там.

И сломанный патч никогда не утаскивает сцену за собой: остальные продолжают работать.


Дальше: Игровые контролы — дайте людям ходить.