【Unreal Engine】Blueprintグラフを整理する10のテクニック

作成: 2025-12-12最終更新: 2026-09-05

Blueprintを分割・見た目・名前と値の3つの観点から整理します。標準Cubeの補給箱で、コメント→整列→関数化を試し、動作を変えずに読みやすくする手順を解説します。

補給箱の弾数を変えたいだけなのに、BeginPlayから伸びる線を何画面も追っている。見た目の設定も、所持数の設定も、確認用の表示も同じ場所にあると、変更したい処理を探すだけで時間がかかります。

こうした、線や処理が絡み合って流れを追いにくい状態を スパゲッティコード と呼びます。整理するときは、ノードをきれいに並べることに加えて、「どのまとまりが、何をするか」へ名前を付ける のが効果的です。

この記事では10のテクニックを3系統に分け、最後に小さな補給箱のBlueprintを整理します。合言葉は、区画→整列→箱詰め。動作を変えずに、後から読み返しやすくしていきます。

絡まった毛糸をほどいて、きれいな毛糸玉に巻き直す人形

この記事でわかること

  • 分割・見た目・名前と値で、グラフを読みやすくする10の技
  • コメントボックス、整列、Rerouteの使いどころ
  • Collapse to Functionで、処理のまとまりに名前を付ける方法
  • 整理の前後で、同じ結果になるか確かめる手順

Sponsored

読みやすいグラフは、変更する場所が分かる

しばらく触っていないグラフでは、作った本人も細かな意図を忘れます。コメントや関数名は、そのときの自分へ残す案内です。

絡まった線を追うグラフと、まとまりごとに左から右へ読めるグラフの比較

たとえば、BeginPlayが「所持数を設定する→見た目を整える→結果を表示する」と読めれば、弾数を変えるときは最初のまとまりを開けば済みます。全ノードを毎回読む必要がなくなります。

整理の目的は、処理の流れと変更する場所を見つけやすくすること です。線が1本交差しただけで悪いグラフになるわけではありませんし、短い処理を無理に分割する必要もありません。

10のテクニック:3つの系統

10の整理テクニックを、分割の技①〜③、見た目の技④〜⑦、名前と値の技⑧〜⑩に分ける
系統テクニック
分割の技①関数化 ②マクロ化 ③Componentへの分割
見た目の技④コメントボックス ⑤ノード整列 ⑥Reroute ⑦左から右へ読む配置
名前と値の技⑧意味の分かる名前 ⑨ローカル変数 ⑩調整値に名前を付ける

全部を一度に使う必要はありません。まずはコメントと整列で流れを確かめ、まとまりが見えたら分割を考えます。

分割の技(①〜③)

① 1つの仕事をFunctionへまとめる

Function=関数 は、一連の処理に名前を付け、呼び出せるようにしたものです。「ダメージを計算する」だけでなく、「補給箱の中身を初期値へ戻す」のような、戻り値のない処理もまとめられます。

関数の呼び出しノードを見れば仕事の名前が分かり、詳しく知りたいときは中を開けます。同じ処理を別の場所でも使うなら、コピーを増やさず、同じ関数を呼べます。

目安は「このまとまりを一言で説明できるか」です。「いろいろ設定する」より「補給箱の所持数を設定する」と言える単位の方が、変更先を探しやすくなります。

② 繰り返し使う流れはMacroも候補にする

Macro=マクロ も、複数ノードを1つにまとめる仕組みです。成功・失敗のように実行出口を分けたい場合や、DoOnceとDelayを組み合わせた流れを繰り返し使う場合に候補になります。

ただし、BranchがあるだけでMacroにする必要はありません。Functionでも分岐や変数の設定はできます。 一方、Delayのように途中で待つ処理はFunction内には置けません。違いはFunctionとMacroの記事で具体的に試せます。

③ 複数のActorで使う仕事をComponentへ分ける

敵にも木箱にも体力を持たせたいなら、HPの管理をComponentへ分ける方法があります。Componentは、Actorへ取り付けて使う機能の部品 です。

それぞれのActorへHP計算をコピーする代わりに、同じ体力の部品を取り付けます。共通の計算を直す場所がまとまります。まずは関数で仕事を分け、複数Actorへ持たせたいまとまりが見えたら、体力Componentの実践を参考にしてください。

Functionで仕事に名前を付け、Macroで出口を分け、Componentを複数のActorで共有する

見た目の技(④〜⑦)

④ コメントボックスで目的を示す

