ここでは、敵に得点をつけてスコアを表示する方法を学びます。
・「Canvas」を右クリック→「UI」を選択→「Text」を選択してクリック。
・名前は「ScoreLabel」に変更。
・「ScoreLabel」を選択した状態で、「大きさ」「位置」「Text」「Font Size」を調整します。
・今回は「Canvas」の「左下」に配置するように調整しましょう
これでスコアラベルの準備ができました。
次はスコアの「スクリプト」を準備します。
・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」スクリプトをドラッグ&ドロップしましょう。
・「ScoreLabel」には「Canvas」の「ScoreLabel」テキストをドラッグ&ドロップ。
次に「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」には好きな数字を設定してください。ここに入れた数字が「敵を倒した時の得点」になります。
ここまでできたら再生ボタンを押してみましょう。
敵を破壊した時にスコアの表示が増加すれば成功です。
(応用問題)
*建物などの「物体」を破壊した時にも「得点」が入るようにしてみましょう。
(ヒント)「EnemyHealth」スクリプトを参考に「DestroyObject」スクリプトの中身を修正する。