Simulação simples de destruição usando Unity e Blender

Olá! recentemente me perguntei sobre a destruição no Unity, procurei na Internet o que há sobre esse assunto, mas, infelizmente, encontrei apenas um monte de perguntas e discussões.



E não, não estou afirmando que meu artigo seja único, porque o método é bastante simples, mas por alguma razão não encontrei um tutorial direto para isso.



Comecemos com o fato de que na Unidade NÃO É PERMITIDO DESTRUIR / SEPARAR / CORTAR um objeto, nossa destruição não será de fato destruição, mas apenas uma imitação visual deles, pois, como disse acima, é impossível de outra forma.



PRÓPRIO!



Pare de derramar água e perder tempo (ainda achei por bem deixar o prefácio). Primeiro, você precisa baixar um programa chamado Blender da loja Steam, após o qual entraremos e começaremos a entender.



Crie um novo projeto e, na guia "Editar / Editar", procure o botão "Complementos", escreva Cell Fracture na pesquisa e coloque uma marca de seleção ao lado dele para ativá-lo.







Em seguida, vamos para a nossa própria cena no Blender, e vemos lá o cubo que está lá inicialmente ao criar a cena.



Estamos interessados ​​na guia "Modelagem", vá até ela, clique com o botão direito do mouse no objeto> subdividir, e vemos que o cubo se tornou, por assim dizer, uma "célula"







Agora volte para a primeira aba "Layout", clique no botão objeto / objeto> efeitos rápidos / efeitos rápidos> Fractura de células, e abriremos uma janela para gerenciamento do Addon.







Basta pressionar o botão "SIM" e assistir ao resultado.



Como você pode ver, nosso cubo está dividido visualmente, o que significa que deu tudo certo, essa é a própria fragmentação.







Os últimos passos são deixados no Blender, e você pode prosseguir com a criação de uma cena, clique em arquivo / arquivo> exportar / exportar> .fbx e salve em uma pasta conveniente para nós.







Abrimos o Unity, criamos ou abrimos um projeto antigo e realmente começamos a montar nossa cena. Para fazer isso, precisamos criar um plano e uma esfera, agora de nossa pasta para a janela de hierarquia, adicionamos o cubo que acabamos de exportar e arrastamos diretamente para a cena.



Para que o Unity entenda que este é um objeto físico, você precisa adicionar duas coisas, clicar em nosso cubo na janela de hierarquia, expandindo assim a lista de objetos dentro (as partes que o compõem), então segurando shift, selecione o primeiro objeto da lista, e o próprio por último, com esta manipulação iremos selecionar toda a lista.



Resta clicar em AddComponent, e na busca, tendo registrado o colisor, selecione "Mesh Collider".







No próprio colisor, clique em "Convexo" para exibi-lo e pronto.



Agora repetimos o que fizemos antes, mas estamos apenas procurando o Rigidbody.







Você precisa fazer o mesmo com a esfera, mas sem o colisor, porque ela fica pendurada lá inicialmente.

Isso completa nossa preparação e podemos passar para o mais interessante, como dizem - "a brevidade é irmã do talento", por isso criamos um novo script C # na janela de hierarquia e escrevemos o seguinte lá:



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


Agora, pela última vez, selecione todos os objetos da lista, clique em AddComponent e adicione nosso script,







levante nossa esfera acima do cubo e ligue o projeto.







Como você pode ver, tudo funciona bem, o cubo se quebra, nossa esfera está rolando em algum lugar.



Isso é tudo, sim, talvez você diga que pode fazer uma remoção mais lisa para que as peças desapareçam, e não tão desajeitado e tal.



Só vou responder que acabei de demonstrar como funciona o script, e não entrei em detalhes de como e quando ele vai remover esses "entulhos", mas simplesmente mostrei que é possível e assim, e que não há absolutamente nada de complicado nisso.



Eu não argumento que os ativos do Unity (ou de outros desenvolvedores) serão melhores do que meus scripts por algumas linhas, mas ainda assim.



Não fiz este artigo com ênfase no fato de que serei lido por pessoas que conhecem e entendem a Unity e a linguagem, que podem escrever um roteiro com controle mais preciso de tudo o que acontece com um objeto no palco, fiz um artigo para mais alunos e iniciantes.



Não direi que conheço bem a língua a fundo, mas esse não é o primeiro dia nisso, em geral, isso é tudo para mim, espero ter ajudado alguém, bom código para vocês amigos! ..



All Articles