🏠 Главная

📚 Массивы и списки в Unity

Иногда одной переменной мало. А что если у нас сразу 10 врагов? Или список фруктов? Тогда на помощь приходят массивы и списки — они позволяют хранить сразу много значений и обращаться к ним по номеру.

Массивы и списки нужны, когда хочется:

В этом уроке мы разберёмся, чем массивы отличаются от списков, как их создавать, заполнять и использовать в Unity.

🔢 Массивы

Массив — это переменная, в которой можно хранить сразу несколько значений одного типа. Вместо того чтобы создавать десять отдельных переменных, мы можем собрать всё в один массив и обращаться к элементам по номеру.

Массивы особенно полезны, когда нужно заранее определить фиксированное количество ячеек — например, 5 жизней игрока или 3 кнопки меню. У каждого элемента в массиве есть индекс, начиная с нуля.

После создания длина массива остаётся постоянной: добавить или удалить элементы нельзя. Если тебе нужен более гибкий способ хранения — смотри дальше, в разделе про списки.

🧰 Объявление и инициализация

Чтобы создать массив, нужно указать тип данных и количество элементов. Можно сначала объявить массив с фиксированной длиной, а потом заполнить, или сразу указать все значения в фигурных скобках.

🎯 Доступ к элементам

Каждый элемент массива имеет свой номер — индекс, начиная с 0. Мы можем читать и изменять значения через этот индекс. Например, массив[1] — это второй элемент.

Ниже — два примера: один для чисел, другой для строк. Они показывают, как создать массив, заполнить его и использовать значения в коде.

🧮 Пример: массив чисел int[]


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()
    {
        
    }
}

📋 Пример: массив строк string[]


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()
    {
        
    }
}

🤔 Когда использовать массив, а когда список?

Оба варианта — и массивы, и списки — позволяют хранить много значений, но у них разные особенности.

Если не уверен — начинай с List<T>. Он проще в использовании и гибче в большинстве случаев.