同じ作業を100回繰り返している瞬間があります。50個のアセットを1つずつ開いて同じ設定に変える。並べた30本の木を1本ずつ選んで少しずつ回転をずらす。手は動きますが、頭は使っていません。
こういう単純作業は、ボタン1つにまとめられます。UE5には Editor Utility Widget という仕組みがあって、C++を書かずにBlueprintだけでエディタ用のツールが作れます。ボ タンとノードを数個つなぐだけで、選んだアセットやActorをまとめて処理できます。この記事では、Editor Utility Widgetの作り方と、選択したメッシュを一括で配置し直すツールを最後まで作る方法を解説します。
この記事でわかること
- Editor Utility Widget と Editor Utility Blueprint の違い
- ツールを作って開き、タブに常駐させる手順
- よく使うノード:Get Selected Assets / Get Selected Level Actors / Set Editor Property
- ボタンを押したら選択物をまとめて処理する組み方
- 実践: 選択した木を一括でランダム回転・微妙にスケール変更するツール
- エディタ専用処理をゲーム用Blueprintに混ぜてはいけない理由
Editor Utility とは何か
Editor Utility には、見た目の違う2種類があります。どちらも エディタの上でだけ動く のが共通点です。
- Editor Utility Widget:ボタンやスライダーを並べた小さな画面(UI)を持つツール。押すと処理が走る。人が操作する前提のもの向き。
- Editor Utility Blueprint:UIを持たないタイプ。アセットやActorを右クリックしたメニュー(Scripted Actions)から関数を直接実行する。決まった処理を一発で流したいとき向き。
この記事では、ボタンを押して使う Editor Utility Widget を中心に扱います。UIがある方が、何を選んでどのボタンを押すのかが直感的で、他の人にも渡しやすいからです。

大事なのは、これらが ゲームには一切含まれない という点です。パッケージ化したexeの中には入りません。あくまで、あなたが制作中に使う道具です。
ツールを作って開く
作る手順は3ステップです。
- コンテンツブラウザで右クリック → Editor Utilities > Editor Utility Widget を選ぶ。名前を付けて作成します(例:
EUW_ScatterTool)。 - ダブルクリックで開くと、Widget Blueprintと同じUIエディタが立ち上がります。ここに Button を1つ置き、その 子に Text Block を入れてテキストを「ばらけさせる」などに変えます(Button自体は文字を持たないので、中にText Blockを入れるのがUMGの作法です)。
- 作ったアセットを右クリック → Run Editor Utility Widget を選ぶと、ツールがタブとして開きます。

開いたタブは、他のパネルと同じようにドラッグしてドッキングできます。details パネルの隣などに寄せておけば、いつでも押せる常駐ツールになります。
ボタンを押したときの処理は、UIエディタ右上の Graph に切り替えて書きます。ボタンを選んだ状態でdetailsパネルの On Clicked の「+」を押すと、押したときに走るイベントノードが生まれます。ここから処理をつなげます。
よく使うノード
ツール作りで頻繁に使う ノードは、取得系と設定系の2グループに分かれます。
| ノード | 何をする | どこから |
|---|---|---|
| Get Selected Assets | コンテンツブラウザで選択中のアセットを配列で返す | Editor Utility Library |
| Get Selected Level Actors | レベル上で選択中のActorを配列で返す | Editor Actor Subsystem |
| Set Editor Property | アセットやActorのプロパティを名前で書き換える | Kismet System Library(Object入力に対象をつなぐ) |
| Set Actor Transform | Actorの位置・回転・スケールをまとめて設定 | Actor |
つまずきやすいのは、アセットとActorで取得ノードが別 なことです。コンテンツブラウザで選んだファイル(テクスチャやメッシュ本体)を扱うなら Get Selected Assets、レベルに置いた実体(配置済みの木)を扱うなら Get Selected Level Actors です。この2つを取り違えると、選んでいるのに空の配列が返ってきて戸惑います。

取得した配列は For Each Loop で1つずつ回し、中で設定系ノードを呼ぶのが基本の形です。10個選べば10回ループが回り、10個すべてに同じ処理が当たります。
実践:木を一括でばらけさせるツール
具体的なツールを1つ、最後まで作ります。
森を作るために木を並べる。整列させると不自然なので、1本ずつ回転とスケールを手で散らす。メトロイドヴァニアの背景、見下ろし型ARPGの森、タワーディフェンスの障害物。どのジャンルでも、同じメッシュを大量に置いて少しずつ変化を付ける場面は必ず来ます。この「1本ずつ手で散らす」を、ボタン1回に置き換えます。
なぜFoliageツールを使わないのか。 草木を大量に「塗る」なら、UE標準のFoliageツールのほうが速く、回転やスケールのばらつきも設定できます(→ Landscapeで地形を作って草木を生やす、数千本規模なら PCG)。自作ツールが効くのは、 すでにActorとしてレベルに置いてしまったもの や、 木以外のもの(瓦礫・小物・スポーン地点) をまとめて直したいときです。「塗るならFoliage、置いたものを直すならツール」と覚えてください。
作るのは、レベル上で選択した全Actorに、ランダムなYaw回転(0〜360度)と、0.9〜1.1のスケールをまとめて設定する ツールです。Set Actor Scale 3D はワールドスケールを絶対値で置き換えるノードなので、初期スケールが (1,1,1) の木を並べておけば、結果として0.9〜1.1倍の ばらつきになります。
動かすとこうなります。同じ向きで並んでいた木を全部選んでボタンを押すと、向きがバラバラになり、大きさもわずかに不揃いになって、自然な森に近づきます。

