前提・実現したいこと
プログラミング初心者です。
作り方を載せてくださっているサイトのやり方やスクリプトを丸々真似して、Unityで試験的にカードゲームを作っています。52枚のシャッフルしたカードを1枚目から順に横に並べるための操作をしている途中です。スクリプトや手順を全部真似しているつもりなのですが、実行するとNullReferenceExceptionが出てしまいます。
ネットでエラーメッセージについて調べてみたのですが、この場合は何がNullになってしまっているのか、初心者の自分の力だけでは分かりませんでした。
どこに原因があるのか、何がNullになってしまっているのかを教えていただきたいです。
ご回答宜しくお願い致します。
【参考にさせていただいたサイトのURL】https://tomoarch.com/2019/04/10/unityでできるみんなが知りたいカードゲーム作りの/
https://tomoarch.com/2018/09/12/カードゲームをunityとcで作りたい%EF%BC%9Aカードシャッフ/
発生している問題・エラーメッセージ
NullReferenceException:Object reference not set to an instance of an object
Deck+<GetCards>d__1.MoveNext()(at Assets/Scripts/Deck.cs:10)
DeckView.ShowCards()(at.Assets/Scripts/Deck.cs:26)
DeckView.Start()(at Assets/Scripts/DeckView.cs:19)
該当のソースコード
Deck.cs
【参考にさせて頂いたサイトのページ】https://tomoarch.com/2018/09/12/カードゲームをunityとcで作りたい%EF%BC%9Aカードシャッフ/
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Deck : MonoBehaviour 6{ 7 List<int> cards; 8 public IEnumerable<int> GetCards() 9 { 10 foreach (int i in cards) //10行目 11 { 12 yield return i; 13 } 14 } 15 16 public void Shuffle() 17 { 18 if (cards == null) 19 { 20 cards = new List<int>(); 21 } 22 else 23 { 24 cards.Clear(); 25 } 26 27 for (int i = 0; i < 52; i++) 28 { 29 cards.Add(i); 30 } 31 32 int n = cards.Count; 33 while (n > 1) 34 { 35 n--; 36 int k = Random.Range(0, n + 1); 37 int temp = cards[k]; 38 cards[k] = cards[n]; 39 cards[n] = temp; 40 } 41 } 42 void Start() 43 { 44 Shuffle(); 45 } 46 47}
DeckView.cs
【参考にさせて頂いたサイトのページ】https://tomoarch.com/2018/09/13/カードゲームをunityとcで作りたい%EF%BC%9Aカードシャッフ-2/
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[RequireComponent(typeof(Deck))] 6 7public class DeckView : MonoBehaviour 8{ 9 Deck deck; 10 public Vector3 start; 11 public float cardOffset; 12 13 14 public GameObject cardPrefab; 15 16 void Start() 17 { 18 deck = GetComponent<Deck>(); 19 ShowCards(); //19行目 20 } 21 22 void ShowCards() 23 { 24 int cardCount = 0; 25 26 foreach(int i in deck.GetCards()) //26行目 27 { 28 float co = cardOffset * cardCount; 29 30 GameObject cardCopy = (GameObject)Instantiate(cardPrefab); 31 Vector3 temp = start + new Vector3(co, 0f); 32 cardCopy.transform.position = temp; 33 34 CardModel cardModel = cardCopy.GetComponent<CardModel>(); 35 cardModel.cardIndex = i; 36 cardModel.ToggleFace(true); 37 38 cardCount++; 39 40 } 41 } 42 43} 44
試したこと
スクリプトやUnity上の手順を何回も確認してみたのですが、サイトと同じことをやっているつもりなのにうまくいきませんでした。
エラーコードについてネットで調べてみて、ある程度理解できたのですが、自分だけでは今回の場合に適用できませんでした。
最初は2019.3.12f1のバージョンでやっていたので、もしかしたらバージョンの違いかと思い2018.3.7f1でやってみても結果は変わりませんでした。
補足情報(FW/ツールのバージョンなど)
(Windows 10)
・Unity 2019.3.12f1
・Unity 2018.3.7f1
・Visual Studio Code
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/19 01:27
2020/05/19 01:48