Перейти к содержимому

Как сделать партиклы поверх объектов unity

  • автор:

Поместить Particle System за Sprite Unity 2D

кто нибудь знает как поместить Particle System за Sprite? Sprite Renderer не использую, у меня изначально был Empty Object куда я навесил Image, Animation и Event Trigger. Сверху над объектом у меня весит Particle System и идёт вниз что-то вроде дождя из другого спрайта. Проблема в том что Particle System идёт поверх этого объекта (да и не только, он идёт поверх всех объектов), мне нужно это исправить, ну конечно нужно ещё чтобы он не шёл за background’ом Также пытался играться с этим:

GetComponent().sortingOrder = 0; 

но мне не помогло, возможно не правильно использовал (Навесил новый скрипт на Particle и в Start() добавил эту строку).

Отслеживать
задан 18 сен 2019 в 19:53
Jake Morgan Jake Morgan
5 3 3 бронзовых знака

По умолчанию частицы имеют полупрозрачный (transparent) шейдер, который рисуется после всех непрозрачных шейдеров, какой бы порядок отрисовки вы бы не ставили.

Частицы в Unity3d

Всем привет! Меня зовут Евгений Серегин, на рендер.ру я под ником lazycow . Портфолио можете посмотреть тут http://evgenyseregin.wix.com/portfolio.В свое время я работал художником по спецэффектам в компании Biart. Дело было для меня новым и поэтому интересным. Давно хотел попробовать себя в данном качестве. Сейчас решил поделиться некоторым опытом . Итак, урок посвящен частицам в Unity3d. Предназначен скорее для новичков, но каждый, думаю, найдет что-то для себя интересное. Движок сегодня очень популярен и не осваивает его только ленивый. К тому же проект, над которым я сейчас работаю мы делаем тоже на Юнити. Пару вводных фраз о самих эффектах, чтобы понимать что к чему куда и как. Мое личное мнение, что 70% отлично выглядящего эффекта составляет правильно сделанная, качественная текстура. Сюда же входят цвета, наилучшим образом передающие суть эффекта, ее размер, анимированная она или нет, с альфа каналом или без. Текстура всегда должна быть оптимальной. К примеру, нет смысла делать маленькую искру на листе 256х256. Тут достаточно 8х8 или 16х16. Оставшиеся 30% успеха создаются умело настроенным поведением частиц. Чтобы развить этот навык – смотрите больше референсов, подмечайте различные эффекты в жизни, в кино, в играх. Изучайте физику вещей. Очень хороши замедленные съемки всякого рода взрывов, выстрелов, горящего огня и т.д.
Начнем. Перед тем, как настраивать эффект необходимо определиться из каких частей он будет состоять. В нашем примере – это пламя, искры, дым и немного искажения в стиле горячего воздуха в пустыне . Всегда помните, что чем проще и оптимальнее эффект, тем больше их можно использовать на сцене и тем меньше все будет тормозить. Далее мы определяемся с общим видом эффекта – что это будет. Собираем референсы, изучаем, как ведет себя огонь в горящих бочках, что там горит – это дает понимание какой будет дым по цвету и по интенсивности. Бывает неплохо набросать эффект, несколько фаз его развития на бумаге, чтобы понимать что делать. Своеобразная раскадровка.
Запускаем Юнити. У меня версия 4.1. В какой-то из предыдущих версий была переделана система частиц, поэтому на очень старых версиях редактора урок может быть не актуален. Из меню выбираем GameObject>Create Other>Particle System. У нас появилась система частиц с летящими белыми пятнами. В правом нижнем углу вьюпорта должно появиться маленькое окошко, которое помогает запускать симуляцию эффектов, останавливать их, ставить на паузу, менять скорость проигрывания (ВНИМАНИЕ! Скорость самого эффекта изменяется не здесь).Это позволяет отловить различные артефакты и косяки при очень быстрых эффектах, например выстрел. Чтобы понимать размер эффекта относительно мира я рекомендую настраивать на уже готовых объектах. В нашем случае – это бочка. Ставим бочку в координаты 0,0,0, вводя их в свитке Inspector в окошки сабсвитка Transform. Если свитка нет, то в меню Window включите его, а так же свиток Hierarchy. Далее выбираем нашу Particle System и ставим ее так же в 0,0,0. И чуть поднимаем вверх, чтобы огонь горел не на самом дне, а начинался чуть выше. Систему частиц можно переименовать, кликнув по ней в свитке Hierarchy и нажав F2. Я назвал нашу систему частиц FireMetalBarrelы. рис. 001

ОГОНЬ Теперь в свитке Inspector в сабсвитке Particle System появились настройки нашей системы частиц. В принципе можно настраивать и отсюда их. Но удобнее будет нажать кнопку «Open Editor…». Откроется окно со всеми эмитерами и их настройками. Очень удобно, если настраивается сложный эффект. Визуально все понятно и не возникает путаницы. Справа вверху у Вас будет несколько вспомогательных кнопок Show Selected, Resimulate, Wireframe. Show Selected чуть затемняет все не выбранные эмитеры и подсвечивает тот, который Вы выбрали в данный момент. рис. 002 Выбирать эмитеры(после того, как Вы их создали, конечно) можно в свитке Hierarchy. Первое, что мы должны сделать, чтобы увидеть не дефолтные белые шарики, а нужную текстуру – это сделать материал и текстуру огня. Сразу оговорюсь, что делать текстуры то еще развлечение. Достаточно долгая и кропотливая работа. Но как я уже говорил – это стоит того в итоге. Я использую свои давние наработки, которые я делал для игры Deep Black. Для текстур огня и дыма я использовал FumeFX плагин для 3dsmax. Моделировал различные взрывы, интенсивность, направления и т.д. Потом рендерил в серии кадров. Так я получал различной интенсивности и размера огненные всполохи. С дымом чуть проще. Как? Расскажу позже. Итак, чтобы создать новый материал достаточно кликнуть правой кнопкой по любому месту в папке Materials (для моего проекта) рис. 003 Материал можно поместить куда угодно, в любую папку. Главное не запутаться, когда их будет много . Называем материал, в нашем случае это FireMed. Назначаем материалу шейдер Particles/Additive. В нашем случае это то, что нужно. Можете поэкспериментировать с шейдерами и назначить понравившийся. Tint Color позволяет корректировать цвет текстуры, а так же интенсивность альфаканала. Насколько материал будет прозрачным. Soft Particles Factor – это параметр, который позволяет сгладить пересечение частиц с плоскостью, на которой находится эмитер. Но и добавляет немного расчётов видеокарте, когда частиц много )). В пустом сером маленьком окошке нажимаем маленькую кнопку «Select», открывается окно выбора текстур. Ищете свою текстуру (все текстуры должны находиться в папке проекта, чтобы Юнити их видел). Можно набрать имя текстуры и найти ее. рис. 004 Возвращаемся в наш редактор частиц, выбираем эмитер FireMetalBarrel и сразу же переходим в самый нижний сабсвиток Renderer. Ставим галочку (это значит, что он не будет игнорироваться и будет активен ) и разворачиваем его кликом по нему. Render Mode оставляем Billboard. Это значит, что при любом угле обзора текстуры частиц всегда будут направлены в камеру. Снимаем галочки Cast и Receive Shadows так как шейдер материалов, типа Particles не принимает тени и не отбрасывает их. Перетаскиваем наш заготовленный материал в строчку Material и видим что-то отдаленно похожее на огонь. Материал можно так же назначить выбрав его из всех доступных, нажав маленький кружок обведенный зеленым цветом. рис. 005 Возвращаемся в начало нашего свитка FireMetalBarrel и начинаем настраивать один сабсвиток за другим. Сразу подскажу, что наведя мышку на любой параметр вы увидите всплывающую краткую подсказку о том, что он значит и как работает. Все настроенные параметры я приведу на скриншотах. У некоторых параметров есть опции – они обозначены маленькими черными треугольничками справа от параметра. Constant -постоянная величина, Curve – изменение параметра по кривой, например размер от малого к большому и опять к малому. Random between two constants – случайное значение в промежутке от одного до другого указанных значений. Random between two curves – то же, что и предыдущее, только крайними значениями выступают кривые. рис. 006 Опишу действие параметров: Duration – общая продолжительность эффекта. Как показала практика особо не влияет при зацикленных эффектах. Looping – зацикленность Prewarm – как бы прогрев эффекта, чтобы он начался уже с основной интенсивностью Start Delay – задержка в старте проигрывания в секундах Start Lifetime – Время жизни в секундах Start Speed – скорость, с которой стартуют частицы Start Rotation – стартовая повернутость частицы на определенный градус. В нашем случае от 0 до 360. Start Color – стартовый цвет. Можно регулировать по альфе или по цвету. Gravity Multiplier – множитель гравитации. 9,82 м/c– гравитация для планеты Земля. Inherit Velocity – наследуемая скорость для следующих частиц. Simulation Space – система координат. В нашем случае – world. При Local позволяет частицам перемещаться вместе с эмитером, как например, двигатель космолета. При world – частицы ведут себя, как факел, который несут, т.е. отстают от эмитера. Play on Awake – частицы стартуют автоматически. Max Particles – максимальное кол-во частиц одновременно проигрываемых из этого эмитера.

Emission
Rate – количество частиц генерируемое в секунду. Bursts – Параметр, который позволяет выбрасывать сразу нужное кол-во частиц в указанные промежутки времени, а не одна за другой последовательно. Выключен, в нашем случае. Shape Shape – форма эмитера. Конус, сфера, полусфера, бокс, меш. Angle – угол разброса. В нашем случае 15 градусов. Radius – радиус эмитера. Emit from – откуда генерируются частицы. Из одной точки, из всего тела эмитера и т.д. Random Direction – Задает случайное направление движения частиц. Помогает создать некую мелкую хаотичность в нашем случае с генерацией языков пламени. Velocity over Lifetime Параметр позволяет рандомайзить скорость движения частиц в течение их жизни. В нашем случае система координат world и направление вверх, т.е. по Y. Случайная скорость от 0.5 до 1. Получается, что языки пламени движутся с разной скоростью. Force over Lifetime Система координат тоже world. Помогает задать влияние небольших сил, которые смещают частицы в стороны по Х и по Y на небольшие расстояния. Y в данном случае почему то работает, не вверх, как в предыдущем. Color over lifetime Очень важный параметр, который помогает сделать плавным визуальное появление частицы по альфе и плавным ее пропаданием. рис. 007 Тут можно регулировать цвета и альфаканал. Rotation over Lifetime Параметр позволяет придать некоторое вращение в течение жизни. В нашем случае от -20 до 30 градусов. Частицы вращаются в случайные разные стороны с медленной скоростью, что тоже придает реализма.
Остальные параметры нам оказались без надобности, но Вы можете поэкспериментировать и попытаться настроить еще лучше .

ДЫМ. Если Вы все сделали правильно, то у Вас должно получиться довольно неплохое пламя. Но, сам эффект еще не готов и на половину и поэтому не стоит расстраиваться, если огонь далек от идеала. Сейчас я расскажу о том, как сделать дым. По сути с ним все просто – это тот же самый огонь лишь клонированный и немного перенастроенный рис. 008 и с материалом (текстурой дыма). Копируем так – выбираем наш эмитер огня FireMetalBarrel, нажимаем Ctrl+D переименовываем в Smoke и перетаскиваем новый эмитер прямо на FireMetalBarrel, чтобы эмитер Smoke стал дочерним объектом и все они вместе образовывали иерархию. Все это делается в свитке Hierarchy. Подробнее хочу остановиться на том, как сделать текстуру дыма. Тут я не использовал никаких плагинов – только старый добрый Фотошоп и Гугл . Ищем картинку одинокого облака в Гугле. Я нашел вот такую рис. 009 После небольшой обработки по размерам и десатурейту (превратил в ч/б) и добавления альфа канала путем копирования самого изображения и вставки в канал альфа – имеем нечто похожее на текстуру дыма. рис. 010 Кстати я рекомендую стараться делать все текстуры кратные степени двойки по сторонам, типа 128х128, 1024х512, 64х16 и т.д. Это сэкономит Вам уйму времени, если надумаете использовать их потом еще в других проектах.
Создаём новый материал Smoke и настраиваем его по образу и подобию материала огня с той разницей, что используем немного другой шейдер и другую текстуру. рис. 011 Вводим параметры, как показано на рисунке 008.
ИСКРЫ.
Искры, по сути, тот же клонированный огонь с измененными параметрами и другим материалом. Назовем этот эмитер Spark. Настройки для него показаны на рис. 012. рис. 012 Текстуру можете сделать в Фотошопе – это маленькая точка или точка с небольшим свечением вокруг. Размер текстуры, как я уже говорил в начале 16х16 или около того. Шейдер – Particles/Additive.
ГОРЯЧИЙ ВОЗДУХ. Здесь опять тот же хорошо настроенный, клонированный и чуть модифицированный эмитер огня, но все дело делает шейдер, который по дефолту не идет с Юнити. У нас он был написан нашими программистами для проекта. Думаю не составит труда найти подобный шейдер в инете.

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

Ну и финальный результат смотрите на видео:

816 0 850 15

Да, с появлением Сюрикена, работать с частицами в Юнити стало удобнее и приятнее) Хороший урок, многим будет полезен.

Основы создания партиклов в Unity

Приветствую начинающих разработчиков. В данной статье мы научимся создавать партиклы, а так же рассмотрим самые основные и частоиспользуемые настройки для работы с ними. Ещё мы научимся взаимодействовать с партиклами при помощи C# скриптов. Долго затягивать не будем, и перейдём сразу к делу.

Первым делом создадим объект партикла. Для этого с помощью окна Hierarchy кликаем ПКМ — Effects — Particle System, после чего будет создан объект с именем Particle System. А на игровой сцене появятся бесконечно создаваемые частицы.

Если мы кликнем на объект Particle System, то в окне Inspector, в компоненте Particle System можно заметить огромное количество настроек, благодаря которым мы сможем делать с партиклами практически всё что угодно.

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

Основные настройки

Основные настройки самые простые, поэтому пройдём по ним очень кратко:

  • Duration — продолжительность создания партиклов.
  • Looping — будут ли партиклы зациклены, то-есть воспроизводится бесконечно.
  • Start Delay — Задержка перед началом воспроизведением частиц.
  • Start Lifetime — Время жизни каждой частички
  • Start Speed — Скорость полёта частичек
  • 3D Start Size и Start Size отвечают за размер частиц.
  • Start Rotation и Flip Rotatuon отвечают за поворот и вращение частиц.
  • Start Color — указывает цвет частиц.
  • Gravity Modifier — указывает силу, с которой гравитация будет действовать на частицы.
  • Simulation Space — указывает, относительно чего будут работать частицы: относительно самого объекта партиклов, относительно мирового пространства, или относительно какого-либо другого объекта. Данное поле настраивается в тех случаях, когда сам объект партиклов передвигается по игровой сцене.
  • Play On Awake — будут ли партиклы запускаться сразу при старте игры.
  • Max Particles — максимальное количество партиклов

Так же хочу обратить ваше внимание на то, что напротив полей с числовыми значениями имеются маленькие белые треугольнички. Например, кликнув на треугольничек напротив поля Start Speed, и выбрав Random Between Two Constans, мы можем указать скорость для наших создаваемых частиц в случайном диапозоне, например от 2 до 5 для каждой новой частицы.

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

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

Дополнительные разделы

Как уже говорилось выше, мы рассмотрим только самые частоиспользуемые разделы.

Emission

И начнём мы с настроек Emission, у которой поставлена галочка, то-есть она включена по умолчанию. Данный раздел довольно интересный, он отвечает за интенсивность создаваемых частиц.

  • Rate Over Time — количество частиц, которые равномерно будут создаваться за единицу времени(1 секунда).
  • Rate over Distance — количество создаваемых частиц за единицу пройденного расстояния. То-есть частицы создаются только тогда, когда объект находится в движении. Часто используется при создании частиц от ходьбы персонажа.
  • Bursts — здесь можно настроить резкий всплеск частиц. То-есть, если в двух предыдущих полях частицы создаются равномерно, то здесь частицы создаются дискретно. Довольно часто применяется когда после взрыва необходимо одномоментно создать много частиц, летящие в разные стороны, или при попадании пули в игрока, резко создаётся много частиц в виде крови.

P.S. Так же не забывайте о белых стрелочках сбоку, благодаря которым можно указать случайный интервал значений.

Shape

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

Самое главное поле в данном разделе, это поле Shape, которое отвечает за форму, из которой создаются частицы. При изучении форм поля Shape, советую выбрать на игровой сцене режим 3D, поскольку некоторые формы имеют 3D измерение, и в 3D режиме вам будет более легче понять, что это за форма.

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

Velocity over Lifetime

В данном разделе указывается направление движения частиц несколькими способами:

  • Linear — указывает линейное направление движения частиц по любой оси.
  • Orbital — указывает круговое движение по любой оси в виде спирали. Довольно интересное явление.
  • Speed Modifiel — сила движения частиц.

Color over Liftime

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

Раздел Color by Speed работает по такому же принципу, только цвет меняется в зависимости от скорости движения частиц. В отличии от предыдущего раздела, это используется не часто.

Noise

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

Collision

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

Triggers

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

Texture Sheet Animation

В данном разделе для наших партиклов можно создать анимацию. Используется очень редко, но в некоторых случаях очень полезная вещь.

Lights

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

Renderer

Раздел Renderer включен по умолчанию. Единственная частоиспользуемыя вещь в данном разделе, это поле Material, где можно изменить изображение для наших частиц.

Остальные

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

Скрипты

Как уже говорилось выше, мы можем работать с нашими партиклами через скрипт. Например, если ваши партиклы изначально выключены, и нам его необходимо включить через скрипт, то создаём C# скрипт для нашего объекта, и пишем в него следующий код.

using UnityEngine; public class NewBehaviourScript : MonoBehaviour < public ParticleSystem partSystem; private void Start() < partSystem.Play(); >>

В строке #5 мы создаём переменную partSystem для хранения ссылки на наш компонент партиклов. Поэтому не забудьте в окне Inspector в данное поле перетащить объект партиклов.

А в методе Start() мы запускаем работу партиклов. Все свойства и методы для работы с партикламы через скрипт, можно увидеть на странице скриптовой документации ParticleSystem.

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

А на этом всё. Если у вас остались какие-либо вопросы, задавайте их в комментариях. Ну и не забывайте о лайках 🙂

Есть ли слои у Particle System?

Мне нужно в 2д проекте, чтобы мои частицы отображались поверх всех других спрайтов. Как это сделать?

  • Вопрос задан более двух лет назад
  • 140 просмотров

Комментировать

Решения вопроса 1

из простого видимо никак, потому что партиклы находятся в мире, но если у тебя 2д приложение, можешь по z оси подвинуть ближе к камере. а сложный вариант это сделать еще одну камеру, которая будет видеть только партиклы и воспроизводить картинку с нее поверх основной камеры, как сделать — ищи сам

Ответ написан более двух лет назад

Комментировать

Нравится Комментировать

Ответы на вопрос 0

Ваш ответ на вопрос

Войдите, чтобы написать ответ

c#

  • C#
  • +1 ещё

Как проверять столкновение префаба и UI панели в Unity?

  • 1 подписчик
  • 7 часов назад
  • 23 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *