Menu
CoddyTech

Lançamento

Lição 2 de 16 do curso Jogo no Unity: Quebra-Tijolos da Coddy.

A bola fica sobre a raquete até que o jogador a lance. Até lá, o script a posiciona no topo da raquete a cada quadro, então ela vai para onde quer que a raquete vá, e um bool guarda se ela já foi lançada. O lançamento define o linearVelocity do Rigidbody uma vez. A gravidade do Rigidbody da bola está desativada, então, a partir daí, ela voa em linha reta com essa velocidade até atingir algo.

Uma boia de pesca funciona da mesma forma: ela fica pendurada na ponta da vara até o arremesso.

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 é true apenas no quadro em que a tecla é pressionada, então ele é lido em Update(), que é executado uma vez a cada quadro. A boia voa com a magnitude de (4, 3, 0), a 5 unidades por segundo. Para lançar a uma velocidade exata em qualquer direção, faça a direção ter 1 unidade de comprimento com .normalized e, em seguida, multiplique-a pela velocidade.

challenge icon

Desafio

Fácil

Em Ball:

  1. Adicione um bool launched.
  2. Escreva public void Launch(Vector3 direction): ele define launched como true e o linearVelocity do Rigidbody como a direção normalizada para ter 1 unidade de comprimento, multiplicada por speed.
  3. Adicione Update(). Enquanto a bola não tiver sido lançada, posicione-a 0.5 unidades acima da posição do paddle e, quando a tecla Espaço for pressionada, chame Launch(new Vector3(0.3f, 1f, 0f)).

A bola ainda não quica, então ela para completamente na primeira parede que atingir: a próxima lição corrige isso.

Pressione Play, mova o paddle, lance a bola e, em seguida, Check.

Experimente você mesmo

using UnityEngine;
using UnityEngine.InputSystem;

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

    Rigidbody rb;

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

    // Próximo passo: a bola fica sobre a raquete até que Space a lance.
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo no Unity: Quebra-Tijolos