Jak oddać strzał w jedności

W tym samouczku krok po kroku pokażemy, jak wystrzelić strzał w Unity. Dowiesz się, jak stworzyć podstawowy pocisk, który porusza się do przodu i wchodzi w interakcję z innymi obiektami. Na koniec będziesz mieć działający skrypt, który można dołączyć do GameObject, aby symulować strzelanie w grze.

Przygotowanie sceny

Zanim przejdziemy do kodowania, najpierw skonfigurujmy scenę, aby utworzyć pocisk. Oto kroki, aby zacząć:

  1. Utwórz nowy projekt Unity lub otwórz istniejący.
  2. Utwórz w scenie obiekt 3D (np. sześcian lub kulę), który będzie pełnić rolę gracza lub obiektu oddającego strzał.
  3. Utwórz inny obiekt 3D (np. mniejszą kulę), który będzie działał jako pocisk. Zostanie on utworzony, gdy zostanie wystrzelony strzał.
  4. Uporządkuj swoje obiekty, nadając im znaczące nazwy, takie jak "Player" i "ProjectilePrefab".

Tworzenie skryptu ujęcia

Teraz, gdy mamy podstawową scenę, stwórzmy skrypt, który będzie obsługiwał strzelanie. Nazwiemy skrypt Shot.cs i dołączymy go do obiektu gracza. Ten skrypt wygeneruje pocisk i zastosuje siłę do przodu, aby symulować strzelanie.

Aby utworzyć skrypt, wykonaj następujące kroki:

  1. W edytorze Unity kliknij prawym przyciskiem myszy w oknie Projekt i wybierz Utwórz > Skrypt C#. Nadaj skryptowi nazwę Shot.cs.
  2. Kliknij dwukrotnie plik Shot.cs, aby otworzyć go w edytorze kodu.
  3. Zastąp domyślny kod następującym skryptem:
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;
        }
    }
}

Ten skrypt wykonuje następujące zadania:

  • Definiuje publiczny projectilePrefab służący do przechowywania obiektu pocisku.
  • Używa firePoint, aby określić miejsce rozpoczęcia strzału.
  • Używa projectileSpeed do kontrolowania prędkości pocisku.
  • Sprawdza dane wejściowe gracza za pomocą Input.GetButtonDown("Fire1"), który nasłuchuje akcji "Fire1" (zwykle przypisanej do lewego przycisku myszy lub spacji).
  • Tworzy pocisk w punkcie ognia i nadaje mu prędkość do przodu.

Przypisywanie skryptu w Unity

Teraz, gdy mamy już gotowy skrypt, czas przypisać go do obiektu gracza i skonfigurować odniesienia:

  1. Wybierz obiekt gry "Player" na scenie.
  2. Przeciągnij skrypt Shot.cs na "Player", aby go załączyć.
  3. W oknie Inspektora zobaczysz pola skryptu. Przypisz prefab pocisku (np. małą kulę, którą utworzyłeś) do slotu ProjectilePrefab.
  4. Utwórz pusty GameObject pod obiektem gracza i nazwij go "FirePoint". Umieść go przed graczem lub w dowolnym miejscu, z którego chcesz, aby pocisk się pojawił.
  5. Przeciągnij obiekt "FirePoint" do pola FirePoint w skrypcie.

Testowanie strzału

Aby przetestować funkcjonalność strzelania, naciśnij przycisk Play w Unity i naciśnij przycisk ognia (domyślnie jest to lewy przycisk myszy lub spacja). Powinieneś zobaczyć, jak pocisk pojawia się i porusza się do przodu po naciśnięciu przycisku. Możesz dostosować prędkość lub wygląd pocisku, aby lepiej odpowiadał Twoim potrzebom.

Często zadawane pytania

Jak zniszczyć pocisk po wystrzeleniu?

Aby zapobiec wiecznemu istnieniu pocisków, możesz je zniszczyć po pewnym czasie. W metodzie FireShot, po utworzeniu pocisku, możesz dodać:

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

Jak dodać efekty dźwiękowe lub animacje do ujęcia?

Możesz dodać efekty dźwiękowe, używając komponentu AudioSource. Po prostu dodaj go do odtwarzacza i odtwórz dźwięk w metodzie FireShot:

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

W przypadku animacji można wyzwolić animację za pomocą komponentu Animator lub włączając/wyłączając określone stany GameObject w metodzie FireShot.

Jak sprawić, żeby pocisk wchodził w interakcję z innymi obiektami?

Aby pocisk wchodził w interakcję z innymi obiektami, upewnij się, że pocisk ma komponent Rigidbody i Collider. Następnie możesz napisać skrypt do obsługi wykrywania kolizji za pomocą OnCollisionEnter lub OnTriggerEnter:

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

Wniosek

Mam nadzieję, że ten samouczek pomógł Ci nauczyć się, jak wystrzelić pocisk w Unity, tworząc pocisk, stosując do niego siłę i obsługując podstawowe wykrywanie kolizji. Tę technikę można rozszerzyć na bardziej złożone interakcje, takie jak dodawanie efektów, dźwięku lub zaawansowanej fizyki.