気軽に遊べるミニゲームを制作しています

ブラウザゲームまとめ

Unity Listの使い方

Unity2D

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減らします。

コメント

タイトルとURLをコピーしました