Efekty cząsteczkowe (ang. particle effects) to wydajne elementy wizualne złożone z wielu powtarzalnych lub nie elementów (cząsteczek) i służą do wizualnego wzbogacania gier. Możesz ich używać do tworzenia eksplozji, rozprysku krwi, śladów, efektów pogodowych i wielu innych.
Efekty cząsteczkowe składają się z wielu emiterów (emitters) i opcjonalnych modyfikatorów (modifiers):
Wybierz opcję New... ▸ Particle FX z menu kontekstowego w panelu Assets. Nadaj nowemu plikowi efektu cząsteczkowego nazwę. Edytor zostanie teraz otwarty w pliku z użyciem Edytora Sceny.
W panelu Outline wyświetlany jest domyślny emiter. Wybierz emiter, aby wyświetlić jego właściwości w dolnym panelu Properties (Właściwości).
Aby dodać nowy emiter do efektu, kliknij prawym przyciskiem myszy na korzeniu (root) w panelu Outline i wybierz Add Emitter ▸ [type] z menu kontekstowego. Zauważ, że można nawet później zmienić typ emitera w jego właściwościach.
Aby dodać nowy modyfikator, kliknij prawym przyciskiem myszy w miejscu modyfikatora w panelu Outline (korzeń efektu lub konkretny emiter) i wybierz Add Modifier, a następnie wybierz typ modyfikatora.
Modyfikator osadzony na korzeniu efektu (nie jest dzieckiem emitera) wpływa na wszystkie cząsteczki w efekcie.
Modyfikator, który jest dodany jako dziecko emitera, wpływa tylko na cząsteczki tego emitera.
Podczas edytowania emitera lub modyfikatora, wynik jest natychmiast widoczny w edytorze, nawet gdy efekt jest zatrzymany:
Once
zatrzymuje emitera po osiągnięciu swojego czasu trwania.Loop
ponownie uruchamia emitera po osiągnięciu czasu trwania.Auto
- Automatyczny - zachowuje rozmiar każdej klatki animacji atlasu zgodnie z obrazem źródłowym.Manual
- Manualny - ustawia rozmiar cząsteczki zgodnie z właściwością rozmiaru.World
- Przestrzeń Świata - przemieszcza cząsteczki niezależnie od emitera.Emitter
- Przestrzeń Emitera przemieszcza cząsteczki względem emitera.Alpha
, Add
i Multiply
.Max Particle Count Maksymalna Liczba Cząsteczek - liczba cząstek pochodzących z tego emitera, która może istnieć jednocześnie.
Circle
- Koło - emituje cząsteczki z losowej lokalizacji wewnątrz koła. Cząsteczki są skierowane na zewnątrz od centrum. Średnicę koła definiuje Emitter Size X.
2D Cone
- Stożek 2D - emituje cząsteczki z losowej lokalizacji wewnątrz płaskiego stożka (trójkąta). Cząsteczki są skierowane do góry stożka. Emitter Size X definiuje szerokość góry, a Emitter Size Y definiuje wysokość.
Box
- Sześcian - emituje cząsteczki z losowej lokalizacji wewnątrz sześcianu. Cząsteczki są skierowane w górę wzdłuż osi Y sześcianu. Emitter Size X, Y i Z definiują odpowiednio szerokość, wysokość i głębokość. Dla prostokąta 2D zachowaj rozmiar Z na zero.
Sphere
- Sfera - emituje cząsteczki z losowej lokalizacji wewnątrz kuli. Cząsteczki są skierowane na zewnątrz od centrum. Średnicę kuli definiuje Emitter Size X.
Cone
- Stożek - emituje cząsteczki z losowej lokalizacji wewnątrz stożka 3D. Cząsteczki kierują się na zewnątrz przez szeroki dysk stożka. Emitter Size X definiuje średnicę szerokiego dysku, a Emitter Size Y definiuje wysokość stożka.
Default
- Domyślna - ustawia orientację na orientację jednostkową.Initial Direction
- Początkowy Kierunek - zachowuje początkową orientację emitowanych cząsteczk.Movement Direction
- Kierunek Ruchu - dostosowuje orientację cząsteczek zgodnie z ich prędkością.World
. Prędkość emitera jest obliczana co klatkę.Stretch With Velocity Rozciągnięcie z Prędkością - zaznacz, aby skalować rozciągnięcie cząsteczek w kierunku ruchu.
Właściwość Blend Mode określa w jaki sposób graficzne komponenty mają być ze sobą mieszane, czyli wyświetlane w momencie nakładania się dwóch obrazów na siebie. Oto dostępne tryby blendowania i wyjaśnienie w jaki sposób są obliczane kolory:
src.a * src.rgb + (1 - src.a) * dst.rgb
src.rgb + dst.rgb
src.rgb * dst.rgb
Te właściwości mają dwa pola: wartość (value) i rozprzestrzenienie (spread). Rozprzestrzenienie to zmienna losowa, która jest stosowana losowo dla każdej wygenerowanej cząsteczki. Na przykład, jeśli wartość wynosi 50, a rozprzestrzenienie wynosi 3, każda wygenerowana cząsteczka otrzyma wartość między 47 a 53 (50 +/- 3).
Zaznaczając przycisk klucza (key button), wartość właściwości jest kontrolowana za pomocą krzywej w trakcie trwania emitera. Aby zresetować właściwość z klucza, odznacz przycisk klucza.
Edytor Krzywej Curve Editor (dostępny w zakładkach w dolnym widoku) służy do modyfikacji krzywej. Właściwości z kluczem nie mogą być edytowane w widoku Properties , tylko w Edytorze Krzywej właśnie. Kliknij i przeciągnij punkty i styczne, aby zmodyfikować kształt krzywej. Podwójne kliknięcie na krzywej dodaje punkty kontrolne. Aby usunąć punkt kontrolny, podwójnie kliknij na niego.
Aby automatycznie przybliżyć Edytor Krzywej w celu wyświetlenia wszystkich krzywych, naciśnij F.
Następujące właściwości można regulować w czasie trwania emitera:
Automatic
i użyjesz animacji atlasu jako źródła obrazu, to właściwość ta jest ignorowana.Następujące właściwości można regulować w trakcie życia cząsteczek:
Dostępne są cztery rodzaje modyfikatorów, które wpływają na prędkość cząsteczek:
Acceleration
Drag
Radial
Vortex
Aby uruchomić i zatrzymać efekt cząsteczkowy z poziomu skryptu:
-- uruchom komponent efektu "cząsteczki" w bieżącym obiekcie gry
particlefx.play("#particles")
-- zatrzymaj komponent efektu "cząsteczki" w bieżącym obiekcie gry
particlefx.stop("#particles")
Efekt cząsteczkowy będzie nadal emitować cząsteczki nawet wtedy, gdy obiekt gry, do którego należy komponent efektu cząsteczkowego, zostanie usunięty.
Zobacz szczegóły w [dokumentacji Efektów Cząsteczkowych]](/ref/particlefx).
Domyślny materiał Efektu cząsteczkowego posiada następujące stałe, które można zmieniać za pomocą particlefx.set_constant()
i resetować za pomocą particlefx.reset_constant()
(zobacz szczegóły w instrukcji do Materiałów):
tint
vector4
). Wektor 4-składnikowy jest używany do reprezentowania odcienia koloru, gdzie X, Y, Z i W odpowiadają czerwieni, zieleni, niebieskiemu i odcieniowi alfa. Więcej szczegółów w dokumentacji API.Plik game.project zawiera kilka ustawień projektu związanych z cząsteczkami.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB