AIゲーム開発研究室
自然言語による指示だけで、AIはUnityを実装できるのか
ゲーム開発ドキュメント
Unity AI Agentによるゲーム実装実験
自然言語による指示だけで、AIはUnityを実装できるのか
これまで「森のどんぐり大作戦」では、キャラクター、背景、前景、どんぐりなど、ゲームに必要となる素材の制作を進めてきた。
そして今回、いよいよUnityによるゲーム実装へ入る。
ただし、本研究では、人間がUnityを操作し、AIにはC#スクリプトだけを書いてもらう、という方法を目指しているわけではない。
AIにスクリプトを書いてもらい、
人間がGameObjectを作り、
人間がスクリプトをアタッチし、
人間がComponentを追加し、
人間がInspectorを設定する。
それでは、ゲーム実装の主体は依然として人間である。
そこで今回は、さらに一歩踏み込むことにした。
自然言語による指示だけで、AIがUnity Editor内部の実装作業そのものをどこまで行えるのか。
Unity AI Agentを使用して、実際に検証する。
Unity AIを前提としたプロジェクトの作成
今回の実装環境には、
Unity 6.5(6000.5.8f1)
を使用した。
テンプレートには、
Universal 2D
を選択。
プロジェクト名は、
Omusubiyama
とした。
そして今回、特に重要なのが、
「AI Assistantを使用」
をONにした状態でプロジェクトを作成したことである。
今回Unityを使用する目的は、単にゲームを実装することではない。
AIがUnity内部のゲーム構築に、どこまで直接参加できるのか。
それ自体を検証する。
Unity AI Agentの導入
Unity Editorを起動し、
Window → AI → Assistant
からUnity AI Assistantを開いた。
Unity AIを使用するため、今回は14日間の無料トライアルを開始した。
しかし、これですぐ実験開始とはならなかった。
Assistantには、
Checkpoints setup failed
という警告が表示された。
AIにUnityを任せるための「戻り」
Checkpointは、AIがUnityプロジェクトへ変更を加える際、その変更前の状態を保存しておくための仕組みである。
AIによる実装では、
AIに変更させる
だけでは不十分である。
問題が発生した場合、
変更前へ戻れる
ことも重要になる。
画像生成AIによる素材制作でも、生成結果を比較し、必要なら前の状態へ戻ることは重要だった。
Unity実装では、それ以上に「戻り」が重要になる。
そこでCheckpointを使用できる状態にしてから実験を開始することにした。
エラーを確認したところ、Gitが見つからないことが原因だった。
そこでGit for Windowsを導入した。
導入直後にはUnity側で認識されなかったが、PCを再起動したところ、
System(git 2.55.0)
として正常に認識され、
Checkpoints setup successful
となった。
これで、AIにUnityを変更させるための実験環境が整った。
実験1 AIにGameObjectを作らせる
最初からゲーム本体を実装させることはしない。
まず確認したいことは、非常に単純である。
自然言語による指示だけで、AIはUnity Editorを実際に操作できるのか。
Unity AI Agentへ、次のプロンプトを入力した。
使用プロンプト
Create one empty GameObject in the current scene and name it AI_Test_Object.
Do not make any other changes.
指示したのは、
現在のSceneに空のGameObjectを一つ作成し、AI_Test_Objectという名前を付ける。
ただそれだけである。
Agentは処理に必要なコードを生成した。
内容を確認すると、
AI_Test_Object
というGameObjectを作成する処理が記述されていた。
実行を許可すると――
Hierarchyに、
AI_Test_Object
が出現した。
人間はUnityのメニューからGameObjectを作成していない。
自然言語でAIへ指示しただけである。
Unity AI AgentがUnity Editorを実際に変更できることが確認された。
実験2 Componentを追加し、Inspectorを設定する
GameObjectを作れることは確認できた。
しかし、それだけではゲーム実装とは言えない。
次に確認したのは、
既存のGameObjectをAIが認識し、Componentを追加し、そのパラメータまで設定できるのか。
ということである。
使用プロンプト
Add a Rigidbody2D component to AI_Test_Object.
Set its Gravity Scale to 0.
Do not make any other changes.
Agentは既存の AI_Test_Object を検索し、Rigidbody2Dがすでに存在するか確認したうえで、存在しない場合には追加する処理を生成した。
さらに、
Gravity Scale = 0
を設定する処理も生成した。
実行すると、
AI_Test_Object
のInspectorに、
Rigidbody 2D
が追加され、
Gravity Scale = 0
に設定された。
これによって、
GameObjectの生成だけでなく、Componentの追加とInspector相当のパラメータ設定までAIが実行できる
ことが確認された。
AIが止まった?
ところが、この実験中に一つ問題が発生した。
Agentへ指示を出しても、いつまでたっても処理が終わらない。
画面では処理中のように表示されている。
最初は、
PCの性能が足りないのではないか。
とも考えた。
しかし、よく画面を見ると、
Awaiting input...
と表示されていた。
さらに、
Assistant wants to Execute code
と表示され、
人間に、
Deny / View / Allow
の選択を求めていた。
つまり――
AIは止まっていたのではなかった。
人間からの許可を待っていたのである。
しかも、人間がそれに気づかなかったため、AIは長時間、何もせず待ち続けていた。
ここで今回の実験による副次的な発見があった。
AIは非常に辛抱強い。
AIへ与える権限を変更する
Unity AI Assistantの設定を確認すると、
Execute Generated C# Code
が、
Ask Permission
になっていた。
つまり、AIが生成したC#コードを実行するたびに、人間の許可を必要とする設定である。
そこで、
Ask Permission → Allow
へ変更した。
すべての権限を無条件にAIへ渡したわけではない。
今回必要となる、
生成したC#コードを実行する権限
だけを変更した。
そして再び実験を行った。
実験3 Colliderを追加し、数値を設定する
次に、既存の AI_Test_Object へBoxCollider2Dを追加させる。
使用プロンプト
Add a BoxCollider2D component to AI_Test_Object.
Set the BoxCollider2D Size to X = 2 and Y = 3.
Do not make any other changes.
すると――
驚くほど速く処理が完了した。
AI_Test_Object のInspectorには、
Box Collider 2D
が追加され、
Size X = 2
Size Y = 3
に設定された。
人間はComponentを追加していない。
Inspectorの数値も入力していない。
自然言語による指示だけで、
対象GameObjectの認識
→ Componentの追加
→ パラメータ設定
→ Unityへの反映
までが実行された。
同時に今回の実験では、もう一つ重要なことが分かった。
AI Agentの能力だけではなく、人間がAIへどのような権限を与えるかによって、開発フローそのものが大きく変化する。
これは今後、AIによるゲーム実装を考えるうえで重要な検討事項になる。
実験4 C#スクリプトを作り、GameObjectへアタッチする
最後に、さらに一段階進める。
今度は単なるComponent設定ではない。
AI自身にC#スクリプトを新規作成させ、それをGameObjectへアタッチさせる。
そして実際に動作させる。
Unity AI Agentへ、次の指示を行った。
使用プロンプト
Create a new C# script named AI_Test_Movement.
The script should make AI_Test_Object move slowly left and right automatically while the game is running.
Attach the AI_Test_Movement script to AI_Test_Object.
Do not modify or remove the existing Rigidbody2D or BoxCollider2D.
Do not make any other changes.
今回は、新しいファイルを作成するため、
Create file
の許可を求められた。
これはC#コードの実行とは別の権限である。
ファイル作成を許可すると、Agentは、
AI_Test_Movement.cs
を新規作成した。
さらに、
AI_Test_Objectへ自動的にアタッチ
した。
既存の、
Rigidbody2D
BoxCollider2D
も維持されている。
Inspectorにはスクリプトの公開パラメータも表示された。
ここまで、人間はC#コードを書いていない。
スクリプトファイルも作っていない。
GameObjectへのアタッチもしていない。
すべてAIが行った。
AIが作ったゲーム処理を実行する
最後にUnityのPlayボタンを押した。
すると、
AI_Test_ObjectのTransformのX座標が左右へ往復し始めた。
AIが作成したC#スクリプトが、Unity上で実際に動作したのである。
今回作ったもの自体は、左右へ動くだけの単純なGameObjectである。
しかし、この実験の目的はゲームを完成させることではない。
確認したかったのは、
AIがUnityの実装作業そのものを担当できるのか
ということである。
その問いに対して、今回の基礎実験では明確な結果が得られた。
今回の実験で確認できたこと
今回、人間は、
C#を書いていない。
Rigidbody2Dを手動で追加していない。
BoxCollider2Dを手動で追加していない。
Inspectorのパラメータを手動で設定していない。
生成されたスクリプトをGameObjectへ手動でアタッチしていない。
人間が行ったのは、
何を実装するのかを決めること。
AIへ自然言語で指示すること。
必要な権限を判断して与えること。
AIが行った結果を確認すること。
次に何を行うのかを判断すること。
である。
一方、AIは、
GameObjectの生成
既存GameObjectの認識
Componentの追加
パラメータの設定
C#スクリプトの生成
GameObjectへのアタッチ
実行可能な状態の構築
を担当した。
人間 → AI → Unity
これまでゲーム実装では、
人間 → Unity
という関係が基本だった。
人間がUnityを操作し、GameObjectを作り、Componentを追加し、Inspectorを設定し、スクリプトをアタッチする。
しかし今回の実験では、その間にAIが入った。
人間
↓
自然言語による実装指示
↓
AI Agent
↓
Unity
という新しい実装経路が、実際に成立した。
これは単に、
「AIにC#を書いてもらう」
ということではない。
人間が実装方針を決め、
AIへ指示し、
AIがUnity内部で実装し、
人間がその結果を確認して次の判断をする。
ゲーム実装における人間とAIの役割そのものが変化する可能性がある。
今回の実験は、まだ非常に小さな基礎実験にすぎない。
複数のGameObject。
ゲーム素材。
Prefab。
Collider同士の関係。
ゲーム進行。
キャラクター制御。
シーン管理。
エラーの発見と修正。
実際のゲーム制作では、これから検証しなければならないことが数多く残されている。
しかし少なくとも今回、
自然言語による指示から、AIによるUnity実装、そして実際の動作までを一本につなぐことができた。
ゲーム素材の制作を終え、
いよいよ「森のどんぐり大作戦」のUnity実装へ入ろうとしていたその入口で、
想定していた以上に大きな扉が開いた。
AIはゲーム開発を支援するだけなのか。
それとも、
人間と役割を分担し、ゲームそのものを実装する存在になり得るのか。
ここから、その答えを実際のゲーム制作によって確かめていく。








