Videojuego PONG con Unity 3D

Curso de Unity 3D

20.  
23.  
25.  
38.  

Ponemos el fondo en pantalla

Ponemos la pelota en pantalla

pelota pong con Unity

Añadimos el script de movimiento a la pelota

Asginamos un BoxCollider2D a la pelota, con Body Type: Dynamic y Gravity Scale:0. También le añadimos un RigidBody2D para que el siguiente código funciona.

public class Ball: MonoBehaviour{
    int directionX;
    int directionY;
    float speed;

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

        directionY = Random.Range(0, 2);
        if (directionY == 0) directionY = 1;
        else directionY = -1;
        //Para pasar la velocidad usamos un vector3 porque le pasamos 3 parámetros: x, y, z
        GetComponent<Rigidbody2D>().velocity = new Vector2(directionX * speed, directionY * 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. C reamos un nuevo Physics Material 2D ( Botón derecho sobre el panel de proyecto → Create → 2D → Physics material 2D). A este material le asignamos estos valores:
    • Friction: 0
    • Bounciness: 1
  4. Asginamos el Physics Material 2D a la correspondiente propiedad del Box Collider 2D de la bola.

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:
enum Directions
{
    idle,
    up,
    down
}

void Update(){
   ...
    Move();
}
Desplazar al player:
void Move(){
  if (directions == Directions.up){
    transform.Translate(0, 2 * Time.deltaTime, 0);
  }

Limitando el movimiento de las palas

float bottomLimit, topLimit;
  
void Start()
{
        bottomLimit = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0)).y+ GetComponent<SpriteRenderer>().size.y/2;
        topLimit = Camera.main.ScreenToWorldPoint(new Vector3(0, Screen.height, 0)).y - GetComponent<SpriteRenderer>().size.y / 2;
}

void Update(){
    if (Input.GetKey(up) && transform.position.y < topLimit){
            directions = Directions.up;
    }
    ...

Añadir la posibilidad de que las teclas de movimiento sean públicas para poder definirlas desde el panel inspector

public KeyCode up;
public KeyCode down;

Si la pelota sale por los límites izquierdo y derecho de la pantalla, debe volver a ser lanzada

Puede que tengamos que echarle un vistazo a este enlace.

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
Snake →

Aviso Legal | Política de privacidad