ノード群を選択して C キーを押すと、コメントボックス で囲めます。枠の見出しには「何のための処理か」を書きます。

「Setを2回」より「開始時の弾数と回復薬数をそろえる」なら、ノードを読む前に目的が分かります。理由が特別な値には、「連射しても音が重なりすぎないように0.1秒空ける」のような短い補足も役立ちます。

⑤ ノードと実行線をそろえる

複数のノードを選択して右クリックし、「Alignment」の項目で上端や左端などをそろえます。つながった線をまっすぐにしたい場合は「Straighten Connections」を使います。

ノードの上端をそろえても、実行ピンの高さまで一致するとは限りません。カードの端をそろえる操作と、接続線を直線にする操作 を使い分けると、流れを追いやすくなります。

ショートカットは「Editor Preferences」→「Keyboard Shortcuts」で、使うコマンド名を検索できます。キー設定が違う環境では、メニューから実行して構いません。

⑥ Rerouteで線の通り道を変える

Reroute は、ワイヤーの途中に置く中継点です。ワイヤーをダブルクリックするか、出力ピンからドラッグして「Add Reroute Node」を選びます。

ノードの裏を通って見えない線を、外側へ迂回させるときに便利です。中継点を動かしても、元の出力と入力の関係は変わりません。別々の値を1本に合流させる道具ではありません。

同じ値の出力と入力を保ち、Rerouteの中継点で別��のノードの外側へ線を通す

⑦ 主な流れを左から右へ配置する

まず白い実行線が左から右へ読めるように置き、値を作るノードは、その値を使う処理の近くへ寄せます。

1列が長くなったら、意味のまとまりで段を分けます。DoOnceのResetへ戻す線のように、仕組み上、左へ戻る接続もあります。すべての線を一方向にするより、始まりと行き先が分かる配置 を優先してください。

Sponsored

名前と値の技(⑧〜⑩)

⑧ 名前から意味が分かるようにする

Temp1 より DamageAfterArmorNewVar より Ammo。値の用途が分かる名前にすると、何を保存しているかを毎回調べずに済みます。

Booleanなら bIsLocked のように、「はい/いいえ」で読める名前が向いています。接頭辞や大文字・小文字の流儀は、プロジェクト内でそろえます。EpicのC++向け命名規約と、Blueprintで入力できる変数名の制約は別なので、「bを付けないとBlueprintで使えない」という意味ではありません。

⑨ その関数だけの中間値はローカル変数へ

ローカル変数 は、その関数の中だけで使う一時的な置き場です。たとえば合計金額を計算する途中の値なら、Actor全体で保持する変数にせず、関数内へ置けます。

後でも必要なHPや所持数までローカルへ移すと、呼び出し後に保持できません。「この計算の間だけ必要か、Actorが覚えておく値か」で選びます。詳しくはBlueprint変数入門を参照してください。

⑩ 調整する数字に名前を付ける

タワーディフェンスのグラフに 500 があると、それが射程か、価格か、体力かは数字だけでは分かりません。このように意味を読み取りにくい数値を マジックナンバー と呼びます。

射程なら MaxRange という変数にし、同じ射程を使う場所から参照すると、意味と調整箇所がそろいます。ただし、値が同じ500でも、射程と価格は別の設定です。同じ数字という理由だけで1つにまとめないでください。

各所の500を、同じ意味の設定MaxRangeとして1箇所で管理する

名前付き変数にしても、値を変更できなくなるわけではありません。ここで行うのは「調整値の置き場所をまとめる」ことです。カウントへ1を足すなど、用途が明らかな数字まで、すべて変数にする必要はありません。

実践:補給箱のBeginPlayを整理する

ここからは、同じ小さなBlueprintを作って整理します。補給品の数を設定し、箱を表示し、内容を画面へ出す だけの例なので、音やUIの素材は不要です。アイテムを取る処理は作りません。

整理前後で箱の表示とMedkits: 3 / Ammo: 30は同じ。グラフは数の設定・見た目・表示の3つに分かれる

UE5のThird PersonテンプレートをBlueprintで作り、VariantがあればNoneを選びます。新しい練習フォルダで進めます。

① 整理前の補給箱を作る

Actorを親に BP_SupplyCrate を作り、DefaultSceneRootの子へStatic Meshを追加して CrateMesh と名付けます。標準Cubeを設定し、相対位置・回転は0、Scaleは1にします。Cubeはアセット選択の「Show Engine Content」をオンにすると、Engine/BasicShapes から選べます。

