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

