ラグドールから立ち上がる方法!

f:id:Free_Gamer:20210628180024p:plain

「MovementAnimsetPro」の起き上がりアニメーションを使った

ラグドールから起き上がる処理を紹介します。

 

~目次~

 

アセットの追加

 まずは、「MovementAnimsetPro」をプロジェクトに追加します。

f:id:Free_Gamer:20210628180257p:plain

 

リターゲット

 「MovementAnimsetPro」フォルダ内にある「Mesh」フォルダの中の

UE4_Mannequin_Skeleton」を開きます。

f:id:Free_Gamer:20210628181048p:plain

リグを「Humanoid」にし、下にある「ポーズを変更」をクリックし

「現在のポーズを使用する」を選択します。

f:id:Free_Gamer:20210628181309p:plain

次に、サードパーソンのボーンも同じ設定にしていきます。

「Mannequin」フォルダ内にある「Mesh」フォルダ内の

UE4_Mannequin_Skeleton」を開きます。

f:id:Free_Gamer:20210628181731p:plain

リグを「Humanoid」にします。

f:id:Free_Gamer:20210628181839p:plain

「MovementAnimsetPro」フォルダ内にある「RootMotion」フォルダにある

「GetUpFromBack」と「GetUpFromFace」を選択し、右クリックします。

「Animアセットとリターゲットを複製する」を選択しましょう。

f:id:Free_Gamer:20210628182132p:plain

UE4_Mannequin_Skeleton」を選択し、リターゲットしましょう。

f:id:Free_Gamer:20210628182315p:plain

コンテンツブラウザ内に、「UE4_Mannequin_Skeleton」でリターゲットされたアニメーションがあるはずです。

f:id:Free_Gamer:20210628182537p:plain

 

Montageの作成 

「GetUpFromBack」と「GetUpFromFace」で、AnimMontageを作成します。

f:id:Free_Gamer:20210628184008p:plain

これで、ラグドールから起き上がる為のAnimMontageが作成できました。

f:id:Free_Gamer:20210628184313p:plain

 作成したMontageを開いて、BlendInのBlendTimeを「0」にします。

f:id:Free_Gamer:20210629175513p:plain

 

BPインターフェースを作成

BPI_AnimBP

AnimBP用のBPインターフェース「BPI_AnimBP」を作成します。

f:id:Free_Gamer:20210629175903p:plain

開いて、「SetRagdoll」イベントを作成します。

f:id:Free_Gamer:20210629180036p:plain

Bool型のインプットピンを追加します。

f:id:Free_Gamer:20210629180105p:plain

BPI_Character

CharacterBP用のBPインターフェース「BPI_Character」を作成しましょう。

f:id:Free_Gamer:20210629211313p:plain

「BPI_Character」を開き、「IsGetUp??」イベントを作成します。

f:id:Free_Gamer:20210629211433p:plain

Bool型のインプットピンを追加します。

f:id:Free_Gamer:20210629211456p:plain

 

ThirdPersonCharacter

「ThirdPersonCharacter」を開きます。

f:id:Free_Gamer:20210629175611p:plain

BPインターフェースの追加

作成したBPインターフェース「BPI_Character」を追加します。

f:id:Free_Gamer:20210630185404p:plain

変数の作成

変数を作成します。

f:id:Free_Gamer:20210629211657p:plain

Ragdoll

デフォルト値「False」

Trueの場合、ラグドール化してる。

Falseの場合、ラグドール化してない。

~PelvisBone~

デフォルト値「Pelvis」

~RagdollLocation~

Pelvisの位置を示す変数。

~RagdollRotation~

Pelvisの向きを示す変数。

~RagdollFaceUp~

Trueの場合、仰向け。

Falseの場合、うつ伏せ。

~RagdollOnGround~

Trueの場合、地面についてる。

Falseの場合、空中。地面についてない。

~GetUp~

Trueの場合、起き上がりモーション中。

Falseの場合、起き上がりモーション中ではない。

ラグドール処理の作成

