Simulación simple de destrucción usando Unity y Blender

¡Hola! Recientemente me pregunté acerca de la destrucción en Unity, busqué en Internet sobre este tema, pero, lamentablemente, solo encontré un montón de preguntas y discusiones.



Y no, no estoy afirmando que mi artículo sea único, porque el método es bastante simple, pero por alguna razón no encontré un tutorial directo para esto.



Empecemos por el hecho de que en Unity NO PUEDES DESTRUIR / SEPARAR / CORTAR un objeto, nuestra destrucción de hecho no será destrucción en absoluto, sino solo una imitación visual de ellos, ya que, como dije anteriormente, de otra manera es imposible.



¡PROPIO!



Deja de echar agua y de perder el tiempo (todavía me pareció conveniente dejar el prefacio). Primero, debe descargar un programa llamado Blender de la tienda Steam, después de lo cual entramos y comenzamos a comprender.



Cree un nuevo proyecto y, en la pestaña "Editar / Editar", busque el botón "Complementos" y escriba Cell Fracture en la búsqueda, luego coloque una marca de verificación junto a él para habilitarlo.







Luego vamos a nuestra propia escena en Blender, y vemos allí el cubo que está allí inicialmente al crear la escena.



Nos interesa la pestaña "Modelado", entramos en ella, hacemos clic derecho en el objeto> subdividir, y vemos que el cubo se ha convertido, por así decirlo, en una "celda"







Ahora regrese a la primera pestaña "Diseño", haga clic en el botón objeto / objeto> efectos rápidos / efectos rápidos> Fractura de celda, y abriremos una ventana para administrar el complemento.







Simplemente presione el botón "SÍ" y observe el resultado.



Como puede ver, nuestro cubo está dividido visualmente, lo que significa que todo salió bien, esta es la fragmentación.







Los últimos pasos se dejan en Blender, y puede proceder a crear una escena, haga clic en archivo / archivo> exportar / exportar> .fbx y guárdelo en una carpeta conveniente para nosotros.







Abrimos Unity, creamos o abrimos un proyecto antiguo y comenzamos a ensamblar nuestra escena. Para hacer esto, necesitamos crear un plano y una esfera, ahora agregamos el cubo que acabamos de exportar de nuestra carpeta a la ventana de jerarquía, luego lo arrastramos directamente a la escena.



Para que Unity entienda que se trata de un objeto físico, debe agregar dos cosas, hacer clic en nuestro cubo en la ventana de jerarquía, expandiendo así la lista de objetos en el interior (las partes que lo componen), luego presionar shift, seleccionar el primer objeto de la lista y el mismo Por último, con esta manipulación seleccionaremos toda la lista.



Queda por hacer clic en AddComponent, y en la búsqueda, habiendo registrado el colisionador, seleccione "Mesh Collider".







En el propio colisionador, haga clic en "Convex" para mostrarlo, y listo.



Ahora repetimos lo que hicimos antes, pero solo buscamos el Rigidbody.







Debe hacer lo mismo con la esfera, solo que sin el colisionador, porque inicialmente se cuelga allí.

Esto completa nuestra preparación, y podemos pasar a lo más interesante, como dicen: "la brevedad es la hermana del talento", por lo que creamos un nuevo script C # en la ventana de jerarquía y escribimos lo siguiente allí:



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FragmentSplit : MonoBehaviour {

	public bool isdead = false; //    ,   
	public float timeRemaining = 100;//        (   )

	void Start()
	{
		GetComponent<Rigidbody>().isKinematic = true;//          
	}

	void OnCollisionEnter(Collision collision)//    
	{
		    GetComponent<Rigidbody>().isKinematic = false;//    - ,      
		    isdead = true;//  ,        "",    
	}

	void Update()
	{
		if (isdead)//  ,    
		{
			timeRemaining -= Time.deltaTime;// 			

			if (timeRemaining < 0) //     ,  
			{
				Destroy (gameObject);//  
			}
		}
    }
}


Ahora, por última vez, seleccione todos los objetos de la lista, haga clic en AddComponent y agregue nuestro script,







levante nuestra esfera sobre el cubo y encienda el proyecto.







Como puede ver, todo funciona bien, el cubo se rompe, nuestra esfera está rodando en alguna parte.



Eso es todo, sí, tal vez puedas decir que puedes hacer una remoción más suave para que desaparezcan las piezas, y no así de torpe, y todo eso.



Solo te responderé que acabo de demostrar cómo funciona el script, y no entré en detalles de cómo y cuándo eliminará estos "escombros", sino que simplemente mostré que es posible y así, y que no hay absolutamente nada complicado en ello.



No argumento que los activos de Unity (u otros desarrolladores) serán mejores que mis scripts por un par de líneas, pero aún así.



No hice este artículo con énfasis en el hecho de que seré leído por personas que conozcan y entiendan Unity y el idioma, que puedan escribir un guión con un control más preciso de todo lo que le sucede al objeto en el escenario, hice un artículo para estudiantes y principiantes.



No diré que conozco bien y a fondo el idioma, pero este no es el primer día en esto, en general, eso es todo para mí, espero haber ayudado a alguien, ¡buen código para ustedes amigos! ..



All Articles