簡単なカードゲーム作成のPart2を進めていきます。今回は「カードの配布」と「カードの選択」をしていきます。
はじめに
前回の続きのPart2を作成していきます。Part1は下記から。
Part1の前回は仮でカードの生成を作成しました。Part2の今回はカードの配布とカードをクリックで選択を実装していきます。
ゲーム作成開始
前回は「スクリプトでカードを生成」まで行ったので、その続きから進めていきます。まずは「複数枚のカードを配る」を作成していきます。
カードを配布する位置を指定
カードを配る位置は、画面下の赤枠辺りです。ここが自分のフィールド(手札)の場所としていきます。
まずは自軍のカードフィールドを設定していきます。Canvas配下にCardsという名前で「空のオブジェクトを追加」、位置を下の方にします。
Operatorのスクリプトを下記に変更して、Canvas配下からCards配下に生成するように変更。ついでにカードの位置も指定しておきます。
using UnityEngine; public class Operator : MonoBehaviour { public GameObject CardPrefab; public GameObject Cards; private void Start() { GameObject objCard = (GameObject)Instantiate(CardPrefab); objCard.transform.SetParent(Cards.transform, false); } }
Operatorの変数にセットするオブジェクトもCanvasからCardsに変更します。
これで一度実行して無事にCards配下にCardが生成されて画面に表示されればOKです。
テキストの変更
次にカード番号を変更します。スクリプトに1文追加するだけでOKです。
using UnityEngine; using UnityEngine.UI; public class Operator : MonoBehaviour { public GameObject CardPrefab; public GameObject Cards; private void Start() { GameObject objCard = (GameObject)Instantiate(CardPrefab); objCard.transform.SetParent(Cards.transform, false); objCard.transform.Find("Text").GetComponent<Text>().text = "1"; } }
後は複数枚カードを配るようにスクリプトを変更していきます。ざっくりと下記の感じ。
- カード配布を関数化
- パラメータでカード番号とカード位置を渡す
- スタート関数でカードの枚数分、カード配布関数を呼び出し
カードの初期配布
スクリプトを下記のように変更。とりあえず何をしているか分かるような形にしてあります。
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 number,float position) { GameObject objCard = (GameObject)Instantiate(CardPrefab); objCard.transform.SetParent(Cards.transform, false); objCard.transform.Find("Text").GetComponent<Text>().text = number.ToString(); objCard.transform.localPosition = new Vector3(position, 50, 0); } }
スクリプトを変更したら実行してみます。画面にカードが5枚配られて、良い感じの場所にカードがあればOK
カードの選択
次に「カードを選択した時にイベントが動く」ようにします。Cardプレハブに「BoxCollider 2D」と「EventTrigger」を追加します。
スクリプトの作成
クリックした時に動くスクリプトを作成していきます。CardScriptという名前で新規作成します。
スクリプト内で色々おこないますが、まずは「クリックしたのはどのカードか」を明確にしていきます。下記のようにCardScriptを作成します。
using UnityEngine; using UnityEngine.UI; public class CardScript : MonoBehaviour { public void ChoiceCard() { string num = this.transform.Find("Text").GetComponent<Text>().text; Debug.Log("Number" + num); } }
選択したカードのカード番号を取得し、確認のためDebugログで出力しています。
スクリプトをCardPrefabに追加して、イベントトリガーにPointerClickを追加し、ChoiceCard関数を呼び出すようにします。
実行してみて、選択したカードによってコンソールに表示される「カード番号」が変わっていればOKです。
今回で、「カードの初期配布」と「カードの選択」まで完成です。