Использование struct (Структуры) в Unity (C#)
Пост предназначен для новичков в программировании.
Сразу возникает вопрос, почему бы не использовать классы вместо структур - дело в том, что структурами можно пользоваться непосредственно, а не по ссылке, и оно полезно для хранения малого объема данных, благодаря которому можно немного сэкономить ОЗУ.
Структуры могут быть полезны в ряде моментов в программировании логики игры, например в играх как 4 фотографии 1 слово, системы инвентарей и.т.д.
Начнем с объявления структур.
Структуры определяются ключевым словом struct. Тело структуры открывается и закрывается фигурными скобками. В целом, структура во многом похоже на класс, но не поддерживает полиморфизм и наследование.
Например, возьмем в качестве примера структуру Cost
P.S. [System.Serializable] используется для сериализации структуры в инспекторе.
Как можно увидеть, структура хранит в себе целочисленные типы данных (int), такие как НормальнаяЦена, МинимальнаяЦена и МаксимальнаяЦена. Эту структуру можно использовать для рандомизации цены объекта, например как в моем текущем проекте "Симулятор перепродажи".
Так же, структура может иметь в себе конструктор :
Конструктор используется для быстрого заполнения данных (переменных) в структуре.
Данную структуру можно заполнить 3 способами :
1. Ручным методом заполнить все 3 переменные.
2. Использовать конструктор и ключевое слово new
3. Использовать инспектор Unity
Первый и второй способ может быть полезен например при генерации мира.
Тут :
1. Структура Блок, хранящий в себе ИД блока и позицию
2. Способ заполнения конструктором
Заметьте, что [System.Serializable] тут не используется, так как нам не нужно вручную заполнять структуру в инспекторе. Но, для дебага (отладки) оно может быть необходимо.
Вернемся к теме структуры Cost. Для использования данной структуры в полной мере была создана еще одна структура под названием Item (вещь).
Как можно заметить, в этой структуре хранится куда больше переменных чем в структуре Cost, а так же в ней хранится сама структура Cost, то есть структуры могут быть в качестве переменных в структурах.
Для отображения в инспекторе был поставлен параметр [System.Serializable].
Эта структура хранит в себе название, описание вещи, его спрайт, онлайн-картинка и шанс выпадения (в комментариях - от 0 до 100%) и цену. Для его инициализации в классе наследуемом MonoBehaviour была написана данная строчка :
Имеется массив с используемыми в игре объектами. Для его заполнения я буду использовать инспектор, так что от конструктора отказался. В инспекторе это дело выглядит так :
Заполняем :
Как видим, мы заполнили 1 структуру Item информацией о Xbox One (цены брал на рандоме). Для использования переменных, например, чтобы показать этот объект на сайте, пишем название_массива[i].название_переменной, где i - номер объекта (в данном случае 0).
Теперь, давайте же заполним UI Image и UI Text-ы нашими данными. Для этого я быстро создал простенький UI
Затем, немного доработал скрипт, добавил переменные с текстами и картинками и метод Старт.
P.S. Цена выбирается рандомно между минимальной и максимальной ценой.
Теперь, запускаем игру и видим, что текст поменялся.
Если слишком шакалисто - Xbox One; Cool new Xbox One; 353$ и буква X :)
Ну, на этом то и все, спасибо что прочитали мой пост :)
Баянометр показывает сходство с постом про Ведьмака.












Лига Разработчиков Видеоигр
9K постов23.2K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"