Найти в Дзене

Unity 2D. Ruby's Adventure. Part 28

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

Если самостоятельно вы затрудняетесь это сделать, ниже представлена информация, которая может помочь вам достичь цели:

Создание эффекта удара.

Эффект дыма, который вы сделали, зацикливался и постоянно генерировал новые частицы. Но удар или сбор предмета требуют эффекта, который воспроизведется всего один раз. В этом вам поможет свойство Looping в основном разделе инспектора. Просто уберите флажок с этого свойства, чтобы система генерировала частица только в течение времени, которое вы установите в свойстве Duration (продолжительность). Установите значение этого параметра равным единице.

Свойство Start Lifetime, время жизни частицы, установите в Random Between Two Constants и введите значения 0.1 и 0.2.

Свойство Start speed, начальная скорость, установите на 0.

Свойство Start Size, начальный размер, установите на Random Between Two Constants и задайте значения 0.1 и 1.

Свойство Start Rotation, угол поворота частиц при генерации, установите на Random Between Two Constants и задайте значения 0 и 360.

Свойству Emmiter Velocity Mode (режим скорости генерации) установите значение Transform.

Свойству Stop Action установите значение Destroy, тогда система частиц будет уничтожена только после того, как все частицы завершат жизненный цикл.

Настройки основного раздела
Настройки основного раздела

Эффект дыма испускал частицы с постоянной скоростью. Но для некоторых эффектов необходимо генерировать сразу много частиц. Например, взрыв генерирует сразу много частиц дыма при создании. Вы можете установить этот показатель в разделе Emission .

Параметр Rate over Time определяет количество испускаемых частиц в секунду. Установите его значение равным 0.

Параметр Rate over Distance используется, чтобы система испускала частицы при движении, например, если вы хотите испускать частицы дыма только при движении автомобиля. Для этого предназначен подраздел Bursts. Нажмите кнопку "+", чтобы добавить всплеск, и установите, когда должен произойти всплеск и сколько частиц должно появиться:

Настройки раздела Emission
Настройки раздела Emission

В раздела Shape установите фигуру, которая ограничивает область генерации в Circle (круг) с радиусом 0.12. Свойство Mode установите в значение Burst Spread, что соответствует распространению взрыва.

Настройки раздела Shape
Настройки раздела Shape

Включите раздел Color over Lifetime, цвет с течением жизни, и установите параметр прозрачности в конце жизни частицы равным 0.

Настройки раздела  Color over Lifetime
Настройки раздела Color over Lifetime

Включите и откройте раздел Size Over Lifetime. Нажмите на поле «Size» и настройте кривую, которая появится внизу инспектора, как показано на скрине. Левое значение стоит примерно на значении 0.6.

Настройки раздела Size Over Lifetime
Настройки раздела Size Over Lifetime

Включите и откройте раздел Texture Sheet Animation. Установите режим «Sprites», а в качестве спрайта перетащите спрайт со взрывом из атласа спрайтов для эффектов:

Настройки раздела Texture Sheet Animation
Настройки раздела Texture Sheet Animation

В разделе Renderer подкорректируйте значение Order In Layer, например до 10, чтобы эффект всегда отображался поверх других объектов.

Создайте префаб из этой системы частиц и удалите ее со сцены.

Теперь в скрипт RubyController добавьте публичную переменную hitEffect типа ParticleSystem и сохраните скрипт. В инспекторе персонажа Ruby появится новое свойство, куда перетащите префаб эффекта взрыва:

Настройка переменной
Настройка переменной

Теперь в метод ChangeHealth в условие, после строки изменения анимации на Hit, добавьте строку:

Instantiate(hitEffect, transform.position + Vector3.up * 0.5f, Quaternion.identity);

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

Проверьте скрипт и сохраните его:

Скрипт персонажа
Скрипт персонажа

Запустите игру и проверьте, что все работает верно: