Иногда одной переменной мало. А что если у нас сразу 10 врагов? Или список фруктов? Тогда на помощь приходят массивы и списки — они позволяют хранить сразу много значений и обращаться к ним по номеру.
Массивы и списки нужны, когда хочется:
В этом уроке мы разберёмся, чем массивы отличаются от списков, как их создавать, заполнять и использовать в Unity.
Массив — это переменная, в которой можно хранить сразу несколько значений одного типа. Вместо того чтобы создавать десять отдельных переменных, мы можем собрать всё в один массив и обращаться к элементам по номеру.
Массивы особенно полезны, когда нужно заранее определить фиксированное количество ячеек — например, 5 жизней игрока или 3 кнопки меню. У каждого элемента в массиве есть индекс, начиная с нуля.
После создания длина массива остаётся постоянной: добавить или удалить элементы нельзя. Если тебе нужен более гибкий способ хранения — смотри дальше, в разделе про списки.
Чтобы создать массив, нужно указать тип данных и количество элементов. Можно сначала объявить массив с фиксированной длиной, а потом заполнить, или сразу указать все значения в фигурных скобках.
Каждый элемент массива имеет свой номер — индекс,
начиная с 0
. Мы можем читать и изменять значения через
этот индекс. Например, массив[1]
— это второй элемент.
Ниже — два примера: один для чисел, другой для строк. Они показывают, как создать массив, заполнить его и использовать значения в коде.
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Start вызывается один раз при запуске объекта
void Start()
{
// Создаём массив из 3 чисел
int[] numbers = new int[3];
// Заполняем массив значениями
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
// Выводим одно из значений
Debug.Log("Второе число: " + numbers[1]);
}
// Update вызывается каждый кадр
void Update()
{
}
}
using UnityEngine;
public class CSharpScript : MonoBehaviour
{
// Start вызывается один раз при запуске объекта
void Start()
{
// Массив строк с именами
string[] names = { "Anya", "Bob", "Sonya" };
// Выводим первое имя
Debug.Log("Привет, " + names[0]);
}
// Update вызывается каждый кадр
void Update()
{
}
}
Список — это как массив, но гибче. Мы можем добавлять
и удалять элементы в любое время, а не задавать количество заранее.
Для работы со списками используется тип List<T>
,
где T
— тип данных (например, int
,
string
, GameObject
).
Списки часто используют, когда:
Чтобы создать список, нужно использовать тип
List<T>
и подключить пространство имён
System.Collections.Generic
. После этого можно легко
добавлять элементы по ходу выполнения программы.
Для добавления используется метод Add()
. Он добавляет
значение в конец списка.
Чтобы удалить элемент, можно использовать Remove()
— он
ищет и удаляет первое вхождение указанного значения. Есть и другие
методы, например RemoveAt(index)
, если нужно удалить по
номеру.
Вместо свойства Length
, как у массива, у списка
используется Count
— он показывает, сколько элементов
сейчас в списке.
Ниже мы покажем пример, как это всё работает внутри Unity-скрипта.
using UnityEngine;
using System.Collections.Generic;
public class CSharpScript : MonoBehaviour
{
// Start вызывается один раз при запуске объекта
void Start()
{
// Создаём список строк с начальными значениями
List<string> names = new List<string>() { "Anya", "Bob", "Sonya" };
// Добавляем ещё два имени
names.Add("Tina");
names.Add("Leo");
// Удаляем первое имя (Anya)
names.RemoveAt(0);
// Выводим количество элементов
Debug.Log("Всего имён в списке: " + names.Count);
}
// Update вызывается каждый кадр
void Update()
{
}
}
Оба варианта — и массивы, и списки — позволяют хранить много значений, но у них разные особенности.
Add()
,
Remove()
, Clear()
и
Count
.
Если не уверен — начинай с List<T>
. Он проще в
использовании и гибче в большинстве случаев.