みかんばこ

プログラミングとかその他有益だと思ったことをメモ.主にUnity

配列宣言と初期化

多分、初歩的すぎてドン引きされそうですが、ちょっと躓いたので一応メモ

ゲームを作る際の敵データをクラスで作成し、それを配列にまとめたクラスを利用した時に、NullPointerエラーが出てしまった...以下その状況

public class En {
   public string name ="";
   public int DropItem1No;
   public int DropItem2No;
}

 

public static class Enemy{
 static int InstanceNo =1;
 public En[] Enlist = new En[InstanceNo];

}

\\別ソースで

Enemy.En[i].name ="敵";

\\↑ここでエラー

 

stringに代入する時にエラーがおきてるみたいで、なんでかなと考える事10分。

配列は宣言した時にメモリ空間だけ確保して実体を保っていないということを思いだした。だからstring型で代入エラーが出るんですね....多分

 

以下改変後

 

public class En {
   public string name ="";
   public int DropItem1No;
   public int DropItem2No;
}

 

public static class Enemy{
 static int InstanceNo =1;
 public En[] Enlist = new En[InstanceNo];//ここでメモリ空間のみ確保

 public Enemy(){//配列は初期化されないからコンストラクタで全部初期化する必要

  for(int i=0;i<InstanceNo;i++){
   Enlist[i]= new En();
  }

 }

}

 

 

はい無事コンパイル通りました。

すっごい初歩的だけどたまに忘れるので気をつけたいですね