Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

布娃娃系統

前言

Godot 從 3.1 版本開始支援布娃娃物理。布娃娃依靠物理類比來建立逼真的程式式動畫,它們被用於許多遊戲中的死亡動畫。

在本教學中,我們將使用 Platformer3D 演示來進行布娃娃的設定。

備註

您可以在 GitHub 上下載Platformer3D演示或使用 Asset Library .

設定布娃娃

建立物理骨骼

與引擎中的許多其他功能一樣,有一個節點可以設定布娃娃:PhysicalBone 節點。為了簡化設定,您可以使用骨架節點中的“建立物理骨架”功能生成 PhysicalBone 節點。

在 Godot 中打開 Platformer 演示專案,然後打開 Robi 場景。選擇 Skeleton 節點。頂部欄功能表上顯示骨架按鈕:

../../_images/ragdoll_menu.png

按一下它並選擇 建立物理骨架 選項。Godot 將為骨架中的每個骨骼生成 PhysicalBone 節點和碰撞形狀,並用釘關節將它們連接在一起:

../../_images/ragdoll_bones.png

一些生成的骨骼不是必需的:例如 MASTER 骨骼。因此,我們將通過刪除它們來清理骨架。

清理骨骼

引擎需要類比的每一個 PhysicalBone 都有性能成本, 所以你要把每一個太小的骨頭都去掉, 以便所有的實用骨頭在模擬中發揮作用.

例如, 如果我們拿一個人形動物來說, 不希望每個手指都有物理骨骼. 可以用一根骨頭代替整個手, 或者用一根骨頭代替手掌, 一根骨頭代替拇指, 最後一根骨頭代替其他四個手指.

刪除這些物理骨骼:MASTERwaistneckheadtracker。這樣就有了一個優化的骨架,使其更容易控制布娃娃。

碰撞形狀調整

接下來的工作是調整碰撞形狀和物理骨骼的大小, 以配對每個骨骼應該模擬的身體部位.

../../_images/ragdoll_shape_adjust.gif

關節調整

一旦你調整了碰撞形狀,布娃娃就差不多準備好了。只需要調整釘關節以獲得更好的模擬效果。PhysicalBone 節點在預設情況下有一個不受限制的釘關節。要改變釘關節,請選擇 PhysicalBone 並在 Joint 部分改變約束型別。在那裡,你可以改變約束的方向和限制。

../../_images/ragdoll_joint_adjust.gif

這是最終效果:

../../_images/ragdoll_result.png

模擬布娃娃

布娃娃現在可以使用了。要開始模擬並播放布娃娃動畫,您需要呼叫 physical_bones_start_simulation 方法。將腳本附加到骨架節點並在 _ready 方法中呼叫該方法:

func _ready():
    physical_bones_start_simulation()

要停止模擬, 請呼叫 physical_bones_stop_simulation() 方法.

../../_images/ragdoll_sim_stop.gif

您還可以將模擬限制為僅幾個骨骼。為此,請將骨骼名稱作為參數傳遞。這是部分佈娃娃模擬的一個範例:

../../_images/ragdoll_sim_part.gif

碰撞層與遮罩

確保正確設定碰撞層和遮罩,這樣 KinematicBody 的膠囊不會妨礙物理類比:

../../_images/ragdoll_layer.png

更多有關光照烘焙的資訊,請參考 doc_baked_lightmaps