株式会社ヒストリアさん主催の第15回UE4ぷちコンの作業進捗。
Control Rigの続き⑥。
イマココ
ゲームパッドの入力ベクトルの長さを正規化できたので、スティック入力に応じて走れるようにした。これまでに作ってきた地面に対する足のIKリグももちろん使用している。
初見の人には「なんか普通じゃん?」「これ、特別なことしているの?」と思ってもらえたら成功である。プログラムっぽいカクカクした動きを消して、自然な動きに見せたかったので。
さらに、いわゆるAim Offsetに相当するControl Rigを作った。
下のGIFアニメからは分かりにくいかもしれないが、体の動きより先に、頭が行き先を向くように調整してある。
アクタ側 (Player Pawn)
- スティックを入れた方向に
Add Force
している。- 一応、地面に沿った方向の成分に限定しているので、上り坂と下り坂で加速が違う予定。
- 上り坂=スティックの加速 - 重力 ⇒ 加速:小
- 下り坂=スティックの加速 + 重力 ⇒ 加速:大
- (ちょっとまだ、思った動きと違うので、調査中)
- 一応、地面に沿った方向の成分に限定しているので、上り坂と下り坂で加速が違う予定。
- キャラの向きは速度ベクトルの方向に向けている(
Get Vector
ノードを使用)- これでスティック入力より少し遅れて体の向きが変わるようになる。
- 一般に加速度運動では速度の変化はゆっくり遅れてくるので。
- 今はまだ、加速度が強いので(
Add Force
に強い値を入れているので)、入力に対する反応が敏感すぎる。これは今後の課題。
- これでスティック入力より少し遅れて体の向きが変わるようになる。
Animation Blueprint側
- Blendspace 2D で待機・歩き・走りと、-180度~+180度までの移動アニメーションをブレンド
- 次が、地面 VS 足IKのControl Rig
- その次が、Aim Offset相当のControl Rigを繋いでいる。
つまり、Control Rig
ノードは数珠繋ぎが可能! ということである。
ちなみに、前述の「体の動きより先に、頭が行き先を向く」は、
DirectionDegrees * 1.2
の部分である。(「ちょっとオーバーに動かす」とコメントがあるところ)
「何秒かけて指定方向を向く」的な処理はしていない。
ゲームプログラミングって、意外とこういうトンチでシンプルに解決できたりするから面白い。
Aim Offset 相当の Control Rig
そもそも普通の(アニメーションの) Aim Offset を使わなかった理由は:
- Aim Offset だと、動きが小さい。首と頭くらいしか動かない。
- spine_01からheadまでを順番に全部ねじりたかったから。
- いちいち、右・中央・左の3つのアニメーションシーケンスアセットを自作して、試行錯誤するのが面倒に思えたから。
- ビバ!プロシージャル!
- あと、そもそもControl Rigでやってみたかったから、というのが一番の理由か。
上の画像がAim Offsetっぽい動きをするControl Rigのグラフ。
比較的小さく組めたので、まるっと全部掲載。
- リグControlは「Rig_Aim」一個だけ。これを回せば、背骨一式~首~頭が連動して回転するようにした。
- Anim Blueprintが操作する変数も1つ。
AimDirection
。これはAimするためのRotation値。
- Anim Blueprintが操作する変数も1つ。
- 上の
Branch
ノードにつながっているIs Interacting
は、リグをマウスなどで動かしているときにTrueが返ってくる。- ここでは、マウス操作をしていない時は、Anim Blueprint が操作していると判断するようなロジックになっている。
- spine_01からheadまでの一連のボーンを取得するために、
Item Chain
を初めて使った。(For Each Item
につながっているやつ)-
Children
で親から子を検索した場合、spine_03から先が首・右肩・左肩と三方向に分かれているため、余計な(両腕の)ボーンが取得されてしまう。 -
Get Parents
で子(head)から親をたどっていった場合、pelvisとrootも拾ってしまう。 -
Item Chain
だと、始点・終点となるボーンが指定出来て便利。
-
-
Propagate Transform
ノードの存在を知った。-
Set Transform
やSet Rotation
などにあるPropagate to Children
と同様の機能のようだ。 - ここ数日は、ボーン1個1個を操作するたびに
Propagate to Children
が動いてたら、きっと重かろうと思って、できる限りPropagate to Children
はFalseで組むようにしている。 - 最後に一発
Propagate Transform
で済むなら、それに越したことはない。
-