CrateMeshはMobilityをMovable、Collision PresetsをNoCollision、Simulate Physicsをオフにします。「Rendering」の Visibleをオフ、「Hidden in Game」はオフのままにします。開始処理でVisibleをオンにして、箱が現れるようにします。

変数 MedkitsAmmo をどちらもIntegerで作り、既定値を0にします。Medkitsは回復薬の個数、Ammoは弾数です。

Event Graphで、BeginPlayの白い実行線を次の順につなぎます。

順番ノード設定
1Set Medkits3
2Set Ammo30
3Set Relative Scale 3DTargetはCrateMesh、New Scale 3Dは(1.2, 1.2, 1.2)
4Set VisibilityTargetはCrateMesh、New Visibilityはオン、Propagate to Childrenはオフ
5Print TextDuration 10、Print to ScreenとPrint to Logはオン

最初はEvent Graphへ、そのまま並べて作ります。Set Relative Scale 3DとSet Visibilityは、ComponentsのCrateMeshをグラフへドラッグし、取得した参照から作るとTargetをそろえやすくなります。

BeginPlayからMedkitsを3、Ammoを30に設定し、続いて見た目の設定へ進む

同じ流れの後半で、見た目を整えます。

同じCrateMeshをTargetにしてScaleを1.2に設定し、Visibleをオンにする

図の「〜から」「〜へ」は前後の接続先を示す注記です。新しいノード名ではありません。青いコメント枠は次の段階で追加するので、最初はノードと接続だけ作れば大丈夫です。

Print TextのIn Textには、次のように作った文章を渡します。

  1. Format Textを置き、Formatへ Medkits: {Medkits} / Ammo: {Ammo} と入力する。
  2. 出現したMedkitsとAmmoの入力へ、それぞれGet MedkitsとGet Ammoをつなぐ。
  3. Format TextのResultを、Print TextのIn Textへつなぐ。

Format Text は、{名前} の部分へ値を埋め込むノードです。Print Text はそのTextを画面やログへ出します。数を3や30と文章へ直接書き込まず、実際に保存した変数の値を表示するのがポイントです。

Get MedkitsとGet AmmoをFormat Textへ渡し、ResultをPrint TextのIn Textへ接続する

Compile・保存して、BP_SupplyCrateをPlayer Startの前へ1個置きます。ActorのScaleは1、中心は床から60cmほど上にします。Visibleがオフなので、配置時はOutlinerで選択して位置を調整できます。

Playすると、箱が表示され、Medkits: 3 / Ammo: 30 が10秒間出ることを確かめます。これが整理後にも保つ結果 です。ここで止めて保存しておきます。

② コメントで区画し、流れを整える

意味ごとに囲み、流れを整列し、まとまりを関数へ箱詰めする3手順

次の3つの範囲を、それぞれ選択して C キーで囲みます。

コメントの見出し囲むノード
補給品の数を設定するSet Medkits、Set Ammo
箱の見た目を整えるGet CrateMesh、Set Relative Scale 3D、Set Visibility
補給品の数を表示するGet Medkits、Get Ammo、Format Text、Print Text

BeginPlayは枠の外に残します。CrateMeshのGetを2個置いた場合は、両方とも見た目の枠へ含めます。

各範囲を左から右へ読める位置へ寄せ、整列します。白線は 所持数→見た目→表示 の順を保ちます。この短い例ではRerouteを増やす必要はありません。隠れている線があるときだけ使ってください。

コメントは処理を実行するものではないので、囲んだだけで動作は変わりません。まず区画を付けると、どこをまとめるかが分かります。

③ 連続した範囲をFunctionへまとめる

「補給品の数を設定する」の Setノード2個だけ を選択し、右クリック→「Collapse to Function」を選びます。My Blueprintにできた関数を InitSupplyStock と名付けます。BeginPlayは選択しません。

InitはInitializeの略で、初期化=使い始めるときの値をそろえること を表しています。ここでは回復薬を3個、弾数を30発にそろえる仕事です。

Collapse to Function は、選んだ処理を関数の中へ移し、元の場所へその関数を呼ぶノードを置く操作です。今回のInitSupplyStockには入力・戻り値を追加しません。変数を設定する順番が大事なので、Pureはオフのまま、白い実行線で呼びます。

残りも同じように、各枠のノードをまとめます。

元の範囲関数名
補給品の数を設定するInitSupplyStock
箱の見た目を整えるApplySupplyAppearance
補給品の数を表示するReportSupplyStock

