Что такое интерфейсы
Пользуюсь, но также их нужно применять с умом. Если есть выбор и можно проблему решить без их использования, например, через композицию (с использованием компонента), то предпочитаю этот способ.
В курсе не нашлось подходящего примера (подумаю над тем, чтобы добавить).
Можно, например, применить при расширении системы пикапов и оружия. Создать интерфейс ITakable и реализовать его в классе оружия и других пикапов. Это позволит нам создать систему подбора оружия (и также при смерти персонажа можно не уничтожать оружие, а делать детач всех объектов ASTUBaseWeapon в функции EndPlay и дополнительно активировать физику у объектов оружия для эффектности).
Интерфейсы используются для добавления общей функциональности объектам, которые не связаны через иерархию классов.
Например, у нас могут быть объекты: дверь, книга, телефон и другие, с которыми каким то образом умеет взаимодействовать персонаж. И допустим по нажатию на клавишу Enter, игрок хочет взаимодействовать с объектом.
Мы определяем интерфейс (псевдокод):
UINTERFACE(MinimalAPI, Blueprintable)
class UIntractableInterface : public UInterface
{
GENERATED_BODY()
};
class IIntractableInterface
{
GENERATED_BODY()
public:
bool Interact(){}
};
И реализуем его в соответствующих классах, добавляя необходимую логику:
class ADoorActor : public AActor, public IIntractableInterface
{
public:
bool Interact(){/* open a door */}
};
class ABook : public AActor, public IIntractableInterface
{
public:
bool Interact(){/* read a book */}
};
class APhone : public AActor, public IIntractableInterface
{
public:
bool Interact(){/* call the police */}
};
Далее мы получаем указатель на объект AActor, с которым хочет взаимодействовать пользователь (через какой-нибудь trace например). Проверяем, реализует ли он интерфейс Interactable и если да, то вызываем функцию Interact. Таким образом, каждый объект запустит своё конкретное поведение:
IIntractableInterface* InteractableActor = Cast<IIntractableInterface>(SomeActor);
if(InteractableActor)
{
InteractableActor->Interact();
}
Почитать про использование интерфейсов в Unreal Engine и посмотреть примеры можно по ссылке.
Last updated
Was this helpful?