天天看點

fps Ragdoll 的設定與用法

http://www.narkii.com/club/thread-297439-1.html

關于Ragdoll的制作方式FPS遊戲中的敵人受到攻擊後陣亡後,通常有兩種動作,一種是設定敵人的Death動畫進行播放,另一種則是将敵人換成ragdoll模式。以效果來看,ragdoll會得到比較真實的回報現象,在敵人倒地後,玩家仍可以繼續攻擊來發洩一下情緒,是以這種方式也普遍的運用在衆多的FPS遊戲裡面。

現在,我們就來看看如何在場景中設定敵人的ragdoll,如圖,在場景裡面設定了一個攻擊用的機器士兵,士兵已經具備了攻擊與待命的一些動作,同時也寫入了AI進行搜尋玩家的功能。

fps Ragdoll 的設定與用法

首先将機器士兵做出一個Prefab,然後打開一個新的場景,使用Plane建立一個地闆,這個地闆的用途主要是測試士兵與地面的碰撞效果。

fps Ragdoll 的設定與用法

将制作好的士兵Prefab拖曳到地闆上,注意士兵的底部與地闆要保持一定的距離,這樣在測試ragdoll與地闆的碰撞時才不會發生無法預期的錯誤。

fps Ragdoll 的設定與用法

由于士兵後面的動作全部交由ragdoll來控制,是以必須将原來的動畫設定取消,直接使用Remove Component将士兵上面的Animation元件移除。

fps Ragdoll 的設定與用法

選擇Game Object > Create Other > Ragdoll, 這個名稱就是我們常聽到的布偶娃娃功能,顧名思義就像是角色身上捆綁了控制線,然後可任人擺布一樣。

fps Ragdoll 的設定與用法

在Create Ragdoll的面闆的左邊面顯示出骨架的名稱,右邊則是士兵模型需要對應的Game Object, 這表示我們必須使用手動的方式進行每一個骨架的指定,有一點需特别注意,模型必須以T字姿态站立,才能確定ragdoll的動作不會出現任何的錯誤。

fps Ragdoll 的設定與用法

在Hierarchy面闆裡面将士兵模型的中心點 roothandle拖曳到Root的欄位,指定完成後,面闆下方會提示未完成的骨架部分。

fps Ragdoll 的設定與用法

接着進行左腳的三個結構指定,分别将模型的upleg L,lowLeg L,heel L指定到對應的欄位,以此類推,依序将右腳的三個物拖曳到Right Hips,Right Knee,Right Foot的欄位。

fps Ragdoll 的設定與用法

如圖所示,通過六個骨架的拖曳,我們就完成了士兵腿部的指定工作,從名稱上不難了解ragdoll是依序從腿部到手部架構,再往上指定左右手臂與頭部。

fps Ragdoll 的設定與用法

指定完成所有的骨架後,将Total Mass設定到一個比較低的數值,這樣可以讓ragdoll在作用時的反應更為明顯些。

fps Ragdoll 的設定與用法

完成後按下Create,士兵模型上面就會出現ragdoll的控制器,這些控制器的功能與Mesh Collider的作用是相同的,按下Play進行測試,士兵會從原本的站立狀态直接倒地,就像是受到攻擊後所呈現出來的效果。

fps Ragdoll 的設定與用法
fps Ragdoll 的設定與用法

現在有一個問題是,士兵動作已經ok,但是上的武器并沒有掉落,原因是武器沒有受到rigid body的作用,是以變成停留在空中的一個現象。

選擇武器模型,在上面增加 Rigidbody與Box Collider,然後将Box Collider的綠色框調整到與武器的大小一緻或是略微大些即可,再進行Play測試,武器就會跟着士兵一起向下掉落。

fps Ragdoll 的設定與用法

将設定好的ragdoll士兵做成一個Prefab,如圖,Robot是攻擊用的士兵,Robot-Ragdoll則是被攻擊後倒地的士兵,我們用了兩個不同的名稱來區分模型的設定狀态。

fps Ragdoll 的設定與用法

現在我們來看看ragdoll在腳本内的設定情況:

function Detonate () {

    // 摧毀原來的物體

    Destroy(gameObject);

    //  播放士兵陣亡的音效

    if (dieSound)

        AudioSource.PlayClipAtPoint(dieSound, transform.position);

    // 替換士兵陣亡的模型 

    if (deadReplacement) {

        var dead : Transform = Instantiate(deadReplacement, transform.position, transform.rotation);

        //  在士兵原來的位置進行複制

        CopyTransformsRecurse(transform, dead);

    }

}

将Robot-Ragdoll拖曳到腳本裡面的Dead Replacement後,就完成了士兵整體的動作設定,接下來進行測試,看看士兵是否會根據我們的設定産生ragdoll的作用。

fps Ragdoll 的設定與用法

按下Play,現在我們開始攻擊士兵。

fps Ragdoll 的設定與用法
fps Ragdoll 的設定與用法

在我方強大的火力下,士兵受到一定的傷害後被擊倒在地。

fps Ragdoll 的設定與用法

從這個案例的操作,我們知道如何設定Ragdoll的綁定,并且了解在一下裡面的實際用途,在後面的教程中,我們将會推出更多關于FPS遊戲的相關設定内容,也希望更多的朋友能進入FPS的開發行列!

繼續閱讀