キャラの移動速度と移動アニメーションのレートを左スティックの倒し具合に合わせる方法!
※説明不足・曖昧で適当な表現あり。(まあいつもの事か)
サードパーソンテンプレートを使って紹介する。
※今回はXboxのコントローラーを使用した際の説明になっている。
まず、左スティックを約半分倒した時、
キャラの移動アニメーションはどう見えるか?
※一部分かりやすいようにスローを使っている。
お分かりいただけただろうか。
地面をつるつる滑っている感じで、とても不自然。
地に足をついて歩いている感じがしないだろう。
なので今回は、そんな不自然さを無くすために・・・
左スティックの倒し具合で
キャラの移動速度と
アニメーションのレートを変える方法
を紹介する。
サードパーソンテンプレートに最初っから備わっているグレーマンの移動アニメーション(画像だと「ThirdPerson_IdleRun_2D」)をコピーし、
コピーしたもの(画像だと「ThirdPerson_IdleRun_2D_New」)を開いて改造しよう。
ThirdPerson_IdleRun_2D_New
以下のように改造しよう。
①ThirdPersonWalk
②ThirdPersonRun
グレーマンのアニメーションBP「ThirdPerson_AnimBP」を開こう。
イベントグラフ
関数を2つ作る。
「CalculateGaitValue」
「CalculatePlayRate」
「CalculateGaitValue」
Speed・・・キャラの速度
WalkingSpeed・・・最大歩行速度
RunningSpeed・・・最大走行速度
まず「Gait」の意味は??
Gait・・・足取り、足元、歩き方
である。
だが今回の場合は、「歩き方」という意味で捉えたほうが分かりやすいだろう。
つまり、この関数「CalculateGaitValue」は、
キャラの歩き方を定義するための値を計算する関数なのだ。
キャラのSpeedによって、Gait値を変えるようにしてある。
Gait値
0・・・Idle(直立)
1・・・Walk(歩行)
2・・・Run(走行)
『Idle(0)~Walk(1)に遷移するための処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(WalkingSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。
『Walk(1)~Run(2)に遷移するための処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「1(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(WalkingSpeed)」に設定した値に達した時、「2(OutRangeB)」を返す。
A(Speed)の値が、B(WalkingSpeed)の値より大きい場合、
Trueの値をGait変数に格納。そうじゃなければFalseの値を格納。
「CalculatePlayRate」
Gait・・・キャラの歩行状態
WalkAnimSpeed・・・キャラの最大歩行速度
RunAnimSpeed・・・キャラの最大走行速度
Speed・・・キャラの速度
ここら辺ちょっと理解が曖昧ですが・・・w
アニメーションレート
OutRangeA・・・0
OutRangeB・・・1
『歩行アニメーションレート計算処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(WalkingAnimSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。
『走行アニメーションレート計算処理』
キャラのSpeed(Value)が、「0(InRangeA)」の時、「0(OutRangeA)」を返す。
キャラのSpeed(Value)が「InRangeB(RunningAnimSpeed)」に設定した値に達した時、「1(OutRangeB)」を返す。
アニムグラフ
Idle
Run
Idle→Run
Run→Idle
グレーマンのBPを開こう。
CharacterMovement(継承)の詳細パネル
MaxWalkSpeedを、設定したRunnnigSpeedの値(375)と同じにする。
↓RunnnigSpeedの値と同じにする。
それでは実際にプレイしてみよう!
走行
左スティック全倒し
歩行
左スティック半倒し
ゆっくり目の歩行
左スティックちょい倒し
左スティックの倒し具合で、キャラのスピードとアニメーションのレートが変わっているのが分かる。
これでかなりリアルな移動アニメーション処理が出来た!
自分でもところどころ理解しきれていない部分があるので、ちょくちょく荒い説明になったかもしれないが、
こんな説明でも伝わってくれたら幸いだ。
それではまた!^^ノシ