Jump to content

Как можно принудительно инициализировать компонент ?


photo

Recommended Posts

Здравствуйте, имеется ли возможность принудительно инициализировать компонент и не ожидать следующего кадра ?

Заранее спасибо.

Link to comment

Добрый день, Marsik!

Не могли бы Вы, пожалуйста, уточнить: Вы в update() добавляете какой-то ноде компоненту (например, через ComponentSystem::get()->addComponent<MyComponent>(my_node);) и хотите, чтобы эта компонента сразу в этом же кадре инициализировалась для какой-то дальнейшей работы с её ресурсами также в этом кадре?

В таком случае, если вы работаете с update() в WorldLogic, компонента инициализируется и вызовет свой первый update до того, как WorldLogic вызовет postUpdate(). Таким образом, если Ваша логика позволяет, Вы можете обработать новую компоненту после её инициализации в postUpdate().

Независимо от того, в update WorldLogic или другой компоненты Вы работаете, вы можете принудительно инициализировать компоненту, явно вызвав у нее метод init() следующим образом:

ComponentSystem::get()->getComponent<MyComponent>(my_node)->init();

Однако стоит учесть два момента:

  1. Если метод init() указан, как логический метод компоненты (т.е. вызывается COMPONENT_INIT(init)), то после явной инициализации компоненты, у неё повторно вызовется init() уже неявно после update, в котором Вы эту самую компоненту добавили. Тогда может потребоваться учесть этот момент при написании метода инициализации компоненты, чтобы случайно не продублировать какие-то данные (например, добавить в компоненту флаг, указывающий на то, что инициализация уже произошла).
  2. Если метод init() не являестя логическим методом компоненты (т.е. COMPONENT_INIT(init) не вызывается), то повторного вызова init() не будет, однако для каждой такой компоненты Вам придется явно вызывать инициализацию самостоятельно на этапе создания компоненты.

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

Link to comment

Здравствуйте, я добавляю к какой-то ноде компонент в методе init и хотелось бы сразу иметь доступ к её ресурсам.
Ваш ответ меня в полне устраивает, спасибо.

Link to comment
×
×
  • Create New...