Unreal Engine C++ Course
PatreonBoostyTelegramYoutube
  • О курсе
  • Ссылки
    • Git
    • Visual Studio
    • Unreal Engine
  • Глоссарий
    • Общие понятия
    • Код / C++
      • Const correctness
      • Использование auto
    • Код / Best practices
    • Анимации
    • UI
    • VFX
    • AI
  • Unreal Editor Hotkeys
  • Visual Studio Hotkeys
  • Console commands
  • Проблемы и решения
    • IntelliSense тормозит
    • Проект не компилируется
    • Не вижу репозиторий ShootThemUp
    • Класс не отображается в Solution Explorer
    • Не работает Apply Damage
    • Где взять текстуры интерфейса
    • Нет контекстного меню UE при клике правой кнопкой мыши на файле .uproject
    • Ошибка Unable to start program
  • Вопросы и ответы
    • Зачем вступать в организацию EpicGames на Github
    • Можно ли проходить курс на UE5
    • Как перегенерировать файлы проекта
    • Насколько сильно влияет кол-во инклюдов на работу кода
    • На сколько большие могут быть структуры и таблицы
    • Медленный ли Cast
    • Что такое интерфейсы
    • Как работает код с переопределением GetMaxSpeed
    • Hit Reaction Animation
  • Дополнения к урокам
    • Лекция 065
      • Additive animation при приземлении
      • Блокировка стрельбы при беге
    • Лекция 079
      • Пикап видим после начисления патронов
      • Пикап не подбирается, если боекомплект расходуется в точке респауна пикапа
    • Лекция 089
      • NiagaraSystem не аттачится к дулу
    • Лекция 148
    • Лекция 155
  • Как задавать вопрос
  • Что почитать
  • UE5
  • Automation
    • Форматирование кода
  • VPN
  • 👨‍🎓мои курсы
    • 🧪Автоматизация и тестирование в Unreal Engine
    • 🐍Snake game
  • 🔗lifeexe сообщество
    • Поддержать проект
    • Ресурсы
    • Проекты участников сообщества
    • Code review участников сообщества
Powered by GitBook
On this page

Was this helpful?

  1. Вопросы и ответы

Что такое интерфейсы

В курсе не затронута тема использования интерфейсов. Вы ими не пользуетесь? Если да то почему?

Пользуюсь, но также их нужно применять с умом. Если есть выбор и можно проблему решить без их использования, например, через композицию (с использованием компонента), то предпочитаю этот способ.

В курсе не нашлось подходящего примера (подумаю над тем, чтобы добавить).

Можно, например, применить при расширении системы пикапов и оружия. Создать интерфейс 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();
}
PreviousМедленный ли CastNextКак работает код с переопределением GetMaxSpeed

Last updated 4 years ago

Was this helpful?

Почитать про использование интерфейсов в Unreal Engine и посмотреть примеры можно по .

ссылке