Cum să tragi un foc în Unity

În acest tutorial, vom explica pas cu pas cum să trageți o lovitură în Unity. Veți învăța cum să creați un proiectil de bază care se mișcă înainte și interacționează cu alte obiecte. Până la sfârșit, veți avea un script de lucru care poate fi atașat la un GameObject pentru a simula filmarea într-un joc.

Configurarea scenei

Înainte de a ne aprofunda în codificare, să setăm mai întâi scena pentru a crea un proiectil. Iată pașii pentru a începe:

  1. Creați un nou proiect Unity sau deschideți unul existent.
  2. Creați un obiect 3D (de exemplu, un cub sau o sferă) în scena dvs., care va acționa ca jucătorul sau obiectul care trage împușcătura.
  3. Creați un alt obiect 3D (de exemplu, o sferă mai mică) care să acționeze ca proiectil. Acest lucru va fi instanțiat atunci când focul este tras.
  4. Organizați-vă obiectele dându-le nume semnificative, cum ar fi "Player" și "ProjectilePrefab".

Crearea scriptului de filmare

Acum că avem scena noastră de bază, să creăm scenariul care se va ocupa de filmare. Vom numi scriptul Shot.cs și îl vom atașa la obiectul player. Acest script va genera proiectilul și va aplica o forță înainte pentru a simula tragerea.

Urmați acești pași pentru a crea scriptul:

  1. În editorul Unity, faceți clic dreapta în fereastra Proiect și selectați Creare > C# Script. Denumiți scriptul Shot.cs.
  2. Faceți dublu clic pe fișierul Shot.cs pentru a-l deschide în editorul de cod.
  3. Înlocuiți codul implicit cu următorul script:
using UnityEngine;

public class Shot : MonoBehaviour
{
    public GameObject projectilePrefab;  // The prefab of the projectile to shoot
    public Transform firePoint;          // The point where the projectile will be fired from
    public float projectileSpeed = 20f;  // Speed of the projectile

    void Update()
    {
        // Check if the player presses the fire button (default is left mouse button or spacebar)
        if (Input.GetButtonDown("Fire1"))
        {
            FireShot();
        }
    }

    void FireShot()
    {
        // Instantiate the projectile at the fire point's position and rotation
        GameObject projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);

        // Get the Rigidbody component of the projectile to apply physics
        Rigidbody rb = projectile.GetComponent();

        if (rb != null)
        {
            // Apply force to the projectile to make it move forward
            rb.velocity = firePoint.forward * projectileSpeed;
        }
    }
}

Acest script îndeplinește următoarele sarcini:

  • Definește un projectilePrefab public pentru a ține obiectul proiectil.
  • Utilizează un firePoint pentru a specifica unde provine fotografia.
  • Utilizează projectileSpeed pentru a controla viteza proiectilului.
  • Verifică introducerea jucătorului folosind Input.GetButtonDown("Fire1"), care ascultă acțiunea "Fire1" (de obicei mapată la butonul stâng al mouse-ului sau bara de spațiu).
  • Instanțiază un proiectil la firePoint și îi aplică o viteză înainte.

Atribuirea Scriptului în Unity

Acum că avem scriptul gata, este timpul să-l atribuim obiectului player și să setăm referințele:

  1. Selectați "Player" GameObject din scenă.
  2. Trageți scriptul Shot.cs pe "Player" pentru a-l atașa.
  3. În fereastra Inspector, veți vedea câmpurile scriptului. Atribuiți prefabricatul proiectilului (de exemplu, sfera mică pe care ați creat-o) slotului ProjectilePrefab.
  4. Creează un GameObject gol sub obiectul jucător și numește-l "FirePoint". Poziționați-l în fața jucătorului sau oriunde doriți să apară proiectilul.
  5. Trageți obiectul "FirePoint" în câmpul FirePoint din script.

Testarea loviturii

Pentru a testa funcționalitatea de fotografiere, apăsați butonul Redare în Unity și apăsați butonul de declanșare (implicit este butonul stâng al mouse-ului sau bara de spațiu). Ar trebui să vedeți proiectilul declanșând și înaintând atunci când apăsați butonul. Puteți modifica viteza proiectilului sau aspectul pentru a se potrivi mai bine nevoilor dvs.

Întrebări frecvente

Cum distrug proiectilul după ce este tras?

Pentru a preveni ca proiectilele tale să existe pentru totdeauna, le poți distruge după o anumită perioadă de timp. În metoda FireShot, după instanțiarea proiectilului, puteți adăuga:

Destroy(projectile, 5f); // Destroys the projectile after 5 seconds

Cum adaug efecte sonore sau animații la fotografie?

Puteți adăuga efecte sonore utilizând componenta AudioSource. Pur și simplu adăugați-l la player și redați un sunet în metoda FireShot:

AudioSource audioSource = GetComponent();
audioSource.Play();

Pentru animații, puteți declanșa o animație folosind componenta Animator sau activând/dezactivând anumite stări GameObject în cadrul metodei FireShot.

Cum fac proiectilul să interacționeze cu alte obiecte?

Pentru a face proiectilul să interacționeze cu alte obiecte, asigurați-vă că proiectilul are o componentă Rigidbody și o componentă Collider. Apoi puteți scrie un script pentru a gestiona detectarea coliziunilor folosind OnCollisionEnter sau OnTriggerEnter:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Destroy(collision.gameObject); // Destroy enemy on collision
        Destroy(gameObject);           // Destroy the projectile
    }
}

Concluzie

Sperăm că acest tutorial v-a ajutat să învățați cum să trageți o împușcătură în Unity creând un proiectil, aplicând forță asupra acestuia și gestionând detectarea de bază a coliziunilor. Această tehnică poate fi extinsă pentru interacțiuni mai complexe, cum ar fi adăugarea de efecte, sunet sau fizică avansată.