手順
まずUIを作ります。EUW_ScatterTool を開き、Button を1つ置いて、その子に Text Block を入れてテキストを「ばらけさせる」にします。ボタンを選び、On Clicked の「+」でイベントを作ります。
次にGraphで、下の図の通りにノードをつなぎます。

つなぎ方を言葉にすると、次の流れです。
- On Clicked の実行ピンから、Get Editor Actor Subsystem → Get Selected Level Actors の順につなぐ(Get Selected Level Actors の Target に、Get Editor Actor Subsystem の Return Value を入れる)
- 返ってきた配列を For Each Loop へつなぐ
- Loop Body から Set Actor Rotation を呼ぶ。New Rotation の Yaw に
Random Float in Range (Min 0, Max 360)をつなぐ(Pitch と Roll は0のまま) - 続けて Set Actor Scale 3D を呼ぶ。
Random Float in Range (Min 0.9, Max 1.1)を1つ作り、その値を Make Vector の X・Y・Z すべてに入れて、均等なスケールにする - Set Actor Rotation と Set Actor Scale 3D の Target には、どちらも For Each Loop の Array Element をつなぐ。2つのノードの白い実行ピンは、左から右へ直列につなぐ
- できたら Compile と Save を押してから実行する
読み上げ用にノードの中身を疑似コードにすると、こうなります。
On Clicked(「ばらけさせる」ボタン)
Actors = GetEditorActorSubsystem.GetSelectedLevelActors()
For Each (actor in Actors):
yaw = RandomFloatInRange(0.0, 360.0)
scale = RandomFloatInRange(0.9, 1.1)
actor.SetActorRotation( MakeRotator(0, 0, yaw) )
actor.SetActorScale3D( MakeVector(scale, scale, scale) )
確かめる
レベルに同じStatic Meshを10〜20本、初期スケール (1,1,1)・回転0 で同じ向きに並べます。木のStatic Meshだけを選び(ライトやカメラを一緒に選ぶと、それらも回転・スケールされてしまいます)、ツールの「ばらけさせる」ボタンを押します。
うまくいっていれば、押した瞬間に木の向きがすべて変わり、大きさも1割の範囲でわずかに散らばります。整列していた列が、自然な林のように崩れて見えれば成功です。もしまったく変化しなければ、選択が空 の可能性が高いので、ボタンを押す前にレベル上でActorが選ばれているか(黄色い枠が出ているか)を確認してください。逆に一部しか変わらないなら、For Each Loop の接続が Loop Body ではなく Completed 側に流れていないかを疑います。
ポイントは2つです。
- 取得ノードは用途で選ぶ:レベルに置いた木を触るので、アセット用の Get Selected Assets ではなく、Actor用の Get Selected Level Actors を使う。ここを間違えると空振りする
- スケールは1つの乱数を3軸に配る:X・Y・Zに別々の乱数を入れると、木が縦や横に潰れて不自然になる。1つの乱数を3軸へ均等に入れると、大きさだけが変わって形は保たれる
同じ骨組みで、回転を「Zだけ90度刻みのランダム」に変えれば瓦礫のタイル配置に、スケール範囲を広げれば岩のばらつきに応用できます。選択物を配列で回す形は、配列・マップ・セットの使い分け を押さえていると迷いません。
おまけ:先に知っておくと良いこと
エディタ専用ノードをゲーム用Blueprintに混ぜない。 Get Selected Level Actors のようなノードは、エディタ上でしか意味を持ちません。通常のキャラクターBlueprintではこれらは検索候補にも現れませんが、コピーや古いアセットで不正な参照が残ると、Cook(パッケージ)時にエラーの原因になります。ツール用のBlueprintと、ゲーム用のBlueprintは、フォルダから分けて置くのが安全です。
Undoは自動では効かない。 ツールで行った変更は、そのままではUndo履歴に乗りません(厳密に戻すには Begin Transaction / Transact Object / End Transaction を組む必要があります)。失敗が怖い作業では、実行前にレベルを保存しておき、結果が気に入らなければ保存せずに閉じる、という運用が手軽で確実です。
まずは小さく作る。 いきなり多機能なツールを目指すと、UIとノードが絡まって挫折します。「ボタン1つ・処理1つ」から始めて、動いてから機能を足すと、途中で迷子になりません。
まとめ
Editor Utility Widget は、Blueprintだけで作れるエディタ用の道具です。選択物を配列で取得し、For Each Loop で1つずつ処理する。この形さえ掴めば、一括リネームも一括配置も同じ骨組みで作れます。手作業を100回繰り返す前に、ボタン1つにまとめてしまいましょう。
あなたのプロジェクトで、いま一番繰り返している単純作業は何でしょうか。それがきっと、最初に作るべきツールです。