Saltar al contenido
ReadySpawn

Cómo hacer objetos rompibles en Unity

Por Imersa Studios · Actualizado el

Prepara de antemano una versión rota del objeto (pedazos con Rigidbodies) y, cuando el objeto entero reciba un impacto lo bastante fuerte, sustitúyelo por el roto y empuja los pedazos con AddExplosionForce. Cortar mallas en tiempo de ejecución luce genial, pero cuesta mucho más.

Tres formas de romper cosas

EnfoqueCoste en runtimeAspectoÚsalo para
Cambiar por pedazos prefracturadosBajoPedazos reales, iguales cada vezCajas, jarrones, estatuas, paredes
Cortar la malla en runtimeAltoCortes únicosCortar con espada como mecánica central
Partículas + ocultar el objetoEl más bajoSin pedazos realesObjetos pequeños, lejanos o rápidos

Para la mayoría de los juegos, cambiar es la respuesta. El resto de esta guía lo construye.

1. Haz los pedazos

Divide la malla en fragmentos de antemano. En Blender, el add-on Cell Fracture lo hace; también puedes generar los pedazos dentro de Unity con una herramienta de editor. Pon los pedazos bajo un padre, añade un MeshCollider (convexo) y un Rigidbody a cada uno y guárdalo como prefab.

2. Cambia al impactar

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

Llama también a Break desde el código de tus armas, para que las balas y explosiones rompan objetos sin una colisión física.

3. Mantenlo rápido

  • Elimina los pedazos tras unos segundos, o encógelos, para que los cuerpos de física no se acumulen.
  • Pon los pedazos en una capa que no colisione con el jugador, para que los escombros nunca bloqueen el movimiento.
  • Usa pooling con los prefabs rotos de objetos que se rompen a menudo (botellas en un shooter).
  • Menos pedazos, más grandes, se leen mejor en los estilos low poly y PSX, y cuestan menos.

Ya hecho: el Sistema de Fractura

El Sistema de Fractura para Unity añade un botón Bake Fracture al Inspector (número de pedazos y semilla), rompe por colisión o desde código, tiene ajustes de explosión y fuerza direccional y grupos de fractura para romper un objeto de varias partes a la vez. Combínalo con el Blocky Arsenal o el pack militar PSX para tener con qué disparar, y con los Dungeon Props para cosas que valga la pena romper.

Preguntas frecuentes

Quién lo escribió

Imersa Studios crea los sistemas Unity, los packs low poly y las guías que se venden en itch.io. El código y las técnicas de aquí salen de publicar esos productos. Más sobre el estudio.