Blueprint переменные (Variables) в Unreal Engine

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы поговорим о том, что такое в Unreal Engine переменные, и в частности, Blueprint Variables — переменные в Blueprint (UE4, UE5). Обсудим типы данных, репликацию, настройки и многое другое.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Переменные (Variables) в Unreal Engine

Переменные (Variables) в Unreal Engine
Переменные (Variables) в Unreal Engine

Переменные в Unreal Engine (Variables) — это именованные области памяти, предназначенные для хранения данных определённого типа. Они позволяют сохранять и изменять информацию в процессе выполнения игры, что делает их основой для реализации динамического и интерактивного поведения игровых объектов. Переменные используются, например, для отслеживания уровня здоровья персонажа, счёта игрока, позиции объекта в пространстве, вывода текста на экран или хранения ссылки на другого Актора.

Как уже говорилось выше, в Unreal Engine переменные применяются для хранения данных, определяющих состояние объектов — от простых значений, таких как числа, логические значения и текстовые имена, до сложных структур и ссылок на другие объекты в игре. К таким типам данных относятся:

  • простые типы данных: int, float, bool;
  • текстовые типы: String, Name и Text, где последний используется для локализуемого текста;
  • геометрические типы: Vector (позиция), Rotator (вращение), Transform (полное преобразование);
  • ссылки на компоненты: переменные могут хранить ссылки на компоненты, например, такие как Static Mesh Component, Camera Component, Audio Component или другие компоненты, чтобы управлять ими в логике;
  • ссылки на объекты: переменные могут указывать на экземпляры Blueprint, такие как Character, Pawn, User Widget и другие Акторы;
  • ссылки на классы: с помощью переменных можно хранить типы объектов, что позволяет динамически создавать Акторы или проверять совместимость типов;
  • ссылки на структуры, перечисления и интерфейсы.

Таким образом, благодаря своей универсальности, переменные в Unreal Engine используются не только для хранения состояния, но и через хранение внутри себя ссылок, для организации взаимодействия между объектами, управления компонентами, построения сложной логики и интеграции с системами UI, анимации, ИИ и мультиплеера.

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

В Unreal Engine переменные можно создавать как в Blueprints, так и в коде на C++, что обеспечивает гибкость для разработчиков любого уровня подготовки.

Blueprint Variables (переменные в Blueprint)

В редакторе Blueprints переменные создаются в панели My Blueprint — для этого нужно нажать на значок + рядом с заголовком Variables.

В редакторе Blueprints переменные создаются в панели My Blueprint — для этого нужно нажать на значок + рядом с заголовком Variables.
В редакторе Blueprints переменные создаются в панели My Blueprint — для этого нужно нажать на значок + рядом с заголовком Variables.

После создания переменной её параметры настраиваются во вкладке Details, где можно задать имя, тип данных и поведение. Ниже приведены основные настройки.

