El presente informe detalla el desarrollo de una interfaz en Unity para la manipulación de coches dentro de un entorno de juego. El objetivo principal es permitir al usuario controlar diversas acciones, como movimiento, rotación y cambio de color, en cinco vehículos diferentes a través de la interacción con teclas específicas.
Se han definido las siguientes variables para cada uno de los cinco vehículos:
- Nombre
- Velocidad
- Distancia máxima
- Activo
- Motor
- GameObject
Además, se han creado sprites para representar visualmente cada uno de los coches, los cuales han sido asignados a los correspondientes GameObjects.
// Definición de variables para cada vehículo
public string[] Nombre;
public int[] Velocidad;
public int[] DistanciaMaxima;
public bool[] Activo;
public Motor[] Motores;
public GameObject[] GO;
// Asignación de sprites a los GameObjects correspondientes
GO[0].GetComponent<SpriteRenderer>().sprite = spriteCoche1;
GO[1].GetComponent<SpriteRenderer>().sprite = spriteCoche2;
// Resto de asignaciones...
Se ha creado una variable numérica llamada "CocheSeleccionado" que puede modificarse en el inspector. Al cambiar esta variable, el coche correspondiente a ese número cambia de color a verde. Cuando la variable está en 0, ningún coche está seleccionado y ninguno se muestra en verde.
// Creación de una variable numérica para seleccionar el coche
public int CocheSeleccionado;
// Cambio de color del coche seleccionado
if (CocheSeleccionado == 1)
{
GO[0].GetComponent<SpriteRenderer>().color = Color.green;
}
Los coches activos se muestran en color azul, los inactivos en rojo y aquellos con velocidad o distancia máxima igual a 0 en gris. El coche seleccionado permanece en verde independientemente de su estado de activación.
// Cambio de color según estado y valores
if (Activo[0])
{
GO[0].GetComponent<SpriteRenderer>().color = Color.blue;
}
else
{
GO[0].GetComponent<SpriteRenderer>().color = Color.red;
}
Presionando las teclas numéricas del 1 al 5, se cambia la variable "CocheSeleccionado" al número correspondiente, lo que hace que el coche respectivo se muestre en verde.
// Selección de coche mediante teclas numéricas
if (Input.GetKeyDown(KeyCode.Alpha1))
{
CocheSeleccionado = 1;
}
Se han creado textos en la escena que muestran los valores del coche seleccionado, incluyendo nombre, velocidad, distancia máxima, estado de funcionamiento y tipo de motor. Si no hay coche seleccionado, estos textos muestran los nombres de las variables correspondientes.
// Visualización de información del coche seleccionado
textNombre.text = "Nombre: " + Nombre[CocheSeleccionado - 1] + "\n" +
"Velocidad: " + Velocidad[CocheSeleccionado - 1] + "\n" +
"Distancia Máxima: " + DistanciaMaxima[CocheSeleccionado - 1] + "\n" +
"Activo: " + Activo[CocheSeleccionado - 1] + "\n" +
"Motor: " + Motores[CocheSeleccionado - 1];
Al presionar la tecla correspondiente a un coche ya seleccionado, se deselecciona dicho coche y devuelve la variable "CocheSeleccionado" a 0.
// Deselección de coche
if (Input.GetKeyDown(KeyCode.Alpha1) && CocheSeleccionado == 1)
{
CocheSeleccionado = 0;
}
Los coches activos se mueven en línea recta según su velocidad hasta alcanzar su distancia máxima.
// Movimiento de coches activos
if (Activo[0] && GO[0].transform.position.x <= DistanciaMaxima[0])
{
GO[0].transform.Translate(new Vector3(0.0025f * Velocidad[0], 0, 0), Space.World);
}
Al presionar la tecla "Q", se activan todos los coches que tienen tanto velocidad como distancia máxima distintas de cero, permitiéndoles moverse hasta su distancia máxima.
// Activación masiva de coches
if (Input.GetKeyDown(KeyCode.Q))
{
for (int i = 0; i < Activo.Length; i++)
{
if (Velocidad[i] != 0 && DistanciaMaxima[i] != 0)
{
Activo[i] = true;
}
}
}
Al presionar la tecla "W", se activa únicamente el coche seleccionado, obligándolo a moverse hasta su distancia máxima normalmente.
// Activación individual del coche seleccionado
if (Input.GetKeyDown(KeyCode.W))
{
Activo[CocheSeleccionado - 1] = true;
textNombre.gameObject.SetActive(false);
}
Al presionar la tecla "E", los coches eléctricos rotan sobre su eje Z. Una nueva pulsación detiene la rotación y restablece la rotación original.
// Rotación de coches eléctricos
if (Input.GetKeyDown(KeyCode.E))
{
for (int i = 0; i < GO.Length; i++)
{
if (Motores[i] == Motor.Electrico)
{
GO[i].transform.Rotate(new Vector3(0, 0, 1));
}
}
}
Todo el ejercicio se ha desarrollado en un único script, "Controlador.cs". Además, se han utilizado atributos para las variables y arrays para crear las variables necesarias.
Al presionar la tecla "R", se devuelve a los cinco coches a su posición inicial, se desactivan todos los coches y se reinician las variables, asignando valores aleatorios dentro de rangos lógicos. Los nombres de los coches también pueden cambiarse aleatoriamente si se implementa esta funcionalidad.
// Función de reset y reinicio de variables
if (Input.GetKeyDown(KeyCode.R))
{
// Devolver coches a posición inicial
for (int i = 0; i < GO.Length; i++)
{
float posY = GO[i].transform.position.y;
float posZ = GO[i].transform.position.z;
transform.position = new Vector3(0, posY, posZ);
GO[i].transform.position = transform.position;
}
// Desactivar todos los coches y devolver texto a opciones por defecto
CocheSeleccionado = 0;
textNombre.gameObject.SetActive(true);
CocheSeleccionado();
Activo[0] = false;
Activo[1] = false;
Activo[2] = false;
Activo[3] = false;
Activo[4] = false;
// Reiniciar variables de los coches con valores aleatorios dentro de rangos lógicos
Nombre[0] = NombreAlternativos[Random.Range(0, NombreAlternativos.Length)];
Nombre[1] = NombreAlternativos[Random.Range(0, NombreAlternativos.Length)];
Nombre[2] = NombreAlternativos[Random.Range(0, NombreAlternativos.Length)];
Nombre[3] = NombreAlternativos[Random.Range(0, NombreAlternativos.Length)];
Nombre[4] = NombreAlternativos[Random.Range(0, NombreAlternativos.Length)];
Velocidad[0] = Random.Range(0, 8);
Velocidad[1] = Random.Range(0, 8);
Velocidad[2] = Random.Range(0, 8);
Velocidad[3] = Random.Range(0, 8);
Velocidad[4] = Random.Range(0, 8);
DistanciaMaxima[0] = Random.Range(0, 15);
DistanciaMaxima[1] = Random.Range(0, 15);
DistanciaMaxima[2] = Random.Range(0, 15);
DistanciaMaxima[3] = Random.Range(0, 15);
DistanciaMaxima[4] = Random.Range(0, 15);
}
- Plataforma: Disponible para Windows, macOS y Linux.
- Requisitos Mínimos de Hardware: Se recomienda un procesador de al menos 2.0 GHz, 4 GB de RAM y una tarjeta gráfica compatible con DirectX 11.
El desarrollo de esta interfaz para la manipulación de coches en Unity ha sido exitoso. Se ha logrado una implementación robusta y funcional que permite al usuario interactuar con los coches de manera intuitiva y controlada.
El uso de un único script y la integración de atributos y arrays demuestran un enfoque eficiente y organizado en el desarrollo del proyecto.
En resumen, el proyecto ha sido una experiencia enriquecedora que ha permitido aplicar y consolidar conocimientos en el desarrollo de juegos con Unity, así como mejorar habilidades en programación y lógica de juego.
- Desarrollador: Carlos Valencia Sánchez
- Diseñador de Juego: Carlos Valencia Sánchez
- Artista Gráfico: Carlos Valencia Sánchez
Para obtener soporte técnico, reportar errores o proporcionar comentarios, no dudes en contactar.
Este documento proporciona una visión general del juego, incluyendo sus características, tecnología utilizada, requisitos del sistema, instrucciones de juego y créditos. Para obtener más información detallada sobre el desarrollo y funcionamiento del juego, consulta la documentación interna o comunícate con el desarrollador.