Hello everyone, I’m currently using CommonUI to write the interface. However, I’ve run into a problem that has been bothering me for many days.
I referenced this link: Using the same callback function for many UButtons - Use CommonUI Button
Here’s my C++ code:
MainMenu.h:
#pragma once
#include "CoreMinimal.h"
#include "CommonActivatableWidget.h"
#include "MainMenu.generated.h"
class UCommonButtonBase;
class UMenuButton;
UCLASS(Abstract, BlueprintType, Blueprintable, meta = (Category = "Menu|Main", DisableNativeTick))
class TANTALUS_API UMainMenu : public UCommonActivatableWidget
{
GENERATED_BODY()
protected:
virtual void NativeOnActivated() override;
UFUNCTION()
void OnButtonClicked(UCommonButtonBase *Button);
private:
UPROPERTY(BlueprintReadOnly, meta=(BindWidget, BlueprintProtected = true, AllowPrivateAccess = true))
TObjectPtr<UMenuButton> Button_Continue;
UPROPERTY(BlueprintReadOnly, meta=(BindWidget, BlueprintProtected = true, AllowPrivateAccess = true))
TObjectPtr<UMenuButton> Button_NewGame;
UPROPERTY(BlueprintReadOnly, meta=(BindWidget, BlueprintProtected = true, AllowPrivateAccess = true))
TObjectPtr<UMenuButton> Button_LoadGame;
UPROPERTY(BlueprintReadOnly, meta=(BindWidget, BlueprintProtected = true, AllowPrivateAccess = true))
TObjectPtr<UMenuButton> Button_Settings;
UPROPERTY(BlueprintReadOnly, meta=(BindWidget, BlueprintProtected = true, AllowPrivateAccess = true))
TObjectPtr<UMenuButton> Button_Quit;
};
MainMenu.cpp:
#include "UI/Main/MainMenu.h"
#include "UI/Common/MenuButton.h"
void UMainMenu::NativeOnActivated()
{
Super::NativeOnActivated();
// Bind the click event for all buttons
// The following code will cause an error: Cannot resolve symbol '__Internal_AddUniqueDynamic'
Button_Continue->OnClicked.AddUniqueDynamic(this, &ThisClass::OnButtonClicked);
Button_NewGame->OnClicked.AddUniqueDynamic(this, &ThisClass::OnButtonClicked);
Button_LoadGame->OnClicked.AddUniqueDynamic(this, &ThisClass::OnButtonClicked);
Button_Settings->OnClicked.AddUniqueDynamic(this, &ThisClass::OnButtonClicked);
Button_Quit->OnClicked.AddUniqueDynamic(this, &ThisClass::OnButtonClicked);
}
void UMainMenu::OnButtonClicked(UCommonButtonBase *Button)
{
// TODO
}