Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора

insert_comment 0
visibility 741
|
21.05.2020

Всем привет! Меня зовут Роман Сакутин и в этой небольшой статье я хочу рассказать об одном из приёмов использования ScriptableObject в Unity. Его я делал в одном из своих стримов на канале, на котором мы делали RTS. Задача была в следующем:

-Предоставить возможность создавать здания в редакторе для последующего строительства их игроком.

-Здания содержат следующее: модель которая отображается, имя, иконка, цена и список вещей которые могут в нём производится.

Один из важных аспектов — это то, что здание создаются в редакторе, и потом используются в различных сценах. Так что всё описание хочется иметь в виде некоторых ассетов. Также в этом вопросе важна безопасность типов, чтобы при создание нового здания было сложно сделать ошибку.

ScriptableObject

Это специальным тип Unity который позволяет сохранять объект производного от него класса как часть всего проекта а не отдельной сцены, и в дальнейшем использовать его в различных скриптах.

Можно его ассоциировать с более чистым префабом. Префаб — это GameObject сохранённый в проекте. ScriptableObject — это компонент который сохранён в проекте со всеми своими значениями.

Для начала работы вам нужно создать класс который производный от ScriptableObject. В нём вы можете определять поля которые будут сериализоваться. Правила в целом те же что и в обычных компонентах.

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №2
 

Наличие атрибута CreateAssetMenu позволяет создавать инстансы класса прямо в редакторе, с последующим их сохранением. Параметр menuName позволяет задать где в контекстном меню будет располагаться кнопка.

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №3
Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №4
1 из 2
 
 

В дальнейшем вы можете использовать эти объекты просто определив поле с типов SomeData в скрипте и Unity позволит вам их перетаскивать в инспекторе как значение него.

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

Как я применил его в системе построек

У нас есть основной тип BuildingProfile в котором собраны основные данные постройки.

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №5
 

В результате чего прямо в проекте мы можем конфигурировать различные здания.

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №6
 

За строительство отвечает компонент BuildingPanel (точнее он отвечает за выбор того), что строить.

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №7
 

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

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №8
 

Небольшой хак

Чтобы объекты ScriptableObject симпотично выглядили в окне Project, можно задать им иконку. Для этого в папку Gizmos положите одноименную картинку с постфиксом Icon.

Приём использования ScriptableObject в Unity на примере зданий в стратегии + хак для редактора, изображение №9
 

В заключение

Это не единственный способ использования ScriptableObject и есть множество других интересных путей развития сценария. О них я надеюсь рассказать вам в следующий раз.

Если вам нужен проект, то вы можете получить его в специальной рассылке. В нём будут всё что мы сделали на восьми стримах. Скрипты + модели, а также интересное специальное предложение. :)

7 курсов бесплатно

Начните карьеру разработчика игр бесплатно!


    Комментарии


    Отзывы