Creating Interface classes in UE4 using C++

Использование интерфейсов может сделать код более гибким и сэкономить некоторое время в написании кода. Представьте себе, что вы создаете игру, которая имеет скажем 500 акторов, которые полностью отличаются друг от друга, и вы хотите, чтобы они использовали некоторые повторяющиеся функции, для этого могут пригодится интерфейсы, это сэкономит огромное кол-во времени.

Interface explanation

Вы можете думать о качествах интерфейса как о контракте. Каждый класс, который следует за этим контрактом, по существу, связан некоторыми правилами (контракта). Например, если ван интерфейс содержит функцию DoSomething(), все классы, которые следуют контракту, так же будут иметь эту функцию в себе, в противном же случае, код не скомпилируется.

Adding an interface

В настоящее время, существует два способа добавления интерфейса внутри вашего проекта. Одним из методов является следовать официальной документации UE4.
Для другого метода, продолжайте читать! Основное различие между моим методом, и тем что указан в документации, является то, что мой интерфейс не может изменяться внутри самого редактора.

В редакторе создаем новый С++ класс, который не наследуется от других классов:

Image

[свернуть]
Я назвал свой класс Imyinterface. Начальный символ «I» является именованием для всех классов интерфейсов.
Когда Visual Studio загрузится, удалим конструтор и деструктор по умолчанию вашего класса, и объявим следующую функцию:
Code


virtual void DoSomething() = 0;

[свернуть]
«=0» сразу после объявления функции, означает что функция не содержит никакой логики, и предназначена только для переопределения во всех классах, наследующих интерфейс.
Теперь когда вы закончите с этим, создайте новый С++ класс, который наследуется от класса Actor.
После чего добавьте нужный файл заголовка (.h файл) перед generated.h библиотекой:
Code


#include "IMyInterface.h"

[свернуть]
Для того, чтобы унаследовать наш интерфейс, после запятой после public AActor добавляем наш интерфейс:
Code


class INTERFACEPOST_API AMyActor : public AActor, public IMyInterface

[свернуть]
Теперь переопределяем функцию DoSomething() следующим образом:
Code


virtual void DoSomething() override;

[свернуть]
Следующий шаг, переходим к исходному файлу вашего актора и реализовываем следующую логику функции DoSomething:
Code


void AMyActor::DoSomething()
{
GLog->Log("Doing something...");
}

[свернуть]
Затем вы можете вызвать эту функцию например в BeginPlay.
В качестве последнего шага, поместите ваш С++ класс где то на вашем уровне. При нажатии кнопки воспроизведения, появится сообщение в логе.

Original page


Читайте также: