本講座では、UnityとC#を用いて3Dレースゲームの作り方を解説してきました。
ここまでで一通りゲームを作成し、前回まででVR対応ゲームとして完成させました。
前回の記事 :
今回はちょっと細かいところの修正を行っていきます。コースアウトしたり、車がひっくりかえったりした時の対応をしていきたいと思います。
なお、この記事はVR対応以前まで作成した状態で作成していきます(10章までのプロジェクトから作り替えていきます)。
VRでの変更をそのまま残して作成する場合は、今回の記事で作るUIボタンを何かしら別のコントローラーボタンに置き換えてみてください(リトライ処理の時と同じようにすればできます)。
コースアウトからの復帰
今回使用しているアセットのコースで湖、池のような中心にある部分などに入れてしまうとゲームの進行上おかしくなってしまう部分があります。
なので、湖に入ってしまった場合は「コースアウト」と判定しコース上に戻されるようにしていきます。
復帰ポイントの作成
ではまず、戻されるポイントを作成しましょう。
まずHierarchyで親となる空オブジェクトを「Create Empty」で作成し「RelocationPoints」という名前にしましょう。
次に、「RelocationPoints」の子にさらに空オブジェクトを作成します。ポイント数は何個でも構いませんが、今回は6個の空オブジェクトを作成します。名称もなんでもOKです。
この空オブジェクトが復帰ポイントになります。これらをまずは、コース上の任意の位置に移動し、角度も調整しましょう。
ここで重要なのが、ポイントの角度のZ軸「+」方向を進行方向に向けておくことです。下記画像の青い矢印部分がZ軸「+」方向です。
この角度が復帰した際に車の角度になりますのでRotationのYの値以外は0になるようにしておきましょう。(赤い点がポイントを設置している部分です。位置は任意で構いません)
復帰ボタンの作成 コースアウトや転倒からの復帰処理を作ろう
次に、コースアウト以外の場合に車がひっくり返って戻れなくなった、変なところに入って戻れなくなったなどの時に復帰できるようにUIボタンで復帰処理を実行できるようにします。
そのためのUIを作成しておきましょう。Hierarchyで「Canvas」の子に「Button」を作成し今回は画面左上に移動しておきます。
位置、大きさ、テキストは任意で構いません。
このボタンを押した際に、コースアウトと同じ処理を行いコース上に復帰します。
湖のコライダー設定
コースアウトを判定するために、入ったらコースアウトになる湖にコライダーを設定し、そのコライダーにEnterしたときに「コースアウト」とします。
湖のオブジェクトはHierarchyでは「raceTrackLakeLevel/WaterBasicDaytime」です。
(下記画像のオレンジ枠の部分)
ここに、InspectorでAddComponentから「Mesh Collider」と「ColliderCallReceiver」を追加してください。
そして「Mesh Collider」の「Convex」と「IsTrigger」にチェックを入れてください。
復帰処理スクリプトの作成
では復帰処理を作成していきます。
まず、「PlayerCarController.cs」に車の並進・回転速度を0にするメソッドを追加し、コースアウト時の復帰処理で呼び出せるようにします。
速度ベクトルに変化を与えるときはrigidbodyを参照する必要があるため、「PlayerCarController.cs」に処理を書き加えます。
車がコースから落ちないようにしたい場合
もし落ちたら復帰、ではなくそもそも落ちないようにしたい場合は行って欲しくないところに見えない壁を設置すればOKです。
下の画像のようにコライダーのついたGameObjectを並べて、「MeshRenderer」を無効にすれば見えない壁の出来上がりです。
今回の記事の内容を実装することでコースアウトによる操作不可能なバグを取り除くことができます。
カーレースゲームに限らず、アクションゲームなどでもこの先には行ってほしくないエリアや立ち入ったら近くの特定の場所に戻すような処理を組みたい場合も今回の方法を応用すれば簡単に実装できますね。
さいごに
ここまでで、PC・スマホ・VRクロスプラットフォーム対応のカーレースゲーム講座の終了になります。
ここからはあなたが思い描く自由なカーレースゲームに改造していくもよし。
新しいゲームをUnity入門の森の講座でさらに作っていくもよしですね。
オリジナルのゲーム開発やクロスプラットフォーム開発の役に立った場合はSNSなどでシェアしていただいたり、教えていただければ望外の喜びです。
ここまで読んでいただきありがとうございました!
コメント