Creando un juego de caza en Unity

En este tutorial, repasaremos el proceso de creación de un juego de caza básico en Unity. Este juego incluirá elementos como el movimiento del jugador, la IA de los animales, la mecánica de tiro y un sistema de puntuación. Cubriremos:

  • Configuración del proyecto y el entorno
  • Creación de controles de jugador
  • Implementación de la IA animal
  • Añadiendo mecánicas de disparo
  • Establecer un sistema de puntuación

Configuración del proyecto

Comencemos configurando un nuevo proyecto Unity y creando el entorno.

Creando el proyecto

  1. Abra Unity y cree un nuevo proyecto 3D.
  2. Nombra tu proyecto HuntingGame y haz clic en Crear.
  3. En la ventana Proyecto, cree carpetas denominadas Scripts, Prefabs y Materials para organizar sus activos.

Configuración del entorno

  1. En la Jerarquía, haga clic derecho y seleccione Objeto 3D > Terreno para crear un terreno.
  2. Personaliza el terreno utilizando las Herramientas de terreno para pintar texturas, agregar árboles y colocar césped u otros detalles.
  3. Añade algunos objetos 3D como rocas y árboles para hacer el entorno más realista.

Creación de controles de jugador

A continuación, crearemos el personaje del jugador e implementaremos controles de movimiento basados ​​en la física.

Personaje del jugador

  1. En la Jerarquía, haga clic derecho y seleccione Objeto 3D > Cápsula para crear un personaje jugador.
  2. Cambie el nombre de la cápsula a Player y colóquela sobre el terreno.
  3. Agregue un componente Rigidbody al objeto Player para el movimiento basado en la física.
  4. Agregue una Cámara como elemento secundario del objeto Jugador para que sirva como punto de vista del jugador.

Guión de movimiento del jugador

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. Cree un nuevo script de C# llamado PlayerMovement.cs en la carpeta Scripts.
  2. Adjunte el script PlayerMovement al objeto Player.

Implementación de la IA en animales

Crearemos una IA animal simple que deambulará por el entorno y reaccionará ante el jugador.

Prefabricado de animales

  1. Importe o cree un modelo 3D para el animal (por ejemplo, un ciervo).
  2. Arrastre el modelo a la escena y colóquelo en el terreno.
  3. Haga clic con el botón derecho en el modelo en la jerarquía y seleccione Crear vacío para crear un objeto principal. Asígnele el nombre Ciervo.
  4. Arrastre el modelo 3D al objeto Deer y restablezca su transformación.
  5. Guarde el objeto Deer como un prefabricado arrastrándolo a la carpeta Prefabs.

Guión de IA para animales

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. Cree un nuevo script de C# llamado AnimalAI.cs en la carpeta Scripts.
  2. Adjunte el script AnimalAI al prefab Deer.
  3. Agregue un componente NavMeshAgent al prefabricado Deer.
  4. Establezca puntos de referencia en la escena creando GameObjects vacíos y posicionándolos como desee. Asigna estos puntos de referencia a la matriz waypoints en el script AnimalAI.

Añadiendo mecánicas de disparo

Implementaremos la capacidad para que el jugador dispare a los animales.

Guión de rodaje

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. Cree un nuevo script de C# llamado PlayerShooting.cs en la carpeta Scripts.
  2. Adjunte el script PlayerShooting al objeto Player.
  3. Cree un efecto de impacto (por ejemplo, un sistema de partículas) y asígnelo al campo impactEffect en el script.

Establecimiento de un sistema de puntuación

Agregaremos un sistema de puntuación simple para rastrear las cacerías exitosas del jugador.

Script del administrador de puntuaciones

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. Cree un nuevo script de C# llamado ScoreManager.cs en la carpeta Scripts.
  2. Adjunte el script ScoreManager a un nuevo GameObject vacío llamado GameManager.
  3. Cree un elemento de texto de interfaz de usuario para mostrar la puntuación y asígnelo al campo scoreText en el script ScoreManager.

Actualización del guión de tiro para seguir la puntuación

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

Conclusión

Hemos creado un juego de caza básico en Unity. Configuramos el proyecto y el entorno, creamos controles para los jugadores con movimientos basados ​​en la física, implementamos una IA animal, añadimos mecánicas de tiro y configuramos un sistema de puntuación. Este conocimiento básico se puede ampliar para incluir comportamientos más complejos, animales adicionales y mecánicas de juego refinadas para mejorar tu juego de caza.