Creare un gioco di caccia in Unity

In questo tutorial, esamineremo il processo di creazione di un gioco di caccia di base in Unity. Questo gioco includerà elementi come il movimento del giocatore, l'IA degli animali, le meccaniche di tiro e un sistema di punteggio. Tratteremo:

  • Impostazione del progetto e dell'ambiente
  • Creazione di controlli del lettore
  • Implementazione dell'intelligenza artificiale animale
  • Aggiunta di meccaniche di tiro
  • Impostazione di un sistema di punteggio

Impostazione del progetto

Iniziamo impostando un nuovo progetto Unity e creando l'ambiente.

Creazione del progetto

  1. Apri Unity e crea un nuovo progetto 3D.
  2. Assegna al tuo progetto il nome HuntingGame e clicca su Crea.
  3. Nella finestra Progetto, crea cartelle denominate Scripts, Prefabs e Materials per organizzare le tue risorse.

Impostazione dell'ambiente

  1. Nella Gerarchia, fai clic con il pulsante destro del mouse e seleziona Oggetto 3D > Terreno per creare un terreno.
  2. Personalizza il terreno utilizzando gli Strumenti terreno per dipingere texture, aggiungere alberi, posizionare erba o altri dettagli.
  3. Aggiungi alcuni oggetti 3D come rocce e alberi per rendere l'ambiente più realistico.

Creazione di controlli del lettore

Successivamente creeremo il personaggio del giocatore e implementeremo i controlli di movimento basati sulla fisica.

Personaggio del giocatore

  1. Nella Gerarchia, fai clic con il pulsante destro del mouse e seleziona Oggetto 3D > Capsula per creare un personaggio giocatore.
  2. Rinomina la capsula in Giocatore e posizionala sopra il terreno.
  3. Aggiungere un componente Rigidbody all'oggetto Player per il movimento basato sulla fisica.
  4. Aggiungere una Camera come elemento figlio dell'oggetto Player per fungere da punto di vista del giocatore.

Script del movimento del giocatore

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. Crea un nuovo script C# denominato PlayerMovement.cs nella cartella Scripts.
  2. Collegare lo script PlayerMovement all'oggetto Player.

Implementazione dell'intelligenza artificiale animale

Creeremo una semplice intelligenza artificiale per gli animali, che si muoveranno nell'ambiente e reagiranno al giocatore.

Prefabbricato per animali

  1. Importa o crea un modello 3D per l'animale (ad esempio un cervo).
  2. Trascinare il modello nella scena e posizionarlo sul terreno.
  3. Fai clic con il pulsante destro del mouse sul modello nella Gerarchia e seleziona Crea Vuoto per creare un oggetto padre. Chiamalo Cervo.
  4. Trascina il modello 3D nell'oggetto Cervo e reimposta la sua trasformazione.
  5. Salvare l'oggetto Deer come prefabbricato trascinandolo nella cartella Prefabs.

Script di intelligenza artificiale per animali

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. Crea un nuovo script C# denominato AnimalAI.cs nella cartella Scripts.
  2. Allega lo script AnimalAI al prefabbricato Deer.
  3. Aggiungere un componente NavMeshAgent al prefabbricato Deer.
  4. Imposta i waypoint nella scena creando GameObject vuoti e posizionandoli come desiderato. Assegna questi waypoint all'array waypoints nello script AnimalAI.

Aggiunta di meccaniche di tiro

Implementeremo la possibilità per il giocatore di sparare agli animali.

Sceneggiatura delle riprese

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. Crea un nuovo script C# denominato PlayerShooting.cs nella cartella Scripts.
  2. Collegare lo script PlayerShooting all'oggetto Player.
  3. Crea un effetto di impatto (ad esempio un sistema di particelle) e assegnalo al campo impactEffect nello script.

Impostazione di un sistema di punteggio

Aggiungeremo un semplice sistema di punteggio per tenere traccia delle cacce riuscite dai giocatori.

Script del gestore dei punteggi

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. Creare un nuovo script C# denominato ScoreManager.cs nella cartella Scripts.
  2. Collegare lo script ScoreManager a un nuovo GameObject vuoto denominato GameManager.
  3. Crea un elemento di testo dell'interfaccia utente per visualizzare il punteggio e assegnalo al campo scoreText nello script ScoreManager.

Aggiornamento dello script di ripresa per tracciare il punteggio

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

Conclusione

Abbiamo creato un gioco di caccia di base in Unity. Abbiamo impostato il progetto e l'ambiente, creato controlli per i giocatori con movimento basato sulla fisica, implementato l'intelligenza artificiale degli animali, aggiunto meccaniche di tiro e impostato un sistema di punteggio. Questa conoscenza di base può essere ampliata per includere comportamenti più complessi, animali aggiuntivi e meccaniche di gioco raffinate per migliorare il tuo gioco di caccia.