unity版本:2019.2.1
Unity RagDoll 布娃娃系統
- 添加Ragdoll系統後的效果
- 如何給模型添加布娃娃系統
- 怎樣控制布娃娃系統
- 深入應用
一些遊戲中的角色死亡時,死亡的肢體動作十分逼真,例如人類一敗塗地,Unity3D實體引擎中的Ragdoll系統,可以用來建立這種效果。

添加Ragdoll系統後的效果
技術先不說,先上視屏讓大家看看加了RagDoll系統的人物模型效果:
Unity Ragdoll布娃娃系統
如何給模型添加布娃娃系統
官方文檔:https://docs.unity3d.com/Manual/wizard-RagdollWizard.html
布娃娃系統隻能用在具有Rigging(骨骼)的模型上,添加方法是:GameObject—>3D Object—>Ragdoll
把需要附加Ragdoll的模型拖到Hierarchy視圖中,接下來就很簡單也很麻煩了,需要把模型骨骼對應的遊戲體拖到Ragdoll面闆一一對應,建立好引用,一個都不要錯,會導緻剛體和碰撞體附加到錯誤的遊戲體上。感覺不準切可以提前看下骨骼界面:
全部拖好以後,根據需求修改一下品質(TotalMass)和力(Strength),點選create就OK了,可以看到模型中拖到Ragdoll面闆的遊戲體添加了如圖下元件。布娃娃系統是以Create Ragdoll視窗中的骨骼映射資訊為基礎,以各關節為機關,添加Capsule Collider和Rigidbody元件,關節與關節之間以Character Joint元件連接配接。若産生的Collider不符合要求,可在骨骼結構中調整radius的大小。至此,給模型天添加布娃娃系統的部分就成功了。
怎樣控制布娃娃系統
布娃娃系統的核心是由實體引擎實作的,是以在角色死亡或需要時,通過勾選和取消關節添加的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.關于倒地之後抖動問題,這個隻能加個檢測,如果所有剛體速度小于某個數則關閉剛體功能