#memo

indiedev太郎

歩行のブレンドスペースの構築

三人称視点のプレイヤーはいろんな方向に動いて、それぞれで足の動きが異なる
代表的な動きを作り、ブレンドスペースを使用して360度動けるようになる、代表的な動きは前後左右の4つだけど、斜め移動も入れて8個あるとかなり見栄えが良くなる
更に移動自体にもシークエンスがあって、スティックの傾きに応じて 歩き(警戒)、歩き(通常)、走り くらいに切り替わると楽しい

とりあえずこの8*3の24アニメーション用意出来たとして、どのようにブレンドしていくかを考える

ブレンド方法、ブレンドスペースを使う以外にも、AnimBPやStateMachineがあるけれど、こちらはどちらかというと一瞬の切り替えの補完で、例えば一連の歩行モーション ⇔ しゃがみ歩行モーション とかに使用すると良さそう

なので、このようなブレンドスペースを構築してみる
https://i.gyazo.com/a2d1a7b51fe4433fc7a747d1feb867bf.png

更に、入力がゲームパッドのスティックの時、InputScaleはX軸Y軸で [-1.0, 1.0] なので、かなり都合がよい

ここで問題は
ゲームパッドの右上入力は(1.0, 1.0)ではなく、(0.7, 0.7)である(物理的にNormalizeされている)

・アニメーションの歩幅の変動が均一でない可能性
→例えば歩き(警戒)は24frameで50cm、歩き(通常)は1m、走りは2.8mになっている

・FLeft → BLeftへの補完の際、足の前後入れ替わりがある
→Left付近の補完で足がめり込むことになる

・キーボード入力はデジタルに0 or 1しか取れない

以下解決策
ゲームパッドの右上入力は(1.0, 1.0)ではなく、(0.7, 0.7)である(物理的にNormalizeされている)
・単に斜め移動のアニメーションをそのように作る
→例えば直進の移動距離が1mなら、Xに1m、Yに1m移動する足の動きを作ると良い
→→ゲーム内で実際に採用されるモーションの確認がしにくい、グリッチが出る可能性がある


アニメーションの歩幅の変動が均一でない可能性
ブレンドスペースにInputScaleの値を利用すると、InputScaleが1/3の時は歩き(警戒)、InputScaleが2/3の時は歩き、1の時は走りのモーションが再生される
この時キャラクターのスピードは、MaxWalkSpeed * InputScaleとなり、モーションの移動距離に緩急がある場合、床とモーションでズレが生じる

・Curveアセットを利用する
こんな風に、スピードとブレンドスペースの位置に応じたグラフを作成する、歩き(警戒)は50cm、歩き(通常)は1m、走りは2.8mの場合
https://i.gyazo.com/d263d7a0892fd76b4242792575502edc.png

InputScaleに対して、行う
https://i.gyazo.com/573ac19067c85c8774e0d89e6b84909b.png

https://i.gyazo.com/05b8c8a07910a9cbc33bd79713ee377e.gif
とのことです。

前移動、横移動間で移動距離が異なる、走れる方向は前方のみも同様の方法で対応する、あんまり計算増えてもダメそうだけど

・ていうかルートモーション使う
多分同様の結果、どっちのほうが負荷少ないんでしょうか、知りません


FLeft → BLeftへの補完の際、足の前後入れ替わりがある
足の前後関係がアニメ間で同じでないと綺麗な補完が出来ないのだけれど、左上への移動と左後ろへの移動ではどうしても前後関係が入れ替わってしまう
左右への移動をやってみた時、右足が常に前のパターンと、左足が常に前のパターン2種類があることから想像できる
→我慢する(消極的解決)
→横移動をカニ歩きにする(消極的解決)


キーボード入力はデジタルに0 or 1しか取れない
→デフォのwasdを0.5にして、Shift押下時は1.0とかにする、低速が重要ならそちらもキーで切り替えるようにする
→最後に押されたキーがキーボードかパッドかはこんなノードで取得できる
https://i.gyazo.com/43c66ddf925d90df78988fb2ef456866.png