Unity|カードゲームの作成(ローグライク)。Part2.カード管理

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

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です。

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

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