How to simulate explosions vehicle parts?

I've downloaded some 3D vehicle models that I bought from the Asset Store, because I don't know how to create 3d models.

These objects have different meshes for different vehicle parts: steering wheel, doors, body, lamp lights, hood etc.

I would like to simulate an explosion and apply physics impulses to each of the parts.

I've tried this flow:

• Create a rigidbody for each vehicle part, set its weight and set:
isKinematic = true; useGravity= false;

• Create a mesh collider for each part and disable it

• Create a main box collider for vehicle

When a bullet, or other explosive object, hits my vehicle, I've tried to use a script to enable these components on the parts: rigidbody (isKinematic = false, useGravity=true) and mesh collider, and, obviously, apply a force explosion.

The problem is that it's not possible to enable a mesh collider at runtime for performance reasons (it lags a lot, and this does not depend on PC/Hardware power, but depends from graphics pipeline).

So my question is: how can I simulate an explosion by applying forces to individual vehicle parts?

• Turn the mesh collider from a trigger to normal collider when it explodes. – The Mattbat999 Oct 26 '17 at 18:41

maybe my solution might not be good at all but worked for me
create three empty objects then put your car parts in two of them like this :

Holder = NotDestroyed , Destroyed
NotDestroyed = wheels , body , doors etc...
Destroyed = wheels , body , doors etc...

then put NotDestroyed and Destroyed objects in your main object "Holder" , after that write a script and attach it to the Holder object that when anything like bullet or rocket touch collider of your car disable NotDestroyed and enable Destroyed ( be careful that position of NotDestroyed and Destroyed must exactly same as each other to achieve maximum result.
I have a script too you can use or try to read for better understanding of my answer.

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

public class DestroyObjects : MonoBehaviour {

// When aggresive object come touch collider
void OnTriggerEnter(Collider other)
{
// compare tag to see if is correct object or not
if (other.CompareTag("Player") || other.CompareTag("Cop"))
{
Obj_Destroy();
}

}
// a function for disabling first holder and enbaling second holder (destroyed objects )
void Obj_Destroy()
{
var Obj_Stand = transform.GetChild(0).gameObject;
Obj_Stand.SetActive(false);
var Obj_Des = transform.GetChild(1).gameObject;
Obj_Des.SetActive(true);
}


}

I hope it helps.