Unity|カードゲームの作成(ローグライク)。Part6.カードを引く・ゲームクリア

当ページのリンクには広告が含まれています。

Unity2Dでカードゲーム(ローグライク)を作成のPart6です。

はじめに

前回の続きのPart6を作成していきます。Part5は下記から。

前回まで「スクリプトでカード生成」、「カードを管理するスクリプト作成」、「カードの使用」、「カードをランダムに選択して配る」、「カードを複数枚配る・カードの手札位置を更新」を作成しました。

今回は「カードを引く(カードをドロー)」「ゲームクリア」を実装していきます。

ゲーム作成開始

まずはカードを引くのを作成します。今回は敵を倒したらカードを追加します。

スクリプトの修正

HandManagerに「DrawCard」を追加します。Start内の初期カードを配る部分を「DrawCard」に変更します。

public class HandManager : MonoBehaviour
{

    //省略

    private void Start()
    {
        handcreate = FindAnyObjectByType<HandCreate>();
        DrawCard(cardInitNum);
    }

    public void DrawCard(int num)
    {
        for (int i = 0; i < num; i++)
        {
            cards.Add(handcreate.CreateCard());
            UpdateHand();
        }
    }
    
    //省略

}

Enemyスクリプトの「TakeDamage」を変更します。敵を倒した時にカードを1枚追加。ライフを丁度0で倒した場合、更に1枚追加します。

public class Enemy : MonoBehaviour
{
    //省略

    public void TakeDamage(int amount)
    {
        health -= amount;

        if (health == 0)
        {
            HandManager.Instance.DrawCard(1);
            health = -1;
        }

        if (health < 0)
        {
            HandManager.Instance.DrawCard(1);
            Destroy(gameObject);
        }

        HealthUpdate();

    }

    //省略

}

Hierarchyに空オブジェクトを追加して「Enemies」という名前に変更。配下にenemyを移動、コピーして増やしておきます。

実行して下記の様に倒した時にカードをドローしたらOK。

ゲームクリアを仮作成

敵を全て倒した時に仮のゲームクリアを設定します。実際にはリフレッシュ、ステージを切り替えるなどになりますが一旦仮で設定します。

Hierarchyに空オブジェクトを追加して名前を「GameManager」に変更。同じ名前でスクリプトを作成します。

スクリプトを下記に変更します。アクティブな敵がいない場合クリアとします。

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance { get; private set; }
    [SerializeField] private Transform Enemies;

    private void Awake()
    {
        Instance = this;
    }
    public void CheckEnemies()
    {
        foreach (Transform enemy in Enemies)
        {
            if (enemy.gameObject.activeSelf)
            {
                return;
            }
        }
        Debug.Log("CLEAR");
    }
}

GameManagerスクリプトのパラメータに敵の親オブジェクトを指定します。

Enemyスクリプトを変更します。Destroyで破棄している部分を「SetActive(false)」に変更します。

public class Enemy : MonoBehaviour
{

    //省略

    public void TakeDamage(int amount)
    {
        health -= amount;

        if (health == 0)
        {
            HandManager.Instance.DrawCard(1);
            health = -1;
        }

        if (health < 0)
        {
            HandManager.Instance.DrawCard(1);
            this.gameObject.SetActive(false);
            GameManager.Instance.CheckEnemies();
        }
        HealthUpdate();
    }
    //省略
}

実行して、敵キャラを全て倒してログが表示されたらOKです。

タイトルとURLをコピーしました