[第14回UE4ぷちコン]振り返り:アニメーション
概要
IK主体で動かしたけどAnim Graphが混沌に
アニメーション回りも試作と再設計が肝要
下半身まるごと省略できたの超楽
設計
要件を洗い出し、必要な仕組みを考える。
自機
攻撃
とりあえず画面中心を殴る
カメラも前方移動して踏み込み感を出す
防御
UI上のカーソル位置に腕が追従
防御成功時は受け止めリアクション
被弾
カメラを上にのけぞらせるだけ
移動
自機は移動しない
敵ロボ
攻撃
UI上のマーカー位置を目標にパンチ
パンチ動作の開始時刻と終了時刻はゲーム都合で指定されるが、
その間の時間でどのように構えて腕を出すかはロボの責任で消化する
防御
腕で防御しようとしたが制御が難しすぎるのでバリアに変更
バリア発生時に防御姿勢にする
被弾
第12回の成果を流用、IKで背骨と顔をのけぞらせる
バリア時弱目、命中時強めで調整効くように
移動
下半身が映らないので、Skeletal Meshごと動かす
実装
IK目標位置計算
自機防御カーソルや敵攻撃マーカーと3Dモデルが連動する事が肝要である。
イメージとデバッグしやすさの為にWidget ComponentでUIも3Dにした。
UI、自分の腕位置、敵パンチ目標の3D空間位置をどのように計算するか考える。
以下の3要素があれば、3D空間位置を計算できる。
1: 奥行き方向の位置
カメラからどれくらい離れているか
自分の腕の場合…
少なくともUIよりは奥
近すぎると自分の手しか画面に映らなくなるので適度に奥へ
2: UI上でのカーソル位置
(0,0)が左上で、(1920, 1080)が右下となるWidget上の座標
右下位置の値は、Widget ComponentのDraw Sizeプロパティに等しい
3: カメラのField Of View値
これの大きさに応じて、カメラから見た上下左右位置に係数をかける必要がある
以下の関数では、
モグラ叩きゲームで用いる割合での位置情報から3D空間上の位置を計算する。
敵Animation
腰の捻りから腕の位置まで全部IKで動かした結果、
たいへんカオスなGraphになった。
試行錯誤の跡や継ぎはぎが多い。
一応弁明すると、左右の腕でそれぞれ独立して
防御や攻撃を行えるようにした結果こうなっている。
だが、実際には左右同時にパンチしないし、
防御しながら逆の手で攻撃する事もなくなったので、無駄な複雑さになっている。
その一方、移動は足が見えない事を利用して超シンプル。
これは非常に助かった。
こちらはAnimation Blueprintすら使っておらず、
単にTimelineでSkeletal Meshごと前後させている。
前後ついでに歩いてる風に上下に揺らしたり、
着地してる風に足音を鳴らしたりしている。
自機Animation
こちらは敵の後に作った事と、
やる事自体が少ないので多少マシになっている。
主観視点なので、多少腕が伸びてもバレないのは助かった。
反省
コーディングだけならず、あらゆる要素で設計は大事
とりあえずで動かした場合でも、必ず再設計する
複雑さとの戦いはどこでも発生する
無理にProceduralにやろうとしすぎて逆に手間になっている
よく言われるとおり、いったんAuthoringして勘所をつかんでからProceduralにした方が良い
当時のメモを見ると
「ここで動きをSequence化すれば整理できるが、現状でも動いているし保留。ポーズ微調整したくなるかもだし」
と書かれている。つまり、今ツケが回ってきてるってこった!この野郎!
バリエーションが少ない
自機のパンチは中央しか殴らないので、アッパーとかフックとか増やせた気はする
ただ、ランダムに再生するとプレイヤー的には何で違うパンチが出たのかわからなくなる
パンチの軌道が違うなら、ゲーム的な意味合いも増やしたくはある。フックは遅いけど強いとか
敵のパンチも同様
全部ストレートパンチになっている都合で、画面外側に近い位置へのパンチは狙われている感じがしない
パンチの中継地点設定などで、中央に向かってくるような軌道に補整したい所
以上