質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

15061閲覧

Unity エラーコードCS1061の解決方法

st1890

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/20 02:42

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CardクラスにIdSetInvisibleSetHideが定義されていないからアクセス出来ないよ」
というエラーなので、実装するのはCardクラスです。
よく見るとCardクラスにはIDという変数はありますがIdという変数はありません(大文字小文字区別します)。どちらかに合わせるように修正しましょう。

後ろの2つはメソッド実装が出来ていますが上記エラーの余波で動かなくなっている気がするのでとりあえず上記を直してみてください。

投稿2020/07/20 06:17

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

st1890

2020/07/20 06:43

回答ありがとございます。 ご指摘の大文字小文字の修正を行ったところ、スクリプト上のエラーは解消されました。 しかし、ゲームを実行したところSetInvisibleやSetHideが実行されませんでした。(エラーは出ていません) 他に確認すべきところはありますでしょうか?
sakura_hana

2020/07/20 08:12

「Debug.Log」を各所に仕込んで、どこまで動作しているか、各値がどうなっているか確認してみてください。 https://qiita.com/shach334/items/5f2ac37dd8f91e5b3133 例えばCardListの中身が1つも無いとか、そもそもHideCardListが呼ばれていないとか色々考えられます。
st1890

2020/07/20 12:08

いろいろ試してみましたが、HideCardListが呼ばれていないようでした。
st1890

2020/07/20 12:19

HideCardListを呼ぶ記述を改めて記述したところ求めていた機能が実装できました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問