Списки объектов
Часть раздела Основы скриптинга в 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.
Задание
СреднеПусть каждый щелчок добавляет коробку в список.
- Добавь
using System.Collections.Generic;и полеList<GameObject> boxes = new List<GameObject>();. - При щелчке создавай
boxPrefabв точкеtransform.position + new Vector3(boxes.Count * 1.5f, 0, 0)без поворота и добавляй его вboxes. - Выведи в журнал
"Boxes: " + boxes.Count.
Нажми «Играть» и щёлкни три раза: три коробки выстроятся в ряд. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: приватный List<GameObject>
void Update()
{
// Click: создать коробку, размещая её на 1.5 правее за каждую коробку в списке, добавить её в список и вывести количество в лог
}
}
Все уроки раздела Основы скриптинга в Unity
1Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель света11Префабы и создание объектов
Префабы и InstantiateСпавн по таймеруСпавн в сеткеСписки объектовУбрать последний созданныйDestroyСлучайный спавнПовторение: фейерверкиПотренируйтесь самостоятельно: Песочница Unity