今回は初心者向けに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に戻ってゲームを開始すると、スコアが表示されるのが分かります

また、敵を倒すとスコアが更新されると思います
まとめ
というわけで、以上スコアの表示方法でした
お疲れ様でした!
さらに、ゲームオーバーの作成方法についても記事しています
詳しくはこちらを参照してみてください
コメント