Unity|カードゲームの作成(ローグライク)。Part5.カードを複数枚配る・カード手札位置を更新

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

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

はじめに

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

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

ゲーム作成開始

初期で配るカード枚数をパラメータで指定できるようにします。

カードを配るスクリプトの修正

HandCreateスクリプトを下記に変更します。カードをインスタンス化して戻り値で返します。

using UnityEngine;

public class HandCreate : MonoBehaviour
{
    [SerializeField] private Card cardPrefab;

    public Card CreateCard()
    {
        Card newCard = Instantiate
            (cardPrefab, transform.position, Quaternion.identity, transform);
        return newCard;
    }
}

HandManagerスクリプトに「Start」を追加。パラメータで追加した数のカードを初期で配ります。

using UnityEngine;
using System.Collections.Generic;

public class HandManager : MonoBehaviour
{
    public static HandManager Instance { get; private set; }

    [SerializeField] private float cardSpacing = 3.0f;
    [SerializeField] private int cardInitNum = 5;

    private List<Card> cards = new();
    private HandCreate handcreate;

    private void Awake()
    {
        Instance = this;
    }
    private void Start()
    {
        handcreate = FindAnyObjectByType<HandCreate>();

        for (int i = 0; i < cardInitNum; i++)
        {
            cards.Add(handcreate.CreateCard());
            UpdateHand();
        }

    }
    private void UpdateHand()
    {
         //省略
    }
}

実行したとき、下記の様にカードが配られたらOKです。

指定したパラメータで初期に配られる枚数が変わります。

手札カード位置を更新

カードを利用したときに歯抜け状態になるので、カード利用後は手札の位置を更新するように変更します。

HandManagerスクリプトに「RemoveCard」を追加します。手札のカードリストから指定カードを削除。

using UnityEngine;
using System.Collections.Generic;

public class HandManager : MonoBehaviour
{

    //省略

    public void RemoveCard(Card card)
    {
        cards.Remove(card);
        UpdateHand();
    }
}

Cardスクリプトの「OnMouseUp」を下記に変更してカードをリストから削除します。

public class Card : MonoBehaviour
{
   //省略

   private void OnMouseUp()
    {
        if (enemy != null)
        {
            enemy.TakeDamage(damage);
            HandManager.Instance.RemoveCard(this);
            Destroy(gameObject);

        }
        else
        {
            transform.position = initPos;
        }
    }

    //省略

}

実行して下記の様にカード利用後に手札の位置が更新されたらOK

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