Списки

Использование списка в C# похоже на использование списка в реальной жизни. Если вы хотите что-то отслеживать, особенно однотипное, запишите это в список, чтобы упорядочить и сохранить ссылку на него. При покупке продуктов питания у вас может быть написанный от руки список продуктов. При создании игровых объектов вы также можете вести их список. Хорошо, давайте приступим к использованию списков!

Списки работают так же, как массивы, только с некоторыми отличиями. Во-первых, способ их объявления и инициализации выглядит немного по-другому. Здесь в верхней части класса ItemDatabase находятся две переменные. Массивы, как правило, не динамические, то есть в идеале вы хотите иметь фиксированный размер для массива. Здесь с массивом элементов, чтобы инициализировать его, мне нужно объявить размер массива (10). Списки можно динамически добавлять или удалять из них, поэтому мне не нужно указывать длину списка при объявлении и инициализации переменной itemList здесь.

Спискииспользуют пространство имен System.Collections.Generic. Как видно здесь, закомментирование этого пространства имен приведет к ошибкам со списками.

Этот базовый preFab будет использоваться в качестве примера добавления существующего объекта в список.

Добавление в список также выглядит иначе, чем с массивом. С массивом мне нужно получить доступ к элементу массива, который я хочу инициализировать. Списки могут использовать встроенный метод Add, а затем вы можете объявить существующий игровой объект или инициализировать новый один. Здесь два объекта будут добавлены в список. Один для общего новогоигрового объекта, а другой для itemPrafab.

Доступ и назначение элементов в списке работает так же, как и в массиве. В верхнем примере показано, как массив элементов получает доступ к первому элементу (0), а затем устанавливает itemName. itemList, List также использует систему элементов, чтобы указать, какой элемент я назначаю, а затем дать ему имя.

Вызов: имена

В качестве испытания мне было поручено составить список имен, а затем случайно удалить имя из списка с помощью вводимых пользователем данных. . Затем, когда имя удалено, мне нужно распечататьвсе имена из спискав консоль. Здесь переменная namesList жестко закодирована с 6 различными значениями имени.

Все еще в пустоте Начните здесь, я отправляю журнал отладки в консоль, сообщая мне, что это первоначальный список имен, которые будут напечатаны . Цикл foreach перебирает каждое имя в списке, а затем выводит его на консоль.

В void Update я проверяю пользовательский ввод на наличие пробела, а затем просматриваю несколько if else условия. Если в списке более одного имени, будет запущена функция для удаления имени из списка. Если в списке есть только одно имя, будет запущена встроенная функция Очистить список (я получал сообщение об ошибке, когда разрешал функции удаления имени списка довести общее количество списка до ноль). Если ни одно из этих условий не выполняется, оператор else сообщает мне, что список имен пустой.

Функция RemoveListName использует локальную переменную для хранения случайного диапазона. Этот номер будет напрямую ссылаться на номер элемента, который нужно удалить из списка. Прежде чем удалить имя, я вывожу его на консоль, пока у меня все еще есть рабочая ссылка на него. Это печатается как удаленное имя. Функция Удалить — это то, что на самом деле удаляет имя из списка на основе переданного значения элемента. На консоль выводится другое отладочноесообщение. что это обновленный список имен. Другой цикл foreach запускает вывод оставшихся имен из списка на консоль.

В инспекторе вы можете увидеть жестко закодированные имена с возможностью перезаписать их отсюда. Список Item по умолчанию пуст.

Два примера элементов заполняются в void Start после инициализации.

Здесь вы можете видеть, как список имен очищается в реальном времени, когда я нажимаю клавишу пробел.

Вот распечатки консоли.

Задание: Создание объектов

Еще одна задача, с которой мне пришлось столкнуться, — создать случайные объекты в случайном положении (между -10x, 10y, 0z). Это происходит с пользовательским вводом, и созданные объекты добавляются в список. Только 10объектов могут появиться до того, как все они станут зелеными и список будет очищен. Вот три переменные,одна для создания некоторого объекта, preFabs, два списка и логическоеусловие, определяющее, когда мы закончили создание объектов.

В void Start объекты для создания списка инициализируются тремя базовыми примитивами (куб, сфера и капсула). Объекты для создания списка инициализируются и остаются пустыми.

Здесь, в Update, находится весь код, который я должен был поместить в метод перед написанием этой статьи! Клавиша пробел проверяется на наличие ввода, затем проверяется условие bool на false и создается список объектов должен быть меньше 10. Если условия соблюдены, локальные переменные сохраняют случайное значение типа int для элемента в объектах для порождения списка , а также два случайных диапазона для позиции появления. Объявляется переменная Vector3 , которой присваиваютсяслучайные значения для X и Y и ноль для Z. Объявляется переменная локального игрового объекта. для хранения ссылки на созданный объект. Здесь я изначально сделал ошибку, так как сохранял случайный объект, который на самом деле является ссылкой на preFab в assets, а не экземпляр этого preFab в иерархии! Исправление заключается в том, чтобы сделать команду instantiate значением сохраненного объекта переменной. Теперь случайный объект из списка объектов для создания создается в случайном месте точки появления без учета поворота. Созданный объект переменная теперь может быть безопасно помещен в список созданных объектов с помощью метода Add и передачи переменной createdObject.

Оператор else здесь обрабатывает то, что происходит, если первые два условия не выполняются. На консоль отправляется сообщение о том, что счетчик объектов заполнен, а переменная isDoneSpawning изменяется на true. Цикл foreach будет перебирать все игровые объекты в списке созданных объектов, получать компонент в Mesh Renderer, а затем измените цвет на зеленый. Наконец, когда все сказано и сделано, список очищается.

Инспектор показывает объект preFabs и пустые в данный момент списки.

Список Объекты для создания заполняется при инициализации в пустом Start.

Когда я нажимаю клавишу пробел, вы можете видеть экземпляры экземпляров вновь созданных игровых объектов, заполняющих список Созданные объекты. Как только в списке появляется 10объектов, он очищается еще одним нажатием клавиши пробела.

Инспектор сообщает мне, что счетчик объектов заполнен.

Здесь, в представлении сцены, вы можете видеть, как объекты создаются и в конечном итоге становятся зелеными на заключительном этапе задачи. Надеюсь, вам понравилось это путешествие по использованию списков, и спасибо за чтение!