###前提・実現したいこと
とても初歩的なことで、いつもできていたことなのですが突然できなくなっていたので質問します
以下のコードのDebug.Log(v)でコンソールにクラス名が出てこずnullと表示されています。
しかしv.GetType()やvの要素にアクセスしたところ、その内容が出力できます.
質問は2つです
・vがnullなのにその要素にアクセスできるということはvはいったい何を出力しているのか(本来ならCharTemplateのはず)
・3つ目のクラスGamemanagerでのエラー解決方法
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class CharTemplete :MonoBehaviour{ 7 8 public int id; 9 public int rank; 10 public int rear; 11 public string name; 12 13 14 public CharTemplete(int i,int r,int l,string n){ 15 id = i; 16 rank = r; 17 rear = l; 18 name = n; 19 } 20 21 public void InitStatus(CharTemplete t){ 22 this.id = t.id; 23 this.rank = t.rank; 24 this.rear = t.rear; 25 this.name = t.name; 26 } 27 28 29}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Deckmanager : MonoBehaviour { 6 7 8 public List<CharTemplete> chars = new List<CharTemplete>(); 9 public List<CharTemplete> mydekki = new List<CharTemplete>(); 10 public List<CharTemplate> mylist = new List<CharTemplate>(); 11 12 public void firstDekkiInit(){ 13 Addin(0); 14 foreach(var v in mydekki){ 15 mylist.Add(v); 16 Debug.Log(v); //null 17 Debug.Log(v.GetType()); //CharTemplate 18 Debug.Log(v.name); //"歩" 19 } 20 } 21 22 //charsに全追加 23 public void AllAdd(){ 24 chars.Add (new CharTemplete (0,1,0,"歩")); 25 chars.Add (new CharTemplete (1,2,0,"香")); 26 chars.Add (new CharTemplete (2,2,0,"馬")); 27 chars.Add (new CharTemplete (3,3,0,"銀")); 28 chars.Add (new CharTemplete (4,3,0,"金")); 29 chars.Add (new CharTemplete (5,4,0,"飛")); 30 chars.Add (new CharTemplete (6,4,0,"角")); 31 chars.Add (new CharTemplete (7,5,0,"王")); 32 chars.Add (new CharTemplete (8,5,0,"玉")); 33 } 34 35 //dekkiにcharsの一部を追加 36 public void Addin(int id){ 37 foreach(var v in chars){ 38 if(v.id == id) 39 mydekki.Add(v); 40 } 41 } 42 43 44}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class GameManager : MonoBehaviour { 7 8 private Deckmanager deck; 9 10 public Button koma; //駒オブジェクト、CharTemplateコンポーネントアタッチ済み 11 public Button[] prefab = new Button[20]; //prefab 12 public int preCnt = 0;//prefabの添字 13 public Transform ImageTransform; 14 15 void Start () { 16 koma = Resources.Load<Button>("path"); 17 deck = new Deckmanager(); 18 deck.AllAdd(); 19 deck.firstDekkiInit(); 20 create_pre(); 21 } 22 23 //prefabをセット,komaのCharTemplateの値をInitStatus()で変更 24 public void create_pre(){ 25 prefab[preCnt] = Instantiate(koma,ImageTransform.localPosition,ImageTransform.localRotation); 26 prefab[preCnt].GetComponent<CharTemplete>().InitStatus(deck.mydekki[preCnt]);//ここでnull refelenceエラー 27 prefab[preCnt].transform.SetParent(ImageTransform); 28 prefab[preCnt].transform.localScale = Vector3.one; 29 prefab[preCnt].GetComponentInChildren<Text>().text = deck.mylist[preCnt].name; 30 preCnt++; 31 32 } 33 34 35 36 37} 38
###補足情報(言語/FW/ツール等のバージョンなど)
Unity 5.5.3
C#
これらのコードは質問で見やすくするため無駄なコードを省いています。必要なコードも消している恐れがありますので指摘していただければ補足を記述します。
お願いします。
回答1件
あなたの回答
tips
プレビュー