簡単なカードゲーム作成の第2回目を進めていきます。今回は「カードの配布」と「カードの選択」をしていきます。
はじめに
前回の続きの第2回目です。第1回目は下記から。
ゲーム作成開始
前回は「スクリプトでカードを生成」まで行ったので、その続きから進めていきます。まずは「複数枚のカードを配る」を作成。
カードを配布する位置を指定
カードを配る位置は、画面下の赤枠辺りです。ここが自分のフィールド(手札)の場所です。

まずは自軍のカードフィールドを設定していきます。Canvas配下にCardsという名前で「空のオブジェクトを作成」、位置を下の方にします。

Operatorのスクリプトを変更し、Canvas配下からCards配下に生成するように変更。ついでにカードの位置も指定しておきます。

Operatorの変数にセットするオブジェクトもCanvasからCardsに変更。

これで一度実行。無事、Cards配下にCardが生成されて画面に表示されればOK


テキストの変更
次にカード番号を変更します。スクリプトに1文追加するだけでOK

後は複数枚カードを配るようにスクリプトを変更していきます。ざっくりと下記の感じ。
- カード配布を関数化
- パラメータでカード番号とカード位置を渡す
- スタート関数でカードの枚数分、カード配布関数を呼び出し
スクリプトを下記のように変更。実際はもっと綺麗にした方がいいけど、とりあえずどこで何をしているか一目で分かるように。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Operator : MonoBehaviour { public GameObject CardPrefab; public GameObject Cards; private void Start() { dealCards(1,-500); dealCards(2, -250); dealCards(2, 0); dealCards(2, 250); dealCards(3, 500); } void dealCards(int iNumber,float fPosition) { GameObject prefab = (GameObject)Instantiate(CardPrefab); prefab.transform.Find("Text").GetComponent<Text>().text = iNumber.ToString(); prefab.transform.SetParent(Cards.transform, false); prefab.transform.localPosition = new Vector3(fPosition, 0, 0); } }
スクリプトを変更したら実行。画面にカードが5枚配られて、良い感じの場所にカードがあればOK

カードの選択
次に「カードを選択した時にイベントが動く」ようにします。Cardのプレハブに「2Dボックスコライダー」と「イベントトリガー」を追加。


クリックした時に動くスクリプトを作成していきます。Cardプレハブに「新しいスクリプトを追加」。名前はCardScriptにでもしておきます。

このスクリプト内で色々おこないますが、まずは「クリックしたのはどのカードか」を明確にしていきます。下記のようにCardScriptを作成。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CardScript : MonoBehaviour { public void ChoiceCard() { string strNum = this.transform.Find("Text").GetComponent<Text>().text; Debug.Log("Number"+strNum); } }
選択したカードのカード番号を取得し、確認のためDebugログで出力しているだけです。
イベントトリガーにPointerClickを追加し、ChoiceCard関数を呼び出すようにします。

実際に実行して、選択したカードによってコンソールに表示される「カード番号」が変更していればOK

今回で、「カード複数枚配布」と「カードの選択」まで完成。