Как создать c++ виджет

From ИМЛ Вики
Jump to: navigation, search
  • Создать дочерний с++ класс наследуясь от 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!"));
}