Unity2Dでカードゲーム(ローグライク)を作成のPart2です。
はじめに
前回の続きのPart2を作成していきます。Part1は下記から。
前回は「スクリプトでカードを生成」しました。Part2ではカードの生成位置を調整し、カード全体を管理をするスクリプトを作成していきます。
ゲーム作成開始
「カードを配るスクリプト」と「カードを管理するスクリプト」を作成していきます。
手札の位置を調整
空オブジェクトを追加して名前を「HandPosition」に変更します。カード(手札)の中心位置にPositionを変更します。

新規でスクリプトを追加します。名前は「HandCreate」とします。スクリプトを下記に変更、このスクリプト内でカードを生成します。
using UnityEngine;
public class HandCreate : MonoBehaviour
{
[SerializeField] private Card cardPrefab;
private void Start()
{
Card newCard = Instantiate
(cardPrefab, transform.position, Quaternion.identity, transform);
HandManager.Instance.AddCard(newCard);
}
}
Part1で作成した「HandManager」スクリプトは下記に変更します。生成したカードをリスト型で管理します。カードの位置調整もこのスクリプト内で行います。
using UnityEngine;
using System.Collections.Generic;
public class HandManager : MonoBehaviour
{
public static HandManager Instance { get; private set; }
[SerializeField] private float cardSpacing = 3.0f;
private List<Card> cards = new();
private void Awake()
{
Instance = this;
}
public void AddCard(Card newCard)
{
cards.Add(newCard);
UpdateHand();
}
private void UpdateHand()
{
int cardCount = cards.Count;
//center
float totalWidth = (cardCount - 1) * cardSpacing;
float startX = -totalWidth / 2f;
for (int i = 0; i < cardCount; i++)
{
float xPos = startX + (i * cardSpacing);
cards[i].transform.localPosition = new Vector3(xPos, 0f, 0f);
}
}
}
HandPositionに「HandCreate」スクリプトを追加。パラメータにカードプレハブをセット。

HandManagerスクリプトを追加。パラメータは隣り合うカードの隙間の幅です。

実行して、カードが指定位置に生成されたらOKです。
複数枚を生成
「HandCreate」スクリプトを仮で下記の様に変更します。
using UnityEngine;
public class HandCreate : MonoBehaviour
{
[SerializeField] private Card cardPrefab;
private void Start()
{
Card newCard = Instantiate
(cardPrefab, transform.position, Quaternion.identity, transform);
Card newCard2 = Instantiate
(cardPrefab, transform.position, Quaternion.identity, transform);
Card newCard3 = Instantiate
(cardPrefab, transform.position, Quaternion.identity, transform);
HandManager.Instance.AddCard(newCard);
HandManager.Instance.AddCard(newCard2);
HandManager.Instance.AddCard(newCard3);
}
}
下記の様に3枚生成されたらOKです。

「カード生成スクリプト」、「手札管理スクリプト」に分けた感じです。
