Home | Clases | Unity: Videojuego para 2 jugadores en 2D estilo Pong | Velocidad de la bola

Velocidad de la bola


Introducción

En cuanto juegas unas cuantas veces, te das cuenta de que el juego se puede hacer aburrido y predecible.

Para mejorarlo, vamos a hacer que la bola vaya ganando velocidad con el tiempo para que los puntos no sean muy largos, y se resetee al marcar un gol.

Por supuesto, los valores son orientativos, y podrías experimentar con tras opciones, como no resetearlo después de marcar gol, o hacer depender el valor de la velocidad de la cantidad de goles, por ejemplo.

El método Update()

Puesto que ya tenemos un método Update() predefinidio por Unity que se ejecuta cada frame (a 60 fps), la modificación sería tan sencilla como usar ese método para ir añadiendo una cantidad de velocidad cada frame, en el script Bola. Además, cada vez que se marque un gol debemos resetear el valor al inicial:


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;

// 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();

}

//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
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
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;

}
}

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