「Q」キーを押した時、

カスタムイベント「EnabledRagdoll」と「DisabledRagdoll」を呼び出す。

「EnabledRagdoll」は、ラグドール化する為の処理。

「DisabledRagdoll」は、ラグドールを解除する処理です。

f:id:Free_Gamer:20210629180443p:plain

EnabledRagdoll

カスタムイベント「EnabledRagdoll」の処理です。

Sequenceノードで、順番に処理を行ってます。

f:id:Free_Gamer:20210629180259p:plain

Then0

f:id:Free_Gamer:20210629182227p:plain

Then1

f:id:Free_Gamer:20210629182501p:plain

Then2

f:id:Free_Gamer:20210629182515p:plain

Then3

f:id:Free_Gamer:20210629182527p:plain

EventTick

ラグドール中の場合、CapsuleComponentの位置と向きを調整するカスタムイベント「SetCapsuleLocationAndRotation」を呼び出す。

f:id:Free_Gamer:20210629182926p:plain

SetCapsuleLocationAndRotation

Sequenceノードで、処理を順番に実行してます。

f:id:Free_Gamer:20210629183136p:plain

Then0

f:id:Free_Gamer:20210629183339p:plain

Then1

f:id:Free_Gamer:20210629183354p:plain

Then2

f:id:Free_Gamer:20210629183405p:plain

トレースを地面に向かって飛ばす。

f:id:Free_Gamer:20210629183649p:plain

CapsuleComponentの位置と向きを調整。

f:id:Free_Gamer:20210629183711p:plain

DisabledRagdoll

ラグドール状態から起き上がるカスタムイベント「DisabledRagdoll」の処理です。

Sequenceノードで、順番に処理を実行してます。

f:id:Free_Gamer:20210629184205p:plain

Then0

SnapshotNameを「RagdollPose」に設定します。

f:id:Free_Gamer:20210629184614p:plain

Then1

f:id:Free_Gamer:20210629184629p:plain

Then2

RagdollFaceUp変数がTrueの時は、仰向けから起き上がるモンタージュ

Falseの時は、うつ伏せから起き上がるモンタージュを再生するようにしています。

f:id:Free_Gamer:20210629184642p:plain

Then3

f:id:Free_Gamer:20210629184653p:plain

Then4

f:id:Free_Gamer:20210629184706p:plain

イベント「IsGetUp??」の追加

ラグドール状態からの起き上がりアニメーション中は、GetUp変数はTrueになります。

このイベントは、AnimNotifyStateから受け取るイベントになります。

f:id:Free_Gamer:20210630172842p:plain

起き上がりアニメーション中は、ジャンプが出来ないようにします。

f:id:Free_Gamer:20210630172944p:plain

 

AnimBP

「ThirdPerson_AnimBP」を開きます。

f:id:Free_Gamer:20210629185053p:plain

BPインターフェースの追加

作成したBPインターフェース「BPI_AnimBP」を追加します。

f:id:Free_Gamer:20210629185211p:plain

イベント「SetRagdoll」の追加

BPI_AnimBPで作成したイベント「SetRagdoll」をイベントグラフに追加し

Ragdollピンを変数へ昇格します。

f:id:Free_Gamer:20210629185351p:plain

Animグラフ

新規のステートマシーン「Ragdoll」を作成し

Ragdoll変数を繋いだ「ブレンドPosesByBool」ノードで処理の分岐を行います。

ステートマシーン「Default」がFalse。

ステートマシーン「Ragdoll」がTrueです。

Trueブレンド時間と、Falseブレンド時間は「0.5」です。

f:id:Free_Gamer:20210629185659p:plain

ステートマシーン「Default」

ステート「Idle/Run」を開きます。

f:id:Free_Gamer:20210629190013p:plain

スロットノードを追加します。

これでモンタージュが再生されるようになりました。

f:id:Free_Gamer:20210629190151p:plain

ステートマシーン「Ragdoll

ステートマシーン「Ragdoll」を開き

ステートを2つ追加します。

