- Home /
Dynamic mesh collider from blendshape needed !
Hi, guys!
I'm using Unity 5.5 on a medical project to simulate the behaviors of a video brope inside a detailed human trachea.The inner Surface of the trachea expands/shrink irregularly as the patient cough or breath heavily, pushing the probe to swing.
I've made the animations of the trachea with blendeshapes and here comes the trouble:
The mesh collider does NOT deform with its mesh surface!
Using primitive colliders don't seem to be an acceptable alternative because the surface mesh is pretty detailed and I need the simulation to be as realistic as possible. Does anyone know how to achieve a mesh collider deforming with its blendshaped mesh surface? I know it'll sacrifice much performance but I just need it!
Thank you for any advice!
Answer by damian_pablo_gonzalez · Apr 24, 2021 at 05:54 PM
4 years later, Unity still doesn't provide an automatic way to do this. But, if anyone is watching this, you can do it this way (from this anwer) :
var render = GetComponent<SkinnedMeshRenderer>();
render.SetBlendShapeWeight(0,100f);
Mesh bakeMesh = new Mesh();
skinnedMeshRenderer.BakeMesh(bakeMesh);
var collider = GetComponent<MeshCollider>();
collider.sharedMesh = bakeMesh;
Nice and simple thanks for sharing. For noobies, swap out "skinnedMeshRenderer" on line 4 for "render" declared as var on line 1 and add a public float to control 100f in the shape weight from the UI/inspector and drop it all in an update loop on your object to test it. Works perfectly well.
Your answer
Follow this Question
Related Questions
For flat mesh, is there a performance difference between box vs mesh colliders? 1 Answer
Adding multiple simple mesh colliders to be able to click on an objects parent 0 Answers
Pushing a mesh with mesh collider 1 Answer
Unity changing the number of vertices in a mesh on import, ruining blendshapes 3 Answers