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

Unity3D. Particle Systems путь по траектории

Здравствуйте дорогие читатели!

Сегодня я хочу рассказать о том как можно расширить возможности Particle Systems в Unity3D используя скрипты.

Для примера я на пустую сцену добавил Particle System из меню GameObject

u3dgops

Теперь нужно его немного отредактировать для наглядности. Я изменил Start Speed на 0, чтобы частицы не имели начальной скорости, а просто оставались на месте, а также в Simulation Space выбираю World, чтобы частицы не привязывались к родительскому объекту, а стали независимыми.

u3dpschpr

Теперь наш Particle System больше похож на облако. Добавим к его GameObject скрипт. Для этого выделяем GameObject нашего Particle System и нажимаем в его свойствах в самом низу кнопку Add Component.

u3dans

Называете его как вам захочется. Я назвал его Circle.

u3dan1

Теперь немного усложним задачу и заставим двигаться объект по спирали. Для этого создадим ещё одну переменную y, которой присвоим значение _tick/10. Если оставить просто _tick, то скорость «взлета» будет слишком большой.

u3dan2

Всем спасибо за внимание!

8 комментариев для “Unity3D. Particle Systems путь по траектории”

  1. Спасибо за статью. А как сделать, чтобы движение было не по часовой, а против часовой стрелки? И как организовать движение по спирали вниз?
    На вашем сайте часть интерфейса не переведена. И текст в кнопке «Добавить комментарий» вылезает за её пределы

    1. Спасибо за ваш комментарий! Сайт свежий и пока доводится до ума.
      Для того, чтобы двигаться против часовой стрелки нужно в строчке
      Vector3 addVector = new Vector3(x, y, z) * 5;
      поменять местами x и z. То есть будет выглядеть вот так:
      Vector3 addVector = new Vector3(z, y, x) * 5;
      А с движением по спирали вниз ещё проще. Уменьшать _tick:
      _tick -= 0.1f;
      Кстати, если _tick уменьшать, то направление движения тоже должно смениться на противоположное.

  2. Здравствуйте, пробую использовать Ваш скрипт у себя в 2D игре. Particle System крутиться вокруг объекта, но я столкнулся с проблемой, что частицы отрисовываются перед объектом, даже тогда, когда партикл находится за объектом. Вы случай не сталкивались? Может подскажите как это вылечить?

    1. Здравствуйте. Прошу прощения за задержку — в отпуске =) Поэтому Unity под рукой сейчас нет.
      Попробую помочь по памяти.
      Посмотрите настройки у вашего Sprite Renderer. Там есть свойство «Order in Layer». Если оно стоит выше 0 — то спрайт будет прорисовываться всегда над любыми 3D объектами, даже если они перед ним. Попробуйте использовать отрицательные значения. Если что — отпишитесь. Я постараюсь здесь найти Unity, либо после отпуска.

      1. “Order in Layer” выставил у всех элементов == 0, но проблема актуальна.. если важно то использую юнити 4.6
        «всегда над любыми 3D объектами» — может проблема в том чтоу меня 2D объекты?..
        Хорошего отпуска!

        1. Снова простите за задержку. Надо смотреть, конечно, более детально всё.. И я бы вам, всё-таки, рекомендовал бы обновиться до 5ой версии Unity3D. Хотя бы по причине того, что все «плюшки», закрытые у 4.6 станут доступны в 5ой версии =) Ну за редким исключением

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

    1. Попробуйте константу 5 в строке 19 вывести в переменную. Смотрите код ниже:

      Единственное — в таком случае и скорость «поднятия» спирали будет выше. Но можно задавать в addVector y после умножения на Radius.
      addVector.y = y;

      Я сейчас в отпуске, поэтому, к сожалению, проверить работоспособность кода не могу =)

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

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