見た目の範囲ではGet CrateMeshも、表示の範囲ではGet変数とFormat Textも選びます。白線のあるノードだけを選ぶと、値の取得が関数の外へ残る ため、今回のように仕事全体をまとめたい場合は、値を作るノードも含めてください。

関数をダブルクリックし、元の処理が中に入っていることを確かめます。3関数とも同じBP_SupplyCrate内で、自分の変数やComponentを扱います。呼び出しのTargetはSelfです。

Event GraphではBeginPlayから3関数を順につなぎます。折り畳み前の呼び出し順が残っているか確かめ、古いコメント枠は不要なら外します。

BeginPlayからInitSupplyStock、ApplySupplyAppearance、ReportSupplyStockを順に呼ぶ。TargetはすべてSelf

これでBeginPlayが「数を設定する→見た目を整える→数を表示する」と読めます。詳しい値は関数の中にあり、全体の順番はEvent Graphで分かります。

④ 同じ結果と、変更する場所を確かめる

Compile・保存してPlayします。箱が同じように現れ、Medkits: 3 / Ammo: 30 と表示されれば、整理前の結果を保てています。

次に「弾数を60へ増やしたい」と考えて、変更先を探します。InitSupplyStockを開き、Set Ammoの値だけ60へ変えてください。新しくPlayして Medkits: 3 / Ammo: 60 と出れば、表示側は変数の値を正しく読めています。確認後は30へ戻します。

もし表示を先に呼ぶように順番を変えると、設定前の0を読むことがあります。ノードを整理することと、実行順を変更することは別の変更 です。まず同じ動作を保ち、仕様を変える作業はその後に行うと、原因を追いやすくなります。

うまくいかないとき

症状確認するところ
箱が出ないCrateMeshへのTarget、New Visibility、Hidden in Game、白い実行線
数字が0のままSetから表示へ進む順番、関数の呼び出し漏れ
弾数を変えても30と出るFormat Textへ数値を直書きしていないか、Get Ammoを使っているか
Collapse後に想定外の入力が増えたGet変数やComponent参照を選び残していないか
Collapse to Functionが使えないBeginPlayなどのイベントや、Delayなど関数へ入れられないノードを含めていないか

今回の3関数は、順序を追いやすくする練習用の分け方です。実際のグラフが短くて十分読めるなら、コメントだけで止めても構いません。

Sponsored

おまけ:先に知っておくと良いこと

Collapse NodesとFunctionは何が違う?

Collapse Nodes は、その場所のグラフを別の小さなグラフへ折り畳む整理です。ダブルクリックで中を開けますが、Functionのような、各所から呼ぶ共通の関数定義を作る操作とは違います。

局所的に見通しをよくしたいならCollapse Nodes、同じ仕事を名前で呼びたいならFunctionやMacro、と目的で選びます。詳しい使い分けはFunctionとMacroへ進めます。

見た目の整理と、処理の軽量化は分けて考える

100個の処理を関数の中へ隠しても、その処理を実行する回数は減りません。毎フレームの確認が多いなら、Tick・Timer・イベントの使い分けも見直します。

ただし、整理と動作変更を一度に進めると、結果が変わった原因を絞りにくくなります。読める状態へ整理して同じ結果を確認し、その後で実行頻度を変えると比較しやすくなります。

関数へ分けると、調べる範囲も選べる

Blueprint Debuggerでは、関数の中へ進むStep Intoと、関数を実行して呼び出し側の続きへ進むStep Overを使い分けられます。Step Overは、関数を実行しないという意味ではありません。

「表示は正しいので、今日は所持数の設定を調べたい」のように、追う範囲を選べます。操作はBlueprint Debuggerの記事を参照してください。

まとめ

グラフ整理では、3つの見方を使います。

  1. 分割:何をするまとまりかを見つけ、関数・マクロ・Componentへ分ける。
  2. 見た目:コメント、整列、Rerouteで、始まりから行き先まで追えるようにする。
  3. 名前と値:変数や関数へ意味の分かる名前を付け、調整する場所をそろえる。

補給箱では、区画→整列→関数化の順で、元の結果を保ったままBeginPlayを読みやすくしました。次に機能を足すときも、まず変更したい場所を囲み、そのまとまりを一言で説明できるか確かめてみてください。

つまずきの先回りには、Blueprintでよくある10のミスも役立ちます。

参考リンク

Unreal Engine このセクションのノート98