超初心者のゲーム開発記~Unity~

超初心者がUnityでゲーム(目標はAndroidアプリ )を開発していくブログです!

【Unity公式チュートリアル】 サバイバルシューター part.10 スコア機能を作る!

こんにちは!ヤギです!

Unity公式チュートリアルのサバイバルシューターをやってみるpart.10になります。

記事概要

今回の記事では、スコア機能の作り方についてご説明していきます。
敵を倒した時に、画像のようなスコアが表示されるUIを作っていきます。
f:id:yagigame:20181118203102p:plain
※part.10に対応する公式チュートリアルは、
Scoring points - Unityとなります。
※前回の記事はこちら
www.yagigame.com

スコア表示用UIの作成

まず初めに、スコアを表示するUIを作ります。
1. Canvasを右クリックし、Create > UI > Textを選択し、名前をScoreTextとしてCanvasの子に作成します。
f:id:yagigame:20181118173622p:plain
2. ScoreText > Inspector > Anchorをクリックし、真ん中上を選択します。
f:id:yagigame:20181118173819p:plain
3. ScoreTextのInspectorを以下の内容で設定していきます。
・PosY > -55
・Width > 300
・Height > 50
・Text > Score: 0
・Font > LuckiestGuy
・Font Size > 50
・Alignment > 真ん中
・Color > 白
f:id:yagigame:20181118202556p:plain
4. ScoreText > Inspector > Add ComponentでShadowコンポーネントを追加します。
5. ShadowのInspectorを以下の内容で設定していきます。
・Effect Distance x > 2
・Effect Distance y> 2
f:id:yagigame:20181118202943p:plain
※これでスコアを表示する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化しておきます。
f:id:yagigame:20181118204720p:plain

実行してみましょう!

敵を倒した時に、スコアが加算されて表示されていれば大成功です!
https://yagigameblog.tumblr.com/post/180236183932/unity公式チュートリアル-サバイバルシューター-part10-スコア機能を作る

次回予告

次回は、敵の自動生成機能(敵のスポーン機能)を作成していきます!
※次回の記事はこちら
www.yagigame.com
次回に対応する公式チュートリアルは、「Spawning Enemies」です!

読んでいただきありがとうございました!