UnityにおけるAIエージェント活用術 開発現場での試行錯誤を共有

106 Views

October 24, 25

スライド概要

profile-image

Unityエンジニア

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Unityにおける AIエージェント活用術 開発現場での試行錯誤を共有

2.

目次 1. 自己紹介 2. 業界動向と最新トピック(CEDEC/Next Tokyo) 3. AIで簡単にゲーム開発できる? 4. Unityの課題とAI活用ポイント 5. 仕様書駆動×AI(要件入力〜仕様生成) 6. カスタムコマンドと調査基盤 7. UnityMCPによる連携と動的実行(デモ) 8. 共有 9. まとめ

3.

自己紹介 今井駿汰 株式会社QualiArts テクニカルアーティスト

4.

1 ゲーム業界でのAI活用

5.

ゲーム業界のAI活用が急激に進んでいる CEDEC2025 バグチケット起票の自動化 セリフ→モーションの推定 画像・音声認識+OCR/特徴点サンプリングでゲームの自動テスト AIを使って仕様書の自動作成・アップデート Google Cloud Next Tokyo 1日目の基調講演全てがAI関連

6.

2 AIで簡単にゲーム開発で きるようになる?

7.

デモ録画:ブロック崩し作成プロセス 指示: ブラウザで動くブロック崩しを作って 0:00 / 0:40

