0331-eyecatch-fix
COLUMN

【チャリ走VR】ステージの作り方

,

はじめに

本投稿では、今年2月17日にリリースされたPlayStation®VR専用ソフト「チャリ走VR」のステージ作成方法についてお話しさせて頂きます。今回の開発を通して、PC向けにアプリケーションを作成する時よりも難易度を上げていると思われる部分や、スペックの高いPCとそうでないPCで動作させた時の違いなどを含めて、開発初期段階からのステージ作成方法やステージの見せ方などを紹介していきます。

 

 

チャリ走VR

bikerider-vr_tyarisovr

 

BikeRiderVR_Download

 

 

チャリ走VRのステージ

「チャリ走VR」には遊べるモードとして走行距離を競う「ノーマルモード」と、走行距離に加えてステージに配置されているスフィア取得によるポイントの合計値を競う「チャリテクモード」があります。本章では、それぞれのモードを作るために行ってきた基本的なステージの作成方法を説明します。

 

 

タイルの作成

私達は下図のような1つの短い道を「タイル」と呼んでおり、このタイルをステージレベル毎に5つ繋げることによって「チャリ走VR」のステージを構成しています。1つ1つのタイルはブループリントで作成されているため、非エンジニアがいつでも修正したり確認することが可能となっています。また、ステージレベル1のタイルには比較的難易度の低いタイルが割当てられており、ステージレベルが上がる毎に難易度の高いタイルが割当てられることになります。

bikerider-vr_stage_tile

 

 

床の作成

タイルには必ずプレイヤーがチャリで走ることのできる床がありますが、こちらには下図のようなポリゴン数12の直方体を利用しています。ステージ作成担当の人は、この直方体を使って全てのタイルにある床を作成しました。

bikerider-vr_stage_floor

 

 

衝突検出

どのタイルにも必ずプレイヤーとの衝突を検出するための「ボックスコリジョン」が埋め込まれています。これに関しては今後執筆予定のVR酔いについての内容にも関係してきますが、ここではプレイヤーがタイルから離れてしまった時の処理などを実行するために利用していると捉えて下さい。このボックスコリジョンはゲームに大きな影響を与えるため、親から継承することでステージ作成担当者の設定ミスを回避することにしています。

bikerider-vr_stage_collision

 

 

ゲームオーバ検出

各タイルにはゲームオーバを判定するためのボックスコリジョンが3つ埋め込まれています。ゲームオーバになってしまう条件としては、床から落下してしまった時、床の無い左側あるいは右側に進みすぎた時の3通りです。上部にもボックスコリジョンを配置するべきではと思われるかもしれませんが、上昇によるゲームオーバというのはチャリ走には合わないため下面と左右面のみの対応となりました。

bikerider-vr_stage_gameover

 

 

次タイル生成検出

次タイル生成とは、プレイヤーの進行により前方にタイルを生成するという処理です。下図の選択しているボックスコリジョンにプレイヤーが衝突した時に、最も前方にあるタイルの1つ先に新しくタイルを生成します。新規タイルの生成と同時に最も後方にあるタイルも削除します。

bikerider-vr_stage_nexttile

 

bikerider-vr_stage_updatetile

 

 

ジャンプ検出

あるステージには床と床の間が空いており、プレイヤーのジャンプを促す部分があります。この場合NPCにもジャンプをさせる必要があるのですが、「ある場所でジャンプをさせたい」といった要望があった時にエンジニアが対処するのは非常に面倒なことです。それはエンジニアの立場として回避するべきことであるため、NPCのジャンプに必要なボックスコリジョンとノードをマニュアル化しました。(敵キャラクターについての呼び方がCPUとNPCの2通りあると思いますが私は圧倒的にCPU派でした苦笑)

bikerider-vr_stage_jumpboxcollision

 

bikerider-vr_stage_jumpbox

 

 

実装方法の試行錯誤

タイルの生成と削除

衝突検出の章ではタイルの生成と削除をすると表現していましたが、個人的にはVRアプリケーションにおいて生成と削除は非常にコストが高い印象です。そこでチャリ走VRでは、あるレベルに遷移した時からオブジェクトの生成と削除はしていません。ロジックとしてはプレイヤーが次タイル生成用のボックスコリジョンに衝突すると、図の赤枠で囲まれたタイルは青枠で囲まれたタイルの1つ先へ移動することになります。従来は1度に表示されるタイル数が多かったため、すぐに後方のタイルが前方に移動されることがなかったのですが最終的にこの形に落ち着きました。

bikerider-vr_stage_hideshow

 

 

タイルの移動

チャリ走のようなエンドレスランゲームではタイルを移動させることがスタンダードな実装かと思われますが、スペックの高いPCで開発していると気づかない事として最大フレームレートの確保です。VRアプリケーションで気をつけたい処理として、「複数のオブジェクトを1度に移動させること」が挙げられると思います。これだけでフレームレートがかなり下がってしまう現象が見受けられたため、タイルを移動させる方式を断念しました。AIの実装に関してはタイルを移動させる方式よりも、キャラクター自身が移動している方が制御しやすい事もあったので結果としては良かったのではと考えています(前者の場合はオブジェクトのめり込みなどにも気を配る必要がある?などなどバグの温床になりそうです)。

 

 

ステージのデバッグ

チャリ走VRのステージはステージ作成担当の方が作っていくのですが、当然クリアの不可能なステージを作成してしまう可能性もあります。それを回避するために通常のゲームモードと同じように動作する専用のレベル(シーン)を用意しました。また、デバッグレベルで作成されたタイルの設定ミスなどにも注意するために、通常のゲームモードで出現するタイルの順番については誰でもデータを編集することで変更可能にし、作成したタイルをすぐに確認可能にするといった対応も入れることにしました。

bikerider-vr_stage_data

 

 

まとめ

今回はチャリ走VRのステージ作成方法について紹介させて頂きましたが、正直なところ他にも細かい問題があり記述しきれない部分はあります。細かい問題の多くはVRアプリケーションの開発でなければ発生しないものばかりでしたので、通常であれば当たり前のように実装できる手法だったとしても、工数の見積もりとして検証期間を設けることをオススメします。

 

 

LINEで送る
Pocket

おすすめ記事