После создания переменной её параметры настраиваются во вкладке Details, где можно задать имя, тип данных и поведение
После создания переменной её параметры настраиваются во вкладке Details, где можно задать имя, тип данных и поведение
  • Variable Name — уникальный идентификатор переменной, используемый для обращения к ней в графах логики и отображения в редакторе. Имя должно быть уникальным в пределах конкретного Blueprint-класса и соответствовать правилам именования движка. При переименовании все ссылки на переменную в графе автоматически обновляются.
  • Variable Type — определяет тип данных, который может хранить переменная: от простого (Integer, Float, Boolean) до сложного (Vector, Object Reference, Struct). Тип влияет на доступные операции с этой переменной. Изменение типа возможно только при отсутствии конфликтов с существующей логикой. Также в этой опции устанавливается тип контейнера переменной: Single, Array, Set, Map. О типах контейнеров и самих типах данных переменных читайте ниже в статье.
  • Description — текстовое пояснение назначения переменной, отображаемое как всплывающая подсказка при наведении курсора. Используется для документирования и улучшения читаемости. Не влияет на функциональность, но повышает удобство совместной разработки.
  • Instance Editable — позволяет редактировать значение переменной для конкретных экземпляров объектов данного Blueprint в редакторе уровня, а не только в редакторе Blueprints. Эта настройка делает переменную доступной в панели Details выбранного объекта в режиме редактирования уровня. При отключении этой опции переменная будет доступна только для редактирования в самом Blueprint.
  • Blueprint Read Only — блокирует возможность изменения переменной через узлы Set в Blueprint, оставляя доступ только для чтения (Get). Полезно для переменных, управляемых через внутреннюю логику или C++, чтобы предотвратить случайные изменения.
  • Expose on Spawn — делает переменную доступной в качестве параметра при создании объекта через узел Spawn Actor или аналогичные функции. Это позволяет передавать начальные значения переменных при динамическом создании объектов во время выполнения. Переменная становится частью интерфейса создания объекта и отображается в соответствующих узлах.
  • Private — ограничивает доступ к переменной в производных Blueprints, скрывая узел Set и позволяя только чтение через Get. В родительском Blueprint остаётся полный доступ. Эта настройка полезна для защиты внутреннего состояния базового класса, когда дочерние Blueprints должны использовать значение, но не изменять его напрямую.
  • Expose to Cinematics — позволяет использовать переменную в системе Sequencer для создания Cinematic-контента и анимационных последовательностей. Переменная становится доступной для трекинга и анимации в рамках Cinematic-сцен. Эта настройка расширяет возможности использования переменной за пределами игровой логики.
  • Category — определяет группу, в которой переменная будет отображаться, позволяя организовать переменные по логическим категориям. Использование категорий улучшает навигацию и поиск переменных в сложных Blueprint с большим количеством свойств. Категории могут быть вложенными и настраиваемыми.
  • Replication — включает сетевую репликацию значения переменной в мультиплеерных играх. При изменении на сервере значение автоматически синхронизируется с клиентами. Работает только для Акторов с включённой репликацией (Replicates = True).
  • Replication Condition — определяет условия, при которых значение переменной будет реплицировано сетевым игрокам. Позволяет оптимизировать сетевой трафик, реплицируя данные только тем клиентам, которым они действительно нужны. Настройка помогает избежать избыточной передачи данных в сетевой игре. Работает только тогда, когда репликация включена (Replication = True) как у самой переменной, так и у Актора-владельца .
  • Config Variable — позволяет переменной считывать своё значение по умолчанию из конфигурационных файлов проекта.
  • Transient — указывает, что переменная не должна сериализоваться и сохраняться, оставаясь в памяти только во время выполнения. Значение переменной сбрасывается при каждой загрузке или создании экземпляра объекта. Полезно для временных данных, которые не должны сохраняться между сессиями игры.
  • Save Game — помечает переменную для сохранения значения переменной при использовании системы сохранения игр в Unreal Engine. Переменная будет включена в данные сохранения и восстановлена при загрузке игры. Требует ручной реализации логики сохранения/загрузки через объекты SaveGame.
  • Advanced Display — скрывает переменную из панели Details «по умолчанию», отображая её только при нажатии кнопки Advanced. Уменьшает визуальную нагрузку, скрывая редко используемые параметры.
  • Deprecated — помечает переменную как устаревшую, предупреждая разработчиков о том, что она больше не рекомендуется к использованию. Переменная продолжает функционировать, но отображается с предупреждающими значками в редакторе. Полезно при рефакторинге кода для постепенного отказа от старых переменных.
  • Defined Property Flags — отображает дополнительные флаги свойств, определенные в коде C++, которые могут влиять на поведение переменной. Эти флаги обычно устанавливаются автоматически системой или вручную в C++ коде. В большинстве случаев используется опытными разработчиками для тонкой настройки поведения переменных.
  • Default Value — начальное значение переменной, устанавливаемое при создании экземпляра. Для числовых типов — число, для ссылок — объект или класс, для массивов — список элементов. Может быть переопределено в редакторе или при спавне через параметры.

