Unity C#レースゲームの作り方6 俯瞰マップとリトライ処理を開発する

Unity C# レースゲームの作り方 (PC・スマホ・VRクロスプラットフォーム開発チュートリアル)


Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

本講座ではUnityで3Dレースゲームの作り方について説明しています。今回は第6回となります。

前回はレーシングゲームにおけるタイマー計測・ラップのカウント処理・スタート処理・ゴール処理などのUI周りの必須機能を作成しました。

前回の記事 :

レースゲームの作り方5 レース開始のカウントダウン・スタート・ゴール処理の作成
本講座ではUnityとC#を用いて3Dレースゲームの作り方について説明しています。 今回は第5回となります。 前回は周回数を数える処理を作成しました。今回はそれを使ってスタート、ゴールの処理を作成を行います。 前回の記事 : ...

今回はさらにUI機能を拡張していきます。レースゲームに必要な真上から見たような俯瞰ミニマップを作成し、ゴール後にリセットできる処理を追加していきます。

特に俯瞰ミニマップの作成手順はレースゲームだけでなく、ローグライクやアクションゲームやシミュレーションゲームなど幅広いジャンルで応用可能なスキルになります。ぜひここでマスターしていってください!

では始めていきましょう!


【Line登録者限定のプレゼントもあるよ!】

Unityで俯瞰ミニマップを作成しよう

では早速、俯瞰ミニマップの作成をしていきます。

RawImageへカメラ画像の投影

まずはカメラ画像をRawImageに映す方法を解説していきます。

まずはHierarchyでCanvasで右クリック「UI→Raw Image」でCanvasの子にRawImageを作成します。このRawImageの名前を「Map」としておきましょう。

そして「Map」を選択しInspectorのRectTransformを下記のように位置、大きさ、Anchor、Pivotを設定します。

これで左上にピッタリくっついたかと思います。(GameViewのサイズ設定によって見た目が少し違うと思います。下記画像は画面を「2048*1536 Landscape」に設定しています)

次にカメラを作成します。

まずは、Hierarchyで右クリック「Create Empty」で空オブジェクトを作成し、「MapCamRoot」という名前にします。そしてこの「MapCamRoot」で右クリックをして「Camera」を子に作成します。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

リトライ

では次にリトライ処理を作成しましょう。ゴールしたらUボタンを表示して押したら再スタートという形にしていきます。

UIの作成

あまりかっこよさは考えずサクッと作成していきます。

HIerarchyの「Canvas」の子に空オブジェクトを作成し「Retry」という名前にします。そしてその子にUIから「Image」「Text」「Button」を作成します。「Image」を「Bg」、「Text」を「Title」、「Button」をそのまま「Button」という名前にします。

この時上から「Bg」が一番上に来るようにだけ注意してください。これは上にあるほうがカメラに映る際後方に表示されます。試しに「Bg」を「Text」や「Button」より下(Retryの子のまま)に移動してみると「Text」「Button」より前に「Bg」が来て暗くなっているのがわかるかと思います。(戻しておきましょう)

親である「Retry」も含めて、「RectTransform」で位置、大きさを以下の画像を参考にして設定してください(個々人でカスタマイズしてもOKです)。RectTransformをStretchにして全ての値を0にすると画面全体に引き伸ばされます。また、Bgの色を設定する際にalpha値を100程度にして半透明化しておきましょう。

また、Imageの色、Textの大きさや文字なども同じように設定してみてください。だいたい見た目がよければ問題ありません。(Button内の文字はButtonの子にあるTextで設定できます)

これらを設定すると下記のようになります。できたら親の「Retry」を選択しInspectorの名前の横にあるチェックマークを外して非アクティブにしておきましょう。

リトライUIの起動処理

ではまずUIを起動する処理を作成します。ゴールしたときに表示して、再スタートしたら消せばOKです。

まずは「PlayerContoller.cs」を追記していきます。

 

まず変数は、「Vector3」の「startPosition」、「Quaternion」の「startRotation」を用意します。これは開始位置、角度を保管しておくためです。

(TrackingCameraUpdate関数は追記はありませんが、参考のために記載しています。)

新しく「OnStart」関数を作成します。これはカウントダウンがスタートした時に呼び出される処理です。処理は簡単で「startPosition」に現在の位置「this.transform.position」を、「startRotation」に現在の角度「this.transform.rotation」を代入しています。

もう一つ作成した関数は「OnRetry」で、これはリトライ時に実行されます。処理はまず「OnStart」とは逆に、現在の位置「this.transform.position」に「startPosition」を、現在の角度「this.transform.rotation」に「startRotation」を代入して初期化します。

その下の処理は「TrackingCameraUpdate」関数でカメラの位置を算出している処理と同じで、開始時に初期化された車の位置にカメラを合わせています。

続いて、「GameContorller.cs」を追記します。

 

変数は「SerializeField」で「GameObject」型の「retryUI」を用意します。Hierarchyの「Retry」をドラック&ドロップしておきましょう。

次に「Start」関数で「retryUI.SetActive( false )」つまりリトライUIを非アクティブにしておきます。

続いて「CountDownStart」関数に「player.OnStart()」を追加しプレイヤーの「OnStart」を実行します。

次にゴール時処理「OnGoal」関数に「retryUI.SetActive( true )」を追加し、ゴールしたらUIを表示します。

最後に「OnRetryButtonClicked」という関数を追加します。これはリトライボタンを押した時の処理になりますので後ほどUnityから設定しましょう。

処理はまず「retryUI.SetActive( false )」でUIを消して、「timerText」「lapText」をスタート時の状態に戻し、「player.OnRetry()」でプレイヤーのリトライ処理を実行します。

そして、「CountDownStart()」を実行することで再びカウントダウンから始まります。

ひとまずわかりやすいように背景含めたUIを丸々作成しましたが、この状態だとゴールした時にすぐリトライボタンがでてGoal文字が見えないので、「Retry」の文字を「Goal!!」にするとか、Goal表示の下にボタンを配置するなどお好きに変更してみましょう。

ではUnityに戻って、まずRetryのInspectorへの設定します。

そして、リトライボタンのクリック処理にGameContollerをドラック&ドロップして「OnRetryButtonClicked」を設定しましょう。

では再生して、必要な周回数を走ってゴールしてみましょう。ゴール時にRetryのUIが出てきて、ボタンを押すと再びスタート地点からカウントダウンが始まればOKです。

今回はこれで以上となります。次回はCPUの他の車を作成していきましょう。

次回の記事 : 

Unityレースゲームの作り方7 Chinemachineの使い方 NPCの対戦相手を作成
本講座ではUnityで3Dレースゲームの作り方について説明しており、今回は第7回目となります。 前回の記事 : 前回記事ではマップの作成とリトライ処理を作成しました。 今回は一人でレースするのではなく対戦相手となるNPCを作成して...

 

Unityレースゲームの作り方チュートリアル講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました