Lanzamiento
Lección 2 de 19 del curso Juego en Unity: Rompe ladrillos de Coddy.
La pelota espera sobre la paleta hasta que el jugador la lance. Hasta entonces, Update() la coloca sobre la paleta en cada fotograma, así que va dondequiera que vaya la paleta, y un bool recuerda si ya ha salido volando:
void Update()
{
if (launched) return;
transform.position = paddle.position + Vector3.up * 0.5f;
}El Rigidbody de la pelota no tiene gravedad, así que una velocidad establecida una sola vez hace que siga volando en línea recta. wasPressedThisFrame es true solo en el fotograma en que se presiona una tecla, así que léelo en Update(). Para volar a una velocidad exacta en cualquier dirección, haz que la dirección mida 1 unidad con .normalized y luego multiplícala: new Vector3(3f, 4f, 0f).normalized * 10f vuela a 10 unidades por segundo.
Desafío
FácilLa pelota permanece sobre la paleta hasta que la barra espaciadora la lanza.
- En
Ball, añadebool launched;ypublic void Launch(Vector3 direction):launched = true;yrb.linearVelocity = direction.normalized * speed; - En
Update(), retorna si se ha lanzado; si no, coloca la pelota enpaddle.position + Vector3.up * 0.5f. - Cuando se presione la barra espaciadora
wasPressedThisFrame, llama aLaunch(new Vector3(0.3f, 1f, 0f)).
Pulsa «Jugar», mueve la paleta y después pulsa la barra espaciadora: la pelota sale disparada hacia arriba y se detiene en la primera pared (el rebote viene después). Después, pulsa «Comprobar».
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>();
}
// A continuación: la pelota permanece sobre la pala hasta que Space la lanza.
}
Todas las lecciones de Juego en Unity: Rompe ladrillos
Practica por tu cuenta: Playground de Unity