Efekt eksplozji
Do efektu wystrzału utworzonego w poprzednim temacie (zobacz) dodamy efekt eksplozji. Eksplozję oprzemy na systemie efektów cząstek (Particle System) w taki sam sposób jak zrobiliśmy dym przy wystrzale.
Tworzymy prefabrykat eksplozji
Obiekt prefabrykatu eksplozji utworzymy w dowolnym miejscu świata gry 3D poprzez osadzenie efektów cząstek (Particle System)
![eksplozja efektów cząstek Particle System](./g-Unity/efekt-eksplozji-cz2-1.webp)
Osadzonemu obiektowi przypisujemy nazwę na przykład eksplozja
![eksplozja Unity](./g-Unity/efekt-eksplozji-cz2-2.webp)
Ustalamy parametry i właściwości eksplozji
Przyjmujemy, że rozprysk odłamków będzie w pełnym kącie bryłowym, czyli w sferze. Za odłamki przyjmiemy siatkę dymy przygotowaną w poprzednim temacie. Materiał ustawimy na półprzezroczysty (Material: Default-Particle). Patrz poniższy rysunek.
![Material: Default-Particle Particle System](./g-Unity/efekt-eksplozji-cz2-3.webp)
Pozostałe efekty dobierz według swojego uznania. Na przykład ustawienie współczynnika grawitacji większego od zera spowoduje, że cząsteczki będą się zachowywać jak odłamki. Zmiana trybu emisji pozwoli w jednym momencie wystrzelić określoną ilość cząstek (tu ustawione jest 30 sztuk, patrz Emission/ Bursts)
![Emission/ Bursts Particle System Unity](./g-Unity/efekt-eksplozji-cz2-4.webp)
Ukierunkowanie wektor prędkości początkowej eksplozji ułatwiają opcje z grupy Velocity over Lifetime. Patrz poniższe ustawienia
![Velocity over Lifetime Particle System Unity](./g-Unity/efekt-eksplozji-cz2-5.webp)
Na tę chwilę system cząstek tworzących eksplozję zachowuje się jak poniżej
![Velocity over Lifetime Particle System Unity](./g-Unity/efekt-eksplozji-cz2-6.webp)
Brakuje efektów kolorów. Ustawiamy je według własnego uznania
![Velocity over Lifetime Particle System Unity](./g-Unity/efekt-eksplozji-cz2-7.webp)
Zerujemy współrzędne eksplozji i tworzymy prefabrykat.
![Particle System Unity](./g-Unity/efekt-eksplozji-cz2-8.webp)
W utworzonym prefabrykacie wyłączamy opcję powtarzalności (Looping)
![Looping Particle System Unity](./g-Unity/efekt-eksplozji-cz2-9.webp)
Modyfikujemy prefabrykat kuli
Eksplozję wywołamy w momencie detonacji pocisku. Dla kuli w świecie 3D będzie to moment zniszczenia obiektu. Napiszemy skrypt, który podepniemy do prefabrykatu kuli. W skrypcie utworzymy pole typu GameObject, do którego podepniemy prefabrykat eksplozji. Poniżej początkowa postac tworzonego skryptu
Wskazówka:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Eksplozja : MonoBehaviour
{
[SerializeField] private GameObject prefabEksplozja;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
Podpinamy skrypt do prefabrykatu kuli oraz dodajemy prefabrykat eksplozji do utworzonego skryptu. Patrz poniższy rysunek krok 3 i 4.
![prefab Particle System Unity](./g-Unity/efekt-eksplozji-cz2-10.webp)
Aby eksplozja zadziałała musimy nadpisać standardową funkcję zniszczenia obiektu macierzystego- OnDestroy(), w tym przypadku kuli.
Nadpisujemy funkcję OnDestroy( )
Funkcja zniszczenia obiektu macierzystego (pocisku) może mieć wystąpienie wtedy gdy kula uderza w przeszkodę lub wybucha po określonym czasie. Dla efektu eksplozji nie ma to znaczenia. Poniżej rozwiązanie wywołania eksplozji po nadpisaniu funkcji OnDestroy
Wskazówka:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Eksplozja : MonoBehaviour
{
[SerializeField] private GameObject prefabEksplozja;
private void OnDestroy()
{
//utwórz obiekt eksplozji
GameObject e = Instantiate(prefabEksplozja,
transform.position,
transform.rotation);
//usuń obiekt eksplozji
Destroy(e, 2.5f);
}
}
Uruchom scenę i sprawdź efekt działania
![OnDestroy Particle System Unity](./g-Unity/efekt-eksplozji-cz2-11.webp)
Prawidłowo działająca scena pozwoli zauważyć wybuchy wystrzelonych pocisków po upływie czasu ich życia na tworzonej scenie świata 3D