28

Использование 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 :)

Ну, на этом то и все, спасибо что прочитали мой пост  :)


Баянометр показывает сходство с постом про Ведьмака.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества