#14 スコアを表示する

2Dシューティング

このブログは、趣味でプログラミングを勉強中の筆者が、実験を繰り返しながら、WordPressの使い方の練習も兼ねて、備忘録のように記事を残していくものです。Unityのバージョンは6000.0.32f1です。

今まで使ってきたDELLのPCが10年を超えたので、思い切って買い換えました。CPUも新しくなって快適です。

さて、今回はスコアを表示したいと思います。

今回のゴール

スコアを表示する

スコアの入れ物を用意する

スコアを表示するには、スコアをどこかで保持しないといけません。そこでスコアの変数を用意します。StageManagerでもいいですが、ステージが増えたりすると困るので、GameDataというクラスを用意します。

GameData.cs

static(静的)にすることで、GameDataのインスタンスを作らなくてもこの変数を使うことができます。さらに、publicですから、どのスクリプトからもスコアを参照したり変更したり出来ます。使い方は、以下の通りです。

これで、スコアが50点加算されます。簡単ですね。

publicを多用するのは、安全面では推奨されませんが、趣味のプログラミングの場合は、そこまで厳密にする必要もないでしょう。チームで開発する場合は、別の手段を執ると思います。

スコアの初期化

スコアの初期化はStageManagerで行いましょう。

StageManager.cs

当たり判定

スコアを加算するのは、自機の弾が当たったときですから、まずは当たり判定です。弾と敵のどちらかに当たり判定をつけましょうか。今回は点数処理を簡単にするため、敵につけたいと思います。

Enemy.cs

敵同士はレイヤーの設定で衝突判定が行われませんので、今回敵に当たったのは弾か自機なのですが、弾に当たった場合と自機に当たった場合で処理を分けたいと思います。collision.gameObject.CompareTag(“Bullet”)で、衝突したゲームオブジェクトにBulletというタグが付いていた場合に処理を行います。

ただし、まだ弾にはタグをつけていませんので、次の操作をします。

ゲームオブジェクトにタグを付ける

Bulletのプレハブを選択して、インスペクターでTagUndefinedの欄をクリックします。

ポップアップメニューが出るので、Add Tag…を選びます。

TagsのListのを押します。Listに追加するという意味です。

New Tag Nameの欄にBulletと入力してSaveを押します。これで、BulletのプレハブにBulletというタグを付けることが出来ました。ゲームオブジェクトのタグを調べることで、処理対象のゲームオブジェクトを見分けることが出来ます。

同じようにして、自機のプレハブにもPlayerというタグを付けておきます。

自機と接触したときの処理を入れる

タグを付けたので、敵に当たったのが弾なのか自機なのかを判別することができるようになりました。そこで、処理を以下のように変更します。

弾が当たった場合は、敵の点数を加算します。自機が当たった場合は、敵を消すだけにします。まだ、自機は無敵モードですね。

点数を表示できるようにする

TEXTを配置する

ヒエラルキーを右クリックするとポップアップメニューが出ます。そこからUILegacyTextの順に選びます。Canvasをダブルクリックすると、UI画面が出てきて、Textが真ん中に表示されていると思います。これを左上に移動させておきます。さらにUIのTextを追加して、名前をSCOREに変えます。

一つ目のTextには、SCOREと入力します。

二つ目(SCORE)のTextは空欄にしておきます。どちらのテキストも位置を調整して、フォントサイズを36にして色を白に変えました。

テキストボックスをスクリプトから操作する準備

SCOREと名付けたテキストボックスをスクリプトから操作するために、仕組みを作ります。

StageManager.cs

StageManager.csに上の一行を追加すると、ヒエラルキーでStageManagerを選んだときに、ScoreTextという欄が現れます。

そこに、ヒエラルキーのSCOREをドラッグします。そうすることで、StageManager.csの中のScoreTextと画面上のSCOREが結びつき、StageManager.csの中でSCOREの表示内容を変更できるようになります。

StageManager.csの中にこのように記述すると、GameDataの中のscoreという変数が表示されるようになります。これをどこに記述するかという話ですが、Update関数の中に記述することにします。そうすることで、scoreに変更があると即座に表示も変更されるからです。また、GameDataの中のscoreという変数はint型なので、ScoreText.textに代入するためにToString()で文字列型に変換します。

これで、画面上部にスコアが表示されるようになりました。

今回はここまでです。ちょっと長かったですね。お疲れ様でした。

コメント

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