GPUParticles2D
Наследует: Node2D < CanvasItem < Node < Object
Двумерный излучатель частиц.
Описание
Узел 2D-частиц, используемый для создания различных систем частиц и эффектов. GPUParticles2D содержит излучатель, который генерирует некоторое количество частиц с заданной скоростью.
Используйте свойство process_material, чтобы добавить ParticleProcessMaterial для настройки внешнего вида и поведения частиц. В качестве альтернативы вы можете добавить ShaderMaterial, который будет применен ко всем частицам.
2D-частицы могут опционально сталкиваться с узлами LightOccluder2D, но они не сталкиваются с узлами PhysicsBody2D.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
capture_rect() const |
|
void |
convert_from_particles(particles: Node) |
void |
emit_particle(xform: Transform2D, velocity: Vector2, color: Color, custom: Color, flags: int) |
void |
request_particles_process(process_time: float) |
void |
Сигналы
finished() 🔗
Вызывается, когда все активные частицы завершили обработку. Чтобы немедленно перезапустить цикл испускания, вызовите restart().
Этот сигнал никогда не вызывается, когда one_shot отключен, так как частицы будут испускаться и обрабатываться непрерывно.
Примечание: Для эмиттеров one_shot, поскольку частицы вычисляются на GPU, может быть короткий период после получения сигнала, в течение которого установка emitting на true не перезапустит цикл испускания. Эта задержка устраняется путем вызова restart().
Перечисления
enum DrawOrder: 🔗
DrawOrder DRAW_ORDER_INDEX = 0
Частицы рисуются в порядке испускания.
DrawOrder DRAW_ORDER_LIFETIME = 1
Частицы рисуются в порядке оставшегося времени жизни. Другими словами, частица с наибольшим временем жизни рисуется спереди.
DrawOrder DRAW_ORDER_REVERSE_LIFETIME = 2
Частицы рисуются в обратном порядке оставшегося времени жизни. Другими словами, частица с наименьшим временем жизни рисуется спереди.
enum EmitFlags: 🔗
EmitFlags EMIT_FLAG_POSITION = 1
Частица стартует в указанной позиции.
EmitFlags EMIT_FLAG_ROTATION_SCALE = 2
Частица начинается с указанного поворота и масштаба.
EmitFlags EMIT_FLAG_VELOCITY = 4
Частица стартует с заданным вектором скорости, который определяет направление и скорость излучения.
EmitFlags EMIT_FLAG_COLOR = 8
Частица начинается с указанного цвета.
EmitFlags EMIT_FLAG_CUSTOM = 16
Частица начинается с указанных данных CUSTOM.
Описания свойств
Количество частиц, испускаемых за один цикл испускания. Эффективная скорость испускания равна (amount * amount_ratio) / life частиц в секунду. Более высокие значения увеличат требования к графическому процессору, даже если не все частицы видны в данный момент времени или если amount_ratio уменьшено.
Примечание: Изменение этого значения приведет к перезапуску системы частиц. Чтобы избежать этого, измените amount_ratio.
Соотношение частиц, которые должны быть фактически испущены. Если установлено значение ниже 1.0, это установит количество испускаемых частиц за время жизни на amount * amount_ratio. В отличие от изменения amount, изменение amount_ratio во время испускания не влияет на уже испущенные частицы и не приводит к перезапуску системы частиц. amount_ratio можно использовать для создания эффектов, которые заставляют количество испускаемых частиц меняться со временем.
Примечание: Уменьшение amount_ratio не дает выигрыша в производительности, поскольку ресурсы должны быть выделены и обработаны для общего amount частиц независимо от amount_ratio. Если вы не собираетесь изменять количество испускаемых частиц во время испускания частиц, убедитесь, что amount_ratio установлено на 1 и вместо этого измените amount по своему усмотрению.
float collision_base_size = 1.0 🔗
Множитель радиуса столкновения частиц. 1.0 соответствует размеру спрайта. Если частицы кажутся тонущими в земле при столкновении, увеличьте это значение. Если частицы кажутся плавающими при столкновении, уменьшите это значение. Действует только если ParticleProcessMaterial.collision_mode равен ParticleProcessMaterial.COLLISION_RIGID или ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT.
Примечание: Частицы всегда имеют сферическую форму столкновения.
Порядок отрисовки частиц.
Если true, частицы испускаются. emitting можно использовать для запуска и остановки испускания частиц. Однако, если one_shot равно true, установка emitting в true не перезапустит цикл испускания, пока все активные частицы не закончат обработку. Используйте сигнал finished, чтобы получать уведомления, как только все активные частицы закончат обработку.
Примечание: Для испускателей one_shot, из-за того, что частицы вычисляются на GPU, может быть короткий период после получения сигнала finished, в течение которого установка этого значения в true не перезапустит цикл испускания.
Совет: Если вашему испускателю one_shot необходимо немедленно возобновить испускание частиц после получения сигнала finished, рассмотрите возможность вызова restart() вместо установки emitting.
Насколько быстро выбрасываются частицы в цикле эмиссии. Если больше 0, то будет разрыв в эмиссии до начала следующего цикла.
Частота кадров системы частиц зафиксирована на значении. Например, изменение значения на 2 заставит частицы рендериться со скоростью 2 кадра в секунду. Обратите внимание, что это не замедляет симуляцию самой системы частиц.
Если true, то выполняется дробный расчет дельты, который обеспечивает более плавный эффект отображения частиц.
Заставляет все частицы в этом узле интерполироваться к концу своего жизненного цикла.
Примечание: Это работает только при использовании с ParticleProcessMaterial. Это необходимо вручную реализовать для шейдеров пользовательских процессов.
Включает интерполяцию частиц, которая делает движение частиц более плавным, когда их fixed_fps ниже частоты обновления экрана.
Количество времени, в течение которого каждая частица будет существовать (в секундах). Эффективная скорость эмиссии равна (amount * amount_ratio) / lifetime частиц в секунду.
Если true, частицы используют координатное пространство родительского узла (известное как локальные координаты). Это заставит частицы двигаться и вращаться вдоль узла GPUParticles2D (и его родителей) при его перемещении или повороте. Если false, частицы используют глобальные координаты; они не будут двигаться или вращаться вдоль узла GPUParticles2D (и его родителей) при его перемещении или повороте.
Если true, происходит только один цикл эмиссии. Если установить true во время цикла, эмиссия прекратится в конце цикла.
Система частиц запускается так, как будто она уже работала столько секунд.
Примечание: Это может быть очень затратно, если установлено большое число, так как это требует запуска шейдера частиц количество раз, равное fixed_fps (или 30, если fixed_fps равен 0) для каждой секунды. В крайних случаях это может даже привести к сбою графического процессора из-за объема работы, выполненной за один кадр.
Material для обработки частиц. Может быть ParticleProcessMaterial или ShaderMaterial.
Коэффициент случайности времени жизни излучения.
Устанавливает случайное семя, используемое системой частиц. Действует только если use_fixed_seed равен true.
Коэффициент масштабирования скорости работы системы частиц. Значение 0 может использоваться для остановки частиц.
NodePath sub_emitter = NodePath("") 🔗
Путь к другому узлу GPUParticles2D, который будет использоваться как субэмиттер (см. ParticleProcessMaterial.sub_emitter_mode). Субэмиттеры можно использовать для достижения таких эффектов, как фейерверк, искры при столкновении, пузыри, лопающиеся в каплях воды, и многое другое.
Примечание: Когда задан sub_emitter, целевой узел GPUParticles2D больше не будет испускать частицы самостоятельно.
Текстура частиц. Если null, частицы будут квадратами размером 1×1 пиксель.
Примечание: Чтобы использовать текстуру флипбука/атласа спрайтов, назначьте новый CanvasItemMaterial свойству CanvasItem.material GPUParticles2D, затем включите CanvasItemMaterial.particles_animation и установите CanvasItemMaterial.particles_anim_h_frames, CanvasItemMaterial.particles_anim_v_frames и CanvasItemMaterial.particles_anim_loop для соответствия текстуре флипбука/атласа спрайтов.
Если true, включает следы частиц с использованием системы скиннинга сетки.
Примечание: В отличие от GPUParticles3D, количество секций и подразделений следа задается свойствами trail_sections и trail_section_subdivisions.
Количество времени, которое должен представлять след частицы (в секундах). Действует только если trail_enabled равен true.
int trail_section_subdivisions = 4 🔗
Количество подразделений, используемых для рендеринга следа частиц. Более высокие значения могут привести к более плавным кривым следа за счет производительности из-за повышенной сложности сетки. См. также trail_sections. Действует только если trail_enabled имеет значение true.
Количество секций, используемых для рендеринга следа частиц. Более высокие значения могут привести к более плавным кривым следа за счет производительности из-за повышенной сложности сетки. См. также trail_section_subdivisions. Действует только если trail_enabled имеет значение true.
Если true, частицы будут использовать одно и то же семя для каждой симуляции, используя семя, определенное в seed. Это полезно в ситуациях, когда визуальный результат должен быть согласованным между повторами, например, при использовании режима Movie Maker.
Rect2 visibility_rect = Rect2(-100, -100, 200, 200) 🔗
Rect2, который определяет область узла, которая должна быть видна на экране, чтобы система частиц была активной.
Увеличьте прямоугольник, если частицы внезапно появляются/исчезают, когда узел входит/выходит из экрана. Rect2 можно увеличить с помощью кода или с помощью инструмента редактора Particles → Generate Visibility Rect.
Описания метода
Возвращает прямоугольник, содержащий позиции всех существующих частиц.
Примечание: При использовании потокового рендеринга этот метод синхронизирует поток рендеринга. Частый его вызов может негативно сказаться на производительности.
void convert_from_particles(particles: Node) 🔗
Устанавливает свойства этого узла в соответствии с заданным узлом CPUParticles2D.
void emit_particle(xform: Transform2D, velocity: Vector2, color: Color, custom: Color, flags: int) 🔗
Выпускает одну частицу. Применяются ли xform, velocity, color и custom, зависит от значения flags. См. EmitFlags.
ParticleProcessMaterial по умолчанию перезапишет color и будет использовать содержимое custom как (rotation, age, animation, life).
Примечание: emit_particle() поддерживается только в методах рендеринга Forward+ и Mobile, но не Compatibility.
void request_particles_process(process_time: float) 🔗
Запрашивает обработку частиц для дополнительного времени процесса в течение одного кадра.
Полезно для воспроизведения частиц, если используется в сочетании с use_fixed_seed или путем вызова restart() с параметром keep_seed, установленным на true.
void restart(keep_seed: bool = false) 🔗
Перезапускает цикл испускания частиц, очищая существующие частицы. Чтобы избежать исчезновения частиц из области просмотра, дождитесь сигнала finished перед вызовом.
Примечание: Сигнал finished испускается только эмиттерами one_shot.
Если keep_seed равен true, текущее случайное начальное число будет сохранено. Полезно для поиска и воспроизведения.