スコア制御~横スクロールシューティング⑥

Unity

●はじめに

2D横スクロールシューティング作成の6回目、最終回になります。
アセットストアで無料公開されている「Warped Space Shooter」をお借りして作成しています。

今回は「スコア制御」を追加し、一旦完成とします。

 ↑これが完成します。

●テキスト作成

▷テキストUI作成

テキストUIの作成とTextMeshProのパッケージ追加
テキストUIの作成とTextMeshProのパッケージ追加

・解説

スコアを表示するためのテキストUIを作成します。

・手順

「テキスト – TextMeshPro」を作成し、TextMeshProのパッケージをインポートします。

  1. ヒエラルキーの右上にある「+」をクリック
  2. 「UI>テキスト – TextMeshPro」をクリック
  3. TMP Importerの「Import TMP Essentials」をクリック
  4. TMP Importerの右上にある「✕」をクリック

▷テキストUI設定

テキストUI設定
テキストUI設定

・解説

画面の右上に寄せてテキストを表示します。

・手順

キャンバスをスクリーン範囲で表示するようにします。

  1. ヒエラルキーの「Canvas」をクリック
  2. インスペクターの「Canvas>レンダーモード」を「スクリーンスペース – カメラ」に変更
  3. ヒエラルキーの「Main Camera」をインスペクターの「レンダーカメラ」にドラッグ&ドロップ

テキストUIのアンカーを右上に指定します。

  1. ヒエラルキーの「Canvas>Text (TMP)」をクリック
  2. インスペクターの「Rect Transform」にある左上アイコンをクリック
  3. SHIFTとALTを押しながらアンカープリセットの「top – right」をクリック

テキスト整列を右上に配置し、TextMeshProを設定します。

  1. インスペクターの「Rect Transform>位置X」に(-10)を入力
  2. インスペクターの「Rect Transform>幅」に(200)を入力
  3. インスペクターの「Rect Transform>高さ」に(50)を入力
  4. インスペクターの「TextMeshPro – Text>Text Input」のテキスト入力に「1234567890」を入力
  5. インスペクターの「TextMeshPro – Text>Main Settings>Font Style>B」をクリック
  6. インスペクターの「TextMeshPro – Text>Main Settings>Font Size」に(16)を入力
  7. インスペクターの「TextMeshPro – Text>Main Settings>Alignment>Right」をクリック
  8. インスペクターの「TextMeshPro – Text>Main Settings>Alignment>Top」をクリック

●スコア制御

▷スコア制御の準備

自機のインスペクター情報
自機のインスペクター情報

・解説

スコアそのものと、表示先とするテキストを保持するための変数を作成します。

・手順

テキストUIを使用するためTMProのusingを追加します。

  1. プロジェクトの「Assets>Player」をダブルクリック
  2. using最後の行に以下のusingを追加
using TMPro;

スコア値、テキストUIを保持する変数を追加します。

  1. 「ゲーム管理オブジェクト」の下に以下の変数定義を追加
    public TextMeshProUGUI scoreText;   // スコアテキスト
    int score;                          // スコア

スクリプトを保存してビルドします。

  1. CTRLを押しながらSキーを押してスクリプト保存
  2. Unityエディタをクリックしてビルド

▷テキストとして表示

自機のインスペクター情報
自機のインスペクター情報

・解説

スコアとして保持している値を画面に表示します。

・手順

スコア表示処理を追加します。

  1. プロジェクトの「Assets>Player」をダブルクリック
  2. Update関数内に以下の処理を追加
        // スコア表示
        scoreText.text = score.ToString();

スクリプトを保存してビルドします。

  1. CTRLを押しながらSキーを押してスクリプト保存
  2. Unityエディタをクリックしてビルド

テキストUIをPlayerスクリプトに割り当てます。

  1. ヒエラルキーの「Player1」をクリック
  2. インスペクターの「Player (スクリプト)>Score Text」にあるボックスにヒエラルキーの「Canvas>Text (TMP)」をドラッグ&ドロップ

●スコア加算

▷スコア加算機能追加

Playerスクリプトの最後にスコア加算機能を追加
Playerスクリプトの最後にスコア加算機能を追加

・解説

スコアを加算できるようにします。

・手順

スコアを加算する処理を追加し、他のスクリプトから使えるようにします。

  1. プロジェクトの「Assets>Player」をダブルクリック
  2. Update関数の次に以下の関数を追加
    // スコア加算
    public void AddScore(int value) 
    {
        score += value;
    }

スクリプトを保存してビルドします。

  1. CTRLを押しながらSキーを押してスクリプト保存
  2. Unityエディタをクリックしてビルド

▷加算するスコアを保存

Enemyスクリプトにスコア変数を追加
Enemyスクリプトにスコア変数を追加

・解説

加算するスコアをEnemyスクリプトに持たせます。

・手順

Enemyスクリプトにint型の公開変数を追加します。

  1. プロジェクトの「Assets>Enemy」をダブルクリック
  2. Start関数のに以下の関数を追加
    public int score = 100;         // スコア

▷破壊時にスコア加算

敵を倒すとスコアが加算される
敵を倒すとスコアが加算される

・解説

破壊されたら持っているスコアを自機が持つスコアに加算します。

・手順

破壊された時にPlayerスクリプトのスコア加算処理を呼び出します。

  1. FixedUpdate関数の次に以下の処理を追加
    // オブジェクト削除時に処理
    void OnDestroy()
    {
        // 自機取得
        GameObject obj = GameObject.FindGameObjectWithTag("Player");
        Player player = obj.GetComponent<Player>();
        // 自機が取得できた場合
        if (player != null)
        {
            // スコア加算
            player.AddScore(score);
        }
    }

スクリプトを保存してビルドします。

  1. CTRLを押しながらSキーを押してスクリプト保存
  2. Unityエディタをクリックしてビルド

プロジェクトを保存して動作を確認します。

  1. CTRLを押しながらSキーを押してプロジェクト保存
  2. Unityエディタ上部中央のPlayボタンをクリックしてプレビュー開始
  3. 敵を倒すとスコアが増えていくことを確認
  4. Unityエディタ上部中央のPlayボタンをクリックしてプレビュー終了

●完成

スコア制御を追加し、最低限シューティングと呼べそうな形になりました。

次は横スクロールアクション作ろうかな。

コメント

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