Menu
CoddyTech

Mantenha a Velocidade

Lição 3 de 19 do curso Jogo Unity: Quebra-Tijolos da Coddy.

A bola do Brick Breaker nunca perde velocidade. O PhysicsMaterial faz a maior parte do trabalho: o valor 1 de elasticidade mantém toda a velocidade do quique, e o atrito 0 impede que as paredes a arrastem. As paredes não têm material, e o Unity calcula por padrão a média dos valores dos dois colisores: o 1 da bola e o 0 de uma parede fazem com que o quique aconteça à metade da velocidade. bounceCombine = Maximum e frictionCombine = Minimum fazem com que os valores da própria bola prevaleçam.

A física ainda não é exata: uma raquete em movimento adiciona sua velocidade, e pequenos erros se acumulam ao longo de centenas de quiques. Então, em cada passo da física, a bola mantém sua direção e tem sua velocidade redefinida:

rb.linearVelocity = rb.linearVelocity.normalized * 7f;

Uma bola que desacelerou para 2 unidades por segundo volta a voar a 7 no passo seguinte.

challenge icon

Desafio

Fácil

Faça a bola quicar para sempre em uma velocidade constante.

  1. Em Awake() de Ball, crie new PhysicsMaterial("Bouncy") com elasticidade 1, ambos os atritos em 0, bounceCombine = PhysicsMaterialCombine.Maximum e frictionCombine = PhysicsMaterialCombine.Minimum; defina-o em GetComponent<Collider>().material.
  2. Adicione FixedUpdate(): se tiver sido lançada, rb.linearVelocity = rb.linearVelocity.normalized * speed;

Pressione “Jogar” e lance a bola: ela quica em todas as paredes sem diminuir a velocidade. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;
using UnityEngine.InputSystem;

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

    Rigidbody rb;
    bool launched;

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

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}

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

Pratique por conta própria: Playground de Unity