天天看點

Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用

unity版本:2019.2.1

Unity RagDoll 布娃娃系統

  • 添加Ragdoll系統後的效果
  • 如何給模型添加布娃娃系統
  • 怎樣控制布娃娃系統
  • 深入應用

一些遊戲中的角色死亡時,死亡的肢體動作十分逼真,例如人類一敗塗地,Unity3D實體引擎中的Ragdoll系統,可以用來建立這種效果。

Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用

添加Ragdoll系統後的效果

技術先不說,先上視屏讓大家看看加了RagDoll系統的人物模型效果:

Unity Ragdoll布娃娃系統

如何給模型添加布娃娃系統

官方文檔:https://docs.unity3d.com/Manual/wizard-RagdollWizard.html

布娃娃系統隻能用在具有Rigging(骨骼)的模型上,添加方法是:GameObject—>3D Object—>Ragdoll

Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用
Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用

把需要附加Ragdoll的模型拖到Hierarchy視圖中,接下來就很簡單也很麻煩了,需要把模型骨骼對應的遊戲體拖到Ragdoll面闆一一對應,建立好引用,一個都不要錯,會導緻剛體和碰撞體附加到錯誤的遊戲體上。感覺不準切可以提前看下骨骼界面:

Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用

全部拖好以後,根據需求修改一下品質(TotalMass)和力(Strength),點選create就OK了,可以看到模型中拖到Ragdoll面闆的遊戲體添加了如圖下元件。布娃娃系統是以Create Ragdoll視窗中的骨骼映射資訊為基礎,以各關節為機關,添加Capsule Collider和Rigidbody元件,關節與關節之間以Character Joint元件連接配接。若産生的Collider不符合要求,可在骨骼結構中調整radius的大小。至此,給模型天添加布娃娃系統的部分就成功了。

Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用
Unity3D RagDoll(布娃娃系統)詳解添加Ragdoll系統後的效果如何給模型添加布娃娃系統怎樣控制布娃娃系統深入應用

怎樣控制布娃娃系統

布娃娃系統的核心是由實體引擎實作的,是以在角色死亡或需要時,通過勾選和取消關節添加的Rigidbody元件的Is Kinematic選項來激活和關閉布娃娃系統。 由于由此開發者可以通過擷取模型的某個節點的Rigidbody元件來控制特定的運動。要注意的是在打開布娃娃系統時,模型最好不要播放動畫。同時,不要在場景中大量使用布娃娃系統,畢竟是用實體引擎實作的比較耗性能。

foreach (var temp in this.transform.GetComponentsInChildren<Rigidbody>()) {
            //關閉頭關節
            if (temp.name == "head")
                temp.isKinematic = false;
            //激活其他關節
            else
                temp.isKinematic = true;
        }
           

深入應用

使用布娃娃系統需要注意的坑:

1.播放布娃娃的時候要把animator勾掉,不然不生效

2.部位穿插拉伸,要把部位Character Joint元件上面的Enable Projection勾上

3.激活布娃娃彈得很高,就是剛體的速度,把rigidbody的速度置為0

4.如果布娃娃動作僵硬,肯定用錯骨骼來綁定布娃娃導緻的

5.布娃娃穿透場景碰撞的問題,其實這個由于速度太快引起的,可以設定rigidbody的碰撞檢測模式collisionDetectionMode

6.受力不要全部部位都給力,一般都是給一個部位就夠了,不然各種力作用引起怪異表現

7.關于倒地之後抖動問題,這個隻能加個檢測,如果所有剛體速度小于某個數則關閉剛體功能