前提・実現したいこと
Unityでの神経衰弱ゲームを下記のサイトを参考に作成しています。
現在、二枚カードの絵柄が揃ったらカードを非表示にするという処理を実装しようとしています。
その作業中に出たエラーコードCS1061の解決方法をご教示いただきたいです。
https://www.wojtekmt.com/entry/2019/09/30/190000
発生している問題・エラーメッセージ
error CS1061: 'Card' does not contain a definition for 'Id' and no accessible extension method 'Id' accepting a first argument of type 'Card' could be found error CS1061: 'Card' does not contain a definition for 'SetInvisible' and no accessible extension method 'SetInvisible' accepting a first argument of type 'Card' could be found error CS1061: 'Card' does not contain a definition for 'SetHide' and no accessible extension method 'SetHide' accepting a first argument of type 'Card' could be found
該当のソースコード
C# //カードの設定用スクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Card : MonoBehaviour { // カードのID public int ID; //表示するカードの画像 public Image CardImage; //透過処理用 public CanvasGroup CanGroup; //選択されているか判定 private bool mIsSelected = false; //カード情報 private CardData mData; //カードの設定 public void Set(CardData data){ //IDを設定する this.ID = data.Id; //カード情報を設定 this.mData = data; //表示する画像を設定する //初回は全て裏面表示とする this.CardImage.sprite = Resources.Load<Sprite>("Image/card_back"); //選択判定フラグを初期化する this.mIsSelected = false; //アルファ値を1を設定する this.CanGroup.alpha = 1; } public void OnClick(){ //カードが表面になっていた場合は無効 if(this.mIsSelected){ //Debug.Log("return"); return; } Debug.Log("OnClick"); //選択判定フラグを有効にする this.mIsSelected = true; //カードを表面にする this.CardImage.sprite = this.mData.ImgSprite; //選択したCardIdを保存しよう GameStateController.Instance.SelectedCardIdList.Add(this.mData.Id); } //カードを背面表示にする public void SetHide(){ //選択判定フラグを初期化する this.mIsSelected = false; //カードを背面表示にする this.CardImage.sprite = Resources.Load<Sprite>("Image/card_back"); } //カードを非表示にする public void SetInvisible(){ //選択済設定にする this.mIsSelected = true; //アルファ値を0に設定する this.CanGroup.alpha = 0; } } public class CardData{ //カードID public int Id{get; private set;} //画像 public Sprite ImgSprite{get; private set;} public CardData (int _id,Sprite _sprite){ this.Id = _id; this.ImgSprite = _sprite; } } //カード生成用のスクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.Linq; using System; public class CardCreateManager : MonoBehaviour { //生成するCardオブジェクト public Card CardPrefab; //Cardを生成する親オブジェクト public RectTransform CardCreateParent; //生成したカードオブジェクトを保存する public List<Card>CardList = new List<Card>(); void Start() { // Card card = Instantiate<Card>(this.CardPrefab, // this.CardCreateParent); //カード情報リスト List<CardData> cardDataList = new List<CardData>(); //表示するカードの画像情報のリスト List<Sprite> imgList = new List<Sprite>(); imgList.Add(Resources.Load<Sprite>("Image/card_img_000")); imgList.Add(Resources.Load<Sprite>("Image/card_img_001")); imgList.Add(Resources.Load<Sprite>("Image/card_img_002")); //forを回す回数を取得する int loopCnt = imgList.Count; for(int i = 0; i < loopCnt; i++){ //カード情報を生成する CardData carddata = new CardData (i,imgList[i]); cardDataList.Add(carddata); } //生成したカードリスト二つ分のリストを作成する List<CardData> SumCardDataList = new List<CardData>(); SumCardDataList.AddRange(cardDataList); SumCardDataList.AddRange(cardDataList); //リストの中身をランダムに再配置する List<CardData> randomCardDataList = SumCardDataList.OrderBy(a=>Guid.NewGuid()).ToList(); //カードオブジェクトを生成する foreach(var _cardData in randomCardDataList){ //InatantiateでCardオブジェクトを生成 Card card = Instantiate<Card>(this.CardPrefab, this.CardCreateParent); //データを設定する card.Set(_cardData); //生成したカードオブジェクトを保存する this.CardList.Add(card); } } //カードを生成する public void CreateCard(){ //カード情報リスト List<CardData> cardDataList = new List<CardData>(); //表示するカードの画像情報のリスト List<Sprite> imgList = new List<Sprite>(); imgList.Add(Resources.Load<Sprite>("Image/card_img_000")); imgList.Add(Resources.Load<Sprite>("Image/card_img_001")); imgList.Add(Resources.Load<Sprite>("Image/card_img_002")); //forを回す回数を取得する int loopCnt = imgList.Count; for(int i = 0; i < loopCnt; i++){ //カード情報を生成する CardData carddata = new CardData (i,imgList[i]); cardDataList.Add(carddata); } //生成したカードリスト二つ分のリストを作成する List<CardData> SumCardDataList = new List<CardData>(); SumCardDataList.AddRange(cardDataList); SumCardDataList.AddRange(cardDataList); //リストの中身をランダムに再配置する List<CardData> randomCardDataList = SumCardDataList.OrderBy(a=>Guid.NewGuid()).ToList(); //カードオブジェクトを生成する foreach(var _cardData in randomCardDataList){ //InatantiateでCardオブジェクトを生成 Card card = Instantiate<Card>(this.CardPrefab, this.CardCreateParent); //データを設定する card.Set(_cardData); //生成したカードオブジェクトを保存する this.CardList.Add(card); } } //取得していないカードを背面にする public void HideCardList(List<int>containCardList){ foreach(var _card in this.CardList){ //既に獲得したカードのIDの場合、非表示にする if(containCardList.Contains(_card.Id)){ //エラー発生箇所 //カードを非表示にする _card.SetInvisible(); //エラー発生箇所 ※スクリプト上は問題なし、実行時にエラー発生 } //獲得していないカードは裏面表示にする else{ //カードを裏面表示にする _card.SetHide(); //エラー発生箇所 ※スクリプト上は問題なし、実行時にエラー発生 } } } // Update is called once per frame void Update() { } }
試したこと
使用したいメソッドの再定義が必要なところまでは分かりましたが、どこに定義すれば良いのか分かりませんでした。
補足情報(FW/ツールのバージョンなど)
Unity.2019.2.9f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 06:43
2020/07/20 08:12
2020/07/20 12:08
2020/07/20 12:19