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.
Desafio
FácilEscreva Window.cs: cada impacto enfraquece a janela, e ela se estilhaça ao chegar a 0.
- Em
OnCollisionEnterda janela, subtraiacollision.relativeVelocity.magnitudedestrength. - Quando
strength <= 0f, chameDestroy(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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para ColetarPratique por conta própria: Playground de Unity