После завершения всех настроек новая переменная становится доступной для использования в визуальных скриптах Blueprint через узлы Get и Set (только при отсутствии запрещающих настроек), которые автоматически генерируются при перетаскивании переменной левой клавишей мыши (ЛКМ) из панели My Blueprint в граф логики. При этом если дополнительно к ЛКМ зажимать клавишу CTRL на клавиатуре, то в графе автоматически будет создан узел Get, если же дополнительно к ЛКМ зажимать клавишу ALT на клавиатуре, то в графе автоматически будет создан узел Set.

Узлы Get и Set, возвращающие и устанавливающие соответственно значения переменной
Узлы Get и Set, возвращающие и устанавливающие соответственно значения переменной

Типы переменных (типы данных) в Blueprint

Unreal Engine предоставляет богатую систему типов данных — от простых чисел и логических значений до сложных структур и ссылок. В редакторе Blueprints каждый тип данных ассоциируется с уникальным цветом узла, что помогает быстро визуально идентифицировать тип. Однако цвета могут незначительно отличаться в зависимости от версии Unreal Engine, поэтому стоит использовать их как ориентир, а не строгий идентификатор.

Простые типы (Basic Types)

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

Простые типы (Basic Types)
Простые типы (Basic Types)
  • Boolean, bool (цвет узла: тёмно-бордовый) — логический тип данных, который может принимать только два значения: True (истина) или False (ложь). Используется для хранения бинарных состояний, таких как включён/выключен, активен/неактивен, видим/невидим. Это один из самых часто используемых типов для управления логикой условий и переключателей.
  • Byte (цвет узла: сине-зелёный) — целочисленный тип, хранящий значения от 0 до 255 (беззнаковый байт, uint8). Подходит для хранения небольших числовых значений, например, уровень сложности, индекс в массиве, параметр цвета (RGB). Часто используется в сетевых пакетах и оптимизированных структурах.
  • Integer, int, int32 (цвет узла: цвет морской волны) — целочисленный тип, представляющий числа в диапазоне от −2,147,483,648 до 2,147,483,647. Применяется для подсчёта очков, уровней, количества предметов, здоровья и других дискретных значений. Один из самых универсальных типов. Подходит для индексов, счётчиков и параметров, где не требуется дробная часть.
  • Integer64, int64 (цвет узла: жёлто-зелёный) — целое число с расширенным диапазоном: от −9,223,372,036,854,775,808 до 9,223,372,036,854,775,807. Используется в случаях, когда стандартный Integer недостаточен — например, для хранения идентификаторов в крупных системах, временных меток (Timestamp), или в экономических симуляциях с огромными числами. Редко используется в обычном геймплее, но важен для специализированных задач.
  • Float (цвет узла: зелёный) — число с плавающей точкой (float), способное хранить дробные значения (например, 3.14, -0.5, 100.0). Используется для физических величин: скорость, масса, урон, таймеры, параметры анимации. Незаменим в расчётах, требующих высокой точности. Является основным числовым типом для математики, физики и плавного изменения параметров.
  • Name (цвет узла: сиреневый) — имя, специализированный тип для хранения коротких текстовых идентификаторов, оптимизированных для быстрого сравнения и поиска. Используется в системах тегов, имен анимаций, меток состояний и событий. Не предназначен для отображения пользователю — не поддерживает форматирование и локализацию. Эффективен и быстр в работе с HasMatchingGameplayTag, Anim Montage и другими системами движка.
  • String (цвет узла: пурпурный) — строка, тип данных для хранения текстовой информации в виде строки символов (например, «Player_01», «Debug_Message»). Подходит для временных меток, отладочных сообщений, внутренних меток и динамического формирования текста. Однако не поддерживает локализацию, поэтому не рекомендуется для отображения игроку. Используйте Text для UI.
  • Text (цвет узла: розовый) — текст, локализуемый тип данных, предназначенный для отображения текста игроку. Поддерживает переводы, форматирование, правильное отображение в разных языках и региональных настройках. Применяется в интерфейсе, подсказках, диалогах, названиях предметов и любой информации, видимой на экране. Является предпочтительным выбором для всего, что выводится в UI или показывается пользователю.

