Menu
CoddyTech

Mantenha a Velocidade

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

Uma bola de 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 arrastem ou façam a bola girar. As paredes e os tijolos não têm material próprio, e o Unity combina os valores dos dois colisores, por padrão usando Average: o valor 1 da bola e o valor padrão 0 de uma parede fazem com que o quique aconteça com metade da velocidade. bounceCombine = Maximum e frictionCombine = Minimum permitem que os valores da própria bola prevaleçam sobre qualquer coisa com que ela colida.

A física ainda não é exata: uma raquete em movimento adiciona sua própria velocidade ao quique, duas bolas empurram uma à outra, e pequenos erros se acumulam ao longo de centenas de quiques. Por isso, a cada FixedUpdate, a bola mantém sua direção e tem sua velocidade redefinida. O Rigidbody da bola também tem a opção Freeze Position Z marcada no Inspector, o que a mantém no plano de jogo.

Um jogo diferente exige uma regra diferente. Um disco de hóquei de mesa pode desacelerar, mas nunca ultrapassar um limite de velocidade, e Vector3.ClampMagnitude encurta um vetor que é longo demais e mantém inalterado um vetor mais curto:

void FixedUpdate()
{
    rb.linearVelocity = Vector3.ClampMagnitude(rb.linearVelocity, maxSpeed);
}

Um limite não basta para a bola: se ela desacelerar até 2 unidades por segundo, continuará a essa velocidade. A velocidade dela precisa ser definida com exatidão, a partir de sua direção.

challenge icon

Desafio

Fácil

Em Ball:

  1. Em Awake(), crie um new PhysicsMaterial("Bouncy") com elasticidade 1, atrito dinâmico e estático 0, bounceCombine Maximum e frictionCombine Minimum, e atribua-o ao colisor da bola com GetComponent<Collider>().material.
  2. Adicione FixedUpdate(): enquanto a bola estiver lançada, defina sua linearVelocity como sua direção atual multiplicada por speed.

No Unity, você também pode criar o material como um recurso (Create > Physics Material) e arrastá-lo para o campo Material do Sphere Collider; aqui, o script o cria.

Pressione Play, lance a bola e observe-a quicar; em seguida, clique em Check.

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;
    }
}
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