Created: 2025/10/16
東京ゲームダンジョン行ってきました!!!
正直大変でした……今回は大学で別に東京ゲームダンジョンの出展を行っているグループに参加する形で出展したのでお金の心配などはなかったのですが、当日の準備やポスター印刷など考えることが多くて、おまけに出展した時期が大学の授業がとてつもなく忙しい時期だったのでようやく肩の荷が下りた感じです。
ただ、おかげで一般の参加者にゲームをプレイしてもらって貴重なデータをとることができたので本当に良かったと思っています。
今回の出展で分かった問題をざっくりいうと
プレイヤーが快適にプレイできる環境構築についても深刻で、今まで100%自分がプレイしやすいようにゲームを作っていたのでロボットの感度が高すぎて参加者がまともにプレイできなかったり、クラフトシステムもプレイヤーに操作方法を誘導してくれるUI表示などがほとんどないせいでよくわからないまま終わってしまうということがありました。
これらの反省点(特に快適にプレイできる環境構築のほう)を踏まえてMech Battler Crisisに様々な修正を施したので今回はそちらを紹介していこうと思います。
こちらは機能そのものは東京ゲームダンジョンの出展に向けてMech Battler Crisis開発録【紹介編】#01を投稿した後に実装したものなのですが、実際に紹介するのは東京ゲームダンジョンの反省を踏まえてよりプレイヤーが使いやすいように改良を施したものになります。
Mech Battler Crisisは基本的にブロックを一個ずつ手動で設置しながらロボットを組み立てていくのが基本なのですが、これはとても時間がかかります。特に戦艦の砲塔のような一個ずつ手作業で全く同じ武装を何個も組み立てていく作業は大変です。ただブロックを一個ずつ置いていくだけでも手間なのに、それをミスなく正確に配置する必要があるからです。
また、せっかくかっこいいロボットの武器などを作っても、それを別のロボットに持たせるためにはそのロボットのセーブデータを読み込んで、イチから組み立てなおす必要があるのです。これはあまりにも非効率です。
そこで考えたのが部品セーブ・ロードシステム。
これはロボットの一部のパーツだけをセーブして別のロボットで読み込めるようにしたシステムです。
これを使えば戦艦の砲塔パーツだけを部品セーブして、別の個所にペーストできます。それどころかその砲塔を画像のようにロボットの腕にロードすることも可能です。武器だけを部品セーブすればその武器だけを別のロボットに流用できますし、手足を部品セーブすればロボットの手足を某ハイスピードロボットアクションゲームのように交換することもできます。これによってMech Battler Crisisのクラフト難易度は飛躍的に下がり、まったく何もわからない初見プレイヤーでもサンプルデータに保存されたロボットの手足や武器を部品セーブ・ロードで組み合わせて、自分だけのオリジナルロボットをより簡単に組み立てることができるようになるのです。
しかし、この部品セーブ・ロードシステム。東京ゲームダンジョンの出展を見据えて開発したのですが、いくつかの理由から全くプレイした人たちからいい反応がもらえませんでした。
まず、部品セーブ・ロードはロボットの関節を起点にして、その関節から先のパーツをブロックで置き換える……というシステムになります。このため部品セーブロードを利用するにはまず起点となる関節を選択しなければなりません。
問題の一つは選択のやり方です。この関節の選択システム、画像のようにロボットの関節をピンポイントで選択しなければならないのですが自分が作ったロボットならともかく、他人が作ったロボットの関節の位置をいきなり把握してピンポイントでその関節を選択して部品セーブロードを使うのは困難です。
その問題が東京ゲームダンジョンで露呈し「部品セーブロードでロボットをカスタマイズしてみてください!」といっても「ロボットの関節がどこにあるかわからないんだけど?」「そもそも関節ブロックってどんな見た目してるの?」と困惑してしまう参加者が大量に発生してしまう結果になりました。というか初見で部品セーブロードを使いこなした人は0%です。はっきり言って大事故ですね。
あと、これは部品セーブ・ロードに限った話ではないのですが私のゲームではまだ自動で画像を出力するシステムが不足しているせいで、セーブデータの中身を判別するには名前から見分けるしかありません。今回の出展のためにロボットのサンプルデータをいくつか用意したのですが初見のプレイヤーがいきなり名前だけで自分の好みにあうロボットのデータやパーツを見つけ出すのは難しく、それも部品セーブ・ロードシステムが使われない一因になりました。
画像システムは今すぐどうにかなるものではないのでどうしようもないのですが、せめて関節選択はもっとわかりやすくしたい。そこで選択対象を「関節ブロックそのもの」から「関節ブロックが制御しているブロック」に変更しました。これで適当にロボットの手足を選択すればそのブロックを制御する関節が選択されることになります(正確には選択されているのは関節ブロックそのものではなくその関節ブロックが制御するSectionというオブジェクトなのですが、技術編の話になるので割愛)
さらにクラフト中にプレイヤーにブロックの情報や指示を描画するテキストUIとその制御システムも実装しました。
これでユーザーにブロックの説明が案内などができるようになったのでさらにわかりやすくなりました。
これは目に見えるタイプの変更じゃないし、がっつり紹介しようとしたら思いっきり技術の話になるのですが描画負荷を限界まで最適化しました。もともとメッシュ結合という技術を使ってロボットの編集時に存在する大量のブロックを結合し、ロボットを操縦するタイミングでは描画負荷を削減するようにしていたのですがここに加えてテクスチャアトラスという技術も導入することで負荷をさらに削減しました。
今ではロボット10体出してもエディタ上で動作するくらい軽量です。以前の処理でもできないことはないはずですが、FPSの低下が激しくなりすぎまともにプレイはできなかったと思います。
あまりにも描画負荷を最適化しすぎたせいでロボットの操縦中は描画負荷よりスクリプト負荷のほうが高くなってます。もちろんスクリプトも極限まで最適化しているので本当にそれだけ負荷を削っているという感じですね。
ただ、一応まだ負荷を削る余地がないのかと言われたらあるにはあって、現在のシステムだとロボットの内側にあるブロックのメッシュなどはそのまま描画されたままになっているので、これを直接削除すれば理論上まだ負荷は下げられます。ただこれは下手な実装すると逆効果になりかねないので本当に難しいんですよね……(技術的なことは割愛)