C++ Interface

Интерфейсы в Unreal Engine неотъемлемая часть разработки. В игровом проекте может быть сотня классов, с которыми можно взаимодействовать. Грубой ошибкой будет писать Cast для проверки – к какому классу мы обращаемся. В 1-ю очередь – это снизит читаемость кода, увеличит нагрузку оперативной памяти и будет забивать кэш всеми свойствами класса, к которому мы обращаемся через Cast to.

Создание интерфейса

Вся суть интерфейса в том, что мы отправляем сообщение на вызов функции у объекта, где подключен интерфейс. В Самом интерфейсе мы только объявляем методы, которые будут вызываться.

То есть – что бы вызвать метод – мы проверяем, есть ли у объекта подключенный интерфейс и после этого отправляем сообщение о вызове события или метода.

Создайте С++ Класс Unreal Interface. Мы затронем функции – которые будут вызываться в blueprint персонажа через Events.

Заголовочный файл интерфейса MR_Interface.h

  1. // Fill out your copyright notice in the Description page of Project Settings.
  2. #pragma once
  3. #include "CoreMinimal.h"
  4. #include "UObject/Interface.h"
  5. #include "MR_Interface.generated.h"
  6. // This class does not need to be modified.
  7. UINTERFACE(MinimalAPI, Blueprintable)
  8. class UMR_Interface : public UInterface
  9. {
  10. GENERATED_BODY()
  11. };
  12. /**
  13. *
  14. */
  15. class BUZZ3D_API IMR_Interface
  16. {
  17. GENERATED_BODY()
  18. // Add interface functions to this class. This is the class that will be inherited to implement this interface.
  19. public:
  20. virtual void InteractAPI(AActor* Caller) {};
  21. virtual void FocusAPI(AActor* Caller) {};
  22. };

Мы объявили 2 виртуальные функции и сразу – скобками описали их выполнение. То есть они пустые. В объекте, например кнопке, когда мы подключим интерфейс – нам необходимо будет переписать эти функции и описать всю логику – с помощью override объявления в заголовочном файле. 

Создание событий (Пример), вызываемых в blueprint объекта

  1. UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
  2. void CallAddItem(class AWK_PickUpActor* PickActor, int ID, int Amount);
  3. UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
  4. void SetNearItem(class AWK_PickUpActor* PickActor, bool Activate);
  5. UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
  6. void FastUseItem(class AWK_PickUpActor* PickActor, int ID, int Amount);

Создав такой интерфейс, описав все его функции – мы можем гибко описать вывод определенных событий объектов – просто посылая в них запрос на выполнение через интерфейс.

Вы всегда можете обратиться к нашей команде за помощью в разработке, обучению или заказать прототип под ключ. Вступайте в наш telegram канал: