Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

GPUParticles2D

Успадковує: Node2D < CanvasItem < Node < Object

Емітатор частинок 2D.

Опис

2D використовується для створення різних систем частинок і ефектів. GPUParticles2D містить випромінювач, який генерує певну кількість частинок при даній швидкості.

Використовуйте власність process_material для додавання ParticleProcessMaterial для налаштування зовнішнього вигляду частинок і поведінки. Крім того, ви можете додати ShaderMaterial, який буде застосовуватися до всіх частинок.

2D частинки можуть необов'язково зв'язатися з LightOccluder2D, але вони не збігаються з PhysicsBody2D вершинами.

Посібники

Властивості

int

amount

8

float

amount_ratio

1.0

float

collision_base_size

1.0

DrawOrder

draw_order

1

bool

emitting

true

float

explosiveness

0.0

int

fixed_fps

30

bool

fract_delta

true

float

interp_to_end

0.0

bool

interpolate

true

float

lifetime

1.0

bool

local_coords

false

bool

one_shot

false

float

preprocess

0.0

Material

process_material

float

randomness

0.0

int

seed

0

float

speed_scale

1.0

NodePath

sub_emitter

NodePath("")

Texture2D

texture

bool

trail_enabled

false

float

trail_lifetime

0.3

int

trail_section_subdivisions

4

int

trail_sections

8

bool

use_fixed_seed

false

Rect2

visibility_rect

Rect2(-100, -100, 200, 200)

Методи

Rect2

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, process_time_residual: float = 0)

void

restart(keep_seed: bool = false)


Сигнали

finished() 🔗

Випромінюється, коли всі активні частинки закінчили обробку. Щоб негайно перезапустити цикл викидів, викличте restart().

Цей сигнал ніколи не випромінюється, коли one_shot вимкнено, оскільки частинки випромінюються та обробляються постійно.

Примітка: Для випромінювачів one_shot, через те, що частинки обчислюються графічним процесором, може бути короткий період після отримання сигналу, протягом якого налаштування 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 даних.


Описи властивостей

int amount = 8 🔗

  • void set_amount(value: int)

  • int get_amount()

Кількість частинок для випромінювання в одному циклі випромінювання. Ефективна швидкість емісії (amount * amount_ratio) / життя частинки на секунду. Більші значення підвищать вимоги до GPU, навіть якщо не всі частинки видимі в обумовлений час або якщо знизився кількість пам'яті.

Примітка: Зміна цього значення призведе до перезавантаження системи частинок. Щоб уникнути цього, змініть amount_ratio замість.


float amount_ratio = 1.0 🔗

  • void set_amount_ratio(value: float)

  • float get_amount_ratio()

Співвідношення частинок, які насправді повинні бути введеними. Якщо встановити значення нижче 1.0, це буде встановлено кількість вживаних частинок протягом усього життя amount * кількість_ratio. На відміну від зміни amount, зміни amount_ratio при випромінюванні не впливає вже наявні частинки і не викликає системи частинок для перезавантаження. amount_ratio може бути використана для створення ефектів, які роблять число вживаних частинок варіюватися з часом.

Примітка: Зменшення amount_ratio не має допомоги продуктивності, так як ресурси повинні бути виділені і оброблені для всього amount частинок незалежно від amount_ratio. Якщо ви не маєте намір змінити кількість частинок, які випромінюються, тоді як частинки випромінюють, переконайтеся, що кількість_ratio встановлюється до 1 і змініть amount до вашої кришки замість.


float collision_base_size = 1.0 🔗

  • void set_collision_base_size(value: float)

  • float get_collision_base_size()

Multiplier для радіусу зіткнення частинок. 1.0 відповідає розміру спрайта. Якщо з'являються частинки, щоб мити в грунт, коли з'єднання, збільшити це значення. Якщо частинки з'являються до плавлення при співвідношенні, знижують це значення. Тільки ефективний, якщо ParticleProcessMaterial.collision_mode є ParticleProcessMaterial. COLLISION_RIGID або ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT.

Примітки: Завжди мають сферичну форму зіткнення.


DrawOrder draw_order = 1 🔗

Порядок малювання частинок.


bool emitting = true 🔗

  • void set_emitting(value: bool)

  • bool is_emitting()

