Menu
CoddyTech

オブジェクトのリスト

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 51/67。

配列の長さは固定で、作成時に設定されます。スポナーは、いくつのオブジェクトを作るかを事前に把握できないため、オブジェクトを増やせるC#の配列である List<T> に格納します。これは System.Collections.Generic にあり、T は格納する項目の型です。この噴水は、作ったコインをすべて記憶します。

using System.Collections.Generic;
using UnityEngine;

public class CoinFountain : MonoBehaviour
{
    public GameObject coinPrefab;
    List<GameObject> coins = new List<GameObject>();

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity);
            coins.Add(coin);
            Debug.Log(coins.Count + " coins");
        }
    }
}

Add は項目を末尾に追加し、Count は項目数を示します。配列の場合は Length を使います。読み取り方は配列と同じです。coins[0] は最初のコインを指し、foreach (GameObject c in coins) はすべてのコインを順に処理します。coins.Remove(coin) はその項目を削除し、coins.RemoveAt(0) は最初の項目を削除します。その後ろにある項目は1つ前に移動します。

リスト自体は new を使って作成する必要があります。List<GameObject> coins; と書かれたフィールドは null を保持するため、最初の Add で NullReferenceException が発生して停止します。

challenge icon

チャレンジ

中級

スタッカーは、作成したボックスを記録しておく必要があります。

  • ボックスは、boxesという名前のプライベートなList<GameObject>フィールドに保持します。
  • クリックするたびに、回転なしでボックスを生成し、リストに追加します。ボックスはスタッカーの位置を基準に、リスト内にすでにあるボックス1つにつきx方向に1.5ずつずらした位置に配置します。最初のボックスはスタッカーの位置、次のボックスはその右1.5の位置、というように配置します。
  • Spaceキーを押すと、最新のボックスを取り除きます。SetActive(false)で非表示にし、リストから削除します。ボックスがない場合、Spaceキーを押しても何も起こりません。
  • リストに変更があるたびに、Boxes: とボックスの数をログに出力します。たとえば、Boxes: 3です。

Playを押し、クリックしてからSpaceキーを押し、その後Checkを押します。

自分で試してみよう

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: private な List<GameObject>

    void Update()
    {
        // Click: リスト内の箱1つにつき、さらに右へ 1.5 ずらした位置に箱を生成し、リストに追加する
        // Space: 最新の箱を非表示にし、リストから削除する
        // 変更のたびに "Boxes: " と箱の数をログに出力する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン