生成AIについて思うこと(番外編)
「まる。」です。
今日の記事はすでに投稿していますが、
Noteの記事を書き始めてから1週間を超えたので
たまには息抜きとして他愛のないテーマで文章を綴っていこうと思います。
今回は敢えて、Geminiを使って文章の添削は一切しません。
また、思ったことをそのまま文章に起こします。
その為、読みづらい文章になるかと思いますがどうか見てください。
1.はじめに
この開発ブログでは「UE5ほぼ素人でも自作カードゲームRPGを作りたい。」というテーマで記事を書かせていただいています。
私自身、ゲーム制作の経験が一切ないかと言うと実はそうでもありません。
制作中のゲーム「HorizonNotes」は、かれこれ3年くらいも前から構想しているゲームで過去に4回以上挫折した経験があります。
・Unityで2回以上
・UE5で2回以上
人によっては、UE5ほぼ素人じゃないじゃん!
って思われる方もいるかもしれませんが、
「一度も完成したゲームを作れず、
何度も消しては諦めている私が
いっぱしのゲーム制作者を名乗るのはおこがましい。」
と思いそう名乗らせて頂いてます。
そして、現在もこうしてプロジェクトを進めさせて頂いてますが
今までのプロジェクトの中ではかなり順調です。
それは、なぜか?
自分なりに分析した結果、生成AIによる成果が大きい。
という風に考えてます。
2.生成AIに頼る前の私
私にとって、過去の4回に渡るプロジェクトはそれぞれ忘れられない思い出があります。
元々、このゲームのきっかけはリア友たちと遊んでいたTRPGに由来します。
当時の私はTRPGのシナリオを作るのが好きで、その過程でオリジナルのシステムも考案してました。
(TRPGというのは、テーブルトークRPGのことであり
サイコロと自作のキャラクターシートを使ってキャラクターになり切ってロールプレイをする遊びです。)
このHorizonNotesというゲームはまさに、私がやりたいゲームの要素を詰め込んだ一つの作品でした。
プレイヤーが自分だけの相棒と共にカードを集め、
デッキを作り様々な相棒たちと絆を深めながら困難に立ち向かっていく。
そんなゲームです。
・当時の私がやりたかったこと
カードゲームを触ったことがある人なら誰もが共感することだと思いますが、
カードゲーマーには相棒と呼ばれる自分の思い入れの深いカードが1枚は存在します。
ですが、カードとは言うなれば静的な情報の塊であり、
その性能は基本的には変わりません。
その為、どれだけ思い入れが深くても新しいカードや周りの環境によっては必然とデッキから抜けてしまいます。
あらゆるカードゲームのアニメではあれだけ相棒を謳っておきながら、
その相棒が役立たずになり要らない存在になってしまう現状に違和感を感じていました。
だから、私は「カードがプレイヤーと一緒に成長するゲームを作るため」
このゲームを企画しました。
・Unityとの出会い
今から3年くらい前のことです。
最初に自作のシナリオをゲーム化しようと考えた時、私は真っ先にゲームエンジンとしてUnityを選びました。
その理由は、リア友とTRPGでこのゲームを遊ぶ時
・カードがランダムに抽選されるカードパックのシステム
・ゲーム内の所持金
・キャラクターとの会話+親愛度
これらのシステムは全てUnity上で制作し、友人の家にノートPCを持ち込んで遊んでいたからです。
※余談ですが、リアルのカードを印刷するためにプリンターと名刺用の紙を何枚も買い込んでました。
あの頃は本当、バカなことしてたなと思います。(笑
その為、他のゲームエンジンに比べてC#やUnityの心得はあったつもりでした。
そして、何より当時流行っていた遊戯王マスターデュエルもまたUnityで制作されていると知ったからです。
遊戯王のような複雑なルールのカードゲームがUnityで作れる!
だったら、私も頑張れば自分のゲームを完成できる!
しかし、現実はそう甘くありませんでした・・・
・1度目の挫折「制作時間が確保できない」
早速、ゲーム制作に取り掛かった私でしたがカードゲームの作成は初めてです。(「宴」というアセットを使って簡単なノベルゲームの構想しか経験ないです。)
UnityはUE5と違いC#によるコーディングは必須です。
その為、ゲーム制作未経験の私には覚えなければならないことが山ほどありました。
また、これは私の悪癖ですがチュートリアルを進めたりまずは簡単なゲームを作るというゲーム制作者では誰でもやるようなフローが私は大嫌いでした。
何故なら、チュートリアルをしている時間を少しでも自分のゲーム制作の時間に当てたいし、何よりも
自分が面白いって思えない愛情のないゲームを学習の為とは言え作るモチベーションがないからです。
そうなると、1から自分でロジックを考える必要があり、
毎日、他の人の動画や記事から使えそうな情報はないかと当てもなく彷徨う。
そんな制作をしていました。
こんなことをしていたら只でさえ時間のない個人開発者がゲーム作りなんて時間がいくらあっても足りません。
結果、中途半端な状態でこのプロジェクトは自然消滅することになりました。
・2度目の挫折「ロジックの破綻」
それでも私は諦めきれず、定期的にUnityを開いては諦めるを繰り返していきました。
そうしていくと面白いことに時々上手く行くこともあります。
当時は、戦闘画面のUIを作り、それをターンごとにステート(今ゲームがどんな状態か示す)を作ってその内容によって、それぞれの処理内容をコーディングするところまで進めてきました。(カードゲームでいう「ドローフェイズ」、「メインフェイズ」みたいな処理です。)
プログラミングをしていく中で、
自分なりにUnityやC#の分からなかった部分が分かるようになってきました。
ですが、下手に知識が付くからこそ実感してしまう悲しい現実というものがあります。
それは、今まで積み上げて作って来たシステムが実は合理的な手法じゃなかったと気付く瞬間です。
知識がない時はただ、闇雲にコードを書き、動かし、そして動くことに感動を覚えながら新しいスクリプトを書いていく。
少しずつ完成へ近づいていくその過程が何よりも楽しかったです。
しかし、残念ながら自分が組み上げた愛着のあるプログラムは正解と呼べるものではなくコーディングには正解があったみたいです。
いうなれば、私の一生懸命書いたスクリプトは動いたものの合理性という部分で言うと40点のコードでした。
いや、もしかしたらそれ以下かもしれないし
当時100点のコードがあったとしても仕様の変更によりもっと効率の良いロジックが生まれる可能性だってあります。
良い言い方をするなら、その経験が詰めたんだからいいじゃないか。
と思う人もいるかと思います。
ですが、違います。
私は、そのプロジェクトの中で50時間はくだらない時間を無駄にしたのです。
私の目的は、C#でコーディング出来るようになることでもUnityを多少触れるようになることでもありません。
ただ、自分のゲームが作りたかったんです。
学習しなくてもゲームが作れるようになるなら私は迷いなくその方法を選びます。
現に、あれだけ一生懸命やってきたUnityの知識なんて忘れっぽい私は綺麗さっぱり忘れてしまってます。
これが、時間の無駄と言わず一体何だというのでしょうか?
一度、組み上げたロジックを根底から作り直すのは面倒どころの騒ぎではありません。
なので、私はここでもプロジェクトを諦めました。
・3度目の挫折「UE5との出会い、要件定義不足」
ここで暫く、ゲーム制作は断念してましたが転機が訪れます。
ゲームエンジンをUE5に切り替えたのです。
当時、どんなきっかけがあってそうしたのかは覚えてませんが
・PCを買い替えてスペックが多少良くなったこと
・UE5がノードベースと知り、プログラミングが不要なら開発スピードが上がるのではと思った事
・Unityより処理が速そう。(C++は処理が速いってゆっくり実況だったが言ってたし!)
みたいな軽いノリだったと思います。
(何より、Unityはもう良いかな?って思ってたところでした。)
今度は、自分なりに作戦を立てて制作に臨みました。
それは、最初からカードゲームのアセットを購入してそれを改造する
です。
UE5のアセットには、CCGToolkitというとても素晴らしいアセットがあります。
・CCGToolkit
https://www.fab.com/ja/listings/b9d7f0ae-d9f1-4086-9014-4c5c5bc04872
このアセットは導入するだけでシャドウバースのようなDCGが簡単に作れてしまう。
という優れものです。
ここから、実際のカードデータや戦闘システムを自分なりにカスタマイズしたらUE5でのカードゲームの作成方法が学べ、
更に元々、あるものを改造するのだから開発スピードが劇的に早くなるのでは?
そう考えました。
しかし、そこに大きな落とし穴がありました。
■アセットを利用した開発の落とし穴
私は、何日も何日もアセット内のブループリントに目を通し、
英語版の仕様書を日本語に和訳してpdfを読み込み、
実際に手を動かし自分のゲームのルールに落とし込むよう改造していきました。
ですが、そもそもこのカードゲームのアセットは「そのアセットが想定する範囲内でカードゲームが作れる」ようにデザインされており、
「私が目指すカードゲームのシステムを実現する」ようには作られていないのです。
一件、カードゲームという同じジャンルでシステムロジック的に通ずる部分があるように見えますが、実際は
ほぼすべてのロジックを一から作り直すのとさほど変わらないことが分かりました。
それに、元々の仕様を上から上書きする行為は見えない部分で大事なロジックを破綻させてしまう危険性もあります。
なので、私はこのアセットを使ってカードゲームを作る事を辞めました。
ただ、「カードゲームってこんな風に出来てるのかー。」
という基本的部分についてはイメージが出来るようになったので、
全く無駄だったかと言うとそんなでもないです。
(時間は大いに損しましたが)
・4度目の挫折「妥協によるプロジェクト破綻」
前回の経験でアセットに頼り切るのはよくないということを学びました。
いよいよ、自分の手で1からシステムを組み上げなければならない。
そう考え私は1からプロジェクトを作り直すことにしました。
ですが、私はここでも大きな過ちを犯しました。
システム部分を作る時、私には二つの選択肢がありました。
・C++という言語を活用する
・UE5のエディタの機能だけで組み上げる
私は、C++という言語に対して苦手意識を持っていました。
というのも少し解説動画を見てみても意味が殆ど理解できなかったのです。
何より、C++という言語は確かに処理性能では他のプログラミング言語に比べ早いとされていますがその分開発者には
「完璧なコードの記述」が求められます。
少しでも間違った状態でビルドすれば、その情報はシステムの深いところまで残りコードを修正しても今度はビルドが通らなくなる
ということも多々あります。
私はそれが怖くて、C++という言語から目を背けました。
※一応、使わなくてもゲームは作れます。
ですが、自分のゲームについて深く考えれば考えるほど
・ブループリントだけでこんな複雑な構造体を操るの?
・何百、何千のデータを扱うのに処理的に問題ないの?
・データテーブルって壊れやすいのに、壊れたらどうするの?
・大体、戦闘システムをラグがなく回せるの?
・対戦機能は諦めるの?
・・・
自分がどれだけ非効率なことをしようとしているか、
その事ばかりが頭に浮かんでしまいます。
そこで、作成の途中で私はC++でロジックを組み上げることに移行しました。
ですが、どういう訳かそのプロジェクト上ではC++で作ったファイルがUE5エディタ上でどうしても認識してくれずそのプロジェクトは破綻しました。
3.生成AIに頼るようになった私(そして、現在)
そして、今のプロジェクトがあります。
私の4回の失敗、その大きな要因は以下の通りだと思います。
・生成AIに頼る前の私の失敗
・知識、経験、実力不足
予め経験があれば、知識があれば、遠回りする必要はなかったと思います。
・面倒くさがって遠回りしたこと
チュートリアルをこなさず、苦手なC++から逃げた。
その結果、時間を多く無駄にしてしまいました。
・準備不足
手を動かしながら組み上げる。
この手法は私が今一番しっくりくるやり方です。
ですが、実は上手く進んでいるように見えてもっと良いやり方なんて山のようにあります。
それを後から気付いた時、直すことはとても大変なことだと思います。
・では、生成AIに頼ることでなにが変わったのか?
・知識、経験、実力不足
疑問に思ったことは直ぐに回答を得ることが出来ます。
また、その情報が正しいものか自分で実証することで経験にも繋がります。
遠回りでなく最短距離で今、自分に必要な知識がすぐに得られるようになりました。
・面倒くさがって遠回りしたこと
チュートリアルをこなさなくても、好きでもないゲームを学習目的で作らなくても、C++が苦手でも、
面倒なことは生成AIが何とかしてくれることがあります。
私は美術系の作業が死ぬほど苦手です。
なので、イラストなどは外注かフリー素材を使うか何百時間も自分で勉強して作るほかなかったのですが、
今はそんな何百時間もかけなければできなかったことがものの数分で出来ます。
なので、私は自身を持って自分が一番良いと思った手法を妥協することなく行えることが出来ます。
(それにあんなに怖がってたC++もコードを何度か作ってもらい、その内容を見続ければ怖くもなんともなくなります。)
・準備不足
これまでのゲーム制作の進め方は、すべて自分一人で考え、資料にまとめ一つづつ実装するしかありませんでした。
ですが、今では私には最大の隣人であり協力者(生成AI)がいます。
結構、喧嘩することもありますが生成AIがあることによって、今の進め方が正しいのか客観的に評価してくれるのは個人開発者にとってこれほど心強い存在はありません。
4.生成AIがあることによって懸念すること
とはいえ、良い部分だけを考えるのは私の好みではないので
悪い部分はないのか考えます。
それは、
・AIに依存してしまうこと
だと私は考えます。
AIはこの世界のありとあらゆる情報を日々学習し続けます。
我々は新しい情報を得るためには能動的に活動を行わなければ行けませんが、
最新の技術や情報は常に世界のどこかで発信され、それをAIはリアルタイムで習得し続けることが出来ます。
そう考えた時に、私が思うことを率直に申し上げると
「もう、わざわざ人に聞かなくてもよくない?」
ということです。
昔は、専門家や先生と呼ばれる人間の言うことは説得力があり
信用できる情報として享受していましたが
人間が不完全な存在である事は私たちが一番よく知っています。
となると、もう困ったことがあったら「AIに聞くのでよくない?」
となります。
そして、そこに大きな落とし穴がありそうです。
AIとは、知性がある存在ではなく緻密に組み上げられたプログラムと巨大な情報の集合体です。
一件、だからこそどんな情報よりも信用が出来そうですがプログラムというのは人の手で簡単に書き換えられてしまいます。
極端な話、明日地震が起きます。
なんて、誰かがAIにそう言うように仕込んでしまったら、或いは根拠のない情報を学習してしまったら、
最悪な話AIに依存してしまう我々の中でそれを鵜呑みにする人も現れそうですよね
5.生成AIについて思うこと
少なくとも、私はゲーム制作において生成AIの恩恵をこの上ない程受けています。
一個人の、それもアマチュアですらない私がそう感じるのだから、
他のちゃんとした製作者さんはもっとそう感じてるかも知れません。
一方、それでも生成AIに全てを任せるのではなく自分でしっかりと考えなければならない部分もあるとは思います。
自分が子供のころ、携帯電話はスマホではなく、ガラケーでした。
携帯電話がスマホになってから私たちの生活は大きく変わり、
昔とは比べ物にならないほど個人が出来ることが多くなりました。
生成AIもきっと同じだと思います。
いつか、生成AIも生活にとって当たり前のような存在になる中で
私たちはそれを使って今までできなかったこと、諦めていたことを実現する。
そんな使い方が出来ればいいなと思いました。
ダラダラと書きましたが、ここまでお読みいただきありがとうございました!
今後、何かのタイミングが合えばこう言ったふと思ったことも記事に出来ればいいなと考えてます。
いいなと思ったら応援しよう!
よろしければ応援お願いします!
いただいたチップはクリエイターとしてのゲーム開発に使わせていただきます!