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
- Abra Unity y cree un nuevo proyecto 3D.
- Nombra tu proyecto
HuntingGame
y haz clic enCrear
. - En la ventana Proyecto, cree carpetas denominadas
Scripts
,Prefabs
yMaterials
para organizar sus activos.
Configuración del entorno
- En la Jerarquía, haga clic derecho y seleccione
Objeto 3D > Terreno
para crear un terreno. - Personaliza el terreno utilizando las
Herramientas de terreno
para pintar texturas, agregar árboles y colocar césped u otros detalles. - 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
- En la Jerarquía, haga clic derecho y seleccione
Objeto 3D > Cápsula
para crear un personaje jugador. - Cambie el nombre de la cápsula a
Player
y colóquela sobre el terreno. - Agregue un componente
Rigidbody
al objetoPlayer
para el movimiento basado en la física. - Agregue una
Cámara
como elemento secundario del objetoJugador
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);
}
}
- Cree un nuevo script de C# llamado
PlayerMovement.cs
en la carpetaScripts
. - Adjunte el script
PlayerMovement
al objetoPlayer
.
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
- Importe o cree un modelo 3D para el animal (por ejemplo, un ciervo).
- Arrastre el modelo a la escena y colóquelo en el terreno.
- 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 nombreCiervo
. - Arrastre el modelo 3D al objeto
Deer
y restablezca su transformación. - Guarde el objeto
Deer
como un prefabricado arrastrándolo a la carpetaPrefabs
.
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);
}
}
}
- Cree un nuevo script de C# llamado
AnimalAI.cs
en la carpetaScripts
. - Adjunte el script
AnimalAI
al prefabDeer
. - Agregue un componente
NavMeshAgent
al prefabricadoDeer
. - 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 scriptAnimalAI
.
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);
}
}
}
- Cree un nuevo script de C# llamado
PlayerShooting.cs
en la carpetaScripts
. - Adjunte el script
PlayerShooting
al objetoPlayer
. - 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;
}
}
- Cree un nuevo script de C# llamado
ScoreManager.cs
en la carpetaScripts
. - Adjunte el script
ScoreManager
a un nuevo GameObject vacío llamadoGameManager
. - Cree un elemento de texto de interfaz de usuario para mostrar la puntuación y asígnelo al campo
scoreText
en el scriptScoreManager
.
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.