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)
Osadzonemu obiektowi przypisujemy nazwę na przykład eksplozja
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.
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)
Ukierunkowanie wektor prędkości początkowej eksplozji ułatwiają opcje z grupy Velocity over Lifetime. Patrz poniższe ustawienia
Na tę chwilę system cząstek tworzących eksplozję zachowuje się jak poniżej
Brakuje efektów kolorów. Ustawiamy je według własnego uznania
Zerujemy współrzędne eksplozji i tworzymy prefabrykat.
W utworzonym prefabrykacie wyłączamy opcję powtarzalności (Looping)
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.
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
Prawidłowo działająca scena pozwoli zauważyć wybuchy wystrzelonych pocisków po upływie czasu ich życia na tworzonej scenie świata 3D