unity SkinnedMesh 播放动画时与MeshCollider不同步问题解决方案
unity播放形变动画时,物体包围盒与物体不同步。原因是包围盒没有更新,并且形变动画对应的MeshCollider更新的话,代价太大。所以unity虽然提供了机制,但是不提倡使用。核心方法是SkinnedMeshRenderer中有一个函数:BakeMesh。以下是对该函数的解释:
// 摘要:
// Creates a snapshot of SkinnedMeshRenderer and stores it in mesh.
//
// 参数:
// mesh:
// A static mesh that will receive the snapshot of the skinned mesh.
[WrapperlessIcall]
public void BakeMesh(Mesh mesh);
核心方法是在update中调用该方法。
public SkinnedMeshRenderer meshRenderer;
public MeshCollider collider;
void Update()
{
Mesh colliderMesh = new Mesh();
meshRenderer.BakeMesh(colliderMesh); //更新mesh
collider.sharedMesh = null;
collider.sharedMesh = colliderMesh; //将新的mesh赋给meshcollider
}