[TUTORIAL] Destruição de prop mantendo a física nos pedaços
2 participantes
Página 1 de 1
[TUTORIAL] Destruição de prop mantendo a física nos pedaços
Trago um sistema usando rigidbody e magnitude, para quebrar um objeto ao tocar em algo com uma certa força.
Esse sistema ele funciona de modo que ao bater em algo, ele instancie outro objeto em cima com seus pedaços, e mantenha a velocidade e não simplesmente caiam.
- Codigo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Destructible : MonoBehaviour {
//Define a fragilidade do objeto usando a magnitude do Rigidbody
public float fragility;
//GameObject a ser instanciado ao quebrar o prop
public GameObject break_prop;
//Verificar se o prop já foi quebrado
private bool isBreak = false;
//Verifica se o objeto bateu em algo.
private void OnCollisionEnter(Collision collision)
{
breakProp();
}
void breakProp()
{
//Verifica se o prop já foi quebrado, para evitar duplicados
if (isBreak)
return;
//Rigidbody do prop inicia para capturar sua velocidade.
Rigidbody propRb = transform.GetComponent<Rigidbody>();
//Lista de Rigidbody dos pedaços do prop já quebrado.
List<Rigidbody> propsBreakRb = new List<Rigidbody>();
//Checa se a fragilidade é menor ou igual a força que está sendo aplicada
if (fragility <= propRb.velocity.magnitude)
{
//Destroi o objeto original
Destroy(gameObject);
//Instancia em uma variavel o prop quebrado em pedaços.
GameObject inst_propBreak = Instantiate(break_prop, transform.position, transform.rotation);
//Adiciona a lista todos os Rigidbody que contem no GameObject do prop em pedaços
for (int i = 0; i < inst_propBreak.transform.childCount; i++)
{
//Adicionando a lista os props.
propsBreakRb.Add(inst_propBreak.transform.GetChild(i).GetComponent<Rigidbody>());
}
//Checa toda a lista, e adiciona a força contida no prop original a cada pedaço.
foreach (Rigidbody props in propsBreakRb)
{
//Adiciona a força contidade no Rigidbody do prop original a cada pedaço.
http://ForceMode.VelocityChange serve para que ele aplique a força sem nem um calculo
props.AddForce(propRb.velocity, ForceMode.VelocityChange);
Debug.Log(propRb.velocity);
}
//Diz que o prop foi quebrado para evitar duplicadas.
isBreak = true;
}
}
}
Goustkor- Avançado
- PONTOS : 2999
REPUTAÇÃO : 18
Respeito as regras :
Re: [TUTORIAL] Destruição de prop mantendo a física nos pedaços
Show cara, vai ajudar muitas pessoas do fórum e é um método que não conhecia
Re: [TUTORIAL] Destruição de prop mantendo a física nos pedaços
Esse sistema, eu fiz para implementnar com sistema de pegar e jogar objetos do mapa.MRX escreveu:Show cara, vai ajudar muitas pessoas do fórum e é um método que não conhecia
Dai quado quebrava o objeto simplesmentne caia como bosta, dsuahidusah.
Dai o sistema faz parecer mais realista a fisica continua acompanhando.
Goustkor- Avançado
- PONTOS : 2999
REPUTAÇÃO : 18
Respeito as regras :
Re: [TUTORIAL] Destruição de prop mantendo a física nos pedaços
Goustkor escreveu:Trago um sistema usando rigidbody e magnitude, para quebrar um objeto ao tocar em algo com uma certa força.
Esse sistema ele funciona de modo que ao bater em algo, ele instancie outro objeto em cima com seus pedaços, e mantenha a velocidade e não simplesmente caiam.
- Codigo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Destructible : MonoBehaviour {
//Define a fragilidade do objeto usando a magnitude do Rigidbody
public float fragility;
//GameObject a ser instanciado ao quebrar o prop
public GameObject break_prop;
//Verificar se o prop já foi quebrado
private bool isBreak = false;
//Verifica se o objeto bateu em algo.
private void OnCollisionEnter(Collision collision)
{
breakProp();
}
void breakProp()
{
//Verifica se o prop já foi quebrado, para evitar duplicados
if (isBreak)
return;
//Rigidbody do prop inicia para capturar sua velocidade.
Rigidbody propRb = transform.GetComponent<Rigidbody>();
//Lista de Rigidbody dos pedaços do prop já quebrado.
List<Rigidbody> propsBreakRb = new List<Rigidbody>();
//Checa se a fragilidade é menor ou igual a força que está sendo aplicada
if (fragility <= propRb.velocity.magnitude)
{
//Destroi o objeto original
Destroy(gameObject);
//Instancia em uma variavel o prop quebrado em pedaços.
GameObject inst_propBreak = Instantiate(break_prop, transform.position, transform.rotation);
//Adiciona a lista todos os Rigidbody que contem no GameObject do prop em pedaços
for (int i = 0; i < inst_propBreak.transform.childCount; i++)
{
//Adicionando a lista os props.
propsBreakRb.Add(inst_propBreak.transform.GetChild(i).GetComponent<Rigidbody>());
}
//Checa toda a lista, e adiciona a força contida no prop original a cada pedaço.
foreach (Rigidbody props in propsBreakRb)
{
//Adiciona a força contidade no Rigidbody do prop original a cada pedaço.
//ForceMode.VelocityChange serve para que ele aplique a força sem nem um calculo
props.AddForce(propRb.velocity, ForceMode.VelocityChange);
Debug.Log(propRb.velocity);
}
//Diz que o prop foi quebrado para evitar duplicadas.
isBreak = true;
}
}
}
- Código:
foreach (Rigidbody props in propsBreakRb)
{
//Adiciona a força contidade no Rigidbody do prop original a cada pedaço.
//(ForceMode VelocityChange) serve para que ele aplique a força sem nem um calculo
props.AddForce(propRb.velocity, ForceMode.VelocityChange);
}
Goustkor- Avançado
- PONTOS : 2999
REPUTAÇÃO : 18
Respeito as regras :
![-](https://2img.net/i/empty.gif)
» alguém conhece algum tutorial de como fazer um objeto destruir em pedaços...
» FÍSICA+ESTABILIDADE DO TUTORIAL DO MARCOS
» [TUTORIAL] Shader de renderização baseada em física
» [TUTORIAL] Unity 5 - Física, gravidade, Rigidbody, colisões, etc
» [TUTORIAL] Fazer uma cortina com efeitos de física - Unity 5
» FÍSICA+ESTABILIDADE DO TUTORIAL DO MARCOS
» [TUTORIAL] Shader de renderização baseada em física
» [TUTORIAL] Unity 5 - Física, gravidade, Rigidbody, colisões, etc
» [TUTORIAL] Fazer uma cortina com efeitos de física - Unity 5
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos