簡単なカードゲームの作成(カイジのEカード風)。Part4.対戦相手のカードをランダム選択|Unityゲーム制作

簡単なカードゲーム作成のPart4を進めていきます。今回は「対戦相手(敵)のカードをランダムに選択」するのを実装していきます。

はじめに

今回は第4回目です。第1回目は下記から。

Part1は「仮でカードの生成」を作成、Part2は「カードの配布とカードをクリックして選択」するのを作成、Part3では「カードを場に出す」、「対戦相手のカード配布」を作成しました。Part4では「対戦相手のカードを自動でランダムに選択」を実装していきます。

ゲーム作成開始

前回は「相手(敵)のカードをセットする」ところまで実装しました。今回は敵カードが「ランダムで選択される」のを実装していきます。

カードをランダムに選ぶ

現在の開始画面は下記のような感じです。

今回、実装するのは上に配置された敵カードから「ランダムに1枚選択して場に出す」というものです。

実験的に実装

まずは新規でスクリプトを追加します。名前は「Enemy」としておきます。

追加したスクリプトを下記のように変更。「敵陣地にあるカードをリスト化」、「ランダムにカードを選んで位置を変更(場に出す)」という感じですね。まずはStart内に記述します。

using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    List<GameObject> EmCardlist = new List<GameObject>();

    void Start()
    {
        foreach (Transform child in transform)
        {
            EmCardlist.Add(child.gameObject);
        }
        int r = Random.Range(0, EmCardlist.Count - 1);
        EmCardlist[r].transform.localPosition = new Vector3(70, -250, 0);
    }
}

EmCardsに追加して実行してみます。

ランダムにカードが選ばれて、場に出ていればOK。

補足:スクリプトの実行順序

今回のように動作確認のためStartで実行した場合、うまく動かないことがあります。

理由は簡単で、EnemyスクリプトのStartで「別スクリプトのStartで生成」したものを利用しているからです。この場合、「カードを生成」した後に、「カードを選択」を実行するように順番を指定する必要があります。

「Edit」から「Project Settings…」を選択します。

「Script Execution Order」を選択。「+」からスクリプトを追加します。数値が低い方から実行されるので、「カード生成(Operator)」→「カード選択(Enemy)」となるようにセットしておきます。

実行してみて「カードがランダムに自動で選択」されていたらOKです。

ボタンを押したらに変更

次に、この「ランダムにカードが選ばれる」というのを、Startではなく、ボタンを押してから動くように変更します。StartをEnemyCardSelectに変更します。

using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    List<GameObject> EmCardlist = new List<GameObject>();

    public void EnemyCardSelect()
    {
        foreach (Transform child in transform)
        {
            EmCardlist.Add(child.gameObject);
        }
        int r = Random.Range(0, EmCardlist.Count - 1);
        EmCardlist[r].transform.localPosition = new Vector3(70, -250, 0);
    }
}

「Operator」スクリプトに「OpenCard」を追加します。この中でEnemyCardSelectを実行するようにします。

using UnityEngine;
using UnityEngine.UI;

public class Operator : MonoBehaviour
{
    public GameObject CardPrefab;
    public GameObject Cards;
    public GameObject EmCards;

    private float ad_y_pos = 50.0f;
    private Enemy enemyobj;

    private void Start()
    {
        // Player
        // 省略

        // Enemy
        // 省略

        enemyobj = EmCards.GetComponent<Enemy>();

    }

    void dealCards(int number,float position,GameObject parent,float adpos)
    {
        // 省略
    }

    public void OpenCard()
    {
        enemyobj.EnemyCardSelect();
    }
}

「OpenCard」はOPENボタンのクリック時の動作に追加します。

これで一回実行してみます。OPENボタンを押した時に「敵のカードが自動で選択され、場に提出」されればOKです。

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