解決Unity中模型部件的MeshCollider不隨動畫一塊兒運動的問題

Unity的3d遊戲開發中,常常遇到須要將模型的某一部分(好比武器),單獨作碰撞處理的狀況。ide

導入模型後,給武器部分添加MeshCollider,MeshCollider的Mesh一般包含在模型裏,如圖:函數

勾選MeshCollider的Convex以及Inflate mesh後,在場景中能看到生成的綠色網格碰撞器。測試

 可是運行後,會發現這個Collider並不隨着模型動畫一塊兒運動。動畫

 

 不知道是否是問題過小白的緣由,網上不多有相關問題的討論,很多相關的問題都沒有答案。spa

最終在csdn上翻到一篇文章,解決了問題。.net

參考連接:unity SkinnedMesh 播放動畫時與MeshCollider不一樣步問題解決方案3d

 緣由是包圍盒沒有更新,而且形變更畫對應的MeshCollider更新的話,代價太大。因此unity雖然提供了機制,可是不提倡使用。code

核心方法是SkinnedMeshRenderer中有一個函數:BakeMesh,在update中調用該方法便可。blog

在Update調用以下代碼:遊戲

    /// <summary>
    /// 動態更新Mesh
    /// </summary>
    private void UpdateMesh ()
    {
        // weapon mesh
        Mesh weaponColliderMesh = new Mesh();
        weaponMeshRender.BakeMesh(weaponColliderMesh);

        weaponMeshCollider.sharedMesh = null;
        weaponMeshCollider.sharedMesh = weaponColliderMesh;
    }

運行後效果以下:

基本達到想要的效果。

 剩餘的問題:

一、經過上圖能看到,武器與Collider並不是徹底契合。緣由未知。

二、在Update中頻繁更新Mesh可能會形成消耗太大。能想到的辦法是

  a)每隔幾幀更新一次;

  b)用簡單的幾何碰撞器(如BoxCollider)替代網格碰撞器(未測試)

 若是你有關於此問題的更好的解決辦法,請不吝指點。

相關文章
相關標籤/搜索