今回は、プレーヤーにHPをつけて画面に表示する方法です。
1)HPを画面に表示する準備
まずはHPを画面に表示する準備です。
・「Canvas」を右クリック→「UI」を選択→「Text」を選択してクリック。
・名前は「TankHP」に変更しましょう。
・「表示する位置」はどこでも構いません。
・「テキストの大きさ(Font Size)」と「テキストの色(Color)」も自分の好みに変更してください。
さあこれで、HPを表示する画面の準備ができました。
2)スクリプの作成
・「C#スクリプト」を1つ作成してください。
・名前は「TankHealth」に変更しましょう。
・下記を参考にコードを記載してください。
*今回はTnakのHPが0になったら、ゲームが再びスタートするように設定してあります。
using UnityEngine; using System.Collections; // ★下記2つを追加すること using UnityEngine.UI; using UnityEngine.SceneManagement; public class TankHealth : MonoBehaviour { public GameObject effectPrefab1; public GameObject effectPrefab2; public int tankHP; public Text tankHPLabel; void Start(){ tankHPLabel.text = "HP: " + tankHP; } void OnCollisionEnter(Collision other){ if(other.gameObject.CompareTag("EnemyShell")){ tankHP -= 1; tankHPLabel.text = "HP: " + tankHP; if(tankHP > 0){ GameObject effect1 = Instantiate(effectPrefab1, transform.position, Quaternion.identity) as GameObject; Destroy(effect1, 1.0f); Destroy(other.gameObject); } else { GameObject effect2 = Instantiate(effectPrefab2, transform.position, Quaternion.identity) as GameObject; Destroy(effect2, 1.0f); Destroy(other.gameObject); // HPが0になったらTank(プレーヤー)を画面から消す gameObject.SetActive(false); // 3秒後に「SceneChange」のスクリプトを呼び出す Invoke("SceneChange", 3.0f); } } } // 「Mian」シーンに再び戻るメソッド(命令ブロック) void SceneChange(){ SceneManager.LoadScene("Main"); } }
・コードが書けたらチェック。
*「Enemy Shell」プレファブに「EnemyShell」の「Tag」を付けましょう。
・チェックが完了したら、「TankHealth」スクリプトを「Player(Tank)」オブジェクトに付けましょう。
・「Tank HP Label」の空欄に「Tank HP」をドラッグ&ドロップ。
*「Effect Prefab1」と「Effect Prefab2」(爆発のエフェクト)の項目は自分で好きなように設定してみましょう。
3)Tank(Player)にコライダーコンポーネントを設置
・当たり判定をとるためには「コライダー」が必要ですので「親オブジェクト」に設置しましょう。
・Tank(プレーヤー)をすっぽり囲むように「大きさ」と「位置」を調整してください。
*今回は「OnCollisionEnter」で書いているので「Is Trigger」のチェックは不要です。
・設定が完了したら「再生ボタン」をクリック。
・画面にプレーヤーのHPが表示されて、敵の攻撃を受けるたびに数が減少する。
・同時に爆発のエフェクトが出る。そして、HPが0になったら画面からプレーヤーが消える。
・そして3秒後にゲームがリスタートする。
ここまでできたら成功です。
(リスタートした時、画面が暗くなる場合の解消方法)
・「Window」をクリック→「Lighting」をクリック
・「Auto」のチェックを外す→「Build」を押す。