【Unity】プログラミングもモデリングもできないけどリアルアクションゲームを作る

「ゲームを作ってみたいなあ」
そう思ったことがある方も多いのではないでしょうか。
世の中にはUnityというゲームエンジンがあり、誰でも無料で使うことができます。

しかし、
「C#とか使ったことない......」
「モデリングの勉強大変そう......」
という思いから、実際にゲームを作ろうとする人はかなり少ないです。

実際のところ初心者がゲームを作るのは大変です。
しかし、最近はChatGPTを活用すれば、C#を知らなくてもある程度のゲームは作れるようになりました。

そしてもう一つの課題がキャラクターなどのモデリングですが、UnityAssetStoreというサイトで多くのモデルが配布・販売されています。

つまり、
**「お金で綺麗なモデルを集め、それをGPTの書いたスクリプトで動かせば知識がなくてもゲームができるのでは」**
と考えたのでやってみます。

## 目標
* スクリプトは全てChatGPTに作成してもらう
* 3Dモデルやアニメーションも全てアセットストアまたはAIで生成する
* プレイヤーを操作し、リアルな3Dワールドで敵と戦うことができる

## 3Dモデルの用意
今回必要な3Dモデルは以下の3種類です。
* プレイヤーの3Dモデル（人間とか）
* 敵の3Dモデル（モンスターとか）
* 舞台となる環境（森とか街とか）
それぞれアセットストアで購入しました
https://assetstore.unity.com/packages/3d/characters/humanoids/humans/ancient-girl-zariya-303686
https://assetstore.unity.com/packages/3d/characters/animals/forest-animals-pack-4990
https://assetstore.unity.com/packages/3d/vegetation/forest-environment-dynamic-nature-150668
## アニメーションの用意
今回必要なアニメーションは以下の3種類です。
* プレイヤーのアニメーション（移動、攻撃、被ダメージなど）
* 敵のアニメーション（同上）

プレイヤーのアニメーションはUnity Museで作成します。
Unity Museとは、Unityが提供する生成AIサービスで、ゲーム制作に使えるコードや画像、アニメーションなどを生成してくれます。

移動モーション
![run_gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/689a5bbb-5419-79c9-f359-393e06897c07.gif)
実際のモデルに適用すると分かるのですが、腕の振り方とかが少し気持ち悪いです。

パンチモーション
![punch_gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/4501b6b1-d2ba-d9f3-8f0d-41074e1336ca.gif)
けっこういい感じですね。

キックモーション![kick.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/4c3830d2-401d-6101-ce6f-48ed26cfad95.gif)
これもいい感じです。

死亡モーション
![die_gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/9e022f83-a9a8-f1cb-3abf-b3aa3bbfdd77.gif)
倒れた後ぴくぴくしてます。

ひとまず基本的なモーションはAIで生成できました。



## プレイヤーを動かすスクリプトを作成
まずは用意した森の中にプレイヤーと敵を配置します。
このままでは動かないので、プレイヤーを動かすためのスクリプト作成をGPTに依頼してみます。
返ってきたスクリプトをコピペしてプレイヤーに適用するだけで、実際にプレイヤーを操作することができます。
![スクリーンショット 2024-12-25 184455.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/3885669f-f570-94f0-12f4-f342c18b15b5.png)


しかし、ここで返ってきたコードだと操作感が悪かったり、意図した挙動にならないことも多いです（今回だとカメラの視点がおかしい、押したキーと移動の向きがおかしいなど）
また、追加で機能を実装したいときは追加で要望をChatGPTに投げればコードを修正してくれます。
今回プレイヤーのスクリプトを作る際のチャットの流れは以下のような感じです。

移動できるコードを書かせる→移動に合わせて走るアニメーションを付ける→クリックで攻撃アニメーションが出るようにする→カメラの追従をさせる→カメラをマウスで操作できるようにする→カメラとWASDの移動方向をリンクさせる

ここまででプレイヤー制御は完成し、あとは敵と戦うときの処理を追加で作らせました。
大事なことは「毎回のチャットで修正点や不具合をできるだけ細かく書く」ということと、「一回のチャットで3つも4つも修正させずに要件を絞る」ことです。
地道に1つずつ直していけばいつかうまく動きます。

## 敵のスクリプトを作成
今回敵は操作しないので、適当に動き回り、キックが当たったらやられるという処理を作ります。
こちらはプレイヤーの操作がないのでGPTにほぼ丸投げしました。
![スクリーンショット 2024-12-25 184647.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/f29b8017-8c57-9acb-18d5-328915fd44e8.png)

一応攻撃したりプレイヤーを追いかけたかったですが短時間では上手くいかなかったため、今回は走り回るだけになっています。
以上のスクリプトをアタッチし、実際にプレイしてみます。

## 戦ってみた
![battle2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/28a50951-5b56-be61-f97e-ae2d93ebbfb8.gif)
熊が木にひっかかっているところを蹴りで倒すことができました。
蹴った時の挙動が正直おかしいので微妙ですが、プログラミングゼロでこれが作れたと考えると悪くないような気もします。
何度か動かすと熊が空に飛んで行ったりもしましたが、こういったバグは地道に調べて直すしかないかもしれません。
![battle1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953096/9981bab6-8a86-502a-2641-63be27f997a5.gif)


## まとめ
コード自体はGPTがほぼ書いてくれますが、コード以外の部分でもけっこう困る部分は多いです。
例えば物理演算がおかしくなったり、モデルの描画がおかしくなるとGPTではなかなか解決できません。
買ってきたアセットにGPTのコードを貼り付けると何がおかしくてバグっているかはブラックボックスになります。
しかし、GPTに書かせたコードをなんとなく動かす中でもUnityについていろいろ学べるので、まずはGPTの書いたコードでもなんでも動かしてみるところから挑戦してみるのがいいと思います。