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

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

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

Deactivate

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

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

Перевод официальной справки: функция Deactivate — деактивирует компонент сцены (Scene Component). Должна быть переопределена в наследуемых нативных классах.

Функция деактивации обратная по действию методу Activate и используется для ручного выключения компонента, поддерживающего активацию/деактивацию, что может быть полезно, например:

  • при деактивации триггеров;
  • при динамическом включении/отключении функциональности Актора;
  • для временной приостановки работы компонента без его уничтожения.

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

Рассмотрим, как функция Deactivate работает внутри Unreal Engine.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void UActorComponent::Deactivate()
{
    // Проверяем, можно ли деактивировать компонент.
    // Если ShouldActivate() == false — это значит, что компонент уже активен или не может быть активирован.
    if (ShouldActivate() == false)
    {
        // Отключаем тик компонента.
        // Это останавливает выполнение TickComponent(), если компонент поддерживает тики (PrimaryComponentTick.bCanEverTick == true).
        SetComponentTickEnabled(false);

        // Устанавливаем внутренний флаг активности напрямую.
        // Не вызывает повторную логику или репликацию по сети.
        // Фактически устанавливает: bIsActive = false;
        SetActiveFlag(false);

        // Генерируем событие "OnComponentDeactivated", доступное как в C++, так и в Blueprints.
        // Это позволяет подписаться на момент деактивации компонента и выполнить соответствующие действия.
        OnComponentDeactivated.Broadcast(this);
    }

    // Если условие не выполнено (компонент не был активным), ничего не делаем.
}

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

  1. Проверка необходимости деактивации компонента — вызывается виртуальный метод движка ShouldActivate(), проверяющий, можно ли активировать компонент в текущем состоянии. Если ShouldActivate() == False, активация компонента не требуется, так как он активен, а значит мы можем его деактивировать.

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

  1. Отключение Tick — производится отключение выполнения функции TickComponent().
  2. Установка внутреннего флага неактивности — у компонента свойство Is Active устанавливается в значение False.
  3. Вызов Event Dispatcher — производится запуск диспетчера событий On Component Deactivated. Событие, доступно как в C++, так и в Blueprint. Может использоваться для запуска пользовательской логики после деактивации компонента.

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

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

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

C++

Деактивируем компонент движения персонажа по нажатию на клавишу F клавиатуры.


1
2
3
4
5
6
7
void AMyCharacter::OnFKeyPressed()
{
    if (MovementComponent) // Убеждаемся, что компонент существует
    {
        MovementComponent->Deactivate(); // Деактивируем компонент движения       
    }
}

Blueprints

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

В результате при запуске игры персонаж сможет двигаться, но при нажатии на клавишу F при помощи функции деактивации компонент Character Movement отключится, и персонаж более не сможет продолжать движение.

Пример работы функции Deactivate в Blueprint
Пример работы функции Deactivate в Blueprint

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

 


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

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

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