Функция Set Active в Unreal Engine UE5, UE4

Друзья, приветствую, с Вами Будуев Антон. В этой статье мы обсудим Blueprint-функцию (метод) Set Active в Unreal Engine (UE4, UE5), задающую свойство активации компонента.

Скачать книгу Blueprint для Unreal Engine

Set Active

Blueprint-функция Set Active в Unreal Engine (UE5, UE4)
Blueprint-функция Set Active в Unreal Engine (UE5, UE4)

Blueprint-функция Set Active в Unreal Engine — это метод класса Actor Component, который устанавливает новое состояние активности компонента, независимо от его текущего состояния. Функция вызывается как из C++, так и из Blueprints, и позволяет активировать или деактивировать компонент на основе переданного параметра.

Перевод официальной справки: функция Set Active — задаёт свойство компонента: активен или нет.

Использование функции удобно при динамическом управлении состоянием компонентов в ответ на игровые события, например:

  • при переключении между режимами игры;
  • при изменении состояния объекта (например, «включить/выключить»);
  • при сбросе состояния уровня или персонажа.

Параметры функции

  • Target (Actor Component) — ссылка на компонент, для которого необходимо установить новое состояние активности.
  • New Active (bool = False) — новое состояние активности компонента. True: компоненту будет установлено состояние активности. False: компоненту будет установлено состояние неактивности.
  • Reset (bool = False) — если установлено значение True, компоненту будет установлено состояние активности, даже если внутренний метод движка ShouldActivate() вернёт False. Параметр определяет, должна ли операция установки состояния активности игнорировать текущее состояние компонента и условия активированности.

Reset = False (по умолчанию): компоненту будет установлено состояние активности, только если он ещё не активен (функция Is Active возвращает False). Это стандартный способ установки состояние активности компонента, чтобы избежать повторной активации.

Наш канал «Unreal Engine — это просто» в Telegram, MAX и VK: осторожно, подписка на канал вызывает желание открыть Unreal Editor ;)

Reset = True: компоненту будет установлено состояние активности безусловно, даже если он уже был активным.

ShouldActivate() — виртуальная функция, которая по умолчанию проверяет, не активен ли уже компонент. Может быть переопределена в дочерних классах для более сложных условий.

Как Set Active работает внутри

Рассмотрим, как функция Set Active работает внутри Unreal Engine. Также обсудим внутренний метод движка ShouldActivate(), который был упомянут в описании параметра Reset.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void UActorComponent::SetActive(bool bNewActive, bool bReset)
{
    // Проверяем, нужно ли активировать или деактивировать компонент.
    // Значение параметра bNewActive определяет новое состояние активности:
    // - true → вызывается Activate()
    // - false → вызывается Deactivate()

    if (bNewActive)
    {
        // Компонент должен быть активирован.

        // Вызываем метод Activate(), передавая параметр bReset.
        // Если bReset == true, активация происходит безусловно, игнорируя текущее состояние.
        // Если bReset == false, активация выполняется только если ShouldActivate() вернёт true.
        Activate(bReset);
    }
    else
    {
        // Компонент должен быть деактивирован.

        // Вызываем метод Deactivate(), который:
        // - отключает тик компонента
        // - устанавливает флаг активности в false
        // - вызывает событие OnComponentDeactivated
        Deactivate();
    }
}

Логика работы функции:

  1. Если New Active == True: вызывается метод Activate, который активирует компонент, включая его Tick (если разрешён), устанавливая свойство компонента Is Active в значение True и вызывая диспетчер события On Component Activated (событие, доступно как в C++, так и в Blueprint и используется для запуска пользовательской логики после активации компонента).
  2. Если New Active == False: вызывается метод Deactivate, который деактивирует компонент, отключая его Tick, устанавливая свойство компонента Is Active в значение False и вызывая диспетчер события On Component Deactivated (событие, доступно как в C++, так и в Blueprint и используется для запуска пользовательской логики после деактивации компонента).

Смежные функции

  • Activate — активирует компонент (если он не был активным ранее).
  • Deactivate — деактивирует компонент, останавливая его работу и отключая все связанные действия.
  • Set Auto Activate — определяет, будет ли компонент автоматически активирован при начале игры.
  • Toggle Active — переключает текущее состояние активности компонента
  • Is Active — возвращает текущее состояние активности компонента.

Пример использования функции Set Active

C++

Устанавливаем компоненту движения персонажа состояние неактивности по нажатию клавиши F на клавиатуре. И обратная ситуация: устанавливаем компоненту движения персонажа состояние активности по нажатию клавиши E на клавиатуре.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void AMyCharacter::OnFKeyPressed()
{
    if (MovementComponent) // Убеждаемся, что компонент существует
    {
        MovementComponent->SetActive(false); // Устанавливаем компоненту состояние неактивности
    }
}

void AMyCharacter::OnEKeyPressed()
{
    if (MovementComponent) // Убеждаемся, что компонент существует
    {
        MovementComponent->SetActive(true, true); // Принудительно устанавливаем компоненту состояние активности
    }
}

Blueprints

  1. Загрузите шаблон игры Unreal Engine (UE5) от третьего лица. Откройте блюпринт персонажа BP_ThirdPersonCharacter по пути /All/Game/ThirdPerson/Blueprints.
  2. В Event Graph разместите событие Key F (событие, срабатывающее при нажатии клавиши F на клавиатуре) и Key Е (событие, срабатывающее при нажатии клавиши E на клавиатуре).
  3. Перетащите на поле Event Graph ссылку на компонент Character Movement и из этой ссылки получите функцию Set Active 2 раза.
  4. Подключите первую функцию Set Active к событию Key F и оставьте параметр New Active в значении False. Таким образом, при нажатии на клавишу F, компонент движения деактивируется.
  5. Подключите вторую функцию Set Active к событию Key E и установите параметр New Active в значении True. Таким образом, при нажатии на клавишу E, компонент движения активируется.
Пример работы функции Set Active в Blueprint
Пример работы функции Set Active в Blueprint

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