Unity|カードゲームの作成(ローグライク)。Part4.カードをランダムに選んで配る

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

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

はじめに

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

前回まで「スクリプトでカード生成」、「カードを管理するスクリプト作成」、「カードの使用」を作成しました。Part4ではカードをランダムに選択して配ります。

カードのランダム化

カードを複数枚用意し、用意したカードからランダムに選出して配ります。Scriptableobjectを利用していきます。

ゲーム作成開始

ScriptableObjectの作成

Project内に「Scripting」→「ScriptableObjectScript」を追加します。

スクリプトの中身を下記に変更します。カード情報としてコストとダメージを保持します。リスト化してカード情報を管理。「GetCardInfo」はテストでカード情報の1番目を返すようにしています。

using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "CardTable", menuName = "Scriptable Objects/CardTable")]
public class CardTable : ScriptableObject
{
    [SerializeField] private List<Item> cardInfo;

    public Item GetCardInfo()
    {
        return cardInfo[0];
    }
}

[System.Serializable]
public class Item
{
    public int cost;
    public int damage;
}

Assetsフォルダ内に「Data」フォルダを作成、「ScriptableObjects」→「CardTable」を追加します。

Inspector画面でカード情報を入力します。まずはテストで「コスト1、ダメージ2」のカードを1枚用意します。

Cardスクリプトの「TEST」とコメントした箇所を下記に変更します。

    [SerializeField] private CardTable cardTable;

    private void Start()
    {
        // TEST
        Item item = cardTable.GetCardInfo();
        cost = item.cost;
        damage = item.damage;

        cost_Text.text = cost.ToString();
        damage_Text.text = damage.ToString();

        cam = Camera.main;
    }

CardPrefabのCardスクリプトのCardTableパラメータをセットします。

実行して下記の様にカードが表示されたらOK

CardTableを下記の様に複数用意します。

CardTableスクリプトを下記の様に変更、ランダムにカードを選択して返します。

using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "CardTable", menuName = "Scriptable Objects/CardTable")]
public class CardTable : ScriptableObject
{
    [SerializeField] private List<Item> cardInfo;

    public Item GetCardInfo()
    {
        int index = Random.Range(0, cardInfo.Count);
        return cardInfo[index];
    }
}

[System.Serializable]
public class Item
{
    public int cost;
    public int damage;
}

実行するたびに異なるカードが表示されたらOK。カード情報に画像や色などを追加することで、更に異なるカード感を出すことが出来ます。

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