List(リスト)って何?
変数は通常 int hp_enemy = 100; のように、hp_enemyという変数に対して、100を保存する。というように1:1の関係でしか保存できません。
これは敵が10体いた場合、hp_enemy1, hp_enemy2, hp_enemy3…hp_enemy10というように、10個の変数を用意する必要があり、それぞれのhpを5減らしたい。という場合は、
hp_enemy1 -= 5; … hp_enemy10 -= 5; と書くことになってしまいます。
これはコードを書く上でも大変ですが、シンプルに読みづらく、読みづらさは意図しないバグを生むことになります。
その為、同じ種類の変数を取り扱う場合は、リストを使用します。
書き方 public List<型> 変数名 = new List<型>();
上記のように定義します。publicにしたのは、インスペクター上で操作するためですが、
private List<型> 変数名 = new List<型>(); でも、もちろん問題ありません。
Int型であれば、
public List<int> hp_enemy = new List<int>();
string型であれば、
public List<string> name_enemy = new List<string>(); のように定義します。
そのまま数値を入れたい場合は、( )の部分を{ }に置き換えて、数値を入力します。
例:public List<int> hp_enemy = new List<int> {10, 20, 30};
上で作成した変数ですが、注意点として、0から始まる という点に注意する必要があります。
インスペクター上で10個変数を作成した場合、変数名は
hp_enemy[0], hp_enemy[1], hp_enemy[2], … , hp_enemy[9] のようになります。
使い方の例
Listは同じ種類の変数に対して、同じ処理を行いたい場合がほとんどなので、
for文と使われることが多いです。
なお、Listの数は 変数名.Count で取得することができます。
以下は、使用例です。
6つの変数をそれぞれ 5減らすスクリプトを作成してみます。

アタッチされたint型変数をそれぞれ5減らします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //テキストを使うお約束
public class Decrease5 : MonoBehaviour
{
private List<int> hp_enemy = new List<int>{ 10, 20, 30, 40, 50, 60 };
public List<Text> hp_text = new List<Text>();
// ゲーム開始時にテキストを更新
private void Start()
{
for (int i = 0; i < hp_text.Count; i++)
{
hp_text[i].text = hp_enemy[i].ToString();
}
Invoke("DecreaseHP", 1); // 1秒後にhpをそれぞれ5減らす
}
private void DecreaseHP()
{
for (int i = 0; i < hp_enemy.Count; i++)
{
hp_enemy[i] -= 5;
hp_text[i].text = hp_enemy[i].ToString();
}
}
}
テキストオブジェクトをアタッチ

ゲームを開始すると、1秒後にテキストをそれぞれ5減らします。

コメント