ラグドールシステム

はじめに

バージョン3.1以降、Godotはラグドール物理をサポートしています。 ラグドールは物理シミュレーションに依存して、現実的な手続き型アニメーションを作成します。 多くのゲームで死のアニメーションに使用されます。

このチュートリアルでは、Platformer3Dデモを使用してラグドールをセットアップします。

注釈

Platformer3Dデモは、GitHub から、または Asset Library を使用してダウンロードできます。

ラグドールの設定

物理ボーン(Physical Bone)の作成

エンジンの他の多くの機能と同様に、ラグドールをセットアップするノードがあります: PhysicalBone ノードです。 セットアップを簡素化するために、スケルトンノードで[物理スケルトンを作成する]機能を使用して PhysicalBone ノードを生成できます。

Godotでプラットフォーマーデモを開き、次にRobiのシーンを開きます。Skeleton ノードを選択します。 スケルトンボタンがトップバーメニューに表示されます:

../../_images/ragdoll_menu.png

それをクリックして、[物理スケルトンを作成する]オプションを選択します。 Godotは PhysicalBone ノードとスケルトンの各ボーンの衝突形状を生成し、それらを接続するためにジョイントを固定します:

../../_images/ragdoll_bones.png

生成されたボーンのいくつかは必要ありません: 例えば MASTER ボーン。 そのため、スケルトンを削除してクリーンアップします。

スケルトンのクリーンアップ

エンジンがシミュレートする必要のある PhysicalBone にはそれぞれパフォーマンスコストがあるため、シミュレーションで違いを生むには小さすぎるすべてのボーンとすべてのユーティリティボーンを削除する必要があります。

たとえば、ヒューマノイドを使用する場合、各指に物理的なボーンは必要ありません。 代わりに、手全体に1つのボーンを使用するか、手のひらに1つ、親指に1つ、残りの4つを他の4本の指に使用できます。

これらの物理ボーンを削除します: 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

詳細については、次を参照してください コリジョンレイヤーとマスク