Геометрические типы

Геометрические типы переменных используются при работе с 3D-пространствами. Все их компоненты представляют собой значения типа float, что обеспечивает высокую точность при описании положения, вращения и масштаба объектов.

Геометрические типы
Геометрические типы
  • Vector (цвет узла: золотистый) — трёхмерный вектор, хранящий координаты по осям X, Y и Z, где каждая из этих координат — значение с плавающей точкой. Используется для представления позиции, направления, скорости или силы в 3D-пространстве. Ключевой тип для перемещения, физики, спавна объектов и работы с камерой.
  • Rotator (цвет узла: васильково-синий) — ротатор, тип данных, описывающий вращение объекта через углы Pitch (наклон вперёд/назад), Yaw (поворот влево/вправо) и Roll (наклон вокруг продольной оси). Каждый угол представлен как float и измеряется в градусах. Применяется для управления ориентацией Акторов, камер и вращающихся механизмов. Часто используется вместе с Vector для полного описания положения.
  • Transform (цвет узла: оранжевый) — трансформ, комплексный тип, объединяющий Location (Vector) — позицию, Rotation (Rotator) — вращение и Scale (Vector) — масштаб. Используется для полного описания пространственного положения объекта в мире. Подходит для сохранения точек спавна, телепортации или копирования состояния Актора.

Переменные-ссылки (References)

В Unreal Engine переменные-ссылки используются для хранения указателей на объекты и классы, что позволяет организовывать взаимодействие между Акторами, компонентами и системами.

Переменные-ссылки (References)
Переменные-ссылки (References)
  • Object Reference (цвет узла: небесно-голубой) — ссылка на конкретный объект в игре, например, на Актор, компонент или виджет. Может указывать на любой загруженный в память объект, унаследованный от класса Object (так как Object в Blueprint используется редко, то обычно указывается более конкретный тип, например, Actor Reference), чтобы получить доступ к его свойствам и функциям. Используется для взаимодействия с конкретными экземплярами: например, хранение ссылки на оружие, камеру или UI-элемент. Перед использованием рекомендуется проверять на валидность через узел IsValid (есть ли ссылка на конкретный объект).
  • Class Reference (цвет узла: пурпурный) — ссылка на класс (тип), а не на конкретный экземпляр. Обычно используется для динамического создания объектов через Spawn Actor. Подходит для выбора типа врага, оружия или пули при спавне. Позволяет настраивать поведение в редакторе, не изменяя код.
  • Soft Object Reference (цвет узла: бледно-голубой) — «мягкая» ссылка на конкретный объект (например, уровень, материал, звук). Не загружает объект в память до явного запроса (хранит путь к ассету), что полезно для оптимизации. Используется, когда нужно сослаться на ассет, но не загружать его сразу. Для непосредственного получения объекта используются специальные узлы загрузки Async Load.
  • Soft Class Reference (цвет узла: светло-розовый) — «мягкая» ссылка на класс, позволяющая отложить загрузку Blueprint или C++ класса до явного запроса, что полезно для целей оптимизации. Используется при динамической загрузке уровней, оружия или персонажей без блокировки игры. Часто используется в системах с открытым миром или крупными проектами, где важна оптимизация памяти.

В Unreal Engine переменные-ссылки не содержат сам объект, а лишь указывают на него, в отличие от простых типов, таких как Integer или Float, которые хранят свои значения напрямую. Это означает, что когда пользователь создаёт переменную типа Object Reference (Actor Reference или прочие ссылки-переменные), он не создаёт новый объект — он создаёт «указатель», который может быть направлен на уже существующий Актор, компонент или ресурс в сцене. Такой подход лежит в основе объектно-ориентированного программирования и позволяет гибко управлять связями между элементами игры.

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

