Ir para o conteúdo
ReadySpawn

Como fazer objetos quebráveis na Unity

Por Imersa Studios · Atualizado em

Prepare de antemão uma versão quebrada do objeto (pedaços com Rigidbodies) e, quando o objeto inteiro sofrer um impacto forte o bastante, substitua-o pelo quebrado e empurre os pedaços com AddExplosionForce. Cortar malhas em tempo de execução parece legal, mas custa muito mais.

Três formas de quebrar coisas

AbordagemCusto em runtimeVisualUse para
Trocar por pedaços pré-fraturadosBaixoPedaços reais, iguais toda vezCaixas, vasos, estátuas, paredes
Fatiar a malha em runtimeAltoCortes únicosCortar com espada como mecânica central
Partículas + esconder o objetoO mais baixoSem pedaços reaisObjetos pequenos, distantes ou rápidos

Para a maioria dos jogos, trocar é a resposta. O resto deste guia constrói isso.

1. Faça os pedaços

Divida a malha em fragmentos de antemão. No Blender, o add-on Cell Fracture faz isso; também dá para gerar os pedaços dentro da Unity com uma ferramenta de editor. Coloque os pedaços sob um pai, adicione um MeshCollider (convexo) e um Rigidbody a cada um e salve como prefab.

2. Troque no impacto

using UnityEngine;

public class Breakable : MonoBehaviour
{
    public GameObject brokenPrefab;
    public float breakSpeed = 4f;     // impact speed needed to break
    public float force = 300f, radius = 1.5f;
    public float piecesLifetime = 8f;

    void OnCollisionEnter(Collision c)
    {
        if (c.relativeVelocity.magnitude >= breakSpeed)
            Break(c.GetContact(0).point);
    }

    public void Break(Vector3 point)
    {
        var broken = Instantiate(brokenPrefab, transform.position, transform.rotation);
        foreach (var rb in broken.GetComponentsInChildren<Rigidbody>())
            rb.AddExplosionForce(force, point, radius);
        Destroy(broken, piecesLifetime);
        Destroy(gameObject);
    }
}

Chame Break também do código das suas armas, para que balas e explosões quebrem objetos sem uma colisão física.

3. Mantenha rápido

  • Remova os pedaços depois de alguns segundos, ou encolha-os, para os corpos de física não se acumularem.
  • Coloque os pedaços numa camada que não colida com o jogador, para que os destroços nunca bloqueiem o movimento.
  • Use pooling nos prefabs quebrados de objetos que quebram com frequência (garrafas num shooter).
  • Menos pedaços, maiores, leem melhor nos estilos low poly e PSX, e custam menos.

Pronto para usar: o Sistema de Fratura

O Sistema de Fratura para Unity adiciona um botão Bake Fracture ao Inspector (quantidade de pedaços e seed), quebra por colisão ou por código, tem configurações de explosão e força direcional e grupos de fratura para quebrar um objeto de várias partes de uma vez. Combine com o Blocky Arsenal ou o pack militar PSX para ter com o que atirar, e com os Dungeon Props para coisas que valem a pena quebrar.

Perguntas frequentes

Quem escreveu

Imersa Studios cria os sistemas Unity, packs low poly e guias vendidos no itch.io. O código e as técnicas daqui vêm de lançar esses produtos. Saiba mais sobre o estúdio.