Este script controla la puntuación de un juego. Declara una variable estática pública "puntos" para almacenar la puntuación actual. Contiene métodos para incrementar la puntuación, mostrarla en un texto y revisar si se completó el nivel o el juego cuando se alcanza cierta puntuación, cargando la siguiente escena.
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
Codigo Explicado Rompe Bloques.docx
1. Script Barra
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Barra: MonoBehaviour
{
public float velocidad = 20f;
Vector3 posicionInicial;
// Start is called before the first frame update
void Start()
{
posicionInicial = transform.position;
}
public void Reset()
{
transform.position = posicionInicial;
}
// Update is called once per frame
void Update()
{
float tecladoHorizontal = Input.GetAxisRaw("Horizontal");
float posX = transform.position.x + (tecladoHorizontal * velocidad *
Time.deltaTime);
transform.position = new Vector3(Mathf.Clamp(posX, -8, 8), transform.position.y,
transform.position.z);
}
}
Explicación de código Barra generado en C#
1. Se importan las siguientes bibliotecas:
System.Collections: Contiene las interfaces y clases que definen
diversas colecciones de objetos, como listas, colas,
diccionarios, entre otros.
System.Collections.Generic: Proporciona interfaces y clases
genéricas, como List<T>, Dictionary<TKey, TValue>, entre otros.
UnityEngine: Contiene las clases y funciones para interactuar con
el motor de juego Unity.
2. Se define una clase llamada "Barra" que hereda de MonoBehaviour, lo
que indica que es un componente de Unity que se puede adjuntar a un
objeto en el escenario.
2. 3. Dentro de la clase "Barra" se declaran las siguientes variables y
campos:
public float velocidad = 20f;: Una variable pública que
representa la velocidad de movimiento de la barra y tiene un
valor predeterminado de 20.
Vector3 posicionInicial;: Una variable privada de tipo Vector3
que almacena la posición inicial de la barra.
4. El método Start() se ejecuta una vez al inicio antes de que se
muestre el primer fotograma del juego. En este método, se asigna la
posición inicial del objeto a la variable posicionInicial utilizando
transform.position.
5. El método público Reset() se define para restablecer la posición de
la barra a la posición inicial almacenada en posicionInicial. Dentro
del método, se asigna la posición inicial a transform.position.
6. El método Update() se ejecuta en cada fotograma del juego. En este
método, se realiza lo siguiente:
Se obtiene la entrada horizontal del teclado utilizando
Input.GetAxisRaw("Horizontal"). El resultado se almacena en la
variable tecladoHorizontal.
Se calcula la nueva posición X de la barra sumando el producto de
tecladoHorizontal, velocidad y Time.deltaTime a la posición
actual X de la barra. El resultado se almacena en la variable
posX.
Se actualiza la posición de la barra utilizando
transform.position y se crea un nuevo Vector3 con el valor
clamped de posX, manteniendo las posiciones Y y Z sin cambios.
Mathf.Clamp se utiliza para asegurarse de que la posición X esté
entre -8 y 8.
En resumen, este script controla el movimiento horizontal de un objeto
en Unity (llamado "Barra") utilizando la entrada del teclado, y
asegura que la posición del objeto esté limitada entre los valores de
-8 y 8. El método Reset() permite restablecer la posición de la barra
a su posición inicial.
3. Script Bloque
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bloque : MonoBehaviour
{
public GameObject efectoParticulas;
public Puntos puntos;
//Is Trigger DESACTIVADO
void OnCollisionEnter()
{
Instantiate(efectoParticulas, transform.position, Quaternion.identity);
Destroy(gameObject);
transform.SetParent(null);
puntos.GanarPunto();
}
}
Explícame paso a paso el código generado c#
Explicación de código Bloque generado en C#
1. Se importan las siguientes bibliotecas:
System.Collections: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, entre otros.
System.Collections.Generic: Proporciona interfaces y clases
genéricas, como List<T>, Dictionary<TKey, TValue>, entre
otros.
UnityEngine: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
2. Se define una clase llamada "Bloque" que hereda de MonoBehaviour,
indicando que es un componente de Unity que se puede adjuntar a
un objeto en el escenario.
3. Dentro de la clase "Bloque" se declaran los siguientes campos y
variables públicos:
public GameObject efectoParticulas;: Un GameObject público que
representa el efecto de partículas a instanciar cuando el
bloque colisiona.
4. public Puntos puntos;: Una variable pública del tipo Puntos,
que probablemente es una referencia a otro script que maneja
los puntos en el juego.
4. El método OnCollisionEnter() se llama automáticamente cuando el
objeto colisiona con otro objeto. En este método, se realiza lo
siguiente:
Se instancia el objeto efectoParticulas en la posición actual
del bloque y con una rotación nula (Quaternion.identity). Esto
crea el efecto de partículas en la posición de colisión.
Se destruye el objeto bloque actual utilizando
Destroy(gameObject), eliminándolo del juego.
Se establece el padre del objeto bloque actual en null
utilizando transform.SetParent(null). Esto hace que el bloque
deje de tener un padre (si tenía uno).
Se llama al método GanarPunto() en el objeto puntos, que
probablemente es una función definida en el script Puntos para
incrementar la puntuación del juego.
En resumen, este script se utiliza para controlar la colisión de un
objeto "Bloque". Cuando ocurre una colisión, se crea un efecto de
partículas, se destruye el bloque, se elimina su padre (si tiene
alguno) y se incrementa la puntuación mediante una llamada al método
GanarPunto() en el objeto puntos.
Script BotonSalir
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BotonSalir : MonoBehaviour
{
public bool salir;
[System.Obsolete]
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (salir) {
Debug.Log("Salimos del Juego");
Application.Quit();
}
else
{
Application.LoadLevel("Portada");
}
}
5. }
}
Explícame paso a paso el código generado c#
Explicación de código BotonSalir generado en C#
1. Se importan las siguientes bibliotecas:
System.Collections: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, entre otros.
System.Collections.Generic: Proporciona interfaces y clases
genéricas, como List<T>, Dictionary<TKey, TValue>, entre
otros.
UnityEngine: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
2. Se define una clase llamada "BotonSalir" que hereda de
MonoBehaviour, indicando que es un componente de Unity que se
puede adjuntar a un objeto en el escenario.
3. Se define una clase llamada "BotonSalir" que hereda de
MonoBehaviour, indicando que es un componente de Unity que se
puede adjuntar a un objeto en el escenario.
4. El método Update() se llama automáticamente en cada fotograma del
juego. En este método, se realiza lo siguiente:
Se verifica si se ha presionado la tecla Escape
(Input.GetKeyDown(KeyCode.Escape)).
Si la tecla Escape ha sido presionada, se realiza una
comprobación con la variable salir:
Si `salir` es verdadero, se muestra un mensaje en la consola
utilizando `Debug.Log("Salimos del Juego")`.
Luego, se llama a `Application.Quit()` para salir del juego.
(Nota: `Application.Quit()` es obsoleto en versiones
recientes de Unity).
Si `salir` es falso, significa que no se debe salir del
juego. En su lugar, se llama a
`Application.LoadLevel("Portada")`,
lo cual carga la escena llamada "Portada" en el juego.
En resumen, este script controla el comportamiento de un botón de
salida en el juego. Si se presiona la tecla Escape y la variable
`salir` es verdadera,el juego se cierra utilizando
6. `Application.Quit()`. Si `salir` es falsa, se carga la escena llamada
"Portada" utilizando `Application.LoadLevel()`.
Script EmpezarPartida
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EmpezarPartida : MonoBehaviour
{
[System.Obsolete]
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Puntos.puntos = 0;
Vidas.vidas = 3;
Application.LoadLevel("Nivel01");
}
}
}
Explícame paso a paso el código generado c#
Explicación de código EmpezarPartida generado en C#
1. Se importan las siguientes bibliotecas:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, etc.
`System.Collections.Generic`: Proporciona interfaces y clases
genéricas, como `List<T>`, `Dictionary<TKey, TValue>`, etc.
`UnityEngine`: Contiene las clases y funciones para interactuar
con el motor de juego Unity.
2. Se define una clase llamada "EmpezarPartida" que hereda de
MonoBehaviour, indicando que es un componente de Unity que se puede
adjuntar a un objeto en el escenario.
3. El método `Update()` se llama automáticamente en cada fotograma del
juego. En este método, se realiza lo siguiente:
Se verifica si se ha presionado el botón de fuego, que
generalmente está asociado al botón izquierdo del mouse o a la
tecla de espacio (`Input.GetButtonDown("Fire1")`).
Si se ha presionado el botón de fuego, se realiza lo siguiente:
7. Se establece la variable estática `puntos` de la clase `Puntos`
en 0. Esto probablemente reinicia los puntos del juego.
Se establece la variable estática `vidas` de la clase `Vidas` en
3. Esto probablemente restablece las vidas del juego.
Se carga la escena llamada "Nivel01" utilizando
`Application.LoadLevel()`. Esto carga la escena del nivel 1 del
juego.
En resumen, este script controla el inicio de una partida en el juego.
Cuando se presiona el botón de fuego, se reinician los puntos y las
vidas del juego, y se carga la escena del nivel 1 para comenzar la
partida.
Script Pelota
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pelota : MonoBehaviour
{
// Start is called before the first frame update
public float velocidadInicial = 600f;
public Rigidbody rig;
bool enJuego;
Vector3 posicionInicial;
public Transform barra;
private void Awake()
{
barra = GetComponentInParent<Transform>();
}
void Start()
{
posicionInicial = transform.position;
}
public void Reset()
{
transform.position = posicionInicial;
transform.SetParent(barra);
enJuego = false;
DetenerMovimiento();
}
public void DetenerMovimiento()
{
rig.isKinematic = true;
8. rig.velocity = Vector3.zero;
}
// Update is called once per frame
void Update()
{
if (!enJuego && Input.GetButtonDown("Fire1"))
{
enJuego = true;
transform.SetParent(null);
rig.isKinematic = false;
rig.AddForce(new Vector3(velocidadInicial, velocidadInicial, 0));
}
}
}
Explícame paso a paso el código generado c#
Explicación de código VelocidadInicial generado en C#
1. Se importan las siguientes bibliotecas:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, etc.
`System.Collections.Generic`: Proporciona interfaces y clases
genéricas, como `List<T>`, `Dictionary<TKey, TValue>`, etc.
`UnityEngine`: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
2. Se define una clase llamada "Pelota" que hereda de MonoBehaviour,
indicando que es un componente de Unity que se puede adjuntar a un
objeto en el escenario.
3. Se declaran los siguientes campos y variables públicas:
`public float velocidadInicial = 600f;`: Una variable pública
de tipo float que representa la velocidad inicial de la
pelota.
`public Rigidbody rig;`: Un Rigidbody público que representa
el componente Rigidbody asociado a la pelota.
`bool enJuego;`: Una variable booleana que indica si la pelota
está en juego o no.
`Vector3 posicionInicial;`: Una variable que almacena la
posición inicial de la pelota.
9. 4. El método `Awake()` se ejecuta antes del método `Start()` y se
utiliza para obtener una referencia al componente Transform del objeto
padre de la pelota, que probablemente sea la barra de juego. La
referencia se asigna a la variable `barra` utilizando
`GetComponentInParent<Transform>()`.
5. En el método `Start()`, se asigna la posición inicial de la pelota
a la variable `posicionInicial` utilizando `transform.position`.
6. El método público `Reset()` se define para restablecer la posición
y el estado de la pelota a los valores iniciales. Dentro del método,
se realiza lo siguiente:
Se asigna la posición inicial a `transform.position`.
Se establece el padre de la pelota en el objeto de la barra
utilizando `transform.SetParent(barra)`. Esto probablemente
hace que la pelota esté anclada a la barra en el inicio del
juego.
Se establece `enJuego` en falso para indicar que la pelota no
está en juego.
Se llama al método `DetenerMovimiento()` para detener el
movimiento de la pelota.
7. El método público `DetenerMovimiento()` se define para detener el
movimiento de la pelota. Dentro del método, se realiza lo siguiente:
Se establece `rig.isKinematic` en verdadero para hacer que el
Rigidbody de la pelota sea kinemático y no se vea afectado por
las fuerzas externas.
Se establece `rig.velocity` en `Vector3.zero` para detener la
velocidad de la pelota y evitar cualquier movimiento residual.
8. En el método `Update()`, se realiza lo siguiente:
Se verifica si la pelota no está en juego (`!enJuego`) y se
ha presionado el botón de fuego
(`Input.GetButtonDown("Fire1")`), que generalmente está
asociado al botón izquierdo del mouse o a la tecla de
espacio.
Si se cumple la condición, se realiza lo siguiente:
Se establece `enJuego` en verdadero para indicar que la
pelota está en juego.
10. Se establece el padre de la pelota en `null` utilizando
`transform.SetParent(null)`, lo que hace que la pelota deje
de estar anclada a la barra.
Se establece `rig.isKinematic` en falso para permitir que el
Rigidbody de la pelota responda a las fuerzas físicas.
Se agrega una fuerza a la pelota utilizando
`rig.AddForce(new Vector3(velocidadInicial,
velocidadInicial, 0))`. La dirección y magnitud de la fuerza
se determinan mediante el vector `(velocidadInicial,
velocidadInicial, 0)`, lo que hace que la pelota se mueva en
diagonal hacia arriba y a la derecha con una velocidad
inicial especificada.
En resumen, este script controla el comportamiento de una pelota en el
juego. Al inicio, la pelota está anclada a la barra y no está en
juego. Cuando se presiona el botón de fuego, la pelota deja de estar
anclada a la barra, se habilita su Rigidbody y se le aplica una fuerza
inicial para iniciar el movimiento. El método `Reset()` se utiliza
para reiniciar la posición y el estado de la pelota, y el método
`DetenerMovimiento()` se utiliza para detener su movimiento en
cualquier momento.
Script Puntos
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Puntos : MonoBehaviour
{
// Start is called before the first frame update
public static int puntos = 0;
public Text textoPuntos;
public GameObject nivelCompletado;
public GameObject juegoCompletado;
public SiguienteNivel siguienteNivel;
public Pelota pelota;
public Barra barra;
public Transform contenedorBloques;
void Start()
{
ActualizarMarcadorPuntos();
}
11. void ActualizarMarcadorPuntos()
{
textoPuntos.text = "Puntos: " + Puntos.puntos;
}
public void GanarPunto()
{
Puntos.puntos++;
ActualizarMarcadorPuntos();
if(contenedorBloques.childCount <= 0)
{
pelota.DetenerMovimiento();
barra.enabled = false;
if(siguienteNivel.EsUltimoNivel())
{
juegoCompletado.SetActive(true);
}
else
{
nivelCompletado.SetActive(true);
}
siguienteNivel.ActivarCarga();
}
}
}
Explícame paso a paso el código generado c#
Explicación de código Puntos generado en C#
1. Se importan las siguientes bibliotecas:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, etc.
`System.Collections.Generic`: Proporciona interfaces y
clases genéricas, como `List<T>`, `Dictionary<TKey,
TValue>`, etc.
`UnityEngine`: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
`UnityEngine.UI`: Proporciona las clases necesarias para
interactuar con la interfaz de usuario en Unity.
2. Se define una clase llamada "Puntos" que hereda de MonoBehaviour,
indicando que es un componente de Unity que se puede adjuntar a un
objeto en el escenario.
12. 3. Se declaran los siguientes campos y variables públicas:
`public static int puntos = 0;`: Una variable estática de
tipo entero que representa la puntuación actual del juego.
`public Text textoPuntos;`: Un campo público de tipo Text
(proveniente de UnityEngine.UI) que representa el componente
de texto en la interfaz de usuario donde se mostrará la
puntuación.
`public GameObject nivelCompletado;`: Un objeto de juego
(GameObject) que representa un panel o elemento visual que
se mostrará cuando se complete un nivel.
`public GameObject juegoCompletado;`: Un objeto de juego
(GameObject) que representa un panel o elemento visual que
se mostrará cuando se complete todo el juego.
`public SiguienteNivel siguienteNivel;`: Un componente de
tipo SiguienteNivel (que probablemente es otro script) que
controla el avance al siguiente nivel del juego.
`public Pelota pelota;`: Un componente de tipo Pelota (que
probablemente es otro script) que controla el comportamiento
de la pelota en el juego.
`public Barra barra;`: Un componente de tipo Barra (que
probablemente es otro script) que controla el comportamiento
de la barra en el juego.
`public Transform contenedorBloques;`: Un componente de tipo
Transform que representa un contenedor de bloques en el
juego.
4. El método `Start()` se llama automáticamente al inicio del juego.
En este método, se llama al método `ActualizarMarcadorPuntos()`.
5. El método `ActualizarMarcadorPuntos()` se define para actualizar el
texto que muestra la puntuación en la interfaz de usuario. Dentro del
método, se realiza lo siguiente:
Se establece el texto del componente `textoPuntos`
utilizando la propiedad `text` y concatenando la palabra
"Puntos" con el valor actual de la variable estática
`Puntos.puntos`.
13. 6. El método público `GanarPunto()` se define para incrementar la
puntuación del juego y realizar comprobaciones adicionales. Dentro del
método, se realiza lo siguiente:
Se incrementa la variable estática `Puntos.puntos` en 1.
Se llama al método `ActualizarMarcadorPuntos()` para
actualizar el texto de la puntuación en la interfaz de
usuario.
Se verifica si no quedan bloques en el contenedor
(`contenedorBloques.childCount <= 0`):
Si no quedan bloques, se detiene el movimiento de la pelota
llamando al método `pelota.DetenerMovimiento()`.
Se deshabilita el componente `barra` estableciendo su
propiedad `enabled` en falso.
Se verifica si es el último nivel
(`siguienteNivel.EsUltimoNivel()`):
Si es el último nivel, se activa el objeto de juego
`juegoCompletado`, que muestra un panel o mensaje de juego
completado.
Si no es el último nivel, se activa el objeto de juego
`nivelCompletado`, que muestra un panel o mensaje de nivel
completado.
Se llama al método `siguienteNivel.ActivarCarga()` para
avanzar al siguiente nivel.
En resumen, este script controla la puntuación en el juego y realiza
acciones relacionadas cuando se gana un punto. Actualiza el marcador
de puntuación en la interfaz de usuario, detiene el movimiento de la
pelota y deshabilita la barra cuando se completa un nivel o el juego
completo. También permite avanzar al siguiente nivel mediante el uso
del componente `siguienteNivel`.
Script Vidas
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SiguienteNivel : MonoBehaviour
{
public string nivelACargar;
public float retraso;
// Start is called before the first frame update
[ContextMenu("Activar Carga")]
public void ActivarCarga()
14. {
Invoke("CargarNivel", retraso);
}
[System.Obsolete]
public void CargarNivel()
{
Application.LoadLevel(nivelACargar);
}
public bool EsUltimoNivel()
{
return nivelACargar == "Portada";
}
}
Explícame paso a paso el código generado c#
Explicación de código SiguienteNivel generado en C#
1. Se importa la siguiente biblioteca:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, etc.
`UnityEngine`: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
2. Se define una clase llamada "SiguienteNivel" que hereda de
MonoBehaviour, indicando que es un componente de Unity que se puede
adjuntar a un objeto en el escenario.
3. Se declaran los siguientes campos y variables públicas:
`public string nivelACargar;`: Una variable de tipo cadena
que indica el nombre del nivel que se cargará al activar la
carga.
`public float retraso;`: Una variable de tipo flotante que
representa el tiempo de retraso antes de cargar el siguiente
nivel.
4. El atributo `[ContextMenu("Activar Carga")]` se utiliza para
agregar un botón contextual en el editor de Unity que permite activar
la carga manualmente desde el editor.
5. El método público `ActivarCarga()` se define para activar la carga
del siguiente nivel con un retraso especificado. Dentro del método, se
realiza lo siguiente:
Se utiliza `Invoke("CargarNivel", retraso)` para invocar el
método `CargarNivel()` después de un tiempo determinado.
15. 6. El método público `CargarNivel()` se define para cargar el nivel
especificado. Dentro del método, se utiliza
`Application.LoadLevel(nivelACargar)` para cargar el nivel utilizando
el nombre especificado.
7. El método público `EsUltimoNivel()` se define para comprobar si el
nivel actual es el último nivel. Dentro del método, se realiza lo
siguiente:
Se compara el valor de `nivelACargar` con el nombre del
nivel de portada ("Portada").
Si el valor de `nivelACargar` es igual a "Portada", se
devuelve `true`, lo que indica que es el último nivel.
En resumen, este script permite cargar el siguiente nivel en el juego.
Utiliza el método `Invoke` para activar la carga con un retraso
especificado. Además, proporciona un método para comprobar si el nivel
actual es el último nivel.
Script SonidosPelotas
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SonidosPelota : MonoBehaviour
{
public AudioSource rebote;
public AudioSource punto;
void OnCollisionEnter(Collision otro)
{
if(otro.gameObject.CompareTag("Bloque"))
{
punto.Play();
}
else
{
rebote.Play();
}
}
}
Explícame paso a paso el código generado c#
16. Explicación de código SonidosPelotas generado en C#
1. Se importa la siguiente biblioteca:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, entre otros.
`UnityEngine`: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
2. Se define una clase llamada "SonidosPelota" que hereda de
MonoBehaviour, indicando que es un componente de Unity que se puede
adjuntar a un objeto en el escenario.
3. Se declaran los siguientes campos y variables públicas:
`public AudioSource rebote;`: Un componente de tipo
AudioSource que representa el sonido de rebote de la pelota.
`public AudioSource punto;`: Un componente de tipo
AudioSource que representa el sonido al ganar un punto al
golpear un bloque.
4. El método `OnCollisionEnter(Collision otro)` se llama
automáticamente cuando la pelota colisiona con otro objeto. Dentro del
método, se realiza lo siguiente:
Se verifica si el objeto con el que colisionó la pelota
tiene la etiqueta (tag) "Bloque" utilizando
`otro.gameObject.CompareTag("Bloque")`.
Si el objeto tiene la etiqueta "Bloque", se reproduce el
sonido de punto llamando a `punto.Play()`.
Si el objeto no tiene la etiqueta "Bloque", se reproduce el
sonido de rebote llamando a `rebote.Play()`.
En resumen, este script controla los sonidos relacionados con la
pelota en el juego. Cuando la pelota colisiona con un objeto, se
verifica si ese objeto tiene la etiqueta "Bloque". Si es así, se
reproduce un sonido de punto. Si el objeto no tiene la etiqueta
"Bloque", se reproduce un sonido de rebote. Los sonidos se reproducen
utilizando los componentes de tipo AudioSource especificados en los
campos `rebote` y `punto`.
17. Script Suelo
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Suelo : MonoBehaviour
{
public Vidas vidas;
void OnTriggerEnter()
{
vidas.PerderVida();
}
}
Explícame paso a paso el código generado c#
Explicación de código Suelo generado en C#
1. Se importa la siguiente biblioteca:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, etc.
`UnityEngine`: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
2. Se define una clase llamada "Suelo" que hereda de MonoBehaviour,
indicando que es un componente de Unity que se puede adjuntar a un
objeto en el escenario.
3. Se declara el siguiente campo público:
`public Vidas vidas;`: Una referencia al script "Vidas" que
controla el número de vidas en el juego.
4. El método `OnTriggerEnter()` se llama automáticamente cuando un
objeto con un Collider (en este caso, la pelota) entra en contacto con
el Collider del suelo. Dentro del método, se realiza lo siguiente:
Se llama al método `PerderVida()` del script "Vidas" a
través de la referencia `vidas`. Este método se encarga de
disminuir el contador de vidas en el juego.
En resumen, este script controla la interacción entre la pelota y el
suelo en el juego. Cuando la pelota colisiona con el Collider del
suelo, se llama al método `PerderVida()` del script "Vidas" para
disminuir el contador de vidas. La referencia al script "Vidas" se
establece a través del campo público `vidas`, que se asigna en el
editor de Unity.
18. Script Vidas
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Vidas : MonoBehaviour
{
public static int vidas = 3;
public Text textoVidas;
public Pelota pelota;
public Barra barra;
public GameObject gameOver;
public SiguienteNivel siguienteNivel;
// Start is called before the first frame update
void Start()
{
ActualizarMarcadorVidas();
}
void ActualizarMarcadorVidas()
{
textoVidas.text = "Vidas: " + Vidas.vidas;
}
// Update is called once per frame
public void PerderVida()
{
if (vidas <= 0) return;
Vidas.vidas--;
ActualizarMarcadorVidas();
if(vidas <= 0)
{
//Mostrar GameOver
gameOver.SetActive(true);
pelota.DetenerMovimiento();
barra.enabled = false;
siguienteNivel.nivelACargar = "Portada";
siguienteNivel.ActivarCarga();
}
else
{
barra.Reset();
pelota.Reset();
}
}
}
19. Explicación de código Vidas generado en C#
Claro, a continuación te explico paso a paso el código generado en C#:
1. Se importa la siguiente biblioteca:
`System.Collections`: Contiene las interfaces y clases que
definen diversas colecciones de objetos, como listas, colas,
diccionarios, etc.
`UnityEngine`: Contiene las clases y funciones para
interactuar con el motor de juego Unity.
`UnityEngine.UI`: Contiene las clases y funciones
relacionadas con la interfaz de usuario en Unity.
2. Se define una clase llamada "Vidas" que hereda de MonoBehaviour,
indicando que es un componente de Unity que se puede adjuntar a un
objeto en el escenario.
3. Se declaran los siguientes campos y variables públicas:
`public static int vidas = 3;`: Una variable estática de
tipo entero que representa la cantidad inicial de vidas.
`public Text textoVidas;`: Un componente de tipo Text que
muestra el número de vidas en la interfaz de usuario.
`public Pelota pelota;`: Una referencia al script "Pelota"
que controla el comportamiento de la pelota en el juego.
`public Barra barra;`: Una referencia al script "Barra" que
controla el comportamiento de la barra en el juego.
`public GameObject gameOver;`: Un objeto de tipo GameObject
que representa el panel de Game Over en la interfaz de
usuario.
`public SiguienteNivel siguienteNivel;`: Una referencia al
script "SiguienteNivel" que controla la carga del siguiente
nivel en el juego.
4. El método `Start()` se llama automáticamente al inicio del juego.
Dentro del método, se realiza lo siguiente:
Se llama al método `ActualizarMarcadorVidas()` para mostrar
el número de vidas en la interfaz de usuario.
5. El método `ActualizarMarcadorVidas()` se define para actualizar el
texto que muestra el número de vidas en la interfaz de usuario. Dentro
del método, se realiza lo siguiente:
20. Se actualiza el texto de `textoVidas` concatenando la
palabra "Vidas" con el valor de `Vidas.vidas`.
6. El método público `PerderVida()` se define para disminuir el
contador de vidas y realizar las acciones correspondientes cuando se
pierde una vida. Dentro del método, se realiza lo siguiente:
Se verifica si el contador de vidas (`vidas`) es menor o
igual a 0. Si es así, se sale del método utilizando la
instrucción `return` sin realizar ninguna acción adicional.
Se disminuye el contador de vidas (`Vidas.vidas--`) y se
llama al método `ActualizarMarcadorVidas()` para reflejar el
cambio en la interfaz de usuario.
Se verifica si el contador de vidas ahora es menor o igual a
0. Si es así, se ejecutan las siguientes acciones:
Se activa el objeto `gameOver` para mostrar el panel de Game
Over en la interfaz de usuario.
Se detiene el movimiento de la pelota llamando al método
`DetenerMovimiento()` del script "Pelota".
Se deshabilita el comportamiento de la barra estableciendo
`barra.enabled = false`.
Se configura el siguiente nivel a cargar como "Portada" en
el script "SiguienteNivel".
Se llama al método `ActivarCarga()` del script
"SiguienteNivel" para cargar el siguiente nivel.
Si el contador de vidas
5. es mayor que 0, se ejecutan las siguientes acciones:
Se llama al método `Reset()` del script "Barra" para
reiniciar la posición de la barra.
Se llama al método `Reset()` del script "Pelota" para
reiniciar la posición de la pelota.
En resumen, este script controla la cantidad de vidas en el juego y
las acciones correspondientes cuando se pierde una vida. Actualiza el
marcador de vidas en la interfaz de usuario, muestra el panel de Game
Over cuando se quedan sin vidas, detiene el movimiento de la pelota y
deshabilita el comportamiento de la barra. También reinicia la
posición de la barra y la pelota cuando se pierde una vida.