Когда устанавливается значение ссылочной переменной (Set), сам объект не изменяется, а меняется то, на что ссылка указывает. Например, если имеется переменная TargetActor, и ей присваивается ссылка на врага, а затем — на игрока, сама переменная просто начинает указывать на другой объект, а предыдущий продолжает существовать независимо. Это важно понимать: присваивание ссылки не удаляет, не копирует и не изменяет объект — оно лишь перенаправляет указатель. Чтобы получить доступ к объекту, необходимо использовать узел Get, который возвращает текущее значение ссылки и позволяет вызывать функции, читать свойства или изменять состояние целевого Актора.

Особенно важно помнить, что ссылочная переменная может быть невалидной — то есть указывать ни на что (Null). Это происходит, если объект был удалён, ещё не создан, или ссылка была сброшена. Попытка вызвать функцию или получить свойство у невалидного объекта приведёт к ошибке или непредсказуемому поведению. Поэтому перед любым использованием ссылки на объект необходимо проверять её на валидность с помощью узлов IsValid, и работать с переменной только тогда, когда ссылка валидна (Is Valid, True, существует).

Перед любым использованием ссылки на объект необходимо проверять её на валидность с помощью узлов Is Valid
Перед любым использованием ссылки на объект необходимо проверять её на валидность с помощью узлов Is Valid

Также очень удобно в работе превращать сам узел Get в узел Get с проверкой на валидность. Для этого нужно кликнуть ПКМ по обычному узлу Get и в контекстном меню выбрать опцию Converted to Validated Get. Тогда данный узел превратится в узел с выходами Is Valid, Is Not Valid и возвращаемой ссылкой.

Converted to Validated Get
Converted to Validated Get

Также в Unreal Engine существуют «мягкие» ссылки (Soft References). Если обычные переменные-ссылки (Hard References, жёсткие ссылки) указывают на уже загруженный в память объект, то Soft References не загружают объект в память сразу, а позволяют подгружать его по требованию специальными функциями Async Load.

Загрузка объекта по мягкой ссылке Soft References функцией Async Load Asset
Загрузка объекта по мягкой ссылке Soft References функцией Async Load Asset

Soft References особенно полезны в крупных проектах, где важна оптимизация загрузки и использования памяти. Для Soft References нужно сначала загрузить объект, а затем уже проверять IsValid.

Таким образом, ссылки — это не просто способ хранения данных, а основа для построения динамических, интерактивных и масштабируемых систем в игре.

Пользовательские типы (Custom Types)

Пользовательские типы переменных в Unreal Engine используются для структурирования и расширения логики, позволяя создавать более понятные, безопасные и масштабируемые системы. В отличие от встроенных типов, пользовательские типы определяются разработчиком и могут быть переиспользованы в разных Blueprints и проектах.

Пользовательские типы переменных (Custom Types)
Пользовательские типы переменных (Custom Types)
  • Enum (цвет узла: сине-зелёный) — перечисление, пользовательский тип данных с ограниченным набором именованных значений, например пользовательский тип EMove может содержать следующие значения: Idle, Walking, Running. Каждое значение имеет внутренний числовой индекс, но использование имён вместо чисел делает логику более читаемой и защищённой от ошибок. Часто применяется для управления состоянием персонажа, режимами ИИ, типами оружия или игровыми событиями. Enum создаётся как отдельный ассет в Content Browser через ПКМ: Blueprint / Enumeration. После создания он становится доступным во всех Blueprints проекта и может использоваться как тип переменной, параметр функции или вход в узел Switch.
  • Struct (цвет узла: синий) — структура, пользовательский тип данных, объединяющий несколько полей в одну переменную. Например, структура SInventoryItem может включать поля: Name (Text), Count (Integer), Type (Enum), Equipped (Boolean). Это позволяет хранить и передавать связанные данные как единое целое, что упрощает работу с инвентарём, квестами, сохранениями и сетевой логикой. Struct создаётся как отдельный ассет в Content Browser через ПКМ: Blueprint / Structure. При создании вы определяете набор полей и их типов, после чего структура появляется в контент-браузере и становится доступной для использования в переменных, функциях и массивах любого Blueprints.

Контейнеры переменных (Variable Containers)

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

