Как создать 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!")); }