Oprettelse af et jagtspil i Unity

I denne tutorial vil vi gennemgå processen med at skabe et grundlæggende jagtspil i Unity. Dette spil vil indeholde elementer som spillerbevægelse, dyre-AI, skydemekanik og et scoringssystem. Vi vil dække:

  • Opsætning af projekt og miljø
  • Oprettelse af spillerkontroller
  • Implementering af animalsk AI
  • Tilføjelse af skydemekanik
  • Opsætning af et scoringssystem

Opsætning af projektet

Lad os starte med at oprette et nyt Unity-projekt og skabe miljøet.

Oprettelse af projektet

  1. Åbn Unity og opret et nyt 3D-projekt.
  2. Navngiv dit projekt HuntingGame og klik på Create.
  3. I projektvinduet skal du oprette mapper med navnet Scripts, Prefabs og Materials for at organisere dine aktiver.

Opsætning af miljøet

  1. I hierarkiet skal du højreklikke og vælge 3D Objekt > Terræn for at oprette et terræn.
  2. Tilpas terrænet ved at bruge Terrænværktøjerne til at male teksturer, tilføje træer og placere græs eller andre detaljer.
  3. Tilføj et par 3D-objekter som klipper og træer for at gøre miljøet mere realistisk.

Oprettelse af spillerkontroller

Dernæst skaber vi spillerkarakteren og implementerer fysikbaserede bevægelseskontroller.

Spiller karakter

  1. I hierarkiet skal du højreklikke og vælge 3D-objekt > Kapsel for at oprette en spillerkarakter.
  2. Omdøb kapslen til Player og placer den over terrænet.
  3. Tilføj en Rigidbody-komponent til Player-objektet til fysikbaseret bevægelse.
  4. Tilføj et Camera som et underordnet Player objekt for at tjene som spillerens synspunkt.

Player Movement Script

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float rotationSpeed = 100f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent();
        rb.freezeRotation = true;
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = transform.forward * moveVertical * moveSpeed * Time.deltaTime;
        rb.MovePosition(rb.position + movement);

        float rotation = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
        Quaternion turnRotation = Quaternion.Euler(0f, rotation, 0f);
        rb.MoveRotation(rb.rotation * turnRotation);
    }
}
  1. Opret et nyt C#-script ved navn PlayerMovement.cs i mappen Scripts.
  2. Vedhæft PlayerMovement scriptet til Player objektet.

Implementering af Animal AI

Vi vil skabe simpel animalsk AI til at strejfe rundt i miljøet og reagere på spilleren.

Prefab dyr

  1. Importer eller lav en 3D-model for dyret (f.eks. et rådyr).
  2. Træk modellen ind i scenen og placer den på terrænet.
  3. Højreklik på modellen i hierarkiet, og vælg Opret tom for at oprette et overordnet objekt. Navngiv den Hjorte.
  4. Træk 3D-modellen ind i Deer-objektet og nulstil dets transformation.
  5. Gem Deer-objektet som et præfabrikat ved at trække det ind i mappen Prefabs.

Animal AI Script

using UnityEngine;
using UnityEngine.AI;

public class AnimalAI : MonoBehaviour
{
    public Transform[] waypoints;
    private NavMeshAgent agent;
    private int currentWaypoint = 0;

    void Start()
    {
        agent = GetComponent();
        agent.SetDestination(waypoints[currentWaypoint].position);
    }

    void Update()
    {
        if (agent.remainingDistance < agent.stoppingDistance)
        {
            currentWaypoint = (currentWaypoint + 1) % waypoints.Length;
            agent.SetDestination(waypoints[currentWaypoint].position);
        }
    }
}
  1. Opret et nyt C#-script med navnet AnimalAI.cs i mappen Scripts.
  2. Vedhæft AnimalAI scriptet til Deer præfabrikatet.
  3. Tilføj en NavMeshAgent-komponent til Deer præfabrikatet.
  4. Opsæt waypoints i scenen ved at oprette tomme GameObjects og placere dem som ønsket. Tildel disse waypoints til waypoints arrayet i AnimalAI scriptet.

Tilføjelse af skydemekanik

Vi implementerer spillerens evne til at skyde på dyr.

Shooting Script

using UnityEngine;

public class PlayerShooting : MonoBehaviour
{
    public Camera playerCamera;
    public float range = 100f;
    public GameObject impactEffect;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Shoot();
        }
    }

    void Shoot()
    {
        RaycastHit hit;
        if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
        {
            AnimalAI animal = hit.transform.GetComponent();
            if (animal != null)
            {
                Destroy(hit.transform.gameObject);
            }

            GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
            Destroy(impactGO, 2f);
        }
    }
}
  1. Opret et nyt C#-script ved navn PlayerShooting.cs i mappen Scripts.
  2. Vedhæft PlayerShooting scriptet til Player objektet.
  3. Opret en effekteffekt (f.eks. et partikelsystem) og tildel den til impactEffect-feltet i scriptet.

Opsætning af et scoringssystem

Vi tilføjer et simpelt scoringssystem til at spore spillerens succesfulde jagter.

Score Manager Script

using UnityEngine;
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour
{
    public static int score = 0;
    public Text scoreText;

    void Update()
    {
        scoreText.text = "Score: " + score.ToString();
    }

    public static void AddScore(int points)
    {
        score += points;
    }
}
  1. Opret et nyt C#-script ved navn ScoreManager.cs i mappen Scripts.
  2. Vedhæft ScoreManager scriptet til et nyt tomt GameObject ved navn GameManager.
  3. Opret et UI-tekstelement til at vise partituret og tildel det til scoreText-feltet i ScoreManager-scriptet.

Opdatering af skydescriptet til at spore resultat

void Shoot()
{
    RaycastHit hit;
    if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
    {
        AnimalAI animal = hit.transform.GetComponent();
        if (animal != null)
        {
            Destroy(hit.transform.gameObject);
            ScoreManager.AddScore(10);
        }

        GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
        Destroy(impactGO, 2f);
    }
}

Konklusion

Vi har lavet et grundlæggende jagtspil i Unity. Vi satte projektet og miljøet op, skabte spillerkontroller med fysikbaseret bevægelse, implementerede animalsk AI, tilføjede skydemekanik og satte et scoringssystem op. Denne grundlæggende viden kan udvides til at omfatte mere kompleks adfærd, yderligere dyr og raffineret vildtmekanik for at forbedre dit jagtspil.