Cómo hacer que un objeto se rompa en pequeños fragmentos en la unidad

En este tutorial, te mostraré cómo crear un efecto de destrucción simple para tu juego de Unity. En lugar de simplemente "eliminar" una caja (o cualquier otro objeto) cuando se golpea o destruye, podemos hacerla astilla en pedazos más pequeños.


Requerimientos

Para este tutorial, necesitarás la versión más reciente de Unity y algo de experiencia básica con él. Para el efecto más avanzado más adelante en el tutorial, también será necesaria una herramienta de modelado 3D. Si no tiene uno disponible o no desea modelar los objetos usted mismo, los he incluido en las descargas de origen. (Los archivos de Unity también están disponibles allí.)

En la versión básica de este efecto, un cubo será destruido, dejando varios fragmentos a su paso que caerán realísticamente al suelo:

Más adelante, cambiaremos el cubo por un modelo de barril más complicado:

Puedes probarlo por ti mismo aquí:

Haz click para probar la demo. (La demostración del cubo también está disponible aquí).

Configuración básica

Crea un nuevo proyecto de Unity y abre una nueva escena. Crea un plano, que actuará como nuestra tierra, y un cubo, que será el objeto destructible. Además, coloca una luz direccional para hacer las cosas más visibles. Crea dos nuevos materiales y asignalos al piso y al cubo, para que podamos diferenciarlos, y movemos la cámara para que todo se vea:


Destruyendo el cubo

Hay muchas formas de "destruir" el cubo. Por ahora, vamos a tomar el enfoque más simple posible.

Crea un nuevo archivo JavaScript y llámalo destructionController.js. En esto, pondremos toda la funcionalidad de remover el cubo y crear los fragmentos. Añade las siguientes líneas:

 función Update () if (Input.GetKey (Keycode.space)) Destroy (gameObject); 

Ahora, agregue el script al cubo arrastrándolo hacia él. Iniciar el juego y hacer una prueba de ejecución. Si presionas espacio, el cubo debe ser eliminado.

Después de eliminarlo, tampoco aparecerá más en la jerarquía, como se puede ver en la captura de pantalla..


Creando los Fragmentos

Ahora crea ocho cubos más pequeños; Estos serán los "fragmentos" del cubo actual. Dales el mismo material que el cubo. (No te preocupes por el aspecto todavía, los haremos lucir increíbles más adelante). Deberían tener este aspecto:

Apila los 8 cubos para formar un solo cubo más grande, sin que se crucen:

Dar a cada cubo un cuerpo rígido, establecer su masa a 22, activar usar la gravedad, y desactivar es cinemático. Esto hará que los fragmentos se caigan y utilicen la física. Si lo desea, puede modificar estos valores más adelante para producir resultados que se adapten mejor a su juego..

Ahora, agrupa los cubos bajo un nuevo vacío. gameObject y llamalo permaneceCube. Cuando se destruya el cubo original, se reemplazará con este nuevo objeto hecho de cubos más pequeños.

Arrastrar el permaneceCube objeto en la carpeta del proyecto para hacer un prefab de fuera de ella. Una vez que esté seguro en la carpeta prefabricada, elimínelo de la escena principal y estará listo para usar.


Haciendo que los restos aparezcan

Agrega las líneas resaltadas a la destruccioncontrolador guión:

 sigue siendo var: GameObject; función Update () if (Input.GetKey (Keycode.space)) Instantiate (permanece, transform.position, transform.rotation); Destroy (gameObject); 

Esto creará una copia de los restos en la posición exacta del cubo. Luego, el cubo será removido, dando la ilusión de que el nuevo es en realidad el viejo, pero "roto".

Para que esto funcione, debes asignar manualmente los restos al cubo. Haga clic en él, y en el Inspector debería ver una pestaña que contiene el Controlador de destruccion guión. Debe haber una ranura llamada Permanece, que actualmente debe estar vacío. Arrastrar el permanece prefabricar de la carpeta del proyecto en esta ranura. los Controlador de destruccion guión en el Inspector Ahora debería verse así:


Primeras optimizaciones

¡Haz una prueba de ejecución! Si todo está configurado correctamente, al presionar espacio, los restos deben reemplazar el cubo. Si tienes suerte, deberían caer al suelo..

Entonces, este cubo básico:

... debería convertirse en algo similar a esto:


No tuve suerte

Lamentablemente, no se garantiza que los fragmentos caigan de una manera agradable. Afortunadamente, hay maneras de resolver eso.

Crear un nuevo vacío gameObject Y dale un colisionador de esfera, pero no cuerpo rígido. Tire de los restos en la escena, para que pueda editarlos. Agregue el objeto de colisionador de esfera a los restos y colóquelo de manera que se cruce con algunos de los cubos:

Ahora, los fragmentos colisionarán de inmediato con la esfera, creando un efecto de caída:


Quitando los fragmentos

Dependiendo del juego que estés construyendo, no podemos permitirnos demasiadas "astillas" a la vez en una escena. La solución sencilla es eliminarlos después de unos segundos. Para hacerlo, cree un nuevo archivo JavaScript y asígnele el nombre selfDestruct.js. Ponga el siguiente código en él:

 función Start () rendimiento WaitForSeconds (4.0); Destroy (gameObject); 

Cuando se crea el objeto, esperará cuatro segundos y luego se borrará. Agregue este código a la permanece objeto. Si ahora destruyes el cubo y creas los fragmentos, los restos se destruirán a sí mismos después de cuatro segundos..

¡Y eso es! Ahora tiene lo básico para tener un objeto "destrozado" de manera eficiente en varios pedazos más pequeños cuando se destruye. Puede usar este efecto como está, pero veamos un poco más y veamos cómo usarlo con un objeto más complejo..


Usando un objeto real en lugar de cubos

Ahora que tenemos el sistema básico en su lugar, podemos hacerlo más bonito reemplazando los cubos con objetos reales.

Si eres un adepto en una herramienta de modelado 3D, puedes crear tus propios objetos. Si no, o si no tiene uno disponible, puede obtener el archivo 3D preparado de la descarga de origen.

Copie el archivo en su carpeta de activos, y los modelos 3D se importarán automáticamente para su uso. Antes de usarlos, haga clic en el archivo en la Explorador de Activos y asegúrese de que los archivos de origen se estén importando correctamente en un factor de escala de 1 (no 0.1 o 0.001; eso solo complica las cosas).

Si miras los objetos, puedes ver un campo llamado filtro de malla en el Inspector. Si hace clic en él, obtendrá una lista de todas las mallas disponibles en el proyecto. Ahora reemplaza todos los cubos en el cubo..

El cubo intacto obtiene el barril malla; Los fragmentos de cubo más pequeños necesitan las mallas. barrel_fragment_01 a barril_fragmentado08. Después de que son asignados, establecer sus posiciones locales para (0, 0, 0). (Sus puntos de pivote se han establecido para que puedan ser fácilmente puestos en cero de esa manera.)

En lugar de un colisionador de caja, un colisionador de malla sería mucho más conveniente. Quite todos los colisionadores de caja de los fragmentos y reemplácelos con colisionadores de malla. Verifique cada colisionador de malla y asegúrese de que cada uno tenga la malla correcta aplicada (es decir,, barrel_fragment_01 necesita el barrel_fragment_01 malla, y así sucesivamente).

Una vez hecho esto, establece todos los colisionadores de malla a convexo. (Un colisionador de malla no convexo no puede colisionar con otros colisionadores de malla no convexo. Es una cosa de programación). Además, elimine el colisionador de esfera que agregamos a los restos, ya que podría no ser necesario..

Si todo está configurado correctamente, debe tener un barril que se separará en ocho piezas más pequeñas.


Posibles más detalles

El mismo sistema también se puede utilizar para agregar otros efectos a la destrucción. ¿Tienes una explosión? ¡Añádelo a los restos! Añadir sonidos, para una satisfacción. grieta. Pon un efecto de partículas allí, creando una pequeña bocanada de humo..


Conclusión

En este tutorial, te he mostrado la forma más sencilla de hacer que un objeto se rompa en fragmentos más pequeños. Ahora sabes cómo destruir un objeto, eliminándolo del juego; cómo intercambiar el objeto con fragmentos más pequeños directamente antes de su destrucción; y cómo hacer que los fragmentos se autodestruyan después..

Este sistema ahora se puede modificar y adaptar para adaptarse a muchos propósitos específicos. Podría tener una caja o una astilla de barril y romperse al disparar. Podrías crear una explosión después de que un avión sea alcanzado. O podrías hacer que un bote se rompa en dos pedazos. Disfrutar!