【UE4】エディタ拡張(ボタン編)

投稿者: | 2016年11月28日

はじめに

こんばんは、プログラマーの笹目です!
UE4のエディタ拡張に関して少しずつ掲載しています。

今回はボタン編です。
前回はウィジェットの属性を変更する方法を見てみました。
今回はウィジェットにイベントを登録する方法を見てみます。

※使用したバージョンはUE4.13.2になります。
※言語環境は英語になります。


ボタンを追加

前回、ラベルを設定していた箇所を修正してボタンを追加してみます。

// ウィンドウに表示するコンテンツ
return SNew( SDockTab )
    .TabRole( ETabRole::NomadTab )
    [
        SNew( SBox )
        .HAlign( HAlign_Center )
        .VAlign( VAlign_Center )
        [
            // ボタン追加(STextBoxをSButtonに変更)
            SNew( SButton )
            .Text( LOCTEXT( "ButtonText", "押して" ) )
        ]
    ];

実行した結果、下図のようにボタンが追加されました。
ただ、このままではボタンを押しても何も起きません。
このボタンに押したときの処理を登録する必要があります。

slateui_button_0


イベント登録

ボタンを押したときの処理を登録していきます。
まずは、FTestWindowModuleクラスにボタンが押されたときに呼び出す関数を追加します。
ひとまずOutputLogパネルにログを出力する処理を書きます(戻り値に関しては後述)。

/**
 * ボタンが押されたときの処理
 */
FReply FTestWindowModule::OnClickedButton()
{
    UE_LOG( LogTemp, Log, TEXT( "押されたよ!" ) )
    return FReply::Handled();
}

上記の関数をウィジェット側に設定します。
Buttonウィジェットの場合は、OnClickedイベントに関数を登録することによって、
ボタンが押されたときに関数が呼び出されるようになります。

SNew( SButton )
.Text( LOCTEXT( "ButtonText", "押して" ) )
.OnClicked_Raw( this, &FTestWindowModule::OnClickedButton )

実行してボタンを押してみると、OutputLogパネルにログが出力されていることが確認できます。
slateui_button_1


イベントについて

前回の記事で、属性の調べ方としてSLATE_ATTRIBUTEマクロを紹介しました。
実はイベントに関しても同様にマクロによって定義されています。
イベントの定義ではSLATE_EVENT( デリゲート名, イベント名 ) という形で定義されています。

イベント名は先程使用した「OnClicked」などです。
デリゲート名はそのイベントを登録するデリゲート型の名前です。

OnClickedイベントは以下のように定義されています。

/** Called when the button is clicked */
SLATE_EVENT( FOnClicked, OnClicked )

ではFOnClickedとはどのようなデリゲートなのでしょうか。
FOnClickedは以下のように定義されています。

/**
 * A delegate that is invoked when widgets want to notify a user that they have been clicked.
 * Intended for use by buttons and other button-like widgets.
 */
DECLARE_DELEGATE_RetVal( FReply, FOnClicked )

各デリゲートはマクロにより以下のように定義されています。
以下はデリゲート登録マクロの一部ですが、他のデリゲート登録マクロについても調べたい方は、
DelegateCombinations.hをご覧ください(公式ドキュメントはこちら)。

DECLARE_DELEGATE_RetVal( 返り値型, デリゲート名 )
DECLARE_DELEGATE_RetVal_TwoParams( 返り値型, デリゲート名, 第1引数, 第2引数 )
DECLARE_DELEGATE_OneParam( デリゲート名, 第1引数 )
DECLARE_DELEGATE_TwoParams( デリゲート名, 第1引数, 第2引数 )

FOnClickedデリゲートはDECLARE_DELEGATE_RetValマクロで定義されています。
したがって、OnClickedイベントでは
戻り値型:FReply
引数:なし
の関数を登録することができるということになります。


ウィジェット追加時の調べ方

ウィジェットを追加した際には、そのウィジェットクラスのヘッダーファイルを見て、
前回紹介した、SLATE_ATTRIBUTEマクロ
今回紹介した、SLATE_EVENTマクロ
で定義を確認しみてると、
そのウィジェットで何ができるのか、どう設定するのかを確認できるかと思います。
是非参考にしてみてください!


 

 

【免責事項】
本サイトでの情報を利用することによる損害等に対し、株式会社ロジカルビートは一切の責任を負いません。