なおしのこれまで、これから

学んだこと・感じたこと・やりたいこと

ほぼ4日間でゲーム作った話

近況

7月から8月までに掛けてコンテンツ開発、研究、仕事と立て続けであっという間に9月になりました。そして最近全くブログを上げていないことに気づき、3月に開発したコンテンツについてまとめようと思います。


始めに

このコンテンツは会津若松市主催のイベント「デジタル未来アート展」に向けて開発したコンテンツです。

企画は友人で「iPadVRを連携したコンテンツが作りたい」ということで私がiPad側、友人がVR側と分けて開発をしたました。


仕様説明(動画)

ゲームとしては「勇者のくせになまいきだ」に近いです。iPad側でステージを作り、VR側でそのステージを攻略するゲームです。VR側がステージを攻略しているところをiPadで確認することが出来、また攻略中もステージ編集が可能です。


ステージ作成(iPad側)


DungeonChallenger_ステージ作成


ステージ作成では壁を掘る、モンスターを配置することが出来ます。これらの編集を行う際は画面上のCPを消費します。

壁を掘る際は空いたマスからしか掘ることが出来ません。

また、行った編集を左上のUndoボタンでやり直すことも出来ます。

最後に作成が終わると宝箱を設置します。この宝箱がVRプレイヤー側のゴールとなり、取られるとVRプレイヤーの勝利、無事守り切るとiPad側の勝利となります。


VRとの対戦(iPad側)


DungeonChallenger_VR側との対戦

対戦が始まると画面中央の一番下のマスからVRプレイヤーが現れます。VRプレイヤーの行動はリアルタイムでiPadから確認できます。

また、この時もステージ編集は可能です(Undoは不可)。ここでは簡単にモンスターの再配置や経路を増やしたりしています。

モンスターは自立的に行動をしますが、iPadでタッチして道をなぞることでその移動経路を歩かせることが出来ます。この機能を使ってプレイヤーをふさいだり挟み撃ちに出来ます。


ステージ攻略(VR側)


DungeonChallenger_VR側

VRプレイヤーは魔法を使うことが可能で、魔法陣を描くことで以下の魔法をしようすることが出来ます。

  • 炎の弾を発射
  • 大剣を振り回す
  • 明かりを出す
  • 現在位置を保存してもう一度使うことでその地点に戻る

左手には青い炎が出て回りを照らすことができます。そして、そこに書いてある数値が体力でゼロになるとゲームオーバーとなります。魔法を使う、青い炎を出す、ダメージを受けるで減っていきます。

iPad側からは分かりませんが、ステージ内はとても暗いので明かりをつけながら攻略していきます。


開発話

私が携わった個所はiPad側でのステージ作成処理、UI、敵AIについて、友人がVR側の魔法システム、ネットワーク処理を担当しました。ここで開発で悩んだところ、苦労したところについてまとめます。


ステージ作成システム

仕様として以下の設定がありました。

  • マス目を基準にステージを作成する
  • 壁を掘るときは隣に開いているマスがないと掘れない
  • Undo機能を付ける

ここではUndo機能についてお話したいと思います。

f:id:vxd-naoshi-19961205-maro:20190909010919j:plain

このような感じでクラスを作成しました。

マップを掘るもしくはモンスターを配置した際にマップ情報を更新します。その際に、行ったアクションに対するUndoActionを作成しMapManagerのスタックに保存します。UndoActionクラスには仮想関数UndoActionを持っているので、そのスタックから一つUndoActionを取り出してUndoAction関数を実行することによりUndoが出来ます。


モンスターの移動

モンスターは対戦が始まり次第、行動を開始します。その行動の中で悩んだのが移動でした。

移動で問題だったのが1マスにつき1体以下しかモンスターを配置できないところでした。普通に移動させちゃうと被ってしまうことがあります。

f:id:vxd-naoshi-19961205-maro:20190909014148j:plain f:id:vxd-naoshi-19961205-maro:20190909014158j:plain

となるので移動する際は移動先を予約して他のモンスターが移動できないようにしました。

f:id:vxd-naoshi-19961205-maro:20190909015600j:plain f:id:vxd-naoshi-19961205-maro:20190909015557j:plain


その他苦労したところ

もっとも苦労した点はモンスターに移動先を命令するところでした。モンスターは簡単ではありますがStateMachineを使って自立的に行動します。その中でどのStateで命令を受けつけるかとても悩みました。また、移動経路を指定する際の処理でバグがたくさん起こり2時間ほど絶句していました。

そんなこともありましたが、時間がない中少しずつデバッグしてちゃんと動くようになりました。


展示してみての感想

VRコンテンツの弱点として、子供が体験できないところ、VR内で何が起きているかわかりずらいところがありましたがこのコンテンツで子供はiPad側で遊べることがとても好評でした。

また、iPad側でリアルタイムでVRプレイヤーを見ることが出来るので対戦しているという感覚があり、こちらとしてもとても面白かったです。

ただ、最初の展示で鬼畜なステージを作成できてしまうという難点が見つかり、その次に行った展示では改良してモンスターを過密して配置できないようにしました。このことでゲームバランスを保つステージ作成が可能となりました。


感想

今までは個人開発であったり、チーム制作でも1人でプログラムを書くことがほとんどでした。なので、2人体制での開発はとても楽しく、iPad側とVR側を交えたテストで動いたときの感動はとても大きかったです。

そして、ほぼ4日間という短い時間で完成できたことに自信をつけることが出来ました。

最後にもう2度と短期間の開発はしたくないです......