Интерфейсы в Unreal Engine неотъемлемая часть разработки. В игровом проекте может быть сотня классов, с которыми можно взаимодействовать. Грубой ошибкой будет писать Cast для проверки – к какому классу мы обращаемся. В 1-ю очередь – это снизит читаемость кода, увеличит нагрузку оперативной памяти и будет забивать кэш всеми свойствами класса, к которому мы обращаемся через Cast to.
Вся суть интерфейса в том, что мы отправляем сообщение на вызов функции у объекта, где подключен интерфейс. В Самом интерфейсе мы только объявляем методы, которые будут вызываться.
То есть – что бы вызвать метод – мы проверяем, есть ли у объекта подключенный интерфейс и после этого отправляем сообщение о вызове события или метода.
Создайте С++ Класс Unreal Interface. Мы затронем функции – которые будут вызываться в blueprint персонажа через Events.
- // Fill out your copyright notice in the Description page of Project Settings.
- #pragma once
- #include "CoreMinimal.h"
- #include "UObject/Interface.h"
- #include "MR_Interface.generated.h"
- // This class does not need to be modified.
- UINTERFACE(MinimalAPI, Blueprintable)
- class UMR_Interface : public UInterface
- {
- GENERATED_BODY()
- };
- /**
- *
- */
- class BUZZ3D_API IMR_Interface
- {
- GENERATED_BODY()
- // Add interface functions to this class. This is the class that will be inherited to implement this interface.
- public:
- virtual void InteractAPI(AActor* Caller) {};
- virtual void FocusAPI(AActor* Caller) {};
- };
Мы объявили 2 виртуальные функции и сразу – скобками описали их выполнение. То есть они пустые. В объекте, например кнопке, когда мы подключим интерфейс – нам необходимо будет переписать эти функции и описать всю логику – с помощью override объявления в заголовочном файле.
- UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
- void CallAddItem(class AWK_PickUpActor* PickActor, int ID, int Amount);
- UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
- void SetNearItem(class AWK_PickUpActor* PickActor, bool Activate);
- UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
- void FastUseItem(class AWK_PickUpActor* PickActor, int ID, int Amount);
Создав такой интерфейс, описав все его функции – мы можем гибко описать вывод определенных событий объектов – просто посылая в них запрос на выполнение через интерфейс.
Вы всегда можете обратиться к нашей команде за помощью в разработке, обучению или заказать прототип под ключ. Вступайте в наш telegram канал: