как запустить particle system через скрипт
Как запустить систему частиц через скрипт?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как через cron запустить php-скрипт?
Здравствуйте, нужна помощь. Пытаюсь запустить выполнение cron’a: */2 * * * * /home/add2.php в.
Как запустить скрипт PHP через JavaScript?
Возникла такая проблема: Нужно отправить сообщение со страницы, не перезагружая её. Для отправки.
Как запустить службу через php-скрипт?
Здравствуйте. Помогите пожалуйста уже 4 день роюсь в гугле но похожей темы не нашел. имеется jar.
Как запустить sh скрипт через screen одной командой?
Нужно запустить скрипт который находится в /home/example/server/start.sh его нужно запустить.
Как исправить систему частиц
Дело обстоит так. Когда персонаж касается врагов он уничтожается, и запускается particle system.
Решение
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Подскажите, как удалённо, через putty, запустить скрипт на выполнение
Сразу прошу простить,что пишу в этот топик,но вроде как подходит. есть роутер с openwrt, в нём.
Как лучше реализовать независимую от FPS систему частиц?
Всем доброго времени суток. Серьёзно программировать на XNA я начал недавно (чуть более месяца.
Как запустить VBS- или JS-скрипт через Task Sheduler или GPO?
Уважаемые профессионалы! Крайне необходимы Ваши рекомендации, по части решения следующей, и.
Как запустить скрипт(на сервере нет интерн) через другой сервер,кот выходит в нет
Всем привет.возникла такая надобность запустить скрипт на сервере, который работает в локалке, т е.
Запустить скрипт через терминал
Ребят! НУЖНА СРОЧНО ПОМОЩЬ скада написана на СИ, все работало, операторы(работники ТЭЦ) вырубили.
Вывод внутриигровых сообщений с помощью Particle System
Задача
При разработке нашей игры The Unliving, мы поставили перед собой задачу по отображению различных сообщений, таких, как нанесенный урон, нехватка здоровья или энергии, величина награды, количество восстановленных очков здоровья и т.д., с помощью Particle System. Это было решено сделать для того, чтобы получить больше возможностей для кастомизации эффектов появления и дальнейшего поведения таких сообщений, что проблематично при использовании стандартных элементов UI-системы Unity.
Кроме того, данный подход подразумевает использование всего лишь одного инстанса Particle System для каждого типа сообщений, что дает огромный прирост в производительности по сравнению с выводом этих же сообщений с помощью Unity UI.
Сообщение о величине урона
Текстовое сообщение о нехватке здоровья
Алгоритм решения
С помощью шейдера отображаем заранее подготовленную текстуру, используя правильные UV-координаты. Информацию с UV-координатами передаем двумя потоками (vertex streams) в ParticleSystem с помощью ParticleSystem.SetCustomParticleData в виде списка Vector4.
Наша реализация предполагает использование текстуры содержащей 10 строк и 10 столбцов символов. В качестве шрифта может быть использован любой моноширинный шрифт. Это необходимо во избежание разных интервалов между символами сообщения.
Пошаговая реализация
Создание Vector4 для передачи в Vertex Stream
Для описания набора символов будем использовать структуру SymbolsTextureData.
Массив chars необходим заполнить вручную, по порядку добавив в него все символы текстуры шрифта начиная с левого-верхнего угла.
В результате мы получим класс TextRendererParticleSystem. При вызове публичного метода SpawnParticle, будет происходить спаун одной частицы Particle System в нужную позицию, с нужным значением, цветом и размером.
Particle System в Unity позволяет передать кастомные данные в виде 2х потоков Vector4.
Мы намеренно добавили лишний поток с UV2, чтобы избежать сдвига по координатам потоков. Если этого не сделать, то координатам X и Y Custom1-вектора в C# будут соответствовать Z и W TEXCOORD0 шейдера. И соответственно, Custom1.z = TEXCOORD1.x, Custom1.w = TEXCOORD1.y. Что доставит много неудобств в дальнейшем.
Как было описано ранее, для передачи длины сообщения и UV-координат символов мы будем использовать два Vector4. Так как Vector4 содержит 4 элемента типа float, то по умолчанию мы можем упаковать в него 4 * 4 = 16 байт данных. Т.к. наше сообщение будет содержать только длину сообщения (двузначное число) и координаты символов (двузначное число для каждого символа), то диапазон типа byte (0-255) для нас избыточен. В то время как использование десятичных разрядов подойдет отлично.
Точность float составляет 6-9 символов, значит мы смело можем использовать 6 разрядов каждой координаты Vector4 и не переживать за целостность и точность данных. На самом деле, мы пробовали паковать 7, 8 и 9 символов, но точности float не хватает.
Получается, что в каждый float, используя десятичные разряды, мы упакуем целых 6 цифр, в отличии от стандартного варианта с четырьмя байтами. Итого, один Vector4 будет содержать 24 однозначных числа.
Мы можем передать в потоке 2 вектора, поэтому будем использовать оба для передачи сообщения длиной до 23 символов:
Custom1.xyzw — первые 12 символов сообщения.
Custom2.xyzw — еще 11 символов сообщения + длина сообщения (последние 2 символа).
Например, сообщение «Hello» будет выглядеть следующим образом.
Координатам символов соответствуют номер столбца и строка положения символа в текстуре.
В коде упаковка строки в два Vector4 будет выглядеть следующим образом:
Вектора с CustomData готовы. Пришло время вручную заспаунить новую частицу с нужными параметрами.
Первое, что мы должны сделать, убедиться, что CustomData потоки активированы в настройках Renderer системы частиц:
Для создания частицы воспользуемся методом Emit() класса ParticleSystem.
Добавим оба блока в метод SpawnParticle() и C# часть готова: сообщение упаковано и передано GPU в виде двух Vector4 в Vertex Stream. Осталось самое интересное — принять эти данные и правильно отобразить.
Создаем материал и назначаем ему наш шейдер. На сцене создаем объект с компонентом ParticleSystem, назначаем созданный материал. Затем настраиваем поведение частиц и отключаем параметр Play On Awake. Из любого класса вызываем метод RendererParticleSystem.SpawnParticle() или используем дебажный метод.
С исходным кодом, ресурсами и примером использования можно ознакомиться здесь.
Система вывода сообщений в действии
Вот и все. Вывод сообщений с помощью Particle System готов! Надеемся, это решение принесет пользу разработчикам игр на Unity.
UPD: Производительность предлагаемого решения
В комментариях у нескольких человек возник вопрос насчет производительности данного способа. Специально сделал замеры профайлером юнити. Условия одинаковые — 1000 движущихся, меняющих цвет объектов.
Результат использования стандартного UI (единственный канвас, на котором находятся только 1000 UI Text объектов):
Общее время построения кадра не менее 50мс, из них 40мс уходит на обновление канваса. При этом объекты даже не спаунятся, а просто движутся.
Результат спауна 1000 партиклов с помощью нашего решения:
Вся магия происходит на ГПУ, даже в момент спауна 1000 частиц кадр рассчитывается менее чем за 5мс.
Unity: системы частиц
Системы частиц похожи на соль: даже небольшое количество может добавить готовящемуся «блюду» стиля. Современные игры, в которых не используются системы частиц, выглядят довольно бледно.
В прошлом нам приходилось каждую струйку дыма программировать самостоятельно. К счастью, благодаря встроенной модульной системе частиц Unity Shuriken делает создание частиц достаточно простой задачей. Эта система частиц проста в изучении и позволяет создавать сложные эффекты.
В этом туториале вы научитесь следующему:
Примечание: в этом туториале подразумевается, что вы знакомы с основами работы в Unity. Если вы новичок в Unity или вам нужно освежить свои знания, то для начала изучите наш туториал Introduction to Unity.
Приступаем к работе с системами частиц
Скачайте заготовку проекта для этого туториала и распакуйте её в удобное для вас место. Учтите, что для работы с туториалом вам понадобится как минимум Unity 2017.2.
Откройте Starter Project в Unity. Ассеты внутри него распределены по нескольким папкам:
Добавление системы частиц
В общем случае система частиц испускает частицы в случайных точках в пределах заранее определённого пространства, которое может иметь форму, например, сферы или конуса. Система определяет время жизни самой частицы, и когда оно заканчивается, система уничтожает частицу.
В системах частиц удобно то, что они являются компонентами, которые можно добавлять к любому GameObject в сцене. Хотите, чтобы из глаз акул вырывались лазерные лучи? Просто добавьте к GameObject глаза акулы систему частиц!
Откройте сцену Torch в окне Project Window и запустите сцену:
Пока здесь не происходит ничего интересного. Факел висит на стене, но на нём не видно огня. Для начала нам нужно добавить систему частиц.
Остановите выполнение сцены и выберите TorchFireParticles в Hierarchy. В Inspector нажмите на кнопку Add Component. Найдите Particle System и нажмите, чтобы добавить её:
Примечание: вы могли заметить, что я не добавил систему частиц непосредственно к GameObject MedievalTorch. Я сделал так, чтобы частицы испускались из ёмкости с топливом в верхней части, а не из середины факела.
Запустите сцену, и вы увидите, что частицы уже испускаются:
Примечание: вы можете видеть вместо белых розовые частицы. Похоже, это баг Unity с заданием текстуры по умолчанию. Если у вас произошло такое, то не волнуйтесь, скоро мы зададим правильную текстуру пламени. Если вы хотите исправить этот баг уже сейчас, то нажмите на раздел Renderer системы частиц, нажмите на точку рядом с полем Material и в открывшемся окне дважды щёлкните Default-Particle.
При выборе GameObject с присоединённой к нему системой частиц вы заметите в правом нижнем углу окна сцены чёрное диалоговое окно. Это диалоговое окно позволяет симулировать или останавливать систему частиц. Нажатие на кнопку Simulate активирует систему частиц и заменяет её на кнопку “Pause”. Чтобы остановить симуляцию, нужно нажать на кнопку “Stop”.
Это диалоговое окно полезно при создании систем частиц, выполняемых в течение ограниченного периода времени, например, для взрывов.
Рассмотрим систему частиц внимательнее
Взгляните на Inspector. Вы заметите, что добавленный нами компонент системы частиц имеет несколько подразделов:
Каждый из этих подразделов называется модулем (Module). В этих модулях содержатся параметры системы частиц. Развёрнутый по умолчанию модуль называется модулем Main:
Модуль Main — фундамент любой системы частиц в Unity. Здесь находятся самые основные параметры частиц:
Сверху: 8 секунд. Внизу: 3 секунды
Сверху: 2. Снизу: 10
Задайте значение скорости 0.75; так эффект пламени будет медленнее и плотнее.
Примечание: изменяя параметры системы частиц, вы будете видеть её предварительный обзор в окне Game. В процессе выполнения туториала посматривайте на этот предварительный обзор.
Запустите сцену, чтобы посмотреть, как повлияли внесённые изменения:
Мы настроили факел, но эффект огня пока оставляет желать лучшего. К счастью, в модуле Main есть дополнительные опции, позволяющие усовершенствовать форму и поведение факела.
Другие свойства модуля Main
Выберите в иерархии GameObject TorchFireParticles и прокрутите вниз, к системе частиц. В модуле Main Module посмотрите на следующие свойства:
Сверху: 0.2. Внизу: 1.
Сверху: 0°. Внизу: 45°
Сверху: local space. Внизу: world space
Снова запустите сцену, чтобы увидеть, как на неё повлияли изменения:
С каждым разом становится всё больше похожим на пламя, правда?
Однако нам нужно больше частиц. Для этого нам нужно изменить emission системы.
Знакомство с модулем Emission
Модуль Emission управляет количеством и временем испускаемых частиц в системе и позволяет создавать любые эффекты, от постоянного потока до резкого взрыва частиц.
Находясь в Inspector системы частиц, нажмите на заголовок модуля Emission:
При этом откроется модуль Emission:
Rate over Time представляет количество частиц, испускаемых за секунду. Задайте для Rate over Time значение 15.
Запустите сцену снова; теперь система частиц будет больше походить на горящее пламя.
Но заметно, что она всё ещё больше похожа на дым. И здесь мы внесём самое большое изменение на текущем этапе туториала: собственную текстуру!
Добавление собственной текстуры
У всех частиц есть материал частиц и текстура, задающая их внешний вид. С текстурой по умолчанию мы можем сделать только это. Заменив текстуру, мы можем создавать эффекты наподобие волшебных звёздочек, дыма и, разумеется, огня.
Заменить текстуру частиц достаточно просто. До этого момента частицы отрисовывались на экране с помощью материала Default-Particle, который является материалом частиц с круговой градиентной текстурой:
Чтобы заменить этот материал, выберите в иерархии GameObject TorchFireParticles. Затем найдите в инспекторе компонент системы частиц и откройте модуль Renderer системы частиц.
Откройте папку Materials в окне Project View и перетащите на FireMaterial Material на свойство Material:
Затем запустите сцену, чтобы увидеть, как применяется наша выбранная текстура:
Чувствуете жар? Однако пламя слишком широкое; Чтобы исправить это, нам нужно изменить форму системы частиц.
Изменение формы системы частиц
Модуль Shape, как можно понять из названия, управляет формой и поведением частиц в этой форме. Можно выбрать одну из нескольких различных форм; каждая имеет свои собственные параметры. Это позволяет создавать частицы в параллелепипеде, в сфере или даже в собственном меше!
Разверните модуль Shape в инспекторе:
В качестве формы (shape) системы частиц выбран конус (cone), то есть частицы испускаются из основания base и движутся наружу под углом (angle):
В показанном выше примере основание окрашено синим, угол зелёным, а частицы — красным. Также стоит заметить, что при развёрнутом модуле Shape мы видим в окне Scene удобный предварительный обзор конуса:
Меняя Angle, можно изменять размер конуса, делая его шире или уже. Укажите значение 7; так мы получим удобную узкую границу, которая немного расширяется, когда частицы поднимаются вверх.
Меняя Radius, мы можем менять размер основания. Чем больше значение, тем больше будут рассеиваться частицы при испускании. Выберите значение 0.2; так мы обеспечим создание пламени внутри ёмкости для топлива факела.
Запустите сцену и посмотрите, как изменилась форма пламени:
Оно начинает походить на настоящее пламя! Последнее, что можно сделать — изменять размер частиц с течением времени их жизни.
Изменение размера с течением времени жизни
С помощью модуля Size over Lifetime можно создавать частицы, увеличивающиеся или уменьшающиеся с течением их жизни, или даже пульсирующие, как светлячки в лесу.
Найдите в списке модулей системы частиц раздел Size over Lifetime. По умолчанию от выключен, поэтому поставьте флажок рядом с названием модуля:
Разверните модуль Size over Lifetime, нажав на его название. Так вы откроете тёмно-серый фон с плоской кривой (Curve) в верхней части:
Нажмите на тёмно-серый фон, чтобы открыть редактор кривых в нижней части инспектора. Горизонтальная ось отображает время жизни частицы, а вертикальная ось — её размер:
Для редактирования кривой можно перемещать ключевые точки с обоих сторон красной линии; добавлять новые ключи можно двойным нажатием на любое место кривой. Для удаления ключевых точек нажмите правой клавишей мыши на точку и выберите Delete Key. Также можно выбрать одну из заранее созданных кривых в нижней части окна:
Вспомните, как ведут себя языки пламени в реальном мире: они уменьшаются при поднятии частиц вверх. Чтобы имитировать такое поведение, мы выберем третью готовую кривую справа для создания плавно опускающейся кривой:
Запустите сцену, чтобы увидеть эффект во всей его полноте!
Поздравляю! Вы узнали, как настраивать новую систему частиц и изменять её по своему усмотрению для создания красивого эффекта огня.
В следующем разделе мы разбудим в себе внутреннего Майкла Бэя, чтобы научиться создавать эффекты взрывов!
Создание эффекта бомбы
Создать эффект взрыва в Unity довольно просто. Как только вы разберётесь, как создавать экземпляры частиц по своему усмотрению, вы сможете использовать этот эффект для таких вещей, как колёса автомобиля, выбрасывающие искры при трении о землю, или воздушные шары, которые взрываются и выбрасывают из себя конфетти.
Откройте Bomb scene в Project Window и запустите сцену:
В нижней части сцены есть пол, но кроме него в сцене больше ничего не происходит.
Запустите сцену снова, чтобы увидеть, как появляются бомбы:
Откройте скрипт Bomb в папке Scripts окна Project Window.
Добавьте в Start() следующий код:
Теперь бомбы при падении красиво вращаются. Но я обещал вам взрывы!
В иерархии нажмите на кнопку Create и выберите Create Empty. Нажмите на созданный GameObject и назовите его ExplosionParticles. Далее добавьте к этому GameObject новую систему частиц. Если вы забыли, как создавать систему частиц, то посмотрите первый раздел туториала.
Создав систему частиц, перетащите GameObject ExplosionParticles из иерархии в папку Prefabs в Project Browser. После этого удалите GameObject ExplosionParticles из Project Hierarchy.
Затем выберите префаб Bomb в папке Prefabs и перетащите префаб ExplosionParticles в слот Explosion Particles Prefab Bomb следующим образом:
Как и в случае с факелом, мы будем использовать для системы частиц материал Fire.
Выберите префаб ExplosionParticles в окне Project Window, а затем разверните в инспекторе модуль Renderer. Перетащите FireMaterial из папки Materials из окна Project Window в слот Material, как показано ниже:
Чтобы завершить эффект, нам нужно изменить следующие параметры в модуле Main:
Создание взрыва
Если вы решили, что это модуль Emission, то вы молодец!
Разверните Emission Module. Rate — это количество частиц, создаваемых за секунду. Для взрыва нам нужен не постоянный поток частиц, а резкая вспышка.
Задайте Rate over Time значение 0. Теперь перейдите к Rate over Distance и вы увидите список Bursts, который по умолчанию пуст:
Burst — это набор частиц, испускаемых одновременно в определённый момент времени.
Нажмите на кнопку + в нижнем правом углу, чтобы добавить новый Burst. Вы увидите два поля: Time и Count:
Оставьте Time равным 0, и задайте Count значение 150. Такие параметры заставят систему частиц одновременно испускать 150 частиц в начале системы.
Запустите сцену. Как всё выглядит теперь?
Для начала развернём модуль Shape:
Мы уже использовали этот модуль для формы пламени факела, но здесь можно выбрать и другие формы. Нажмите на раскрывающееся поле, в котором написано Cone, чтобы увидеть все доступные варианты:
Каждая форма влияет на эмиттер по-своему. На каждой показанной ниже анимации показан одинаковый эмиттер, у которого меняется только форма:
От одной системы можно получить множество различных эффектов, просто меняя её форму! Для создания реалистичного взрыва выберите форму Sphere.
Запустите сцену и готовьтесь взорваться:
Теперь всё выглядит потрясающе!
Изменение цвета
Открыв систему частиц в инспекторе, нажмите на флажок рядом с модулем Color over Lifetime, чтобы включить его, а затем разверните его. Вы сразу увидите слово Color с белым блоком рядом с ним. Нажмите на белый блок:
При этом откроется редактор градиента:
Изменение цвета в течение времени жизни частиц представлено в виде градиента. Начальный цвет находится слева, и частицы постепенно изменяют цвет на указанный в правой части:
Четыре белые полосы по краям называются маркерами; нажмите между двумя имеющимися маркерами, чтобы добавить новый. Чтобы удалить маркер, перетащите его с полосы:
Верхние маркеры управляют Alpha или непрозрачностью цвета, а нижние — значениями цвета RGB (Red, Green, Blue).
Нажмите на самый правый альфа-маркер. В нижней части редактора градиента будет показано текущее значение альфа-канала:
Перетащите ползунок к 0. Теперь частицы будут постепенно становиться прозрачными в течение времени свой жизни.
Снова запустите сцену, чтобы посмотреть, как повлияли внесённые изменения:
Хотите ещё больше улучшить сцены? Вернитесь к сцене с факелом и сделайте так, чтобы пламя использовало модуль Size Over Lifetime Module для получения похожего эффекта.
Куда двигаться дальше?
Готовый проект можно скачать отсюда.
В этом туториале вы узнали, как в Unity работают системы частиц и их модули, а также научились тому, как настраивать их для получения нужного эффекта. Поэкспериментируйте с различными параметрами, чтобы увидеть, каких ещё эффектов можно добиться.
Подробную информацию о системе частиц Shuriken и её модулях см. в официальной документации Unity и в видео о системах частиц. Также о скриптинге систем частиц можно подробнее узнать здесь.