Как создать c++ виджет
From ИМЛ Вики
- Создать дочерний с++ класс наследуясь от UserWidget c++ класса.
- Создать дочерний блупринт класс наследуясь от созданного ранее с++ класса.
- Объявить кнопку в с++ классе
UPROPERTY(meta = (BindWidget)) class UButton* StartGame;
- Создать в дочернем блупринт классе такую же кнопку с таким же названием что и в родительском с++ классе.
- Переопределяем виртуальную "UUserWidget::Initialize" функцию. Не забываем про "Super::Initialize();" функцию внутри.
- Добавляем заголовочный файл "Components/Button.h"
- Создаем новую функцию, к примеру с названием "void StartButtonClicked();" которую сообщим с делегатом эвента OnClickedEvent. Не забываем что сигнатуры функций должны совпадать!.
- Создаем DynamicDelegate внутри функции "UUserWidget::Initialize".
.h file
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"
/**
*
*/
UCLASS()
class MYPROJECT_API UMyUserWidget : public UUserWidget
{
GENERATED_BODY()
virtual bool Initialize();
UPROPERTY(meta = (BindWidget))
class UButton* StartGame;
UFUNCTION()
void StartButtonClicked();
};
.cpp file
#include "MyUserWidget.h"
#include "Components/Button.h"
bool UMyUserWidget::Initialize()
{
Super::Initialize();
StartGame->OnClicked.AddDynamic(this, &UMyUserWidget::StartButtonClicked);
return true;
}
void UMyUserWidget::StartButtonClicked()
{
UE_LOG(LogTemp, Warning, TEXT("Our button is working!"));
}