0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成 AI を用いて Unity の Behavior Graph 作成を自動化する

0
Posted at

はじめに

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 とはなにか

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 による自動化を実現するため、本ライブラリを活用いただければと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?