こんにちわ、KLabの@tsune2neです
この記事はKLab Engineer Advent Calendar 2025の20日目の記事です
概要
Unity6.3で入りそうで入らなかった Graph Toolkit の調査メモです
機能概要とサンプルと使いどころ・所感を話していきます
GraphTookitとは
About Graph Toolkit - 公式ドキュメント
ノードベースのツールを開発するための包括的なフレームワーク
ShaderGraphをシェーダー以外の目的でも使えるようになる
UnrealEngineでは機能ごとにノードスクリプティングができるが
それを作れるフレームワークということ
たとえば
・AIの行動の編集機能。特定ゲームに最適化して非エンジニアでも気軽に編集。性能制限もできる。AIデザイナーに提供できる。社外で量産もしやすい。
・育成ツリーの編集機能。アウトゲームの構成をパターン化してデザイナーやアーティストに依頼する。社外で量産もしやすい。
VisualScriptingとの違い
Unityのノードスクリプティングと聞くとVisualScripting(旧Bolt)を思い浮かべる人もいるだろう
これはC#スクリプトをノードスクリプティングできる機能だ
これは破壊的な変更が可能であり、エンジニア以外が触るには非常に危険
チューニングコストも発生してしまう
それの解決策ともいえる
サンプル
GraphToolkitには2つのサンプルがついてます
Unity6.3LTS(6000.3.1f1) ではまだ使えなかったので Unity6.3Alpha(6000.3.0a2) でインストールしました
テクスチャメーカーのサンプル
色テクスチャを作り、ブレンドしてテクスチャを出力するグラフとノードのサンプルです
グラフからマテリアルを作ってCubeオブジェクトに適用すると反映されます
このサンプルにはSceneがないので、自分でSceneとGraphを作って動かす必要があります
簡単なShaderGraphをGraphToolkitで作るイメージです
実行結果
| グラフ | 結果 | メモ |
|---|---|---|
![]() |
![]() |
単色テクスチャを出力するグラフ CubeオブジェクトにD&Dしたらテクスチャ生成されて描画されます |
![]() |
![]() |
2つのテクスチャ出力の平均をとってテクスチャを生成します |
ファイル構成
- Editor/TextureMakerGraph.cs
- グラフ自体のクラス定義でエントリーポイント
- Editor/AssetImport/TextureMakerImporter.cs
- グラフをオブジェクトにマウントしたときの処理、ここではTexture2Dを出力してる
- Editor/Model/Nodes/CreateTextureNode.cs
- テクスチャメーカーグラフでの出力ノードの定義
- Editor/Model/Nodes/ITextureEvaluatorNode.cs
- ノードのテクスチャ入力処理を抽象化するためのクラス
- Editor/Model/Nodes/UniformNode.cs(ITextureEvaluatorNodeを実装)
- 指定した色単色のテクスチャを作るノードの定義
- Editor/Model/Nodes/MeanColorNode.cs(ITextureEvaluatorNodeを実装)
- 2つのテクスチャ入力を平均化したテクスチャを作るノードの定義
ゲーム内処理は入っておらず
エディタ機能のみでテクスチャを作成してます
Visual Novel Directorサンプル
ノードベースで作成するビジュアルノベルのサンプルです
グラフが各GameObjectを動かすことでビジュアルノベルが進んでいきます
Graphで設定したノード情報をゲーム実行中(ランタイム)で処理するので
ランタイムで使えるようにクラス定義やデータ構造化と実行機(Executor,Director)を定義してます
このサンプルにはSceneがついてるので直接動作確認できます
実行結果
| グラフ | 結果 | メモ |
|---|---|---|
![]() |
![]() |
グラフのようなノード接続が延々と続いていて、クリックするごとに次のノードが実行されていきます |
ノードを組んでいくことでビジュアルが変わっていきます
多くの場合、データベースでビジュアルノベルを構成することが多いですが
視覚的にわかりやすく作れます
ファイル構成
- Editor/Model/VisualNovelDirectorGraph.cs
- グラフ自体のクラス定義でエントリーポイント
- Editor/AssetImport/VisualNovelDirectorImporter.cs
- グラフをオブジェクトにマウントしたときの処理、ここではTexture2Dを出力してる
- Editor/Model/Nodes/SetDialogueNode.cs
- ダイアログ表示ノードの定義
- Runtime/VisualNovelDirector.cs
- ビジュアルノベルの進行を制御するメインクラス、各ノードのExecutorを利用してゲーム中の処理を実行する
- Runtime/VisualNovelRuntimeGraph.cs
- グラフ情報(ノード情報など)を保持
- Runtime/InputProvider/IVisualNovelInputProvider.cs
- ビジュアルノベル用ノードの入力を抽象化するインターフェース
- Runtime/InputProvider/UnityInputProvider.cs
- 入力処理
- Runtime/Nodes/SetDialogue/SetDialogueExecutor.cs
- ダイアログ表示ノードの実処理
- Runtime/Nodes/SetDialogue/SetDialogueNode.cs
- ダイアログ表示ノードのパラメータ
メリット
GraphToolkitというかノードスクリプティングのメリットだが、
「デザイナーが自分で動的処理を組めるようになる」
これが一番大事のメリット
マップのちょっとしたギミック・機能をデザイナーが一人で作ってコミットするのが低コストでクオリティアップになる
これができないとエンジニア作業が発生してしまい、機会損失やコミュニケーションコストになる
破壊リスクが低く、処理コストが発生しにくい環境を用意することで
リッチな体験を低コストで量産できる
デメリット
ロジックがアセット(バイナリファイル)に格納されてしまうので
差分レビューやバージョン管理がしにくくなる
特に同時編集してコンフリクトしたときは最悪
UnrealEngineではコンフリクト解消ツールがあるが、GraphToolkitにはない
グラフ内に入れるロジックは減らし、
1機能の担当者も1,2人で収まる規模にとどめておくのがよい
しかし
1グラフ作るのに結構面倒
高機能グラフを作るとマンモスコードになりそう
大規模プロジェクトで使う時は気を付けて






