Функция Get Owner (Actor Component) в Unreal Engine

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

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

Get Owner (Actor Component)

Blueprint-функция Get Owner класса Actor Component в Unreal Engine (UE4, UE5)
Blueprint-функция Get Owner класса Actor Component в Unreal Engine (UE4, UE5)

Blueprint-функция Get Owner в Unreal Engine — вспомогательный метод (Getterгеттер) класса Actor Component, возвращающий ссылку на Актор, которому принадлежит текущий компонент.

Каждый компонент в Unreal Engine имеет владельца — Актора, к которому он прикреплён. Функция GetOwner позволяет получить доступ к этому Актору, чтобы взаимодействовать с ним или использовать его свойства и методы. Это одна из самых часто используемых функций при работе с компонентами, поскольку она даёт доступ к контексту, в котором находится компонент.

Функция является pure («чистой», то есть не изменяет никаких данных, просто возвращает значение) и доступна как в C++, так и в Blueprints.

Перевод официальной справки: функция Get Owner — проходит по цепочке Outer, чтобы получить Актор, которому «принадлежит» этот компонент.

* Outer — это указатель на объект, который «владеет» данным объектом с точки зрения иерархии в Unreal Engine:

  • у Actor ComponentOuter указывает на его владельца — это Actor (Актор).
  • у дочерних компонентов — Outer указывает на родительский компонент.

Get Owner открывает доступ к родительскому Актору изнутри самого компонента, позволяя ему взаимодействовать с поведением и данными своего владельца.

С помощью функции Get Owner можно получить доступ к свойствам Актора-владельца, его функциям или другим компонентам. И напрямую из кода компонента изменять состояние Актора-владельца.

Например, так же, как и всем известный компонент Character Movement придаёт движение Актору персонажа, получая внутри себя ссылку на персонажа и изменяя его положение на каждом тике.

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

  • Target (Actor Component) — указатель на компонент, для которого необходимо получить ссылку на Актора-владельца.
  • Return Value (Actor) — возвращаемое значение: ссылка на Актор, которому принадлежит текущий компонент.

Тонкости применения функции

  1. В некоторых случаях GetOwner уместо использовать в связке с функцией Is Valid, чтобы избежать обращения к недействительным объектам, особенно, когда компонент создаётся динамически.
  2. В C++ существует шаблонная версия функции template <class T> T* GetOwner() const, которая для удобства автоматически выполняет приведение типа (в случае сбоя приведения, шаблонная функция возвращает значение nullptr).

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

Кратко рассмотрим, как функция Get Owner работает внутри движка Unreal Engine.

Внутренняя работа функции разделена на 2 части: отдельно работа в редакторе Unreal Editor и отдельно непосредственно в игре.

  1. Работа функции GetOwner в редакторе (WITH_EDITOR)
    1. Проверяется, может ли функция использовать кэшированное значение OwnerPrivate, хранящее владельца компонента..
    2. Если может, то далее функция проверяет кеш OwnerPrivate на корректность, сравнивая его с реальным значением, найденным по цепочке Outer.
    3. Если кэш устарел, вызывается «медленный» метод поиска владельца через внутренний метод GetActorOwnerNoninline(), чтобы найти владельца через цепочку Outer. Если не устарел, то GetOwner возвращает значение кеша OwnerPrivate, хранящее владельца компонента.
    4. Если же использовать кэшированное значение OwnerPrivate нельзя (пункт 1.1), то сразу вызывается GetActorOwnerNoninline(), чтобы найти владельца через цепочку Outer.
  2. Работа функции GetOwner в игре (runtime, без WITH_EDITOR)
    1. Проверяется кэш OwnerPrivate на корректность, сравнивая его с реальным значением, найденным по цепочке Outer.
    2. Если кэш устарел, вызывается «медленный» метод поиска владельца через GetActorOwnerNoninline(), чтобы найти владельца через цепочку Outer. Если не устарел, то GetOwner возвращает значение кеша OwnerPrivate, хранящее владельца компонента.

Таким образом функция GetOwner работает в разных режимах: в редакторе и в игре.

В редакторе она может работать относительно «долго», дополнительно производя поиск владельца компонента, так как в редакторе вся ситуация постоянно меняется (на то он и редактор).

А в игре необходимости дополнительно проверять и пересчитывать значение кэша нет, так как структура объектов стабильна. Поэтому GetOwner в игровом режиме просто возвращает значение внутреннего свойства OwnerPrivate, хранящее владельца компонента и имеет высокую производительность, без лишних вызовов и проверок. Кеш обновляется только в крайних случаях, при динамических изменениях компонента.

Ключевые понятия, связанные с функцией

  • Актор (Actor) — базовый класс объекта в игре, способного существовать в игровом мире.
  • Компонент (Actor Component, Scene Component и другие) — объект, который может быть прикреплён к Актору и добавлять ему определённые поведение, функционал или данные.
  • Владелец (Owner) — Актор, к которому принадлежит компонент.
  • Outer/Inner — система ссылок между объектами в Unreal Engine: Outer — это объект, «владеющий» другим объектом (Inner).
  • OwnerPrivate — специальное внутреннее свойство, хранящее ссылку на владельца и обновляющееся при регистрации компонента. Даёт быстрый доступ к сохранённому значению.
  • GetActorOwnerNoninline() — внутренний метод, вызываемый, если кэш OwnerPrivate недоступен или требуется точное значение (например, в редакторе). Проходит по цепочке Outer объектов Unreal Engine, пока не найдёт объект типа Actor. Используется как резервный способ получения владельца.

Практический урок в Unreal Engine

В качестве практики можете изучить урок, где создаётся пользовательский компонент трассировки на основе Actor Component, при этом используется рассматриваемая функция Get Owner. Перейти к практике >>

Пример использования функции Get Owner при создании пользовательского компонента трассировки
Пример использования функции Get Owner при создании пользовательского компонента трассировки

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


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

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

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