Menu
CoddyTech

Lanzamiento

Lección 2 de 16 del curso Juego en Unity: Rompebloques de Coddy.

La pelota espera sobre la paleta hasta que el jugador la lance. Hasta entonces, el script la coloca encima de la paleta en cada fotograma, así que va adondequiera que vaya la paleta, y un bool recuerda si se ha lanzado. El lanzamiento establece una vez linearVelocity del Rigidbody. La gravedad del Rigidbody de la pelota está desactivada, así que a partir de ese momento vuela en línea recta a esa velocidad hasta que choca con algo.

Un flotador de pesca funciona igual: cuelga debajo de la punta de la caña hasta que se lanza.

bool cast;

void Update()
{
    if (cast) return;
    transform.position = rodTip.position + Vector3.down * 1.5f;
    if (Keyboard.current.spaceKey.wasPressedThisFrame)
    {
        cast = true;
        rb.linearVelocity = new Vector3(4f, 3f, 0f);
    }
}

wasPressedThisFrame es true solo en el fotograma en que se pulsa la tecla, así que se lee en Update(), que se ejecuta una vez por fotograma. El flotador vuela a una velocidad cuya longitud es (4, 3, 0), es decir, 5 unidades por segundo. Para lanzarlo a una velocidad exacta en cualquier dirección, haz que la dirección mida 1 unidad con .normalized y luego multiplícala por la velocidad.

challenge icon

Desafío

Fácil

En Ball:

  1. Añade un bool launched.
  2. Escribe public void Launch(Vector3 direction): establece launched en true y la linearVelocity del Rigidbody en la dirección normalizada a 1 unidad, multiplicada por speed.
  3. Añade Update(). Mientras la pelota no se haya lanzado, la coloca 0.5 unidades por encima de la posición de la paleta y, cuando se pulsa Espacio, llama a Launch(new Vector3(0.3f, 1f, 0f)).

La pelota aún no rebota, así que se detiene en seco al chocar con la primera pared: la siguiente lección lo solucionará.

Pulsa Play, mueve la paleta, lanza la pelota y después pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Siguiente: la pelota permanece sobre la paleta hasta que Space la lanza.
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego en Unity: Rompebloques