Menu
CoddyTech

Quebre no impacto

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 10 de 71.

Qual foi a força do impacto? collision.relativeVelocity é a velocidade com que os dois objetos se aproximavam um do outro no momento em que se encontraram, e sua magnitude é a velocidade do impacto em m/s. É uma diferença entre velocidades: um carro a 10 m/s que bate em um carro que segue na mesma direção a 8 m/s atinge-o a apenas 2 m/s, e os dois carros registram a mesma velocidade de impacto.

Este ovo quebra quando aterrissa a uma velocidade maior que crackSpeed. Solto de 1 m, ele atinge o chão a cerca de 4.4 m/s (a raiz quadrada de 2 x 9.81 x 1) e, de 2 m, a cerca de 6.3 m/s:

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

Por que não usar o próprio rb.linearVelocity do ovo? Quando OnCollisionEnter é executado, a física já processou o impacto, então a velocidade do ovo é o que resta depois dele, perto de zero. relativeVelocity mantém a velocidade do próprio impacto. É uma velocidade, então a massa não tem influência: um ovo pesado e um leve que aterrissam a 6 m/s registram o mesmo valor, 6.

challenge icon

Desafio

Fácil

Escreva Window.cs: cada impacto enfraquece a janela, e ela se estilhaça ao chegar a 0.

  1. Em OnCollisionEnter da janela, subtraia collision.relativeVelocity.magnitude de strength.
  2. Quando strength <= 0f, chame Destroy(gameObject);.

Pressione “Jogar”, lance bolas leves com a seta para cima e, em seguida, uma bola forte com a tecla Espaço: a janela quebra. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // Cada impacto subtrai sua velocidade de impacto de strength; ao chegar a 0, a janela se estilhaça
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity