Переменные, ветвления и циклы в Blueprint

Урок показывает, как хранить данные в переменных Blueprint и управлять логикой через ветвления и циклы.

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

Переменные и их типы

Переменные создаются в панели My Blueprint слева. У каждой есть тип: Boolean, Integer, Float, String, Vector, ссылка на Actor и многие другие. Переменную можно сделать видимой в редакторе (флаг Instance Editable / «глаз»), и тогда её значение можно настраивать для каждого экземпляра объекта прямо в панели Details — это аналог public-полей в Unity, которые показываются в инспекторе.

Чтобы использовать переменную в графе, её перетаскивают в окно: при отпускании Unreal спрашивает, нужна нода Get (прочитать) или Set (записать).

Ветвление через Branch

Чтобы граф принимал решения, используют ноду Branch — это визуальный if. У неё вход Condition (булево) и два выхода потока: True и False.

[Get Health] --> [Health > 0 ?] --(bool)--> [Branch]
                                              |-- True  --> [продолжить игру]
                                              |-- False --> [Game Over]

Циклы

Для повторений есть ноды ForLoop и WhileLoop. ForLoop принимает First Index и Last Index, на каждой итерации выдаёт текущий индекс через пин Index, а по завершении запускает выход Completed.

[ForLoop]  First=0  Last=4
   |-- Loop Body --> [Spawn Enemy at index]
   |-- Completed  --> [Print: "Все враги созданы"]

Логические операции

Условия собирают из нод сравнения и логики: Greater (больше), Equal (равно), AND, OR, NOT. Их выход — булево — подаётся в Condition ноды Branch. Так строится любая логика принятия решений.

НодаАналог в коде
Branchif / else
ForLoopfor (i = first; i <= last; i++)
WhileLoopwhile (condition)
Sequenceвыполнить шаги по порядку

Как работает под капотом

Переменные хранятся как поля экземпляра Blueprint-объекта. Get просто читает поле, Set записывает. Branch компилируется в условный переход в байт-коде VM. ForLoop на самом деле разворачивается в счётчик с проверкой и переходом — то есть это не «магия нод», а обычный цикл, нарисованный визуально.

Частые ошибки

  • Бесконечный WhileLoop. Если условие никогда не станет ложным, движок зависнет — Unreal даже выдаст предупреждение о слишком долгом цикле.
  • Забыть про Set. Изменение значения требует ноды Set; одна Get ничего не меняет.
  • Не сделать переменную Instance Editable. Тогда её нельзя настроить в Details для конкретного объекта.

Массивы и перебор элементов

Кроме одиночных значений, переменная может быть массивом — упорядоченным списком. Массивы появляются повсюду: список врагов на уровне, инвентарь игрока, точки патруля. Для массива доступны ноды Add (добавить), Remove (удалить), Get (взять по индексу) и Length (длина). Чтобы пройтись по всем элементам, используют ForEach Loop: он сам перебирает массив и на каждой итерации выдаёт текущий элемент и его индекс. Это избавляет от ручного счётчика и делает перебор нагляднее обычного ForLoop.

Понимание массивов открывает целый класс задач. Хотите найти ближайшего врага? Переберите массив врагов ForEach Loop, сравнивая расстояния. Нужен случайный предмет из списка наград? Возьмите элемент по случайному индексу. Многие игровые механики — это, по сути, операции над списками, и блюпринты дают для них удобный визуальный инструментарий.

Итоги

  • Переменные хранят данные; Get читает, Set записывает.
  • Instance Editable показывает переменную в Details (аналог public в Unity).
  • Branch — визуальный if, ForLoop и WhileLoop — циклы.
  • Условия собираются из нод сравнения и логики AND/OR/NOT.
Проверьте себя
1. Какая нода работает как if в Blueprint?
ASequence
BBranch
CForLoop
DGet
2. Что нужно сделать, чтобы переменную можно было настраивать в Details для каждого объекта?
AСделать её Instance Editable
BУдалить ноду Set
CПереименовать переменную
DСделать её Float
3. Чем опасен WhileLoop с условием, которое никогда не станет ложным?
AНичем
BДвижок зависнет на бесконечном цикле
CПеременные обнулятся
DГраф не скомпилируется