【Unity初心者向け】スコア表示のやり方

Unity
スポンサーリンク

今回は初心者向けにUnityでのスコア表示のやり方を解説したいと思います

例に使うのは2Dのシューティングゲームです

こちらの記事で未経験者でもゼロから2Dシューティングを作れるように解説していますので参考にしてください

【Unity超初心者向け】2Dシューティングゲームの作り方【全手順画像付きで解説】

本記事で説明するスコア表示はこちらの2Dシューティングをベースとしています

【Unity初心者向け】スコア表示のやり方

こちらの簡素なシューティングゲームにスコア表示を加える方法を解説していこうと思います

Textオブジェクトを作成する

はじめに、スコアを表示するためのオブジェクトを配置します

上部メニューから「Game Object」→「UI」→「Text」を選択してください


通常は1つのオブジェクトが追加されますが、この場合は「Canvas」というオブジェクトと「Text」というオブジェクトがヒエラルキービューに追記されます


シーンビューを引いてみると「New Text」という文字が出ているのが確認できるかと思います

Textオブジェクトを選択した状態でインスペクターを見ると「New Text」という文字が見つかるかと思います

試しにインスペクター上の「New Text」の文字を変えると、画面上の文字が変わることが確認できるかと思います


また、画像の赤い部分をクリックすると、文字の色を変更することが出来ます

黒のままだと見難いと感じたので、文字を白色にしてみました

このあたりは好みでOKです

スコアの変化をプログラミングする

シューティングゲームで敵を倒したときに、スコアが更新されるようにしていきます

今回は「Canvas」オブジェクトにスコア操作用のプログラムを付加します

画像のように「Canvas」オブジェクトを選択してください


Canvas」オブジェクトを選択した状態でインスペクター上の「Add Component」を選択してください

検索窓のようなところにコンポーネント名称を入れます。今回は「ScoreController」と命名しました


続いて「Create and Add」を押します


Assetsエリアに「ScoreController.cs」が追加されていればOKです


ScoreController.cs」を開きます


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScoreController : MonoBehaviour
{
    int score = 0;
    Text textComponent;

    // Start is called before the first frame update
    void Start()
    {
        this.textComponent = GameObject.Find("Text").GetComponent<Text>();
        this.textComponent.text = "Score " + score.ToString();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void AddScore()
    {
        this.score += 10;
        this.textComponent.text = "Score " + score.ToString();
    }
}

こんな感じでソースコードを追加します

上のほうにusingが増えている点に注意してください

ざっとやっていることを説明しますと

Startの中 : スコア表示用のオブジェクト”Text”を取得して「スコア0点」の表示する

AddScoreの中 : スコアを10増やして、スコアの表示を更新する

という感じです

AddScoreという関数が増えていますが、これは敵を倒したときに呼び出すための関数です。後の工程で呼び出し箇所を作成します

ソースコードの記載が終わったら保存してください


続いてAddScoreを呼び出す部分を作成します

例のゲームの場合はAssetsエリアから「Bullet.cs」を開いてください

例のゲーム以外の場合は「敵が倒されたときの処理」が記載されているファイルを探して開いてください


例のゲームの「Bullet.cs」はこのような中身です。「OnTriggerEnter2D」が「敵が倒されたときの処理」に該当します

ここに次の1行を追加します

        GameObject.Find("Canvas").GetComponent<ScoreController>().AddScore();

例えば「Bullet.cs」の場合は以下のようになります

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(0.03f, 0, 0);

        if (transform.position.x > 10.0f)
        {
            Destroy(gameObject);
        }
    }

    void OnTriggerEnter2D(Collider2D col)
    {
        Destroy(col.gameObject);
        Destroy(this.gameObject);
        GameObject.Find("Canvas").GetComponent<ScoreController>().AddScore();
    }
}

これで敵が倒されたときにAddScoreが実行され、スコアが更新されます

追加が完了したら、ファイルを保存してください


Unityに戻ってゲームを開始すると、スコアが表示されるのが分かります


また、敵を倒すとスコアが更新されると思います


まとめ

  • Textオブジェクトを作成する
  • Textコンポーネントをプログラムから更新する

というわけで、以上スコアの表示方法でした

お疲れ様でした!


さらに、ゲームオーバーの作成方法についても記事しています

詳しくはこちらを参照してみてください

【Unity初心者向け】ゲームオーバーの作り方



コメント