僕は長いあいだゲームで遊んできたが、自分で作る側へ回ることは別の話だと考えていた。とくにプログラミングは、何を勉強すればよいのかさえ分からない壁だった。
ところが最近、AIに画面を見せながらUnityを操作し、三人称で歩くキャラクターに銃を持たせ、照準の先にいるゾンビを3発で倒せるところまで試作した。完成したゲームではない。モデルも仕組みも仮のものが多い。それでも「ゲームを作りたい」と話しているだけの状態から、自分のPC上で動くものを確かめる段階へは進んだ。
プログラミング未経験でも、AIを使えばUnityでゲームを作れるのか。今回の短い制作で分かったのは、「小さく動かすことはできる。ただし、AIに頼めば全部終わるという意味ではない」ということだった。
最初の壁は、コードを書くことではなかった
使ったのはUnity 6.3 LTSとURPの空のテンプレートである。三人称視点の土台には、UnityのStarter Assetsに入っているサンプルを使った。こう書くと順序よく進めたように見えるが、実際には「何から始めればよいか」「どこを開けばよいか」を、その都度AIに尋ねている。
Unityの画面には、Scene、Game、Hierarchy、Inspectorなど複数の領域がある。初めて触る側からすると、説明に出てくる名前が画面のどこを指しているのか分からない。僕はスクリーンショットを何度も送り、示された項目を探し、設定後の画面をまた見せた。消したい表示が消えないときも、「消えませんね」と状況を返して確認を続けた。
ここで助かったのは、AIが答えを知っていたことだけではない。僕が専門用語を知らなくても、画面そのものを材料に次の一手を相談できたことだ。入門書を最初から最後まで理解する前に、目の前で止まっている一点へ話を絞れた。
実際に、どこまで動いたのか
最初に確認したのは、三人称キャラクターの移動とカメラだった。次に画面中央へ照準を置き、左クリックで照準方向を調べる射撃処理を追加した。仕組みにはRaycastを使い、何かに当たればHIT、外れればMISSと表示する。自分自身を撃った判定にしない処理も加えた。
敵役には仮のZombieTargetを置いた。体力を3にし、1回の射撃で1ダメージ、3発目で消える。次は右手の骨の下に銃を置く場所を作り、銃本体、銃口、発射炎を順に配置した。発射炎はオレンジ色のUnlit素材にして、普段は非表示、撃った直後だけ約0.05秒表示する。さらに、射撃時に銃が少し後ろへ下がり、角度が動いて戻る反動も加えた。
どれも市販ゲームから見れば小さな機能である。しかし、僕にとっては「撃つ」という一つの動作が、照準、当たり判定、体力、見た目、時間、位置と角度に分かれていると知る工程だった。遊ぶ側では一瞬の出来事でも、作る側では複数の仕組みをつなげなければ成立しない。
AIが書いたコードは、誰の制作なのか
射撃や敵の体力を扱うコードのたたき台はAIが作った。僕が一行ずつゼロから書いたわけではない。では、これは僕がゲームを作ったと言えるのか。ここには少し引っかかりが残る。
ただ、コードが返ってきただけでは画面上の何も変わらない。スクリプトを適切なオブジェクトへ追加し、Inspectorで参照先を割り当て、実行して、意図した場所へ当たるか確かめる必要がある。表示が消えない、発射炎が見えない、参照が空になっているといった問題は、実際の画面を見なければ次へ進めない。
AIが提案し、僕が操作し、結果を返し、また修正する。今回の制作は、どちらか一方だけの作業としてきれいに分けにくい。AIが僕の代わりにゲームを完成させたのではなく、僕が一人では越えにくかった最初の段差を、対話しながら小さくしたという方が近い。
「動いた」と「理解した」は同じではない
一方で、動作したことを理解したことと混同すると危ない。今回の射撃は、画面中央から見えない線を飛ばして当たりを調べる簡単な方式で、物理的な弾丸が空間を飛んでいるわけではない。敵も追いかけてこない。倒れるアニメーションもなく、体力がなくなると消えるだけだ。
発射炎と反動も、数値を調整してそれらしく見せた段階である。別の武器へ替えたときも使える設計なのか、処理が増えても不具合を起こさないのか、僕はまだ判断できない。AIの説明どおりに設定して一度動いたことと、仕組みを自分で組み直せることの間には距離がある。
これは以前、AIとシフト表を試作したときに感じた問題と似ている。完成品と、その完成品を作るための判断は同じようには残らない。Unityでも、動いたコードだけを保存するのではなく、なぜそのオブジェクトへ付けたのか、どの値を変えると見え方が変わるのかを少しずつ記録する必要がある。
全部学んでから作る、という順番が変わった
以前の僕は、ゲームを作るなら、まずプログラミングを勉強し、3D制作やゲームエンジンを理解してから始めるものだと思っていた。その順番は正しい面もある。基礎があれば、エラーの意味やAIの間違いにも気づきやすい。
しかし、必要な知識の全体が見えない初心者にとって、「先に全部学ぶ」は始めない理由にもなりやすい。今回は順番を逆にし、まずキャラクターを動かし、撃たせ、敵に体力を持たせた。その後で、Raycastとは何か、オブジェクト同士の参照とは何かが、具体的な必要として現れた。
学習を省いたのではなく、学ぶ理由が先にできたのである。何に使うか分からない用語を暗記するより、自分のゲームでいま必要な一つとして触れる方が、少なくとも入口では理解しやすかった。
ゲームが完成するかは、まだ分からない
今後は、敵の動き、アニメーション、音、ステージ、メニュー、保存、負荷の確認など、まだ多くの作業がある。仮の部品をつないだ試作と、人に遊んでもらえるゲームの間は長い。AIが着手の費用を下げても、完成まで使う時間や、何を面白いと判断するかまで消してはくれない。
それでも、僕は以前、大人になってゲームが仕事のように感じられた経験を書いた。いまは同じゲームに、遊ぶだけではなく、仕組みを作って確かめる側から触れている。楽しいと断言できる完成形にはまだ遠いが、ゲームとの関わり方は確かに一つ増えた。
AIによって増えたのは、僕がすでに持っていた技能ではない。分からないままでも試し、画面を見て次の質問を作れる範囲だった。
3発で消えるゾンビは、ごく小さな成果である。けれど、それが動いたことで、次に分からないことも具体的になった。完成できるかという大きすぎる問いには、まだ答えられない。いま答えられるのは、何も動かなかった昨日より、一つ先の問題まで来たということだけだ。
イメージ写真(実際の制作画面ではありません):Christopher Gower / Unsplash。
-120x68.jpg)
コメント