Een jachtspel maken in Unity

In deze tutorial doorlopen we het proces van het maken van een basisjachtspel in Unity. Dit spel bevat elementen zoals spelerbeweging, dierlijke AI, schietmechanismen en een scoresysteem. We behandelen:

  • Het project en de omgeving opzetten
  • Spelerbedieningen maken
  • Implementatie van dierlijke AI
  • Schietmechanismen toevoegen
  • Een puntensysteem opzetten

Het project opzetten

Laten we beginnen met het opzetten van een nieuw Unity-project en het creëren van de omgeving.

Het project creëren

  1. Open Unity en maak een nieuw 3D-project.
  2. Geef je project de naam HuntingGame en klik op Create.
  3. Maak in het projectvenster mappen met de naam Scripts, Prefabs en Materials om uw assets te ordenen.

De omgeving instellen

  1. Klik met de rechtermuisknop in de hiërarchie en selecteer 3D-object > Terrein om een ​​terrein te maken.
  2. Pas het terrein aan met de Terreingereedschappen om texturen te schilderen, bomen toe te voegen en gras of andere details te plaatsen.
  3. Voeg een paar 3D-objecten toe, zoals rotsen en bomen, om de omgeving realistischer te maken.

Spelerbedieningen maken

Vervolgens creëren we het personage van de speler en implementeren we op fysica gebaseerde bewegingsbesturingen.

Speler Karakter

  1. Klik met de rechtermuisknop in de hiërarchie en selecteer 3D-object > Capsule om een ​​spelerpersonage te maken.
  2. Hernoem de capsule naar Speler en plaats deze boven het terrein.
  3. Voeg een Rigidbody-component toe aan het Player-object voor op natuurkunde gebaseerde bewegingen.
  4. Voeg een Camera toe als onderliggend object van het Player-object dat als het gezichtspunt van de speler dient.

Speler Beweging 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. Maak een nieuw C#-script met de naam PlayerMovement.cs in de map Scripts.
  2. Koppel het script PlayerMovement aan het object Player.

Implementatie van dierlijke AI

We creëren een eenvoudige dierlijke AI die door de omgeving kan bewegen en op de speler kan reageren.

Prefab voor dieren

  1. Importeer of maak een 3D-model van het dier (bijvoorbeeld een hert).
  2. Sleep het model naar de scène en positioneer het op het terrein.
  3. Klik met de rechtermuisknop op het model in de hiërarchie en selecteer Create Empty om een ​​bovenliggend object te maken. Noem het Deer.
  4. Sleep het 3D-model naar het Deer-object en reset de transformatie.
  5. Sla het Deer-object op als een prefab door het naar de map Prefabs te slepen.

Dierlijk 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. Maak een nieuw C#-script met de naam AnimalAI.cs in de map Scripts.
  2. Koppel het AnimalAI-script aan de Deer-prefab.
  3. Voeg een NavMeshAgent-component toe aan de Deer-prefab.
  4. Stel waypoints in de scène in door lege GameObjects te maken en deze naar wens te positioneren. Wijs deze waypoints toe aan de waypoints array in het AnimalAI script.

Schietmechanismen toevoegen

We gaan de mogelijkheid voor de speler implementeren om op dieren te schieten.

Schietscript

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. Maak een nieuw C#-script met de naam PlayerShooting.cs in de map Scripts.
  2. Koppel het script PlayerShooting aan het object Player.
  3. Maak een impacteffect (bijvoorbeeld een deeltjessysteem) en wijs dit toe aan het veld impactEffect in het script.

Een scoresysteem opzetten

We voegen een eenvoudig puntensysteem toe om de succesvolle jachten van de speler bij te houden.

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. Maak een nieuw C#-script met de naam ScoreManager.cs in de map Scripts.
  2. Koppel het script ScoreManager aan een nieuw leeg GameObject met de naam GameManager.
  3. Maak een UI-tekstelement voor het weergeven van de score en wijs dit toe aan het veld scoreText in het script ScoreManager.

Het opnamescript bijwerken om de score bij te houden

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);
    }
}

Conclusie

We hebben een basisjachtspel gemaakt in Unity. We hebben het project en de omgeving opgezet, spelerbesturingen gemaakt met op fysica gebaseerde bewegingen, dierlijke AI geïmplementeerd, schietmechanismen toegevoegd en een scoresysteem opgezet. Deze basiskennis kan worden uitgebreid met complexere gedragingen, extra dieren en verfijnde spelmechanismen om je jachtspel te verbeteren.