В Unreal Engine каждая переменная по умолчанию хранит одно значение (является Single) — то есть содержит ровно один элемент: одно число, одну строку, одну ссылку. Но когда требуется работать с группой данных — например, списком предметов, набором активных эффектов или таблицей прогресса, — на помощь приходят контейнеры: Array, Map и Set. Они представляют собой параметризованные типы данных, позволяющие хранить коллекции элементов одного или связанного типа.

При создании переменной в Blueprint можно выбрать не только базовый тип, такой как Integer или Actor Reference, но и указать, что переменная будет контейнером. Это делается рядом с выпадающим меню выбора типа во вкладке Details.

Контейнеры переменных: Single, Array, Map и Set
Контейнеры переменных: Single, Array, Map и Set

Таким образом, контейнер становится частью типа переменной, например: Array of String, Map of Name to Integer, Set of Actor.

  • Array — массив, упорядоченный список элементов, где каждый элемент имеет индекс, начинающийся с нуля. Все элементы в массиве должны быть одного типа: например, массив Integer, массив Actor Reference или массив String. Массивы идеально подходят для хранения инвентаря, очереди заданий, списка врагов на уровне или последовательности точек перемещения. Элементы массива (при помощи специальных функций для работы с массивами) можно добавлять, удалять или изменять, а также циклом For Each Loop перебирать их. Благодаря индексации, к любому элементу можно получить быстрый доступ по номеру.
  • Map — ассоциативный контейнер, хранящий данные в виде пар «ключ — значение», где каждый ключ уникален и служит идентификатором для соответствующего значения. Ключом может быть Name, String, Integer, Byte или Enum. Значением может быть практически любой тип: число, ссылка, структура и даже другой контейнер. Map используется, когда нужно быстро находить данные по имени или ID, например: прогресс по квестам («Quest01» — Completed), очки игроков («PlayerA» — 1500), настройки персонажа. Порядок элементов в Map не гарантирован и не должен использоваться в логике. Основное преимущество Map — быстрый доступ к значению по ключу.
  • Set — это набор уникальных значений, в котором каждый элемент может присутствовать только один раз. Set не хранит дубликаты: если вы попытаетесь добавить уже существующее значение, оно просто будет проигнорировано. Этот контейнер особенно удобен для отслеживания состояний, которые не должны повторяться: например, посещённые локации, активные статус-эффекты, разблокированные достижения. Set эффективен для проверки, было ли что-то уже добавлено, и не требует ручного поиска по списку. Он работает быстрее массива при операциях включения и проверки.

Контейнеры интегрированы в систему Blueprint через специальные узлы (Nodes), позволяющие добавлять, удалять, искать и итерировать элементы. Их можно использовать не только как переменные, но и в функциях, структурах, а также в качестве значений других контейнеров (массивы массивов и т. п.).

Таким образом, контейнеры превращают простые переменные в мощные инструменты для работы с коллекциями данных, делая логику более гибкой, читаемой и масштабируемой.

Переменные при наследовании в Unreal Engine

При наследовании Blueprint-классов в Unreal Engine переменные из родительского Blueprint автоматически передаются всем его дочерним классам. Это означает, что если создаётся новый Blueprint на основе существующего — например, BP_Boss на основе BP_Enemy — все переменные, определённые в родителе, становятся частью дочернего класса. Они сохраняют свой тип, значение по умолчанию, а также настройки вроде видимости, репликации и категории. Это позволяет строить иерархии с общей логикой, где базовые свойства задаются в родителе, а детали настраиваются в наследниках.

Однако по умолчанию унаследованные переменные не отображаются в панели My Blueprint дочернего класса. Чтобы увидеть их, необходимо открыть настройки панели (иконка шестерёнки) и включить опцию Show Inherited Variables.

Show Inherited Variables - включение отображения унаследованных переменных
Show Inherited Variables — включение отображения унаследованных переменных

После этого все переменные из родительского Blueprint появятся в списке.

