Construction Script в Unreal Engine: что происходит "под капотом"?

Все знают, что Construction Script инициализирует Актор при размещении в сцене или при старте работы Актора на уровне. Но не все понимают — как он работает изнутри и почему в один "прекрасный" момент всё может пойти не так как ожидалось..

Под капотом это не просто "скрипт при создании". Это сложная цепочка в C++. Если очень кратко, то так:

  • сначала внутри Актора производится создание компонентов через систему SimpleConstructionScript;
  • затем вызывается функция UserConstructionScript() - это и есть Construction Script в Blueprint;
  • после производится вызов OnConstruction(), который гарантирует, что все компоненты созданы и зарегистрированы в мире.

💥 Главный нюанс: всё это происходит ДО BeginPlay и до полной инициализации других систем и других классов.
Это значит — Game Instance, Game Mode, Player Controller и другие пользовательские классы могут быть ещё не готовы (не до конца проинициализированы)!

Пример:
В крупном игровом проекте на старте игры при спавне Актора Вы берёте данные из Game Instance в Construction Script, в результате при старте игры — ошибка. Почему? Потому что Construction Script в Акторе отработал раньше, чем у Game Instance были проинициализированы все его переменные.

Правило:

1) Construction Script используется только для локальных настроек Актора: масштаб, материалы, параметры на основе своих переменных. При работе с Construction Script не полагайтесь на внешние классы! Только на внутренние данные.

2) Если для настройки Актора необходимо полагаться на сторонние классы, лучше используйте Event Begin Play, это событие гарантирует, что все классы в игре загружены и проинициализированы.

3) При обращении к переменным-ссылкам на другие объекты всегда используйте функцию Is Valid для обработки невалидности ссылок.

👉 Подробнее о внутреннем устройстве скрипта построения с разбором тонкостей, в том числе его ошибочного применения на практике, в статье на сайте: функция Construction Script

Начать дискуссию