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

Что такое скриптовые объекты?

ScriptableObject — это контейнер данных, который можно использовать для сохранения больших объемов данных независимо от экземпляров класса.

В Unity почти все сценарии, которые мы делаем, являются классами, унаследованными от MonoBehaviour. ScriptableObject (SO) — еще один базовый класс, который Unity предоставляет нам для определения наших собственных объектов, которые мы можем позже использовать в наших компонентах, сценариях и даже в самом редакторе.
SO создаются только один раз и могут использоваться несколькими объектами в нашей игре без создания и сохранения одних и тех же данных снова и снова.

Давайте посмотрим на пример

Мы создали класс, который будет представлять наш конфиг стрельбы. Возвращаясь к нашему космическому шутеру, этот SO будет отвечать за определение того, как игрок или враг будут стрелять. Наш класс включает в себя GameObject для prefeab снаряда и два числа с плавающей запятой для времени жизни и скорости нашего снаряда.

Наш класс также украшен CreateAssetMenu — это позволяет нам создавать объекты этого типа в редакторе Unity так же, как новый скрипт, новый спрайт или любой из встроенных типов Unity.

Если мы вернемся в наш редактор и щелкнем правой кнопкой мыши ➔ создать, мы увидим, что наша конфигурация стрельбы появляется вверху.

Теперь, когда мы создали SO, нам нужно его использовать. Давайте создадим класс шутера, который будет отвечать за нашу логику стрельбы.

Наш класс Shooter имеет ShootingConfigSO и метод Shoot. Мы берем префаб, скорость и время жизни, которые были определены в нашем SO, и используем их для создания экземпляров наших снимков. Очевидно, чтобы это работало, нам нужно вызвать наш метод Shoot из правильного места (в нашем методе обновления, если нажата клавиша съемки), но этот пример показывает основу того, как мы можем использовать наш SO в нашем коде.

Система усиления

Теперь, когда у нас есть SO и класс Shooter, построить нашу систему усиления очень просто. Все, что нам нужно сделать, это создать несколько конфигураций стрельбы (что мы легко можем сделать из контекстного меню редактора), а затем заменить их в нашем классе Shooter, когда мы столкнемся с усилением.
Наша текущая конфигурация стрельбы позволяет нам контролировать сборку, скорость и время жизни выстрела, поэтому мы можем создавать различные бонусы для быстрых и сильных выстрелов (вроде снайперской стрельбы) или для более медленных и слабых выстрелов.

Отсюда мы можем расширить наш SO, включив в него несколько конфигураций выстрелов, которые будут двигаться под разными углами и с разной скоростью, чтобы создать более интересную систему усиления, но основа есть.

Краткое содержание

В этой статье мы узнали, что такое объекты с поддержкой сценариев, как мы можем создавать их как в коде, так и в редакторе, и показали пример использования нашего SO в наших классах MonoBehaviour. их использование может сделать нашу игру намного быстрее, проще и легче.

Чтобы увидеть мою полную систему питания, посетите: https://github.com/Kremzon/Covid-Fighter.