はじめに
Unity には、敵や味方の AI (以下、行動 AI)をツリー構造(以下、Behavior Graph)として作成する Unity Behavior が Unity6 から公式パッケージとして提供されています。
これを用いることで、画面上でデバッグが容易な行動 AI を簡単に作成することが可能となります。
Unity Behavior は、Action や Condition として拡張が可能な、非常に強力なツールであると言えます。
しかし、Claude Code などを含むコーディング AI で、これらの行動 AI を作ることは、容易ではありません。
Unity Behavior は、デザイナーの GUI による操作を前提として作られているため、生成 AI がその操作を行えないためです。
この課題を解決するため、Behavior Graph を JSON で記述し、それを Unity Behavior のネイティブな資産(.asset)へ転写するツールを作成しました。
unity-jsonbehavior とはなにか
unity-jsonbehavior は、コーディング AI と、GUI で表現される Behavior Graph をつなぎ合わせるためのツールです。
コーディング AI は JSON でこれらの Behavior Graph を記述し、本ツールがそれを Unity Behavior のネイティブな資産(.asset)へ直接転写します。
これにより、コーディング AI の活用と、Git による差分管理など、Behavior Graph のコード管理を可能にしました。
JSON 中間表現
Behavior Graph は、JSON として宣言されます。
この JSON では、Unity Behavior が標準で持つノード資産(自作の Action/Condition、Unity 公式の 45 種の組み込みノード)を 一切改変せずに 組み合わせて、Unity 純正のグラフコンパイラでビルドして利用することができます。
設計の観点としては以下のとおりです。
- JSON は生成 AI が出力・検証・diff レビューしやすい
- ノードの実行ロジック( Action / Condition )は自作せず、既存の Unity Behavior エコシステムに乗る
- 出力物は完全にネイティブな
.asset。BehaviorGraphAgentがそのまま実行し、Unity 純正のビジュアルデバッガもそのまま使える
サンプルとして同梱しているのは、プレイヤーを追いかけつつヘイトを持ったら追跡を中断するペット AI の JSON です。
{
"name": "PetDefault",
"blackboard": [
{ "name": "Self", "type": "GameObject" },
{ "name": "Player", "type": "GameObject" }
],
"root": {
"type": "selector",
"children": [
{
"type": "guard",
"requiresAll": true,
"conditions": [
{ "condition": "HasHateCondition", "fields": [{ "name": "Self", "variable": "Self" }] }
],
"child": {
"type": "action",
"action": "CancelNavigationAction",
"fields": [{ "name": "Self", "variable": "Self" }]
}
},
{
"type": "action",
"action": "FollowPlayerAction",
"fields": [
{ "name": "Agent", "variable": "Self" },
{ "name": "Player", "variable": "Player" },
{ "name": "Distance", "literal": "3" }
]
}
]
}
}
condition / action に指定するのは、プロジェクトに既にあるUnity.Behavior.Condition / Action 派生クラスのクラス名だけです。生成 AI は新しいノード種別を発明する必要がなく、既存のノード資産をどう組み合わせるか という設計判断だけを出力すればよくなります。
既存の Unity Behavior エコシステムの資産をフル活用しつつ、生成 AI にとって扱いやすい JSON 表現に落とし込めていることがわかります。
ネイティブ資産への転写経路
Unity Behavior のグラフは、Unity 独自の internal クラス(BehaviorAuthoringGraph、NodeModel、ConditionalGuardNodeModel など)で表現されており、公式に公開されたスクリプト API はありません。
これを埋めるため、ライブラリでは リフレクション でこれらの内部構造を直接組み立て、最後に Unity 純正の公開メソッド BuildRuntimeGraph() を呼び出してコンパイルします。
ソースコードのコピー・改変は一切行わず、Unity.Behavior パッケージへの依存として公開 API と internal なデータ構造をリフレクション越しに利用するだけです。
using Org.Shirousa.JsonBehavior.Editor;
bool succeeded = BehaviorGraphImporter.Import(jsonText, "Assets/MyBehaviors/pet.asset");
GUI 操作を挟まずコードから直接呼べるため、コーディング AI エージェントのツール実行の一部として組み込むことができます。
インストール
Package Manager → + → Add package from git URL から以下を追加します。
https://github.com/shirousa/unity-jsonbehavior.git#main
まとめ
ゲームを作るうえでも、コーディング AI を用いた自律的なコード生成やテストの実施は必要不可欠です。
しかし、そのために既存の Unity Behavior エコシステムと非互換な独自フォーマットをゼロから作るのは現実的ではありません。
Behavior Graph としての互換性を保ちながら、JSON 中間表現で生成 AI による自動化を実現するため、本ライブラリを活用いただければと思います。