0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】【C++】Unreal C++のデリゲートについて【基本編】

0
Last updated at Posted at 2026-08-02

今回は、Unreal Engine C++のデリゲートの基本について解説します。

本記事では、以下の最もシンプルなデリゲートを扱います。

・引数なし
・戻り値なし

1つしか関数を登録できないデリゲートについて

MainHUD

.h
class BLOGVERIFICATION_API UUMainHUD : public UUserWidget
{
	GENERATED_BODY()
public:
	void NativeConstruct() override;
	void OnCallFunction();
	
private:
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<class UOriginalParts> Parts;
};

=================================================================
.cpp
void UUMainHUD::NativeConstruct()
{
	if (Parts == nullptr) return;

	// HUDの関数を登録
	Parts->SingleDelegate.BindUObject(this, &UUMainHUD::OnCallFunction);
}

void UUMainHUD::OnCallFunction()
{
	UE_LOG(LogTemp, Log, TEXT("Called SingleDelegate"));
}

OriginalParts

=================================================================
.h
//引数なし、返り値なし、関数を1つだけ登録する事が可能なデリゲートを作成
DECLARE_DELEGATE(FSingleCallback);

UCLASS()
class BLOGVERIFICATION_API UOriginalParts : public UUserWidget
{
	GENERATED_BODY()
public:

	//発火するデリゲートを作成
	FSingleCallback SingleDelegate;

private:

	// マウスのクリックをした瞬間を感知
	FReply NativeOnMouseButtonDown(const FGeometry& InGeometry,const FPointerEvent& InMouseEvent) override;
};

=================================================================
.cpp
// マウスのクリックをした瞬間を感知
FReply UOriginalParts::NativeOnMouseButtonDown(const FGeometry& InGeometry,const FPointerEvent& InMouseEvent)
{
    if (InMouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
    {
        // 発火
        SingleDelegate.ExecuteIfBound();

        return FReply::Handled();
    }

    return Super::NativeOnMouseButtonDown(InGeometry, InMouseEvent);
}

1. 型の宣言

発火したい.hで自作のデリゲートを宣言します
宣言後、DECLARE_DELEGATEマクロ内に渡します

//引数なし、戻り値なしのデリゲート型を宣言
DECLARE_DELEGATE(FSingleCallback);

//「FSingleCallback」という自作のデリゲート型のインスタンスを作成
FSingleCallback SingleDelegate;

2. 発火のタイミング

cppに発火したいタイミングで処理を書きます。

FReply UOriginalParts::NativeOnMouseButtonDown(const FGeometry& InGeometry,const FPointerEvent& InMouseEvent)
{
    //左クリックでUIがクリックされた
    if (InMouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
    {
        // 発火(関数が登録されていれば実行する)
        SingleDelegate.ExecuteIfBound();

        return FReply::Handled();
    }

    return Super::NativeOnMouseButtonDown(InGeometry, InMouseEvent);
}

3. 関数の登録

呼び出したいクラスで関数を登録します

 void UUMainHUD::NativeConstruct()
{
	if (Parts == nullptr) return;

	// HUDの関数を登録
	Parts->SingleDelegate.BindUObject(this, &UUMainHUD::OnCallFunction);
}

//発火時にこの関数を呼ぶ
void UUMainHUD::OnCallFunction()
{
	UE_LOG(LogTemp, Log, TEXT("Called SingleDelegate"));
}

4. 処理の確認

関数が呼び出されることを確認します
Single.gif

複数登録についてはこちら

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?