В дочернем Blueprint невозможно удалить унаследованную переменную из класса, но можно изменить её значение по умолчанию или скрыть в редакторе. Удаление возможно только в родительском классе, и оно затронет всех его наследников. Это сделано для предотвращения несогласованности в иерархии: если бы один из наследников мог бы удалить родительскую переменную, это могло бы нарушить логику в родителе, рассчитанную на её наличие.

При этом дочерний класс может переопределять поведение переменной — например, изменять её значение по умолчанию, включать Instance Editable или менять категорию. Эти изменения касаются только данного наследника и не влияют на родительский класс или других потомков.

Также можно гибко управлять доступом к переменной. Например, если в родителе во вкладке Details переменная помечена как Private, то в наследнике будет доступно только чтение через узел Get, а вот изменение через Set будет заблокировано. Это позволяет защищать внутреннее состояние базового класса, не ограничивая при этом возможность использовать его данные. Если переменная не приватная, дочерний класс может свободно читать, изменять и использовать её в своей логике.

Таким образом, система наследования переменных в Unreal Engine сочетает надёжность и контроль: вы получаете доступ к общей функциональности, можете настраивать значения под конкретные нужды, но не можете нарушить целостность иерархии.

Репликация переменных в Unreal Engine

В мультиплеерных проектах большинство логики выполняется на сервере, а клиенты получают только информацию о состоянии игры. Чтобы все игроки видели одинаковую картину — например, одного и того же врага в одном месте, с одинаковым здоровьем — необходимо, чтобы ключевые переменные автоматически передавались по сети. Именно это и делает репликация: она обеспечивает согласованность состояния Акторов, таких как персонажи, предметы или интерактивные объекты, на всех подключённых клиентах.

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

  1. Актор, владеющий переменной, должен иметь включённое свойство Replicates (в классе или экземпляре).
  2. Сама переменная должна быть помечена как Replicated или RepNotify в панели Details.

Без этих условий данные не будут передаваться по сети, даже если переменная корректно настроена.

Replication

Replication Variables
Replication Variables

В Unreal Engine параметр Replication определяет, будет ли значение переменной синхронизироваться между сервером и клиентами в сетевой игре. Этот параметр доступен в панели Details при выборе переменной в Blueprint и играет ключевую роль в мультиплеерной логике. Он имеет три основных значения: None, Replicated и RepNotify.

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

При выборе Replicated переменная начинает автоматически синхронизироваться с сервера на все клиенты, а её узлы Get и Set помечаются специальными белыми кружками, символизирующими копию данных.

Реплицированная (Replicated) переменная HP_Player
Реплицированная (Replicated) переменная HP_Player

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

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

Функция OnRep_HP_Player, созданная при активации режима репликации RepNotify для переменной HP_Player
Функция OnRep_HP_Player, созданная при активации режима репликации RepNotify для переменной HP_Player

Этот режим особенно полезен, когда необходимо немедленно реагировать на изменения состояния объекта, например, при получении урона, активации способности или изменении внешнего вида персонажа, обеспечивая тесную интеграцию между сетевой синхронизацией и игровой логикой.

Replication Condition (условие репликации)

Replication Condition (условие репликации)
Replication Condition (условие репликации)

