PONG

Contactar con el profesor

Ponemos el fondo en pantalla

Ponemos la pelota en pantalla

pelota pong con Unity

Añadimos el script de movimiento a la pelota

public class Pelota : MonoBehaviour
{
    int speedX;
    int speedY;
    float speed;

    void Start()
    {
        speed = Random.Range(5, 10);
        //La siguiente línea nos da un valor aleatorio que puede ser 0 o 1;
        speedX = Random.Range(0, 2);
        if (speedX == 0) speedX = -1;

        speedY = Random.Range(0, 2);
        if (speedY == 0) speedY = -1;

        //Para pasar la velocidad usamos un vector3 porque le pasamos 3 parámetros: x, y, z
        GetComponent<Rigidbody2D>().velocity = new Vector2(speedX * speed, speedY * speed);
    }
}

Hacemos que la pelota rebote contra los límites superior e inferior de la pantalla

  1. Colocamos dos cubos estirados en la parte superior e inferior de la pantalla.
  2. Asignamos un BoxCollider2D a los cubos.
  3. Asginamos un BoxCollider2D a la pelota, con Body Type: Dynamic y Gravity Scale:0.
  4. En el panel de proyecto, creamos un nuevo Physics Material 2D. A este material le asignamos estos valores:
    • Friction: 0
    • Bounciness: 1

Poniendo en pantalla las palas.

Las palas deberían de tener un area colisionable, de tal forma que la pelota rebote contra ellas.

Esto ya lo deberías saber hacer tú :D.

Moviendo las palas

Detectar la pulsación de las teclas:
void Update() {
	if (Input.GetKey(KeyCode.A)){
		...
	}if (Input.GetKey(KeyCode.D)){	
		...
	}
}

En lugar de declarar un GameObject y acceder a su propiedad transform (lo cual es equivalente a hacer un GetComponent<Transform>() y por tanto, consume recursos) declararemos un objeto de tipo Transform en su lugar.

Desplazar al player:
public Transform pala1;
...
pala1.Translate(0, 2 * Time.deltaTime, 0);

Limitando el movimiento de las palas

float limiteSuperior, limiteInferior;

void Start(){
    limiteInferior = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 0))[1]+pala1.GetComponent<BoxCollider2D>().size.y/2;
    limiteSuperior = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 0))[1]-pala1.GetComponent<BoxCollider2D>().size.y / 2;
}

if (Input.GetKey(KeyCode.Q) && pala1.transform.position.y < limiteSuperior)

Mejoras adicionales

  • Añadir un marcador que se incrementa cuando la pelota sale por uno de los lados de la pantalla.
  • Meter la escena de perder el juego.
← Flappy Bird con Unity
Videojuego de carreras en Unity3D →

Aviso Legal | Política de privacidad