今回は、Unreal Engine C++のデリゲートの基本について解説します。
本記事は、以下の記事の続編です。
まずは基本編をご覧いただくことをおすすめします。
【UE5】【C++】Unreal C++のデリゲートについて【基本編】
1. 型の宣言
発火したい.hで自作のデリゲートを宣言します
宣言後、DECLARE_MULTICAST_DELEGATEマクロ内に渡します
| 1つ | 複数 |
|---|---|
| DECLARE_DELEGATE | DECLARE_MULTICAST_DELEGATE |
//引数なし、戻り値なしのデリゲート型を宣言
DECLARE_MULTICAST_DELEGATE(FMultiCallback);
//「FMultiCallback」という自作のデリゲート型のインスタンスを作成
FMultiCallback MultiDelegate;
2. 発火のタイミング
cppに発火したいタイミングで処理を書きます。
| 1つ | 複数 |
|---|---|
| ExecuteIfBound() | Broadcast() |
FReply UOriginalParts::NativeOnMouseButtonDown(const FGeometry& InGeometry,const FPointerEvent& InMouseEvent)
{
//左クリックでUIがクリックされた
if (InMouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
{
// 発火(関数が登録されていれば実行する)
MultiDelegate.Broadcast();
return FReply::Handled();
}
return Super::NativeOnMouseButtonDown(InGeometry, InMouseEvent);
}
3. 関数の登録
呼び出したいクラスで関数を登録します
| 1つ | 複数 |
|---|---|
| BindUObject() | AddUObject() |
void UUMainHUD::NativeConstruct()
{
if (Parts == nullptr) return;
// HUDの関数を複数登録
Parts->MultiDelegate.AddUObject(this, &UUMainHUD::OnCallFunction_1);
Parts->MultiDelegate.AddUObject(this, &UUMainHUD::OnCallFunction_2);
Parts->MultiDelegate.AddUObject(this, &UUMainHUD::OnCallFunction_3);
}
//発火時にこの関数を呼ぶ
void UUMainHUD::OnCallFunction_1()
{
UE_LOG(LogTemp, Log, TEXT("Called MultiDelegate_1"));
}
void UUMainHUD::OnCallFunction_2()
{
UE_LOG(LogTemp, Log, TEXT("Called MultiDelegate_2"));
}
void UUMainHUD::OnCallFunction_3()
{
UE_LOG(LogTemp, Log, TEXT("Called MultiDelegate_3"));
}
4. 処理の確認
他のデリゲートの記事は情報量が多くて自分には難しいものでした。
自分用に最小でまとめましたので皆さんのお役に立てれば嬉しいです!!
