目次
●はじめに
2D横スクロールシューティング作成の6回目、最終回になります。
アセットストアで無料公開されている「Warped Space Shooter」をお借りして作成しています。
今回は「スコア制御」を追加し、一旦完成とします。
↑これが完成します。
●テキスト作成
▷テキストUI作成
・解説
スコアを表示するためのテキストUIを作成します。
・手順
「テキスト – TextMeshPro」を作成し、TextMeshProのパッケージをインポートします。
- ヒエラルキーの右上にある「+」をクリック
- 「UI>テキスト – TextMeshPro」をクリック
- TMP Importerの「Import TMP Essentials」をクリック
- TMP Importerの右上にある「✕」をクリック
▷テキストUI設定
・解説
画面の右上に寄せてテキストを表示します。
・手順
キャンバスをスクリーン範囲で表示するようにします。
- ヒエラルキーの「Canvas」をクリック
- インスペクターの「Canvas>レンダーモード」を「スクリーンスペース – カメラ」に変更
- ヒエラルキーの「Main Camera」をインスペクターの「レンダーカメラ」にドラッグ&ドロップ
テキストUIのアンカーを右上に指定します。
- ヒエラルキーの「Canvas>Text (TMP)」をクリック
- インスペクターの「Rect Transform」にある左上アイコンをクリック
- SHIFTとALTを押しながらアンカープリセットの「top – right」をクリック
テキスト整列を右上に配置し、TextMeshProを設定します。
- インスペクターの「Rect Transform>位置X」に(-10)を入力
- インスペクターの「Rect Transform>幅」に(200)を入力
- インスペクターの「Rect Transform>高さ」に(50)を入力
- インスペクターの「TextMeshPro – Text>Text Input」のテキスト入力に「1234567890」を入力
- インスペクターの「TextMeshPro – Text>Main Settings>Font Style>B」をクリック
- インスペクターの「TextMeshPro – Text>Main Settings>Font Size」に(16)を入力
- インスペクターの「TextMeshPro – Text>Main Settings>Alignment>Right」をクリック
- インスペクターの「TextMeshPro – Text>Main Settings>Alignment>Top」をクリック
●スコア制御
▷スコア制御の準備

・解説
スコアそのものと、表示先とするテキストを保持するための変数を作成します。
・手順
テキストUIを使用するためTMProのusingを追加します。
- プロジェクトの「Assets>Player」をダブルクリック
- using最後の行に以下のusingを追加
using TMPro;
スコア値、テキストUIを保持する変数を追加します。
- 「ゲーム管理オブジェクト」の下に以下の変数定義を追加
public TextMeshProUGUI scoreText; // スコアテキスト
int score; // スコア
スクリプトを保存してビルドします。
- CTRLを押しながらSキーを押してスクリプト保存
- Unityエディタをクリックしてビルド
▷テキストとして表示

・解説
スコアとして保持している値を画面に表示します。
・手順
スコア表示処理を追加します。
- プロジェクトの「Assets>Player」をダブルクリック
- Update関数内に以下の処理を追加
// スコア表示
scoreText.text = score.ToString();
スクリプトを保存してビルドします。
- CTRLを押しながらSキーを押してスクリプト保存
- Unityエディタをクリックしてビルド
テキストUIをPlayerスクリプトに割り当てます。
- ヒエラルキーの「Player1」をクリック
- インスペクターの「Player (スクリプト)>Score Text」にあるボックスにヒエラルキーの「Canvas>Text (TMP)」をドラッグ&ドロップ
●スコア加算
▷スコア加算機能追加

・解説
スコアを加算できるようにします。
・手順
スコアを加算する処理を追加し、他のスクリプトから使えるようにします。
- プロジェクトの「Assets>Player」をダブルクリック
- Update関数の次に以下の関数を追加
// スコア加算
public void AddScore(int value)
{
score += value;
}
スクリプトを保存してビルドします。
- CTRLを押しながらSキーを押してスクリプト保存
- Unityエディタをクリックしてビルド
▷加算するスコアを保存

・解説
加算するスコアをEnemyスクリプトに持たせます。
・手順
Enemyスクリプトにint型の公開変数を追加します。
- プロジェクトの「Assets>Enemy」をダブルクリック
- Start関数のに以下の関数を追加
public int score = 100; // スコア
▷破壊時にスコア加算

・解説
破壊されたら持っているスコアを自機が持つスコアに加算します。
・手順
破壊された時にPlayerスクリプトのスコア加算処理を呼び出します。
- FixedUpdate関数の次に以下の処理を追加
// オブジェクト削除時に処理
void OnDestroy()
{
// 自機取得
GameObject obj = GameObject.FindGameObjectWithTag("Player");
Player player = obj.GetComponent<Player>();
// 自機が取得できた場合
if (player != null)
{
// スコア加算
player.AddScore(score);
}
}
スクリプトを保存してビルドします。
- CTRLを押しながらSキーを押してスクリプト保存
- Unityエディタをクリックしてビルド
プロジェクトを保存して動作を確認します。
- CTRLを押しながらSキーを押してプロジェクト保存
- Unityエディタ上部中央のPlayボタンをクリックしてプレビュー開始
- 敵を倒すとスコアが増えていくことを確認
- Unityエディタ上部中央のPlayボタンをクリックしてプレビュー終了
●完成
スコア制御を追加し、最低限シューティングと呼べそうな形になりました。
次は横スクロールアクション作ろうかな。
コメント