8.
[beta]
生成されたコードの抜粋
(function(){
// ===== Canvas & Pixel Ratio =====
const BASE_W = 800, BASE_H = 600; // ゲーム座標系
const canvas = document.getElementById('game');
const ctx = canvas.getContext('2d');
function setupCanvas() {
const dpr = Math.max(1, Math.min(2.5, window.devicePixelRatio || 1));
canvas.width = Math.round(BASE_W * dpr);
canvas.height = Math.round(BASE_H * dpr);
canvas.style.aspectRatio = `${BASE_W}/${BASE_H}`;
ctx.setTransform(dpr, 0, 0, dpr, 0, 0); // 論理座標=CSSピクセル
}
setupCanvas();
window.addEventListener('resize', setupCanvas);
// ===== Game State =====
const state = {
running: false,
paused: false,
score: 0,
level: 1,
li
3

JavascriptとCanvas APIを使って作成される

9.

Unityでも挑戦 指示: ブロック崩しを作って 壊れたmetaファイル 壊れたPrefab 壊れたScene コンパイルの通らないコード

10.

Unityでも挑戦 指示: ブロック崩しを作って 壊れたmetaファイル 壊れたPrefab 壊れたScene コンパイルの通らないコード 全然ダメそう🫠

11.

Unityでは課題がある ゲーム開発特有の複雑さ アセット管理:画像、音声、3Dモデルの複雑な依存関係 Prefab作成: UnityAPIを経由しないと作成が困難 シーン構築:オブジェクト配置の3D空間理解が困難 シリアライズ:Unityの独特なデータ構造 ライブラリ:様々なライブラリの使用方法 UnityでゲームをAIに作ってもらうのは難しい

12.

一部のタスクをAIに任せることは可能 コードの一部を編集 リファクタリング 指示を具体的にして実行する

13.

一部のタスクをAIに任せることは可能 コードの一部を編集 リファクタリング 指示を具体的にして実行する

14.

指示を具体的にする 指示を具体的に書けばAIは追従してくれる - インスタンスのライフサイクルはGameObjectに紐付いて - HogeManagerが以下のプロパティ・メソッドを持ち - HogeProperty - HogeMethod - FugaMethod - HogeClientがHogeManagerを使用して、HogeMethodを呼び出す - HogeClientは以下の要素をシリアライズして... - 変数の命名規則は... - 関数の命名規則は... - イベントはHogeEventとして定義して... - 非同期処理にはUniTaskを使い、CancellationTookenはGameObjectから取得して.. 具体的な指示→精度よく自走 仕様書レベルまで詳細な指示ができればAIは自走してくれる

15.

3 Unityにおける 仕様書駆動開発

16.

最近流行りの仕様書開発駆動 要件定義(仕様書)を作ってからコーディングを開始することで実装精度が上がる

17.

これもUnityで使うには課題がある Unityに最適化した仕様書の作成フォーマットが必要

18.

Unity用の仕様書作成コマンドを考える エンジニアが把握している知識 プロジェクト全体のアーキテクチャ 使用しているフレームワーク ライブラリの使用パターン コーディング規約 実装する際は 既存実装の把握 依存する機能の把握 コーディングルールの把握

19.

作りたいものの入力 作りたいものと要件を入力する

20.

仕様書作成のセットアップ

21.

AIの自律調査

22.

方向性の質問

23.

ユーザーの回答 AIの方針を確認・軌道修正

24.

追加調査

25.

エキスパート質問

26.

完了

27.

生成された仕様書 0:00 / 0:10 この仕様書をもとに実装する

28.

作ったもの 0:00 / 0:23 0:00 0:20

29.

カスタムコマンドの流れ 1. ユーザー要求の理解 2. ユーザー要求をもとにコードを探索 3. 探索したコードをもとにユーザーに質問 4. ユーザーの回答をもとに追加探索 5. 追加探索結果をもとにユーザーに再度質問 6. 仕様書の作成

30.

カスタムコマンド抜粋 <phase id="1" name="初期セットアップと依存関係把握"> <purpose> プロジェクト環境の準備とユーザーが言及した要素の依存関係を把握 </purpose> <steps> <step id="1-1" name="環境セットアップ"> <actions> - タイムスタンプベースのフォルダを作成: requirements/YYYY-MM-DD-HHMM-[slug] - $ARGUMENTSからスラグを抽出 (例: "ユーザープロフィールを追加" → "user-profile") - 初期ファイルを作成: - 00-initial-request.md にユーザーのリクエストを記録 - metadata.json にステータス追跡情報を記録 - requirements/.current-requirement をフォルダ名で更新 </actions> </step> </phase> <phase id="2" name="コンテキスト発見質問"> <steps> <step> 問題空間を理解するための最も重要な5つのyes/no質問を生成: - コードベース構造に基づいた質問 - ユーザーインタラクションとワークフローに関する質問 - ユーザーが現在使用している類似機能に関する質問 - 扱うデータ/コンテンツに関する質問 - 外部統合やサードパーティサービスに関する質問 - パフォーマンスやスケールの期待に関する質問 - すべての質問をスマートデフォルト付きで 01-discovery-questions.md に記録 スマ トデフォルトオプションを提案しながら 5つまとめて質問 900行のXMLファイル

31.

呼び出すメソッドのシグネチャを検証 <investigation id="1"> **依存クラスの詳細調査** - Phase 1で特定した依存クラスの完全な理解 - メソッドシグネチャ、プロパティ、使用パターン - 実装例と注意点 </investigation> <investigation id="2"> **API調査と実装パターン検証** - 実際のソースコードからメソッドシグネチャを完全理解 - パラメータ型、戻り値型、例外を含む正確な情報 - 存在が不確かなメソッドの検証 </investigation>

32.

呼び出すメソッドのシグネチャを検証

33.

UnityのEditor側ソースコードも参照する UnityはEditor側のソースコードが公開され参照用に使用することができる

34.

UnityのEditor側ソースコードも参照する UnityCsReferenceをサブモジュールに設定して参照 <investigation id="10" agent="unity-reference-researcher"> **Unity内部実装の調査**(必要に応じて) - Unity固有APIの詳細 - パフォーマンス考慮事項 - Unity推奨パターン </investigation> 仕様書の精度が大幅に向上 UnityのAPIも間違えずに呼び出してくれる

35.

サブエージェントの活用 UnityのEditorReferenceを参照するエージェント 調査専用のエージェント

36.

ここまででEditor拡張は作成可能 0:00 / 0:23 0:00 0:20

37.

残りの課題

38.

3 UnityMCPの活用

39.

AIとUnityの連携 MCPサーバーの活用 コンパイルの実行 Prefab・シーンの操作 Unityの実行 uLoop MCPを使用

40.

簡単なゲームまで作成可能 コンパイルの実行とコンパイルエラーの修正を自律的に行えるように 0:00 / 0:32

41.

さらなる活用 Prefab情報取得 Scene情報取得 Scene編集 名前変更 パラメーター変更 参照追加 オブジェクト追加 オブジェクト削除 Prefab編集 名前変更 .......

42.
[beta]
コードをAIに書かせて実行させる

AIにUnity APIを呼び出すコードを書かせて実行させる
public static void SpawnPrefab()
{
string[] guids = AssetDatabase.FindAssets("prefab t:Prefab");
string path = AssetDatabase.GUIDToAssetPath(guids[0]);
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(path);

}

GameObject go = Object.Instantiate(prefab);
go.AddComponent<HogeComponent>();

コードを実行すればできることは無限大に広がる

43.

コードの動的実行 コードを作成 ↓ コンパイル ↓ 実行 これは効率がわるい コードを動的実行する機能が MCPに存在

44.

2つのMCPに搭載 動的なコード実行をサポート

45.

コードの動的実行

46.

コードの動的実行 Unity APIを呼び出すことで解決

47.

完成 0:00 / 0:26 アセット管理・Prefab作成・シーン構築・シリアライズまでAIが対応

48.

共有 https://github.com/rarudo/UnityAIAgentWorkflowSample

49.

まとめ UnityでAIエージェントを最大限活用するためには 仕様書から書かせる 仕様書の時点で実装の方向性をすり合わせる ライブラリ・UnityのC#実装を参照させる Unityの操作はMCPを使用する 動的コード実行でUnityアセットのコンテキストを収集する まだまだ発展途中 指示の仕方や与えるツールによりより精度が上がる可能性がある

50.

ご清聴ありがとうご ざいました