Efekt wystrzału- dym

Temat bazuje na utworzonym materiale w temacie Programowanie obiektów fbx. Do momentu wystrzału dodamy efekt dymu.

Tworzymy obiekt kuli

Ustaw działo tak, aby lufa była widoczna w jednej płaszczyźnie na przykład XY (os Y w Unity jest osią pionową) Na końcu lufy osadź pusty obiekt (Create Empty). Element ten będzie slotem dla wystrzeliwanych pocisków. Przypisz mu nazwę SlotPocisku

pocisk Unity

Zadbaj o to, aby współrzędne osadzonego slotu były zgodne ze środkiem kalibru lufy. Do slotu możesz przypisać tag, co ułatwi jego lokalizację w budowanej scenie.

prefabrykat pocisku Unity

Do sceny dodaj obiekt 3D typu Sphere. Nadaj mu nazwę Kula. Dopasuj rozmiar kuli do kalibru lufy. Utwórz materiał dla kuli. Do obiektu kuli podepnij ciało fizyczne (Rigidbody) oraz utworzony materiał. Patrz poniższy.

tworzenie pocisku Unity

Dodaj nowy folder o nazwie Prefabrykaty i z utworzonej kuli zrób prefabrykat (więcej na temat tworzenia prefabrykatów znajdziesz pod tym linkiem https://www.afizyka.pl/unity-prefabrykat)

prefabrykat pocisku Unity

Usuń obiekt kuli ze sceny... Prefabrykat pocisku w postaci czarnej kuli jest gotowy.

Piszemy skrypt strzelania

W katalogu Skrypty utwórz nowy skrypt i nadaj mu nazwę Strzal. Skrypt podepnij do slotu pocisku. W skrypcie utwórz zmienną na prefabrykat pocisku oraz zmienną na współczynnik prędkości wylotowej pocisku. Poniżej kod proponowanego skryptu

Wskazówka:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Strzal : MonoBehaviour
{
    [SerializeField] private GameObject prefabPocisk;
    [Header("Opcje")]
    [Range(10.0f,50.0f)]
    [SerializeField] private float v=10.0f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyUp(KeyCode.Space)) 
        { 
            GameObject p=Instantiate(prefabPocisk,transform.position,transform.rotation);
            p.GetComponent<Rigidbody>().velocity=transform.forward*v;
            //dopóki nie oprogramujemy eksplozji
            //usuń obiekt pocisku po 3.5 sekundzie
            Destroy(p,3.5f);
        }
    }
}

Do podpiętego skryptu przypisz prefabrykat pocisku, wybierz wartość współczynnika prędkości. Uruchom scenę i sprawdź efekt strzelania wciskając klawisz spacji

skrypt strzelania Unity

Efekt dymu przy wystrzale

Efekt dymu czy też spalin ciekawie opisany jest na tej stronie Tworzenie dymu spalinowego z pojazdu

Przy tworzeniu dymu zachowamy styl Low Poly. Siatkę pojedynczej chmury dumy wygenerujemy w programie Blender wychodząc z obiektu Ico Sphere. Patrz poniższy rysunek

dym Low Poly Blender Unity

Do siatki przypiszemy materiał/- ten sam co do działa i gruntu, ale w innym kolorze. Możemy tak dobrać kolory tekstury obłoku dymu, aby na różnych płaszczyznach były inne. Wystarczy, że w UV Editing odpowiednio rozciągniemy siatkę werteksów. Patrz poniższy rysunek.

materiał dym Low Poly Blender Unity

Chmurkę dymu eksportujemy do pliku *.fbx i importujemy w Unity.

Do sceny dodajemy system efektów cząstek (Particle System).

Particle System Unity

Podmieniamy renderowanie cząstek na przygotowaną siatkę i materiał tworzonego dymu. W edytorze właściwości Particle System przejdź do zakładki Renderer i ustaw jak poniżej

Particle System Renderer Unity

Odszukaj zakładkę Shape i pole Shape ustaw na Sphere

Particle System Shape Unity

Odszukaj zakładki Size of Lifetime. Kliknij w obszar wykresu (1) i zmień parametry krzywej rozmiaru i czasu życia pojedynczej chmurki dymu. Punkty przegięcia dodaje się do wykresu po kliknięciu prawym przyciskiem myszy w linie wykresu

Particle System Size of Lifetime Unity

Zmniejszamy ilość cząstek dymu (Max Particles=7), długość życia (Start Lifetime=1), prędkość przy starcie (Start Speed = 2)

Particle System Max Particles Unity

Różne inne efekty jak przezroczystość, podwójny gradient itp. dają ciekawe kombinacje

gradient Particle System Unity

Ustawa czas życia dymu (Duration) na 1 sekundę i wyłącz powtórzenia (Looping)

Duration Looping Particle System Unity

Zapisz scenę. Utworzonemu systemowi cząstek zmień nazwę na DymWystrzalu, zrób z tego obiektu prefabrykat i usuń ze sceny

prefabrykat Particle System Unity

Dodaj dym do wystrzału

Modyfikujemy skrypt Strzal. Dodajemy zmienną na prefabrykat dymu i wprowadzamy instrukcję tworzenia prefabrykatu oraz jego uśmiercenia. Kod skryptu po zmianach wygląda jak poniżej

Wskazówka:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Strzal : MonoBehaviour
{
    [SerializeField] private GameObject prefabPocisk;
    [SerializeField] private GameObject praefabDymWystrzalu;
    [Header("Opcje")]
    [Range(10.0f,50.0f)]
    [SerializeField] private float v=10.0f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyUp(KeyCode.Space)) 
        { 
            GameObject p=Instantiate(prefabPocisk,transform.position,transform.rotation);
            p.GetComponent<Rigidbody>().velocity=transform.forward*v;
            //dopóki nie oprogramujemy eksplozji
            //usuń obiekt pocisku po 3.5 sekundzie
            Destroy(p,3.5f);
            //pokaz dym wystrzalu
            GameObject d= Instantiate(praefabDymWystrzalu, transform.position, transform.rotation);
            Destroy(d, 1.5f);
        }
    }
}

W edytorze Unity podpinamy prefabrykat do zmienionego skryptu. Uruchamiamy scenę. Powinniśmy w momencie strzału zauważyć dym oraz pocisk

smoke prefabrykat Particle System Unity

Prawidłowo działający skrypt usuwa z hierarchii obiektów sceny dynamicznie dodane systemy cząstek- dym wystrzału.

Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz