(24)敵に得点をつけてスコアを表示する

ここでは、敵に得点をつけてスコアを表示する方法を学びます。

「Canvas」を右クリック→「UI」を選択→「Text」を選択してクリック。

・名前は「ScoreLabel」に変更。

・「ScoreLabel」を選択した状態で、「大きさ」「位置」「Text」「Font Size」を調整します。

・今回は「Canvas」の「左下」に配置するように調整しましょう

スクリーンショット 2016-04-22 13.23.50

これでスコアラベルの準備ができました。

次はスコアの「スクリプト」を準備します。

・C#スクリプトを1つ作成して、名前を「ScoreManager」に変更。

この中に下記のコードを記載してください。(★の部分)

using UnityEngine;
using System.Collections;
 // ★<追加>
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour {

	// ★変数の定義
	private int score;
	public Text scoreLabel;


	// Use this for initialization
	void Start () {

		// ★初期値の代入
		score = 0;
		scoreLabel.text = "SCORE:" + score;

	}

	// ★スコアを増加させるメソッド
	public void addScore(int amount){

		score += amount;
		scoreLabel.text = "SCORE:" + score;
	}
}

・コードが書けたらチェック。

・次に「Hierarchy」→「Create Empty」でオブジェクトを1つ作成。

・名前を「SM」に変更。

・この 「SM」オブジェクトScoreManager」スクリプトをドラッグ&ドロップしましょう。

スクリーンショット 2016-05-24 14.50.25

・「ScoreLabel」には「Canvas」の「ScoreLabel」テキストをドラッグ&ドロップ。

スクリーンショット 2016-05-24 14.52.31

次に「EnemyHealth」スクリプトをダブルクリック

・この中に下記コードを追加してください。(<★追加>の部分)

using UnityEngine;
using System.Collections;

public class EnemyHealth : MonoBehaviour {

	// <★追加>
	private GameObject scoreManager;
	public int scoreValue;


	public GameObject effectPrefab1;
	public GameObject effectPrefab2;
	public int enemyHP;

	public GameObject[] ItemPrefab;


	// <★追加>
	void Start(){

		scoreManager = GameObject.Find("SM");

	}


	public void OnTriggerEnter(Collider other){
		if(other.CompareTag("Shell")){
			enemyHP -= 1;

			Destroy(other.gameObject);

			if(enemyHP > 0){
				GameObject effect1 = Instantiate(effectPrefab1, transform.position, Quaternion.identity) as GameObject;

				Destroy(effect1, 1.0f);
			} else {
				GameObject effect2 = Instantiate(effectPrefab2, transform.position, Quaternion.identity) as GameObject;

				Destroy(effect2, 1.0f);

				Destroy(gameObject);

				GameObject dropItem = ItemPrefab[Random.Range(0,ItemPrefab.Length)];

				Vector3 pos = transform.position;
				pos.y = 0.5f;
				transform.position = pos;

				Instantiate(dropItem, transform.position, Quaternion.identity);


				// <★追加>
				ScoreManager sm = scoreManager.GetComponent<ScoreManager>();

				sm.addScore(scoreValue);

			}
		}
	}
}

・コードの追加ができたらチェック。

 

・「Score Value」には好きな数字を設定してください。ここに入れた数字が「敵を倒した時の得点」になります。

スクリーンショット 2016-05-24 14.57.14

ここまでできたら再生ボタンを押してみましょう。

敵を破壊した時にスコアの表示が増加すれば成功です。

スクリーンショット 2016-04-22 14.33.20


(応用問題)

*建物などの「物体」を破壊した時にも「得点」が入るようにしてみましょう。

(ヒント)「EnemyHealth」スクリプトを参考に「DestroyObject」スクリプトの中身を修正する。