unityを使ってゲーム制作をしていくpart3。
色々手直しをした回。
今回やったこと。
- SingletonMonoBehaviourの作成
- フラグを管理するクラス(シングルトン)の作成
- カードをクリックするとイベントが発生する
- 特定のカードだけクリックできるようにする
仕様
前にある3枚から1枚だけ選択できるようにする。
他のカード(敵のカードも含め)はクリックできないようにする。
フラグ管理するクラスを作成
敵のターンなどはカードをクリックできなくしたかったので、フラグ(ゲームの状態)を管理できるクラスを作成する。
参考にしたサイトは以下。

脱出ゲームを作ってみる(フラグ管理) - テラシュールブログ
ニコ生で脱出ゲームを作っていたのが面白そうだったので、自分も作ってみた。 【雑談】Unityプロ求む-脱出ゲー作り- (番組ID:lv178561943)とりあえず動かすだけなら、「フラグ管理」「カメラ切替」「イベント制御」だけで何とかなりそうな印象だったのでそこだけ作った。もう少し拘る場合はイベント発動中にアニメーシ...
Unityでゲームのフラグ管理 - テラシュールブログ
ちょっと聞かれたのでUnityでフラグ管理について。 これの続きです。 tsubakit1.hateblo.jp フラグ管理と聞けば面倒なように聞こえるが、要するに何処からでもアクセス出来るようなクラスに値を持たせておくだけでOKだ。後はifやswitchで必要になった時に確認すれば良い。色々考えたが、やはりシンプルな...

【Unity】なんちゃらManagerクラスを作ろう(シングルトン)
UnityC#でシングルトンなManagerクラスを作ります。
SingletonMonoBehaviourというシングルトン(オブジェクトが一つであることを確約する)を作成。
フラグ管理はどこからでもアクセスできるクラスに持つといいと書いてあったので真似してSingletonMonoBehaviourをインタフェースに持つGameInfoManagerクラスを作成。
参考サイトではディクショナリーでフラグ管理をしていたが、フラグの規模や数がどれくらいになるかわからないのでとりあえず変数で持つことにする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using UnityEngine; public class SingletonMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour { private static T instance; public static T Instance { get { if (instance == null) { instance = (T)FindObjectOfType(typeof(T)); if (instance == null) { Debug.LogError(typeof(T) + "is nothing"); } } return instance; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameInfoManager : SingletonMonoBehaviour<GameInfoManager> { // ゲーム進行を管理するステータス public int status; public void Awake() { if (this != Instance) { Destroy(this); return; } DontDestroyOnLoad(this.gameObject); } } |
自分のカードだけクリックできるようにする
特定のカードだけクリックできるようにするにはどうしたらいいのかよくわからなかったので検索。以下の回答を参考にする。
クリック時にif文で条件を満たした場合のみ処理を行うようにした。

マウスのクリックを無効化する方法を教えてください!|teratail
前提・実現したいこと``` マウスのクリックを無効化する方法を教えてください 現在書いているスクリプトは以下です。 using UnityEngine; using System.Collections; public class LockCursor&
CardのprefabにCardEventスクリプトを作成してアタッチする。
コンポーネントのEventTriggerを追加。
PointerClickにCardEventのOnclickメソッドと関連付ける。
Cardスクリプトに領域を管理する項目を追加する。
Utilityクラスにクリックチェックメソッドを作成。
Onclickメソッドにif文を記述して、自分の手札のカードだけクリックできるようにする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CardEvent : MonoBehaviour { Vector3 scale; void Start() { scale = this.gameObject.transform.localScale; } public void Onclick () { // クリックされたカードのフィールド情報を取得 int field = this.gameObject.GetComponent<Card>().Field; int num = this.gameObject.GetComponent<Card>().Number; // ゲームの進行状況によって対象のカードがクリックできるか判別する if(Utility.CheckClickCard(GameInfoManager.Instance.status, field)) { // ゲームの進行状況によってクリック時の処理を変更する // PHASE_1_Pの場合 if ((int)Status.PHASE_1_P == GameInfoManager.Instance.status) { var moveHash = new Hashtable(); moveHash.Add("position", new Vector3(60f, 45f, 0f)); iTween.MoveTo(this.gameObject, moveHash); iTween.ScaleTo(this.gameObject, iTween.Hash("x", scale.x + 2, "y", scale.y + 2, "z", scale.z + 2, "time", 2)); } } Debug.Log("クリックテスト領域:" + field + " " + num); } } |
他には、OnePokerManagerを少しいじる。
敵のカードも配置するように修正。
リストでCardクラスを保持していたのをCardオブジェクトを保持するように修正。
enumでゲーム進行を管理するStatusと領域の管理をするFieldを追加。
コメント