前提・実現したいこと
神経衰弱ゲームを制作中です。
場のカードが全てなくなると、カードを再配布してゲームを継続させる機能を実装しようとしています。
現在、カードの再配布まではできているのですが、二週目のペアが揃った時のカード透過処理がうまくできていません。
透過処理にはCanvas Groupを使用しています。
対処方法をご教示いただきたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
MissingReferenceException: The object of type 'CanvasGroup' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. Card.SetInvisible () (at Assets/Script/Card.cs:104) CardCreateManager.HideCardList (System.Collections.Generic.List`1[T] containCardList) (at Assets/Script/CardCreateManager.cs:126) GameSceneManager.Update () (at Assets/Script/GameSceneManager.cs:48)
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System; 5using UnityEngine.UI; 6 7public class GameSceneManager : MonoBehaviour 8{ 9 10 public CanvasGroup CanvasGroup; 11 12 //一致したカードリスト 13 private List<int>mContainCardIdList = new List<int>(); 14 15 //カード生成マネージャークラス 16 public CardCreateManager CardCreate; 17 18 public Card Card; 19 20 void Start (){ 21 22 //一致したカードIDリストを初期化 23 this.mContainCardIdList.Clear(); 24 25 //カードリストを生成する 26 this.CardCreate.CreateCard(); 27 } 28 void Update() 29 { 30 31 //選択したカードが二枚以上になったら 32 if(GameStateController.Instance.SelectedCardIdList.Count >= 2){ 33 34 //最初に取得したCardIDを取得する 35 int selectedId = 36 GameStateController.Instance.SelectedCardIdList[0]; 37 38 //二枚目にあったカードと一緒だったら 39 if(selectedId == 40 GameStateController.Instance.SelectedCardIdList[1]){ 41 42 Debug.Log($"Contains!{selectedId}"); 43 //一致したカードIDを保存する 44 this.mContainCardIdList.Add(selectedId); 45 } 46 47 //カードの表示切り替えを行う 48 this.CardCreate.HideCardList(this.mContainCardIdList); //48行目 49 50 //選択したカードリストを初期化する 51 GameStateController.Instance.SelectedCardIdList.Clear(); 52 } 53 54 //カードの再配布処理 55 if(this.mContainCardIdList.Count>= 3){ 56 //this.Card.OffInvisible(); //CanvasGroupのアルファ値を1にするメソッドを用意してみた・・・失敗 57 //this.CanvasGroup.alpha = 1; //直接アルファ値を指定してみた・・・失敗 58 mContainCardIdList.Clear(); 59 this.CardCreate.CreateCard(); 60 Debug.Log("Count3 OK!"); 61 } 62 } 63}
C#
1 //48行目で呼び出そうとしている処理 2 //取得していないカードを背面にする 3 public void HideCardList(List<int>containCardList){ 4 5 foreach(var _card in this.CardList){ 6 7 //既に獲得したカードのIDの場合、非表示にする 8 if(containCardList.Contains(_card.Id)){ 9 10 //カードを非表示にする 11 _card.SetInvisible(); //126行目 12 } 13 14 //獲得していないカードは裏面表示にする 15 else{ 16 //カードを裏面表示にする 17 _card.SetHide(); 18 } 19 } 20 }
試したこと
CanvasGroupのアルファ値を1にするメソッドを用意してみた・・・失敗
直接アルファ値を指定してみた・・・失敗
補足情報(FW/ツールのバージョンなど)
Unity.2019.2.9f1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 14:26
2020/07/22 15:07
2020/07/22 15:09
2020/07/22 15:24
2020/07/22 15:33
2020/07/22 23:12
2020/07/23 04:49
2020/07/24 07:08