【チャリ走VR】ギミックの作り方
はじめに
本投稿では、今年2月21日にリリースされたPlayStation®VR専用ソフト「チャリ走VR」のギミック作成方法についてお話しさせていただきます。開発中盤までのギミック検証フェーズで利用していたギミックの作り方、変更後のギミックについてや没になったランダムギミック配置について紹介していきます。
チャリ走VR
過去のギミック
開発当初のギミックにはジャンプ台やコイン、電柱、コンクリートの壁といったものがありましたが、企画の大幅変更時に全てなくなりました。最初にデザインとして渡されたチャリ走VRの世界観は下図のようなものだったので、0の状態からどの程度寄せていけるかは不明でしたが、最終的な形が分かっていただけに開発はやりやすかったと思います。
被破壊性メッシュ
実は元々、全てのギミックは被破壊性メッシュとして利用していました。被破壊性メッシュを利用することで下図のようにオブジェクトを破壊する表現が作れます。被破壊性メッシュにしていた理由としては、ギミックを「ぶっ壊してやった!」という感覚が体験時に大きく得られる気がするからでした。スフィアを破壊した時に散らばる破片と割れた音がマッチしていたので、表現としてはかなり良かったのですが後々問題が発生したため被破壊性メッシュも断念することになります。
被破壊性メッシュの作り方
スフィアはすぐに作れてしまうのでこれを例に作ってみましょう。
1.スフィアの配置とコピー
まずはモードウィンドウの基本からスフィアを配置します。
配置したスフィアを選択していると詳細ウィンドウにスタティックメッシュの情報が表示されるので、虫眼鏡アイコンをクリックしてコンテンツブラウザ上でスフィアがある場所に移動します。
移動したディレクトリにある「Sphere」を複製して好きな場所に移動させます。
2.スフィアの入れ替え
レベル上に配置されているスフィアは複製したスフィアとは異なるものなので「Sphere2」と置換しておきます。
3.マテリアル設定
「Sphere2」を開いてマテリアルを設定しておきます。単純に色を出力させるだけのマテリアルでも問題ありません。
4.被破壊性メッシュの作成
「Sphere2」を右クリックすると一番上のメニューに「被破壊性メッシュを作成」とあるので選択します。新しく「Sphere2_DM」というファイルが作成されます。
5.被破壊性メッシュの設定
「Sphere2_DM」を開いたら「フラクチャメッシュ」ボタンをクリックします。これによりフラクチャ設定より編集可能な「Cell Site Count」の数だけピースが生成されます。また、「Enable Impact Damage」のチェックを入れることを忘れないで下さい。
6.シミュレーション
それではさっそくシミュレーションしてみます。アンリアルエディタの「選択ビューポート」ではなく「シミュレート」をクリックしてゲームを実行します(デバッグがしやすいです)。実行して何かにぶつけてみると下図のようになりました。見た目があまりキレイではありませんね。
7.被破壊性メッシュのマテリアル設定
実は「Sphere2_DM」の中にはデフォルトでもう一つマテリアルを設定できる場所があるのです。被破壊性ウィンドウをスクロールしてみると、スケルタルメッシュの項目にマテリアルを2つ設定できる場所があります。予め設定されている「WorldGridMaterial」を先程作成した色を出力するマテリアルに変更します。
8.再度シミュレーション
再度シミュレーションを実行してみると良い感じの表現になっています。
ギミック用BPの作成
次に被破壊性メッシュのスフィアを使って衝突の検出やスコアの加算などをやりたくなってくると思います。この場合はスフィアをブループリント化してしまうのが良いでしょう。配置している被破壊性メッシュのスフィアを選択した状態で「ブループリント/スクリプトを追加」ボタンからブループリントを作成します。
作成したブループリントを開くと下図のようにDestructible Actorを継承した状態になっているはずです。例えば衝突判定用のボックスコリジョンコンポーネントを追加すると、何らかの物体がスフィアに衝突した時に粉々に砕けるといった演出を作ることができます。
修正後のギミック
ということでここまで被破壊性メッシュについての説明をしてきましたが、本作では被破壊性メッシュの利用をやめております。特にチャリとギミックの衝突時の破壊演出時に負荷がかかりすぎる(NPCがガリガリ破壊していく)ことが問題でした。複数のオブジェクト自身が物理演算をすることに負荷がかかっているのか定かではないですが、とにかく最大フレームレートを得ることができるのであればどんな代償も厭わない流れになっていました。
スタティックメッシュでギミック作成
結局のところ、被破壊性メッシュではなくスタティックメッシュからブループリントを作成することにしました。ギミック自体が壊れなくなったことからギミックとギミックとの衝突判定を入れて見ると、被破壊性メッシュ時の表現よりも自然でゲームとして面白くなったように感じました(クリア難易度は上がった)。ギミックは複数あるため親の関数をオーバーライドすることでギミックごとに異なる処理をさせるようにしています。ブループリントはコードとは違い配置するだけでプログラミングできるわけですが、ある処理を作ろうと思うとノード数が多くなってしまい可読性が悪くなる欠点があります。ですから、なるべく小さな組み合わせで何をしているのか一瞬で分かる配置をすることが求められるはずです。
ギミックの配置
ギミックはステージにチャイルドアクターコンポーネントとして配置します。座標や回転、拡大・縮小の値を適当に設定すれば完了です。その他の細かいことは全てブループリントが制御してくれるので、配置する人はトランスフォームだけを気にすれば良いのです。私を含め配置する人から要望があったのがビューポート上でチャイルドアクターを選択できるようにならないか?というものでした。確かにコンポーネントウィンドウから目的のギミックを探すのはかなり面倒な事です。以前、プライベートでもチャイルドアクターのソースコード部分を調べていましたが、チャイルドアクターには改善したい部分がいくつかありそれを修正するのは時間を要しそうでしたので今回は見送りました。(チケット自体は存在していましたがあまり需要がないみたいでした=当分直らない)
ランダム配置
最後に没になったギミックランダム配置について説明します。ネタバレするとチャリ走VRのギミック配置は全て固定です(それでも難しいのですが)。下図が作成していたギミックランダム配置用のブループリントです。このブループリントもまたギミックとしてステージに配置するだけで利用でき、赤い床の範囲内をターゲットにギミックを作成してくれるというものです。
下図では分かりやすいように灰色の床から浮かせていますが、ギミックの位置は下図のように赤い床からライントレースによって決定しています。
この場合、少し考えさせられる問題としては図のように回転を0で配置しておらず、回転に値を代入した時のギミック位置を決める方法です。なぜならば、長方形の範囲で位置を決めるのは単純な条件分岐でできるのに対して、回転が入ってきた場合は長方形の範囲で位置を決めると赤い床のない部分が出現するためです。また、スケールの変更も許可しているためどのような状態であっても、最も離れている2つの頂点のX(Y)軸上での距離を求める必要があります。
もちろん一度の位置決め試行で白い部分を当ててしまうことはあります。検証していると5回ほど試行を繰り返せば赤い床に落ちることが9割ほどでしたので、5回を最大試行回数として6回目は強制的に中央を設定するなどの処置を入れました。ところで、本章で紹介した初めの図には長方形の頂点部分に球体がありますが、これは単純に頂点の位置を取得するためだけに利用しています。頂点座標をブループリントから取得する方法はなかったような。
まとめ
今回は過去のギミックの内容を多めに紹介してきましたが、チャリ走VRではギミックが大量に出現することからパフォーマンスに影響を与える原因であるという内容も今後お伝えできればと思います。次回は、キャラクターのアニメーションについて紹介していきます。