Home | Clases | Unity: Videojuego para 2 jugadores en 2D estilo Pong | Límite de goles

Límite de goles


Introducción

Una vez que ya tenemos nuestro gestor de escenas funcionando, podemos utilizarlo para controlar nuestro juego haciendo, por ejemplo que termine si alguno de los jugadores llega a 5 goles.

Lo primero, vamos a crear un espacio donde mostrar el resultado:

  • Abre la escena Juego, selecciona Canvas y clic derecho UI > Text.
  • Llámalo Resultado y modifica sus propiedades: Postion XYZ: 0. Font: VCR_OSD_MONO_1.001. Font Size: 40, Alignment vertical y horizontal: centrado. Horizontal y Vertical Overflow: Overflow. Color: Blanco.




Modifica el script Bola, de modo que muestre el texto con el resultado si se ha terminado la partida, no saque más bolas y pause el tiempo:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Bola : MonoBehaviour {

//Velocidad de la pelota
public float velocidad = 30.0f;

//Audio Source
AudioSource fuenteDeAudio;

//Clips de audio
public AudioClip audioGol, audioRaqueta, audioRebote;

//Contadores de goles
public int golesIzquierda = 0;
public int golesDerecha = 0;

//Cajas de texto de los contadores
public Text contadorIzquierda;
public Text contadorDerecha;

//Caja de texto del resultado
public Text resultado;

// Use this for initialization
void Start () {

//Velocidad inicial hacia la derecha
GetComponent<Rigidbody2D>().velocity = Vector2.right * velocidad;

//Recupero el componente audio source;
fuenteDeAudio = GetComponent<AudioSource>();

//Pongo los contadores a 0
contadorIzquierda.text = golesIzquierda.ToString();
contadorDerecha.text = golesDerecha.ToString();

//Desactivo la caja de resultado
resultado.enabled = false;

//Quito la pausa
Time.timeScale = 1;

}

//Se ejecuta si choco con la raqueta
void OnCollisionEnter2D(Collision2D micolision){

//Si me choco con la raqueta izquierda
if (micolision.gameObject.name == "Raqueta Izquierda"){

//Valor de x
int x = 1;

//Valor de y
int y = direccionY(transform.position, micolision.transform.position);

//Vector de dirección
Vector2 direccion = new Vector2(x, y);

//Aplico la velocidad a la bola
GetComponent<Rigidbody2D>().velocity = direccion * velocidad;

//Reproduzco el sonido de la raqueta
fuenteDeAudio.clip = audioRaqueta;
fuenteDeAudio.Play();

}
//Si me choco con la raqueta derecha
else if (micolision.gameObject.name == "Raqueta Derecha"){

//Valor de x
int x = -1;

//Valor de y
int y = direccionY(transform.position, micolision.transform.position);

//Vector de dirección
Vector2 direccion = new Vector2(x, y);

//Aplico la velocidad a la bola
GetComponent<Rigidbody2D>().velocity = direccion * velocidad;

//Reproduzco el sonido de la raqueta
fuenteDeAudio.clip = audioRaqueta;
fuenteDeAudio.Play();

}

//Para el sonido del rebote
if (micolision.gameObject.name == "Arriba" || micolision.gameObject.name == "Abajo"){

//Reproduzco el sonido del rebote
fuenteDeAudio.clip = audioRebote;
fuenteDeAudio.Play();

}

}

//Calculo la dirección de Y
int direccionY(Vector2 posicionBola, Vector2 posicionRaqueta){

if (posicionBola.y > posicionRaqueta.y){
return 1;
}
else if (posicionBola.y < posicionRaqueta.y){
return -1;
}
else{
return 0;
}

}

//Reinicio la posición de la bola
public void reiniciarBola(string direccion){

//Posición 0 de la bola
transform.position = Vector2.zero;
//Vector2.zero es lo mismo que new Vector2(0,0);

//Velocidad inicial de la bola
velocidad = 30;

//Velocidad y dirección
if (direccion == "Derecha"){
//Incremento goles al de la derecha
golesDerecha++;
//Lo escribo en el marcador
contadorDerecha.text = golesDerecha.ToString();
//Reinicio la bola (si no ha llegado a 5)
if (!comprobarFinal()){
GetComponent<Rigidbody2D>().velocity = Vector2.right * velocidad;
//Vector2.right es lo mismo que new Vector2(1,0)
}
}
else if (direccion == "Izquierda"){
//Incremento goles al de la izquierda
golesIzquierda++;
//Lo escribo en el marcador
contadorIzquierda.text = golesIzquierda.ToString();
//Reinicio la bola (si no ha llegado a 5)
if (!comprobarFinal()){
GetComponent<Rigidbody2D>().velocity = Vector2.left * velocidad;
//Vector2.right es lo mismo que new Vector2(-1,0)
}
}

//Reproduzco el sonido del gol
fuenteDeAudio.clip = audioGol;
fuenteDeAudio.Play();

}

void Update () {

//Incremento la velocidad de la bola
velocidad = velocidad + 0.1f;

}

//Compruebo si alguno ha llegado a 5 goles
bool comprobarFinal(){

//Si el de la izquierda ha llegado a 5
if (golesIzquierda == 5){
//Escribo y muestro el resultado
resultado.text = "¡Jugador Izquierda GANA!\nPulsa I para volver a Inicio\nPulsa P para volver a jugar";
//Muestro el resultado, pauso el juego y devuelvo true
resultado.enabled = true;
Time.timeScale = 0; //Pausa
return true;
}
//Si el de le aderecha a llegado a 5
else if (golesDerecha == 5){
//Escribo y muestro el resultado
resultado.text = "¡Jugador Derecha GANA!\nPulsa I para volver a Inicio\nPulsa P para volver a jugar";
//Muestro el resultado, pauso el juego y devuelvo true
resultado.enabled = true;
Time.timeScale = 0; //Pausa
return true;
}
//Si ninguno ha llegado a 5, continúa el juego
else{
return false;
}
}
}


Modifica el script GameManager para que permita volver al Inicio al pulsar la tecla I:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {

void Start () {

}

void Update () {

//Si pulsa la tecla P o hace clic izquierdo empieza el juego
if (Input.GetKeyDown(KeyCode.P) || Input.GetMouseButton(0)){
//Cargo la escena de Juego
SceneManager.LoadScene("Juego");
}

//Si pulsa la tecla I vuelve al inicio
if (Input.GetKeyDown(KeyCode.I)){
//Cargo la escena de Inicio
SceneManager.LoadScene("Inicio");
}

}

}


Y por último, como siempre, asocia la variable de Bola llamada Resultado, con su correspondiente objeto de la Hierarchy window.
Fecha de publicación: 22/10/2019
Asignaturas: realización de proyectos multimedia interactivosdesarrollo de entornos interactivos multidispositivo
Temas: Unity 2d Pong
Utilizamos cookies propias y de terceros para mejorar su experiencia en la navegación. Al seguir navegando entendemos que acepta su uso.
Si lo desea, consulte nuestras políticas de privacidad y cookies
ENTENDIDO
[X] Cerrar

Contacta conmigo


[X] Cerrar

Acceso alumnos