Параметр Replication Condition (условие репликации) позволяет тонко настроить, кому и когда переменная реплицируется. Работает в сочетании с режимом репликации (Replicated или RepNotify) и позволяет тонко настраивать сетевую эффективность, оптимизируя передачу данных только тем клиентам, которым эта информация действительно необходима. Правильный выбор условия репликации критически важен для производительности сетевой игры и конфиденциальности игровой информации.

  • None — переменная реплицируется всем подключенным клиентам без каких-либо ограничений или условий. Это наиболее простое и универсальное условие, подходящее для данных, которые должны быть доступны всем участникам игры одновременно. Используется по умолчанию для большинства реплицируемых переменных, когда нет специфических требований к ограничению распространения данных.
  • Initial Only — переменная передается только один раз при начальной репликации объекта клиенту и не обновляется последующими изменениями. Это полезно для данных, которые устанавливаются при создании объекта и не изменяются в процессе игры, позволяя сэкономить сетевой трафик на постоянных обновлениях. Подходит для статических характеристик объектов, таких как тип оружия или базовые параметры персонажа.
  • Owner Only — переменная реплицируется исключительно владельцу объекта, скрывая данные от всех остальных клиентов. Это критически важный режим для обеспечения безопасности и честности игры, так как позволяет передавать конфиденциальную информацию, такую как инвентарь игрока, состояние скрытых параметров или личные данные. Используется для переменных, которые должны быть известны только конкретному игроку.
  • Skip Owner — противоположное условие Owner Only, при котором переменная реплицируется всем клиентам, кроме владельца объекта. Полезно для оптимизации, когда владелец уже знает свое состояние и не нуждается в его постоянном обновлении, в то время как другим игрокам эта информация необходима. Часто используется для визуальных эффектов и анимаций, которые видны окружающим, но не владельцу.
  • Simulated Only — переменная реплицируется только симулированным прокси-объектам. Это позволяет оптимизировать передачу данных для объектов, которые просто отображаются на клиентах без активного управления. Используется для декоративных объектов и элементов окружения.
  • Autonomous Only — переменная реплицируется только автономным прокси-объектам. Это противоположность Simulated Only и используется для передачи данных, необходимых для активного управления объектом клиентом. Подходит для переменных, влияющих на управление персонажем или транспортными средствами.
  • Simulated Or Physics — переменная реплицируется симулированным прокси-объектам и объектам с физической симуляцией, обеспечивая корректное отображение физического поведения на клиентах. Полезно для объектов, которые должны демонстрировать реалистичную физику, такую как падающие предметы или разрушаемые элементы. Обеспечивает баланс между производительностью и физической точностью.
  • Initial Or Owner — комбинированное условие, при котором переменная реплицируется при начальной передаче всем клиентам и дополнительно обновляется для владельца объекта. Это позволяет всем игрокам получить базовую информацию при создании объекта, а владельцу получать актуальные обновления в процессе игры. Полезно для параметров, которые важны для всех, но требуют частого обновления для владельца.
  • Custom — позволяет определить пользовательские условия репликации через программную логику, предоставляя максимальную гибкость для сложных сценариев. При выборе этого условия разработчик должен реализовать специальную функцию, определяющую точные критерии репликации для каждого клиента. Используется для уникальных случаев, когда стандартные условия не подходят для специфических игровых механик.
  • Replay Or Owner — переменная реплицируется владельцу объекта и дополнительно записывается в систему воспроизведения игры для последующего просмотра повторов. Это обеспечивает корректное воспроизведение игровых событий в режиме повтора, сохраняя важные данные для обоих сценариев. Полезно для ключевых игровых параметров, влияющих на результат матча.
  • Replay Only — переменная реплицируется исключительно для системы записи и воспроизведения повторов, не передаваясь активным клиентам во время игры. Это позволяет записывать дополнительную информацию для качественного воспроизведения, не нагружая сетевое соединение во время реальной игры. Используется для данных, необходимых только для анализа после матча.
  • Simulated Only No Replay — переменная реплицируется только симулированным прокси-объектам, но исключается из системы записи повторов. Это оптимизирует использование дискового пространства и производительность записи, исключая ненужные данные из повторов. Подходит для временных визуальных эффектов, не влияющих на игровой процесс.
  • Simulated Or Physics No Replay — переменная реплицируется симулированным прокси-объектам и объектам с физикой, но не записывается в систему повторов. Комбинирует физическое поведение с оптимизацией записи, обеспечивая реалистичное отображение без избыточного хранения данных. Полезно для декоративных физических объектов, не влияющих на результат игры.
  • Skip Replay — переменная реплицируется активным клиентам во время игры, но исключается из системы записи повторов. Это позволяет сэкономить место на диске и улучшить производительность записи, исключая данные, не важные для анализа игровых событий. Используется для временных эффектов и информации, не требующей сохранения для повторного просмотра.

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

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.


наш Телеграм канал

Оцените статью
( 1 оценка, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.