【Unity公式チュートリアル】 サバイバルシューター part.10 スコア機能を作る!
こんにちは!ヤギです!
Unity公式チュートリアルのサバイバルシューターをやってみるpart.10になります。
記事概要
今回の記事では、スコア機能の作り方についてご説明していきます。敵を倒した時に、画像のようなスコアが表示されるUIを作っていきます。
※part.10に対応する公式チュートリアルは、
Scoring points - Unityとなります。
※前回の記事はこちら
www.yagigame.com
スコア表示用UIの作成
まず初めに、スコアを表示するUIを作ります。1. Canvasを右クリックし、Create > UI > Textを選択し、名前をScoreTextとしてCanvasの子に作成します。
2. ScoreText > Inspector > Anchorをクリックし、真ん中上を選択します。
3. ScoreTextのInspectorを以下の内容で設定していきます。
・PosY > -55
・Width > 300
・Height > 50
・Text > Score: 0
・Font > LuckiestGuy
・Font Size > 50
・Alignment > 真ん中
・Color > 白
4. ScoreText > Inspector > Add ComponentでShadowコンポーネントを追加します。
5. ShadowのInspectorを以下の内容で設定していきます。
・Effect Distance x > 2
・Effect Distance y> 2
※これでスコアを表示するUIが完成しました!
スコアを表示するスクリプトの作成
スコアを表示するスクリプトを作成していきます。1. Project > Scripts > Manager > ScoreManagerをHierarchy > ScoreTextにドラッグし適用します。
2. ScoreManager.csを作成していきます。
※ソース内に解説を記載いたしました。
using UnityEngine; using UnityEngine.UI; using System.Collections; public class ScoreManager : MonoBehaviour { //スコア public static int score; //スコア表示用のテキスト Text text; void Awake () { //テキストコンポーネントのとの取得 text = GetComponent <Text> (); //スコアの初期化 score = 0; } void Update () { //テキストコンポーネントのテキストに表示する文字列を設定 text.text = "Score: " + score; } }
EnemyHealth.csの修正
EnemyHealth.csのStartSinking関数に、敵を倒した時にスコアを加算する処理を追加します。using UnityEngine; public class EnemyHealth : MonoBehaviour { public int startingHealth = 100; //敵のHPの初期値 public int currentHealth; //敵の最新のHP public float sinkSpeed = 2.5f; //敵の消滅時間 public int scoreValue = 10; //敵を倒した時のスコア public AudioClip deathClip; Animator anim; //アニメータ AudioSource enemyAudio; //敵の効果音 ParticleSystem hitParticles; //攻撃された時のエフェクト CapsuleCollider capsuleCollider; //Collider bool isDead; //敵が倒されたかフラグ bool isSinking; //敵の消滅フラグ void Awake () { //コンポーネントの設定 anim = GetComponent <Animator> (); enemyAudio = GetComponent <AudioSource> (); hitParticles = GetComponentInChildren <ParticleSystem> (); capsuleCollider = GetComponent <CapsuleCollider> (); //最新のHPを初期化 currentHealth = startingHealth; } void Update () { //消滅フラグがオンの場合 if(isSinking) { //敵が沈んでいく transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime); } } //攻撃を受けた時の処理 public void TakeDamage (int amount, Vector3 hitPoint) { //倒されたフラグがオンの場合 if(isDead) return; //攻撃を受けた時の音を鳴らす enemyAudio.Play (); //HPを減らす currentHealth -= amount; //攻撃を受けた時のエフェクトを表示する hitParticles.transform.position = hitPoint; hitParticles.Play(); //敵のHPが0以下になった場合 if(currentHealth <= 0) { //敵が倒される Death (); } } //敵が倒された場合の処理 void Death () { //敵が倒されたかフラグをオンにする isDead = true; capsuleCollider.isTrigger = true; //倒された時のアニメーショントリガーをオンにする anim.SetTrigger ("Dead"); //倒された時の効果音を設定する enemyAudio.clip = deathClip; //敵が倒された時の効果音を鳴らす enemyAudio.Play (); } //敵を消滅させる処理 //Zombunnyのアニメーション(Death)の中から呼び出されます //この呼び出す設定は既に完了しています public void StartSinking () { //NavMesh Agentコンポーネントをオフにする GetComponent <UnityEngine.AI.NavMeshAgent> ().enabled = false; //RigidbodyコンポーネントのKinematicをオンにする(重力の効果を受けない) GetComponent <Rigidbody> ().isKinematic = true; //消滅フラグをオンにする isSinking = true; //スコアを加算する ScoreManager.score += scoreValue; //敵のオブジェクトを破壊する Destroy (gameObject, 2f); } }
※これで敵を倒した時に、スコアが加算されます。
2. Zombunnyも完成したため、Hierarchy > ZombunnyをProject > Prefabsフォルダにドラックし、Prefab化しておきます。
実行してみましょう!
敵を倒した時に、スコアが加算されて表示されていれば大成功です!次回予告
次回は、敵の自動生成機能(敵のスポーン機能)を作成していきます!※次回の記事はこちら
www.yagigame.com
次回に対応する公式チュートリアルは、「Spawning Enemies」です!
読んでいただきありがとうございました!