Skapa ett jaktspel i Unity

I den här handledningen går vi igenom processen att skapa ett grundläggande jaktspel i Unity. Det här spelet kommer att innehålla element som spelarrörelser, djur-AI, skjutmekanik och ett poängsystem. Vi kommer att täcka:

  • Att sätta upp projektet och miljön
  • Skapa spelarkontroller
  • Implementering av animal AI
  • Lägger till skjutmekanik
  • Inrätta ett poängsystem

Konfigurera projektet

Låt oss börja med att sätta upp ett nytt Unity-projekt och skapa miljön.

Skapar projektet

  1. Öppna Unity och skapa ett nytt 3D-projekt.
  2. Namnge ditt projekt HuntingGame och klicka på Create.
  3. I projektfönstret skapar du mappar med namnet Scripts, Prefabs och Materials för att organisera dina tillgångar.

Ställa in miljön

  1. I hierarkin högerklickar du och väljer 3D-objekt > Terräng för att skapa en terräng.
  2. Anpassa terrängen genom att använda Terrängverktygen för att måla texturer, lägga till träd och placera gräs eller andra detaljer.
  3. Lägg till några 3D-objekt som stenar och träd för att göra miljön mer realistisk.

Skapa spelarkontroller

Därefter skapar vi spelarkaraktären och implementerar fysikbaserade rörelsekontroller.

Spelarkaraktär

  1. I hierarkin högerklickar du och väljer 3D-objekt > Kapsel för att skapa en spelarkaraktär.
  2. Byt namn på kapseln till Player och placera den ovanför terrängen.
  3. Lägg till en Rigidbody-komponent till Player-objektet för fysikbaserad rörelse.
  4. Lägg till en Camera som ett barn till Player-objektet för att tjäna som spelarens synvinkel.

Spelarrörelsemanus

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. Skapa ett nytt C#-skript med namnet PlayerMovement.cs i mappen Scripts.
  2. Bifoga PlayerMovement-skriptet till Player-objektet.

Implementering av Animal AI

Vi kommer att skapa enkel djur-AI för att ströva runt i miljön och reagera på spelaren.

Animal Prefab

  1. Importera eller skapa en 3D-modell för djuret (t.ex. ett rådjur).
  2. Dra modellen in i scenen och placera den i terrängen.
  3. Högerklicka på modellen i hierarkin och välj Skapa tom för att skapa ett överordnat objekt. Döp det till Hjortar.
  4. Dra 3D-modellen till Deer-objektet och återställ dess transformation.
  5. Spara Deer-objektet som ett prefab genom att dra det till 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. Skapa ett nytt C#-skript med namnet AnimalAI.cs i mappen Scripts.
  2. Bifoga AnimalAI-skriptet till Deer prefab.
  3. Lägg till en NavMeshAgent-komponent till Deer prefab.
  4. Ställ in waypoints i scenen genom att skapa tomma GameObjects och placera dem efter önskemål. Tilldela dessa waypoints till waypoints arrayen i AnimalAI skriptet.

Lägger till skyttemekanik

Vi kommer att implementera förmågan för spelaren att skjuta på djur.

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. Skapa ett nytt C#-skript som heter PlayerShooting.cs i mappen Scripts.
  2. Bifoga PlayerShooting-skriptet till Player-objektet.
  3. Skapa en effekteffekt (t.ex. ett partikelsystem) och tilldela den till impactEffect-fältet i skriptet.

Konfigurera ett poängsystem

Vi lägger till ett enkelt poängsystem för att spåra spelarens framgångsrika jakter.

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. Skapa ett nytt C#-skript med namnet ScoreManager.cs i mappen Scripts.
  2. Bifoga ScoreManager-skriptet till ett nytt tomt GameObject som heter GameManager.
  3. Skapa ett UI-textelement för att visa poängen och tilldela det till scoreText-fältet i ScoreManager-skriptet.

Uppdatering av skjutskriptet för att spåra 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);
    }
}

Slutsats

Vi har skapat ett grundläggande jaktspel i Unity. Vi satte upp projektet och miljön, skapade spelarkontroller med fysikbaserad rörelse, implementerade djur-AI, lade till skjutmekanik och satte upp ett poängsystem. Denna grundläggande kunskap kan utökas till att omfatta mer komplexa beteenden, ytterligare djur och förfinad spelmekanik för att förbättra ditt jaktspel.