「Entry」と「RagdollPoseSnapShot」をお互い線で繋ぎましょう。

f:id:Free_Gamer:20210629190334p:plain

2つのトランジションルールを選択し、

f:id:Free_Gamer:20210629190723p:plain

詳細パネルのブレンド設定項目にある「継続時間」の値を「0」にします。

f:id:Free_Gamer:20210629190709p:plain

EntryからRagdollPoseSnapShotのトランジションルール

RagdollがFalseになったら、RagdollPoseSnapShotへ遷移します。

つまり、ラグドールから起き上がる時に、RagdollPoseSnapShotへ遷移するという意味です。

f:id:Free_Gamer:20210629191124p:plain

RagdollPoseSnapShotからEntryのトランジションルール

RagdollがTrueの時にEntryへ遷移します。

つまり、ラグドール化した時に、Entryに遷移するという意味です。

f:id:Free_Gamer:20210629191254p:plain

ステート「RagdollPoseSnapShot」

ステート「RagdollPoseSnapShot」を開きます。

f:id:Free_Gamer:20210629191407p:plain

ポーズスナップショットノードを追加します。

SnapshotNameを「RagdollPose」に設定します。

f:id:Free_Gamer:20210629191356p:plain

 

AnimNotifyStateの作成

AnimNotifyState「GetUp_AnimNotifyState」を作成します。

f:id:Free_Gamer:20210629212649p:plain

Received_NotifyBeginとReceived_NotifyEndを追加します。

変数は「GetUp」という名の編集可能にしたBool型変数を追加します。

f:id:Free_Gamer:20210629213053p:plain

Received_NotifyBegin

f:id:Free_Gamer:20210629214144p:plain

Received_NotifyEnd

f:id:Free_Gamer:20210629215606p:plain

 

AnimNotifyStateをMontageに追加

起き上がりアニメーションMontage「GetUpFromBack」と「GetUpFromFace」を開き

通知のところに、作成したAnimNotifyState「GetUp_AnimNotifyState」を追加します。

起き上がり始めてから、起き上がった瞬間まで、通知を伸ばしています。

f:id:Free_Gamer:20210630173308p:plain

追加した「GetUp_AnimNotifyState」を選択し、詳細パネルにある

GetUpにチェックをつけ、Trueにします。

f:id:Free_Gamer:20210630173456p:plain

 

実際にプレイ!けど・・・

実際にプレイしてみましょう!

youtu.be

何か変ですよね。

ラグドールは良いんですが、そこから起き上がる時

キャラが横に倒れたまんま起き上がりアニメーションをして、色々おかしなことになっています。修正しましょう。

 

物理アセットの編集

「SK_Mannequin_PhysicsAsset」を開きます。

f:id:Free_Gamer:20210630174917p:plain

ケルトンツリーのオプション内にある

「すべてのボーンを表示」を選択します。

f:id:Free_Gamer:20210630180924p:plain

Rootボーンを選択し、右クリックして

球形を追加します。

f:id:Free_Gamer:20210630181056p:plain

Rootボーンに、球形のボディが追加されました。

f:id:Free_Gamer:20210630181304p:plain

追加したボディを選択し、詳細パネルの設定をします。

「PhysicsType」を「Kinematic」

「CollisionReponse」を「Disabled」

f:id:Free_Gamer:20210630182945p:plain

Spheresの半径を「7.5」にします。

f:id:Free_Gamer:20210630183357p:plain

追加したボディを選択し、コンストレイントから「Pelvis」を選択します。

f:id:Free_Gamer:20210630183815p:plain

追加したコンストレイントを選択し

f:id:Free_Gamer:20210630184254p:plain

詳細パネルの「LinearLimits」の

「XMotion」「YMotion」「ZMotion」を全部「Free」にします。

f:id:Free_Gamer:20210630184353p:plain

 

改めて実際にプレイ!

改めて実際にプレイしてみましょう!

youtu.be

今度は、しっかりラグドール状態から起き上がってくれました!

 

それではまた!^^ノシ