Якщо true, частинки вдаються. пам'ятне випромінювання може бути використаний для запуску та припинення частинок з випромінювання. Однак, якщо one_shot є true налаштування emitting до true не перезапустити цикл викидів, якщо всі активні частинки закінчилися обробки. Використовуйте finished сигнал, який буде повідомлено один раз, коли всі активні обробки частинок.

Примітка: Для one_shot випромінювачів, через частинки, що комп'ютерні на GPU, може бути короткий період після отримання сигналу finished, під час якого налаштування цього true не буде перезапустити цикл емісії.

Підказка: Якщо ваш one_shot випромінювач повинен негайно перезапустити частинки після отримання сигналу, розгляньте виклик restart() замість налаштування emitting.


float explosiveness = 0.0 🔗

  • void set_explosiveness_ratio(value: float)

  • float get_explosiveness_ratio()

Як швидко викидаються частинки в циклі емісії. Якщо більше 0, з'явиться проміжок викидів до наступного циклу.


int fixed_fps = 30 🔗

  • void set_fixed_fps(value: int)

  • int get_fixed_fps()

Швидкість рами частинок фіксується до значення. Наприклад, зміна значення до 2 призведе до зменшення частинок на 2 кадри на другий. Зверніть увагу, що це не уповільнює моделювання самої системи частинок.


bool fract_delta = true 🔗

  • void set_fractional_delta(value: bool)

  • bool get_fractional_delta()

Якщо true, результати розрахунку дробової дельти, яка має ефект відображення гладких частинок.


float interp_to_end = 0.0 🔗

  • void set_interp_to_end(value: float)

  • float get_interp_to_end()

Причини всіх частинок в цій вершині, щоб міжполятися до кінця їх життя.

Примітка: Це тільки працює при використанні ParticleProcessMaterial. Необхідно вручну втілювати шейкери на замовлення.


bool interpolate = true 🔗

  • void set_interpolate(value: bool)

  • bool get_interpolate()

Вмикає інтерполяцію частинок, що робить рух частинок плавнішим, коли їхній fixed_fps нижчий за частоту оновлення екрана.


float lifetime = 1.0 🔗

  • void set_lifetime(value: float)

  • float get_lifetime()

Кількість часу кожної частинки буде існувати (в секундах). Ефективна швидкість емісії `` (amount * amount_ratio) / термін служби`` частинки на секунду.


bool local_coords = false 🔗

  • void set_use_local_coordinates(value: bool)

  • bool get_use_local_coordinates()

Якщо true, частинки використовують координаційний простір материнської вершини (відомі як локальні координати). Це спричинить частинки для переміщення і обертання вздовж вузла GPUParticles2D (і його батьки), коли він переміщається або обертається. Якщо false, частинки використовують глобальні координати; вони не рухаються або обертаються вздовж вузла GPUParticles2D (і його батьки), коли він переміщається або обертається.


bool one_shot = false 🔗

  • void set_one_shot(value: bool)

  • bool get_one_shot()

Якщо true, виникає лише один цикл викидів. Якщо встановити true під час циклу, емісія буде припинена в кінці циклу.


float preprocess = 0.0 🔗

  • void set_pre_process_time(value: float)

  • float get_pre_process_time()

Система частинок запускається так, ніби вона вже працювала стільки секунд.

Примітка: Це може бути дуже дорогим, якщо встановлено велике число, оскільки це вимагає запуску шейдера частинок кількість разів, що дорівнює fixed_fps (або 30, якщо fixed_fps дорівнює 0) за кожну секунду. У крайніх випадках це може навіть призвести до збою GPU через обсяг роботи, виконаної в одному кадрі.


Material process_material 🔗

Material для обробки частинок. Може бути ParticleProcessMaterial або ShaderMaterial.


float randomness = 0.0 🔗

  • void set_randomness_ratio(value: float)

  • float get_randomness_ratio()

Відносність термінів життя емісії.


int seed = 0 🔗

  • void set_seed(value: int)

  • int get_seed()

Встановлює випадкове початкове число, яке використовується системою частинок. Ефективно, лише якщо use_fixed_seed має значення true.


float speed_scale = 1.0 🔗

  • void set_speed_scale(value: float)

  • float get_speed_scale()

Співвідношення швидкості масштабування частинок. Значення 0 можна використовувати для паузи частинок.


NodePath sub_emitter = NodePath("") 🔗

  • void set_sub_emitter(value: NodePath)

  • NodePath get_sub_emitter()

Шлях до іншої GPUParticles2D вершина, яка буде використовуватися як підеміттер (див. ParticleProcessMaterial.sub_emitter_mode). Для досягнення ефектів, таких як феєрверки, іскри на зіткненні, бульбашки, що тиснуть на краплі води, і багато іншого.

Примітка: Коли sub_emitter встановлюється, ціль GPUParticles2D вузол більше не буде випромінювати частинки самостійно.


Texture2D texture 🔗

  • void set_texture(value: Texture2D)

  • Texture2D get_texture()

Текстура частинок. Якщо null, частинки будуть квадрати розміром 1×1 пікселів.

Примітка: Щоб використовувати текстуру flipbook, призначте новий CanvasItemMaterial до GPUParticles2D CanvasItem.material, потім увімкніть CanvasItemMaterial.paarticle_animation і встановіть CanvasItemMaterial.article_anim_h_frames, CanvasItemMaterial.paarticle_anim_v_frames, і CanvasItemMaterial.article_anim_loop, щоб відповідати текстурі фліпбук.


bool trail_enabled = false 🔗

  • void set_trail_enabled(value: bool)

  • bool is_trail_enabled()

Якщо true, активує траєкторії частинок за допомогою системи обшивки сітки.

Примітка: На відміну від GPUParticles3D, кількість секцій та підрозділів стежки встановлюється за допомогою властивостей trail_sections та trail_section_subdivisions.


float trail_lifetime = 0.3 🔗

  • void set_trail_lifetime(value: float)

  • float get_trail_lifetime()

Кількість часу слід представляти частинку (в секундах). true.


int trail_section_subdivisions = 4 🔗

  • void set_trail_section_subdivisions(value: int)

  • int get_trail_section_subdivisions()

Кількість підрозділів, які використовують для рендерингу частинок. Більші значення можуть призвести до гладких кривих причепів, за вартістю виконання за рахунок підвищеної складності сітки. Дивись також trail_enabled. true.


int trail_sections = 8 🔗

  • void set_trail_sections(value: int)

  • int get_trail_sections()

Кількість секцій для використання для рендерингу частинок. Більші значення можуть призвести до гладких кривих причепів, за вартістю виконання за рахунок підвищеної складності сітки. Дивись також trail_enabled. true.


bool use_fixed_seed = false 🔗

  • void set_use_fixed_seed(value: bool)

  • bool get_use_fixed_seed()

Якщо true, частинки використовуватимуть той самий сімпл для кожної симуляції, використовуючи сімпл, визначений у seed. Це корисно у ситуаціях, коли візуальний результат має бути однаковим у всіх відтвореннях, наприклад, при використанні режиму Movie Maker.


Rect2 visibility_rect = Rect2(-100, -100, 200, 200) 🔗

  • void set_visibility_rect(value: Rect2)

  • Rect2 get_visibility_rect()

Rect2, що визначає область вершини, яка повинна бути видима на екрані для системи частинок, щоб бути активним.

Виростити ct, якщо частинки раптом з'являються / з'являються, коли вершина надходить / виводить екран. Rect2 може бути вирощений за допомогою коду або з Пачастини → Генерувати Visibility Rect редактор інструмент.


Описи методів

Rect2 capture_rect() const 🔗

Повертає прямокутник, що містить позиції всіх наявних частинок.

Примітка: При використанні різьбового рендерингу цей метод синхронізує рендерингову нитку. Викликання часто може мати негативний вплив на продуктивність.


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, lifetime).

Примітка: emit_particle() підтримується лише методами візуалізації Forward+ і Mobile, а не Compatibility.


void request_particles_process(process_time: float, process_time_residual: float = 0) 🔗

Requests the particles to process for extra process time during a single frame.

process_time defines the time that the particles will process while emitting is on. process_time_residual defines the time that particles will process with emitting turned off for the simulation. When combined with speed_scale set to 0.0, this is useful to be able to seek a particle system timeline.


void restart(keep_seed: bool = false) 🔗

Перезапускає цикл викиду частинок, очищаючи існуючі частинки. Щоб уникнути зникнення частинок із вікна перегляду, дочекайтеся сигналу finished перед викликом.

Примітка: Сигнал finished випромінюють лише випромінювачі one_shot.

Якщо keep_seed має значення true, поточне випадкове початкове число буде збережено. Корисно для пошуку та відтворення.