BLOGブログ

2021.10.13UE4UE/ Levelその他

[UE4]Editor Utility Widget内でレベル上にあるActorを指定できるようにする

執筆バージョン: Unreal Engine 4.26

みなさん、こんにちは。
今回はEditor Utility Widget内でレベル上にあるActorを指定できるようにする方法をご紹介します。

上図のようにEditor Utility Widgetで、レベル上に配置しているActorを指定し、特定の操作を行える機能を作ることができます。


一例として、今回は配列への追加作業を効率化します!!
配列に複数のActorを1つずつ追加する作業って大変ですよね!!BP_TriggerBoxというトリガーにBP_Itemを配列で追加していく作業を例にして説明します。


【指定したBP_TriggerBox】に対して、
【選択中のActorを配列に追加するボタン】Editor Utility Widgetを作ります。

まずContent Browserで右クリックし、Editor Utilities > Editor Utility Widgetを選択します。


【指定したBP_TriggerBox】を先に作ります。

①BP_TriggerBoxを指定する場所を作ります。
先程作ったEditor Utility Widgetを開いてDesignerでSingle Property Viewをドラッグ&ドロップします。
Single Property Viewの名前はわかりやすく「Selected Trigger」に変更します。

②Graphを開いて、Event Constructを呼び出して
①で追加した「Selected Trigger(Single Property View)」をGetし、Set Objectを呼び出します。

③Set ObjectのNew ObjectはSelfにします。

④Selected TriggerからSet Property Nameを呼び出します。
New Property Nameは「TriggerBox」とします。(ここで指定する「TriggerBox」は次に説明します。)

 

⑤BP_TriggerBoxを指定できるようにするために、変数を追加します。
ここで注意していただきたいのですが、「Soft Object Reference」を指定してください。
Object Referenceでは上手く動きません。

最後に、Event Constructに繋いで終わりです。

この状態で先程作ったEditor Utility Widgetを右クリックし、Run Editor Utility Widgetを押すと以下の図のようにウィンドウが表示され、
レベル上に配置されているBP_Tigger Boxを指定できるようになりました。


次に【選択中のActorを配列に追加するボタン】を作ります。

①指定したBP_TriggerBoxに選択中のActorを追加してくれるボタンを作ります。
先程作ったEditor Utility Widgetを開いてDesignerでButtonをドラッグ&ドロップします。
Buttonの名前はわかりやすく「Register item」に変更します。また、ボタンに対してtextで「アイテムを登録」も追加します。

 

②追加したButtonのDetailsを開き、Events > On Clickedを選択します。

そうするとEvent Graphに移動します。

③変数のTriggerBoxをGetし、右クリックしてConvert to Validated Getを押します。

④Load Asset Blockingを呼び出し、Return ValueにCast To BP_TriggerBoxを入れます。
これで【指定したBP_TriggerBox】を把握できるようになります。

⑤次に、【Actor】を指定します。今回は選択中のBP_ItemだけをBP_TriggerBoxの配列に入れるようにします。
Get Selected Actorsを呼び出し、For Each Loopを繋ぎます。Array ElementからCast To BP_Itemを呼び出してAs BP ItemからADD UNIQUEを繋ぎます。

⑥最後に、Cast To BP_TriggerBoxからGetItemListを呼び出します。ADD UNIQUEにも繋ぎます。
これでボタンを押すだけで、

選択中のActor(今回はBP_Item)がBP_TriggerBoxのItemList内に自動的に追加されるようになります。


ボタンを押すだけで、選択中のActorの中から指定したActor(BP_Item)のみがBP_TriggerBoxの配列に登録されました!!超便利!!