Sådan affyres et skud i enhed

I denne tutorial går vi trin for trin igennem, hvordan man affyrer et skud i Unity. Du lærer, hvordan du skaber et grundlæggende projektil, der bevæger sig fremad og interagerer med andre objekter. Til sidst vil du have et fungerende script, der kan knyttes til et GameObject for at simulere skydning i et spil.

Opsætning af scenen

Før vi dykker ned i kodning, lad os først sætte scenen op for at skabe et projektil. Her er trinene til at komme i gang:

  1. Opret et nyt Unity-projekt, eller åbn et eksisterende.
  2. Opret et 3D-objekt (f.eks. en terning eller en kugle) i din scene, som vil fungere som afspilleren eller objektet, der affyrer skuddet.
  3. Opret et andet 3D-objekt (f.eks. en mindre kugle) til at fungere som projektilet. Dette vil blive instantieret, når skuddet affyres.
  4. Organiser dine objekter ved at give dem meningsfulde navne, såsom "Player" og "ProjectilePrefab".

Oprettelse af Shot Script

Nu hvor vi har vores grundlæggende scene, lad os skabe det script, der skal håndtere optagelser. Vi navngiver scriptet Shot.cs og vedhæfter det til afspillerobjektet. Dette script vil afføde projektilet og anvende en fremadrettet kraft for at simulere affyring.

Følg disse trin for at oprette scriptet:

  1. I Unity-editoren skal du højreklikke i projektvinduet og vælge Create > C# Script. Navngiv scriptet Shot.cs.
  2. Dobbeltklik på filen Shot.cs for at åbne den i din kodeeditor.
  3. Erstat standardkoden med følgende 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;
        }
    }
}

Dette script udfører følgende opgaver:

  • Definerer et offentligt projektilPrefab til at holde projektilobjektet.
  • Bruger et firePoint til at angive, hvor skuddet stammer fra.
  • Bruger projectileSpeed til at styre projektilets hastighed.
  • Kontrollerer for spillerens input ved hjælp af Input.GetButtonDown("Fire1"), som lytter efter "Fire1"-handlingen (normalt kortlagt til venstre museknap eller mellemrumstasten).
  • Instantierer et projektil ved firePoint og påfører det en fremadgående hastighed.

Tildeling af scriptet i Unity

Nu hvor vi har scriptet klar, er det tid til at tildele det til afspillerobjektet og opsætte referencerne:

  1. Vælg "Player" GameObject i scenen.
  2. Træk Shot.cs scriptet til "Player" for at vedhæfte det.
  3. I Inspector-vinduet kan du se scriptets felter. Tildel projektilpræfabrikatet (f.eks. den lille kugle, du har oprettet) til ProjectilePrefab-slottet.
  4. Opret et tomt GameObject under afspillerobjektet og navngiv det "FirePoint". Placer den foran afspilleren eller hvor du vil have projektilet til at gyde fra.
  5. Træk "FirePoint"-objektet ind i FirePoint-feltet i scriptet.

Afprøvning af skuddet

For at teste optagelsesfunktionaliteten skal du trykke på Afspil-knappen i Unity og trykke på affyringsknappen (standard er venstre museknap eller mellemrumstasten). Du bør se projektilet gyde og bevæge sig fremad, når du trykker på knappen. Du kan justere projektilets hastighed eller udseende, så det passer bedre til dine behov.

Ofte stillede spørgsmål

Hvordan ødelægger jeg projektilet efter det er affyret?

For at forhindre dine projektiler i at eksistere for evigt, kan du ødelægge dem efter en vis tid. I FireShot-metoden kan du, efter at have instantieret projektilet, tilføje:

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

Hvordan føjer jeg lydeffekter eller animationer til billedet?

Du kan tilføje lydeffekter ved at bruge AudioSource-komponenten. Du skal blot tilføje det til afspilleren og afspille en lyd i FireShot-metoden:

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

For animationer kan du udløse en animation ved at bruge Animator-komponenten eller ved at aktivere/deaktivere visse GameObject-tilstande inden for FireShot-metoden.

Hvordan får jeg projektilet til at interagere med andre objekter?

For at få projektilet til at interagere med andre objekter skal du sikre dig, at projektilet har en Rigidbody og en Collider komponent. Du kan derefter skrive et script til at håndtere kollisionsdetektion ved hjælp af OnCollisionEnter eller OnTriggerEnter:

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

Konklusion

Forhåbentlig hjalp denne vejledning dig med at lære, hvordan du affyrer et skud i Unity ved at skabe et projektil, anvende kraft på det og håndtere grundlæggende kollisionsdetektion. Denne teknik kan udvides til mere komplekse interaktioner, såsom tilføjelse af effekter, lyd eller avanceret fysik.