Opprette et jaktspill i Unity

I denne opplæringen går vi gjennom prosessen med å lage et grunnleggende jaktspill i Unity. Dette spillet vil inneholde elementer som spillerbevegelse, dyre-AI, skytemekanikk og et scoringssystem. Vi vil dekke:

  • Sette opp prosjektet og miljøet
  • Lage spillerkontroller
  • Implementering av animalsk AI
  • Legger til skytemekanikk
  • Sette opp et poengsystem

Sette opp prosjektet

La oss starte med å sette opp et nytt Unity-prosjekt og skape miljøet.

Opprette prosjektet

  1. Åpne Unity og lag et nytt 3D-prosjekt.
  2. Gi prosjektet et navn HuntingGame og klikk Create.
  3. I prosjektvinduet oppretter du mapper som heter Scripts, Prefabs og Materials for å organisere ressursene dine.

Sette opp miljøet

  1. I hierarkiet høyreklikker du og velger 3D-objekt > Terreng for å lage et terreng.
  2. Tilpass terrenget ved å bruke Terrengverktøy for å male teksturer, legge til trær og plassere gress eller andre detaljer.
  3. Legg til noen få 3D-objekter som steiner og trær for å gjøre miljøet mer realistisk.

Opprette spillerkontroller

Deretter skal vi lage spillerkarakteren og implementere fysikkbaserte bevegelseskontroller.

Spillerkarakter

  1. Høyreklikk i hierarkiet og velg 3D Object > Capsule for å lage en spillerkarakter.
  2. Gi kapselen nytt navn til Player og plasser den over terrenget.
  3. Legg til en Rigidbody-komponent til Player-objektet for fysikkbasert bevegelse.
  4. Legg til et Camera som et barn av Player-objektet for å 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. Lag et nytt C#-skript med navnet PlayerMovement.cs i mappen Scripts.
  2. Fest PlayerMovement-skriptet til Player-objektet.

Implementering av Animal AI

Vi lager enkel dyre-AI for å streife rundt i miljøet og reagere på spilleren.

Animal Prefab

  1. Importer eller lag en 3D-modell for dyret (f.eks. et rådyr).
  2. Dra modellen inn i scenen og plasser den i terrenget.
  3. Høyreklikk modellen i hierarkiet og velg Opprett tom for å lage et overordnet objekt. Gi det navnet Hjort.
  4. Dra 3D-modellen inn i Deer-objektet og tilbakestill transformasjonen.
  5. Lagre Deer-objektet som et prefab ved å dra det inn i Prefabs-mappen.

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. Lag et nytt C#-skript med navnet AnimalAI.cs i mappen Scripts.
  2. Fest AnimalAI-skriptet til Deer prefab.
  3. Legg til en NavMeshAgent-komponent til Deer prefab.
  4. Sett opp veipunkter i scenen ved å lage tomme GameObjects og plassere dem som ønsket. Tilordne disse veipunktene til waypoints-matrisen i AnimalAI-skriptet.

Legger til skytemekanikk

Vi implementerer muligheten for spilleren til å skyte 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. Lag et nytt C#-skript med navnet PlayerShooting.cs i mappen Scripts.
  2. Fest PlayerShooting-skriptet til Player-objektet.
  3. Lag en effekteffekt (f.eks. et partikkelsystem) og tilordne den til impactEffect-feltet i skriptet.

Sette opp et poengsystem

Vi legger til et enkelt poengsystem for å spore spillerens vellykkede jakter.

Score Manager-skript

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. Lag et nytt C#-skript med navnet ScoreManager.cs i mappen Scripts.
  2. Fest ScoreManager-skriptet til et nytt tomt GameObject kalt GameManager.
  3. Lag et UI-tekstelement for å vise poengsummen og tilordne det til scoreText-feltet i ScoreManager-skriptet.

Oppdatering av skyteskriptet for å 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);
    }
}

Konklusjon

Vi har laget et grunnleggende jaktspill i Unity. Vi satte opp prosjektet og miljøet, lagde spillerkontroller med fysikkbasert bevegelse, implementerte dyre-AI, la til skytemekanikk og satte opp et scoringssystem. Denne grunnleggende kunnskapen kan utvides til å inkludere mer kompleks atferd, flere dyr og raffinert viltmekanikk for å forbedre jaktspillet ditt.