Menu
CoddyTech

Списки объектов

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 65 из 85.

У массива фиксированная длина, которая задаётся при его создании. Спавнер заранее не знает, сколько объектов он создаст, поэтому хранит их в List<T> — массиве C#, который растёт. Он находится в 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) удаляет первый; элементы после него сдвигаются на одну позицию.

Сам список нужно создать с помощью new. Поле, объявленное как List<GameObject> coins;, содержит null, и первый вызов Add завершится исключением NullReferenceException.

challenge icon

Задание

Средне

Пусть каждый щелчок добавляет коробку в список.

  1. Добавь using System.Collections.Generic; и поле List<GameObject> boxes = new List<GameObject>();.
  2. При щелчке создавай boxPrefab в точке transform.position + new Vector3(boxes.Count * 1.5f, 0, 0) без поворота и добавляй его в boxes.
  3. Выведи в журнал "Boxes: " + boxes.Count.

Нажми «Играть» и щёлкни три раза: три коробки выстроятся в ряд. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class BoxStacker : MonoBehaviour
{
    public GameObject boxPrefab;
    // boxes: приватный List<GameObject>

    void Update()
    {
        // Click: создать коробку, размещая её на 1.5 правее за каждую коробку в списке, добавить её в список и вывести количество в лог
    }
}

Все уроки раздела Основы скриптинга в Unity

Потренируйтесь самостоятельно: Песочница Unity