ゲームタイトル「BeQuiet」製作期間2022年3月15日~3月28日
UNITY エディタバージョン 2020.3.30f1
「みんなでワイワイしながら楽しめるゲーム」をコンセプトにゲーム制作を開始しました。アセットをメインに制作する予定でしたが、ゲームの顔である敵キャラクターくらいは自分で作ろうと思い、敵キャラクターのモデリングから始めました。
ゲームに盛り込みたい要素としては次の要素がありました。
・マップはランダム生成
・一定の条件のもとに動く敵AIの実装
・オンラインゲーム
・ステルス要素有
まずランダムマップの実装ですが、あらかじめ迷路の型を20ブロック作っておき、それをランダムに配置することで解決しました。NavMeshAgentがうまく動作しないなどの問題は起きつつも、何とか実装することが出来ました。この実装から、プレハブがいかに便利か理解できました。
次に敵AIの作成についてです。UnityのNavMeshの機能が優秀なので大きな苦労はありませんでしたが、ランダムアップを徘徊させる点をどのように実装するかに悩まされました。結局、分けられたブロック内に徘徊ポイントを設置しておき、そのポイントを敵に指定した状態でプレハブ化することで解決しました。しかし、この実装方法だと、プレイヤーを長距離追いかけた際にしてポイントから離れすぎて、その場から動かなくなることがバグが稀に起こってしまいます。この点は、一定距離離れたらすぐに追跡を切る処理を加えることで解決しました。
次にステルスゲームの要素ですが、敵は視力を持たない存在として扱い、音を立てないホラーゲームにすることにしました。歩きと走りで見つかりやすさを変えるという、ホラーゲームでは定番の要素はどのように実装しようか考えてるだけでも楽しかったです。私は移動モーションによって、コライダを変化させるという少々強引な形で実装しましたが、自分なりにうまく実装できたと思います。振り返ってみると、Raycastを使って実装すればよかったかもしれないと思っています。
最後にオンライン関連の実装です。これが一番苦戦させられました。サーバーの設定が簡単だという理由でPhotonを使って実装しましたがそれでも今の自分には難しかったです。ここの実装がうまくいかなかったことで、敵の同期をあきらめなければならなくなりました。敵の位置や回転を同期してしまうと敵に関してかなりのラグが発生してしまったり、そもそもプレイヤーを追跡しなくなるなどのバグが発生しました。Photonにはメッセージ数の制限があることもあり、この点は妥協することにしました。しかし、オンライン実装にチャレンジすることで、世にあるオンラインゲームがどのような技術と原理で動いているのかについて少し勉強できたのは良かったと思います。
今回のゲーム制作は、Unityに備わっている機能を幅広く使えたのでかなり勉強になったと思います。また、より良いゲームを作るためにはアルゴリズムの勉強が必要だと感じたため、そちらの勉強も進めようと思います。
効果音は以下のサイトよりお借りしました。
無料効果音で遊ぼう!
https://taira-komori.jpn.org/index.html
魔王魂
https://maou.audio/