CG関係の備忘録ブログ

主にZBRUSH、blender

UE5 入門講座②

参考動画

【ブループリント攻略講座】入門編 Part2/2 アニメーションの設定【プログラミング未経験者のためのゲーム制作動画】【Unreal Engine】 - YouTube

 

アニメーションBP
アニメーショングラフはアニメーションの状態を遷移させるロジック=ステートマシン

ブレンドスペース
アニメーションをなめらかに切り替える
横軸はspeedでスピードの位置によってアイドリング→歩く→走るを切り替えていく

ブレンドスペースをつくる
RM→アニメーション→ブレンドスペース1D→スケルトンを選択
名前をBS_IdleWalkRun

開いてアセット詳細のAxisSettingの水平軸のNameにSpeed
、MaximumAxisValueを600、GridDivisionsを2にする

したのBS_IdleWalkRun内にIdleアニメーションファイルをドラッグアンドドロップでSpeed=0付近に配置

Walkを真ん中、Runを600に配置する
GridDivisionsはここの縦線の本数
※この中でcntl+マウスドラッグでSpeedを変動させ、アニメーションの遷移を確認できる

アニメーションBPをつくる
RM→アニメーション→アニメーションBP→スケルトンを選択
名前をBP_PlayerAnim

開いてAnimGraphでRM→StateMachine内の新規のマシンを追加(AddNewStateMachine)を追加
名前をLocomotion
出力ポーズとつなぐ

Locomotionを開いてRM→ステートを追加
名前をIdleWalkRun
EntryからIdleWalkRunへとつなぐ

IdleWalkRunを開いてアセットブラウザからBS_IdleWalkRunをドラッグ、アニメーションポーズを出力につなぐ
※Speedに値を入力することにより、BSのアニメーションが切り替わる
Speedを引っ張り変数へ昇格する

前回のBP_PlayerとアニメーションBPを関連付ける
BP_Playerを開きコンポーネントのMeshを選択、右側AnimClassにBP_PlayerAnimを設定
コンパイル・セーブ

BP_PlayerAnimを開きイベントグラフに切り替え
TryGetPawnOwnerのReturnValueを引っ張り、?IsValidを選択
イベントBlueprintUpdateAnimationとIsValidをつなぐ
ryGetPawnOwnerのReturnValueを引っ張り、GetVelocityを選択
GetVelocityを引っ張りVectorLengthを選択
変数SpeedをドラッグしSetSpeedを配置、IsValidのIsValidからつなぐ
VectorLengthとSetSpeedをつなぐ

TryGetPawnOwnerはアニメーションBPの所有者(BP_Player)を取得する
IsValidはInputObjectが有効かどうかを調べる
イベントBlueprintUpdateAnimationはフレーム更新ごとに呼ばれる
GetVelocityはアクターの速度を取得する

コンパイル・セーブしてアニメーションするかテストする

地面に足めり込みを修正
BP_Playerを開き、コンポーネントのCapsuleComponentを選択
形状のCapsuleHalfHeightを96、CapsuleRadiusを42
コリジョンが小さくて当たり判定がおかしかった
※浮いてたので93に調整

ジャンプ
BP_PlayerAnimを開きLocomotionを選択
RM→ステートを追加
名前をJumpStart
RM→ステートを追加
名前をJumpLoop
RM→ステートを追加
名前をJumpEnd
IdleWalkRunとJumpStartをつなぐ
JumpStartとJumpLoopをつなぐ
JumpLoopとJumpEndをつなぐ
JumpEndとIdleWalkRunをつなぐ
矢印アイコンをクリックして開く
結果ノードから引っ張り変数へ昇格
名前をIsInAir?
JumpStartを開きアセットブラウザからジャンプのアニメーションをドラッグして配置、アニメーションポーズを出力につなぐ
Jumpのシーケンスプレイヤーを選択し、詳細タブ、設定のLoopAnimationのチェックを外す(1回でいい)

次の矢印アイコンをクリックして開く
TimeRemaining(ratio)を追加し、ReturnValueから引っ張り<(より少ない)を選択、したの値を0.2にして結果につなぐ(残り20%で次のアニメーションに遷移する)

TimeRemaining(ratio)はアニメーションの残り時間を比率(0~1)で返す

JumpLoopを開き当該アニメーションをドラッグして配置、アニメーションポーズを出力につなぐ

次の矢印アイコンをクリックして開く
IsInAir?をドラッグしてGetIsInAir?を配置、引っ張りNotBooleanを選択、結果につなぐ

JumpLoopを開き当該アニメーションをドラッグして配置、アニメーションポーズを出力につなぐ

最後の矢印アイコンをクリックして開く
TimeRemaining(ratio)を追加し、ReturnValueから引っ張り<(より少ない)を選択、したの値を0.2にして結果につなぐ

IsInAir?を実装
BP_PlayerAnimを開きイベントグラフ
TryGetPawnOwnerのReturnValueを引っ張り、GetMovementComponentを選択、GetMovementComponentのReturnValueを引っ張り、IsFallingを選択
IsInAir?をドラッグしてSetIsInAir?を配置
SetspeedとIsInAir?をつなぐ
IsFallingのReturnValueをIsInAir?につなぐ

GetMovementComponentはキャラクターのMovementComponentを参照する
IsFallingは地上にいる(False)空中にいる(True)を判定する

着地がうまくいかない

Locomotionを開いて
プレイボタン横の・・・クリック新規エディタウインドウ
横のプルダウンからスポーン済みを選択