配列は複数のデータを扱う時に便利.
敵データを複数管理する場合を想定する.
敵データが一つの場合.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 敵
public class Enemy{
public string name;
public int hp;
public int attack;
public Enemy(){
}
public Enemy(string name, int hp, int attack){
this.name = name;
this.hp = hp;
this.attack = attack;
}
// ステータスをコンソールに表示
public void DebugStatus(){
// string.Formatを使うと, + でつなげるよりも見た目わかりやすく文字を連結できる.
Debug.Log (string.Format ("名前; {0}, HP: {1}, 攻撃; {2}", name, hp, attack));
}
}
public class ArrayExample : MonoBehaviour {
void Start(){
Enemy en1 = new Enemy ("スライム", 5, 3);
en1.DebugStatus ();
}
}
このように敵のデータを表示することが可能です.
イメージで表すと,
new Enemy ("スライム", 5, 3);
でEnemyを生成し,
それを en1という名前の箱につっこむ感じです.
敵データが3つの時 (配列を使わない)
敵が3体だとすると,Start関数の中は次のようになりますね.
void Start(){
Enemy en1 = new Enemy ("スライム1", 5, 3);
Enemy en2 = new Enemy ("スライム2", 1, 2);
Enemy en3 = new Enemy ("スライム3", 4, 3);
en1.DebugStatus ();
en2.DebugStatus ();
en3.DebugStatus ();
}
イメージで表すと以下です.
それぞれが独立しています.
これでもできますが,敵の数が多くなると記述するのがどんどん大変になってきます.
敵データが3つの時 (配列を使う)
配列を使うと次のように書くことができます.
void Start(){
Enemy[] enemies = new Enemy[3];
enemies[0] = new Enemy ("スライム1", 5, 3);
enemies[1] = new Enemy ("スライム2", 1, 2);
enemies[2] = new Enemy ("スライム3", 4, 3);
enemies [0].DebugStatus ();
enemies [1].DebugStatus ();
enemies [2].DebugStatus ();
}
解説の前にイメージを示します.
まず,この文でenemies
という名前の3つの領域がある箱を作ります.
Enemy[] enemies = new Enemy[3];
領域にはそれぞれ,0から始まる数字がつけられていて,
enemies[0]
のようにしてそれぞれの領域にアクセスできます.
この,0から始まるという点が超大事ポイントです.
enemies[3]
や
enemies[100]
など,存在しない領域にアクセスするように書いてしまうとエラーが出るので注意です.
配列を使ってない時よりも,変数の数が3つから1つになって,行が1行増えましたね.
For文を使うことでより,スマートに書くことができますが,
長いので分けます.