AIゲーム開発研究室
AIはゲーム画面を組み立て、見た目を判断できるのか
AIゲーム開発研究室
ゲーム開発ドキュメント
Unity AI Agentによる実制作開始
AIはゲーム画面を組み立て、見た目を判断できるのか
前回の実験では、Unity AI Agentに自然言語で指示を与えることによって、GameObjectの作成、コンポーネントの追加、C#スクリプトの作成とアタッチ、さらにオブジェクトの移動まで実行できることを確認した。
これによって、
自然言語による指示だけで、AIはUnityを実装できるのか。
という最初の問いに対して、一つの大きな成果を得ることができた。
しかし、実際のゲーム開発はここからである。
今回は実験用のGameObjectではなく、これまで制作してきた実際のゲーム素材をUnityへ読み込み、
Unity AI Agentにゲーム画面そのものを組み立ててもらう。
いよいよ「森のどんぐり大作戦」の実制作へ入ることにした。
ゲーム素材をUnityへ読み込む
まず、これまで制作してきた素材ファイルを整理した。
素材のファイル名をUnityで扱いやすい英数字表記へ変更し、用途ごとにフォルダを分けた。
背景素材は、
Assets/Art/Backgrounds
キャラクター素材は、
Assets/Art/Characters/Panta
アイテム素材は、
Assets/Art/Items
へ配置した。
これによって、背景、キャラクター、どんぐりなど、ゲーム制作に必要な素材をUnity上で整理して管理できる状態になった。
今回は、この素材を人間が一つずつシーンへ配置するのではない。
ここからUnity AI Agentへ指示を与える。
AIに背景を配置させる
最初に、ゲームの基本背景を配置するようUnity AI Agentへ指示した。
使用する素材は、
Forest_Background.png
である。
Unity AI Agentは素材を認識し、SpriteRendererを持つGameObjectを作成してシーンへ配置した。
背景そのものの配置には成功した。
しかし、最初の状態ではゲーム画面全体を完全には覆っていなかった。
そこで、
Main Cameraの表示領域全体を背景で覆い、画像の縦横比は維持する
ように指示した。
Unity AI AgentはMain Cameraと背景画像の大きさを調べ、背景のScaleを計算して変更した。
その結果、1920×1080のゲーム画面全体を背景画像で覆うことができた。
ここで重要なのは、人間がScaleの数値を計算して入力したのではないことである。
人間が伝えたのは、
「ゲーム画面全体を背景で覆う」
という目的だけだった。
その目的を実現するために必要なUnity上の処理を、AIが判断して実行した。
上部前景を配置する
続いて、画面上部の枝葉素材、
Forest_Foreground_Top.png
を配置した。
これは背景画像の上へ重ねる前景素材である。
Unity AI Agentへ、画面上部へ配置し、背景より手前に表示するよう指示した。
AIはGameObjectを作成し、位置とScaleを調整し、SpriteRendererの描画順も設定した。
ゲーム画面を確認すると、背景の森の手前に枝葉が重なり、画面上部に自然な奥行きが生まれた。
下部前景を配置する
次に、
Forest_Foreground_Bottom.png
を使用して、ゲーム画面下部の草地を配置した。
こちらもUnity AI AgentがGameObjectを作成し、位置、大きさ、描画順を設定した。
これによって、
背景の森
上部の枝葉
下部の草地
という三つのレイヤーがUnity上で組み合わされた。
素材制作段階では別々の画像だったものが、初めてゲーム画面として一つになった。
ここまでの画面構成は、すべてUnity AI Agentへの自然言語による指示を中心として行っている。
そして、パンタ登場
背景と前景が完成したところで、いよいよパンタを登場させることにした。
使用したのは正面向きの、
Panta_Front.png
である。
Unity AI Agentへ、パンタをゲーム画面中央付近へ配置するよう指示した。
AIはパンタのGameObjectを作成し、SpriteRendererへ画像を設定してシーンへ配置した。
森の中に、初めてパンタが立った。
これまで別々に制作してきた背景、前景、キャラクターがUnity上で一つのゲーム画面として組み合わされた瞬間である。
AIに「自然な位置」を判断させる
ここで新しい問題が生まれた。
パンタを単純に画面下部へ置いただけでは、背景画像の上にキャラクター画像を貼り付けたように見える。
パンタは森の中に立っている。
したがって、着地しているときには、
足の一部が手前の草に隠れている方が自然である。
そこで今回は、具体的なY座標を指定しなかった。
Unity AI Agentには、
パンタを少し下へ移動し、足の一部だけが前景の草に自然に隠れる位置へ調整する
よう指示した。
すると、これまでとは少し違う動きが始まった。
AIが画面を見始めた
Unity AI AgentはパンタのY座標を変更した。
そして、
Capture 2D Scene
を実行しようとした。
画面キャプチャの許可を与えると、AIはシーンを確認した。
さらにパンタのY座標を変更した。
そして再び画面キャプチャを要求した。
つまり、
位置を変更する
↓
画面を確認する
↓
さらに位置を変更する
↓
もう一度画面を確認する
という処理を始めたのである。
最終的にパンタは、
Y = -2.85
付近へ配置された。
重要なのは、この数値を人間が指定したのではないということである。
人間が伝えたのは、
「足が下草に少し隠れる自然な位置」
という視覚的な目的だった。
AIはその目的を実現するため、自ら位置を変更し、画面を確認しながら調整した。
「数値を指定する」から「目的を伝える」へ
今回の実験で見えてきたものは、単なるUnity操作の自動化だけではない。
従来のUnity制作であれば、人間が画面を見ながら、
TransformのY座標を変更する。
画面を見る。
もう少し下げる。
再び画面を見る。
という調整を行う。
今回、この試行錯誤の一部をUnity AI Agentが行った。
人間は具体的な数値ではなく、
「どう見えてほしいのか」
を伝えた。
AIは、その目的をUnity上の具体的な操作へ変換した。
これは、前回確認した
自然言語 → Unity操作
から、さらに一歩進んだ結果である。
今回確認できたのは、
自然言語による目的の提示
↓
Unity上での操作
↓
結果の視覚的確認
↓
再調整
という流れである。
人間の役割はなくならない
ただし、AIが最終的な美的判断まで完全に行えることが確認されたわけではない。
今回のパンタの位置についても、人間から見ると少し低く感じる可能性がある。
一方で、使用している正面向きパンタはもともと足が短く、実際のゲームではジャンプアクションも使用する。
さらに、着地時には足が前景の草に少し隠れる必要がある。
そのため今回は、この位置を現時点での着地基準位置として採用することにした。
ここには、
AIが候補を作る。
人間がゲーム全体の目的から採否を判断する。
という役割分担が現れている。
AIが人間に代わってすべてを決定するのではない。
しかし、人間がUnityのすべての数値を直接操作する必要もない。
両者の間に、新しいゲーム制作の形が見え始めている。
今回の到達点
今回、Unity AI Agentによって、
実際のゲーム素材を読み込み、背景を配置し、前景を重ね、キャラクターを配置するところまで進んだ。
さらに最後には、
画面を確認しながらキャラクターの位置を調整する
という処理まで確認することができた。
前回は、
AIはUnityを操作できるのか。
という実験だった。
今回はそこから一歩進み、
AIは実際のゲーム画面を組み立てられるのか。
そして、
AIは結果を見ながら調整できるのか。
という実験になった。
少なくとも今回の範囲では、その両方について具体的な成果を得ることができた。
そして画面には今、
森があり、
草木があり、
その中にパンタが立っている。
まだゲームとしては動いていない。
しかしこれはもう、単なるUnity AI Agentの動作実験ではない。
「森のどんぐり大作戦」の実制作が始まったのである。
