【Unity ゲーム制作】神経衰弱ゲームを作ろう!〜その7 (カードを2枚選択したら)
スポンサーリンク
前回はカードを選択した時の処理を作りました!
今回はカードを2枚数選択した時の処理を実装していきましょう!
選択したカードを管理するクラスを作ろう!
神経衰弱は2枚とも同じカードを選択していたらカードを獲得できるゲームですね。
そのためにはプレイヤーが選択したカードIDを保管しておく必要があります。
せっかくなので、今回はシングルトンクラスを作成し、選択したカードIDの管理をしてもらいましょう。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameStateController : MonoBehaviour { // 選択されたカードIDリスト public List<int> SelectedCardIdList = new List<int> (); // シングルトンの生成 private static GameStateController mInstance; public static GameStateController Instance { get { // インスタンスが生成されていない場合、自動で生成する if (mInstance == null) { GameObject obj = new GameObject ("GameStateController"); mInstance = obj.AddComponent<GameStateController> (); } return mInstance; } } }
GameStateController.csを作成し、処理を記述してください。
では、前回作成した 「Card.cs」のOnClick()関数に選択したカードIDをGameStateControllerに保管する処理を記述します!
カード.csの部分
/// <summary> /// 選択された時の処理 /// </summary> public void OnClick () { // カードが表面になっていた場合は無効 if (this.mIsSelected) { return; } Debug.Log ("OnClick"); // 選択判定フラグを有効にする this.mIsSelected = true; // カードを表面にする this.CardImage.sprite = this.mData.ImgSprite; // 選択したCardIdを保存しよう! GameStateController.Instance.SelectedCardIdList.Add (this.mData.Id); }
GameStateController.Instance.SelectedCardIdList.Add()にthis.mData.Idを追加しています。
これでGameStateControllerに選択したカードIDを保管することができました。
次は、「選択したカード枚数が2枚数以上になった場合」の処理を記載しましょう。
そのためには、「ゲーム全体を管理するクラス」を作成し、そこに処理を記載したいと思います。
GameSceneManager.csを作成しよう!
まずは GameSceneManager.cs を作成し、Hierarchyにある「GameSceneManager」にアタッチしましょう!
そうしたら、GameSceneManagerのUpdate関数に以下の処理を記述します。
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameSceneManager : MonoBehaviour { // 一致したカードリストID private List<int> mContainCardIdList = new List<int> (); void Update () { // 選択したカードが2枚以上になったら if (GameStateController.Instance.SelectedCardIdList.Count >= 2) { // 最初に選択したCardIDを取得する int selectedId = GameStateController.Instance.SelectedCardIdList[0]; // 2枚目にあったカードと一緒だったら if (selectedId == GameStateController.Instance.SelectedCardIdList[1]) { Debug.Log ($"Contains! {selectedId}"); // 一致したカードIDを保存する this.mContainCardIdList.Add (selectedId); } // 選択したカードリストを初期化する GameStateController.Instance.SelectedCardIdList.Clear (); } } }
「.SelectedCardIdList.Count 」は、リストに保管されている要素数を取得できます。
そして、最初に選択したCardIdと、次に選択したCardIdが一緒だった場合、 this.mContainCardIdListに選択したカードIDを保管しています。
this.mContainCardIdList は 「獲得したカードIDを保管するリスト」になります。
こちらは次回以降で活用していきます!
最後に 「 GameStateController.Instance.SelectedCardIdList.Clear ()」を宣言しています。
こちらは 「SelectedCardIdList」の中身を初期化する処理です。
では、Gameを起動して動作を見てみましょう!
同じカードが選択したら専用のLogが表示されれば成功です!。