Harald
Do you have a setup where the parent of the root-motion bone is moving or scaling? If so, why?
はい。私のroot-motion boneは親のスケールの影響を受けています。
なぜそうするのか? 異なる体型に合わせて、rootmotionの移動量も適切な位置に(Spineエディタ上では)自動的に調整できたからです。
このように、rootmotion に必要な「.root_move-」ボーンは「bodysize_all」ボーンの子に配置されています。「bodysize_all」ボーンはスキンに割り当てられたコンストレイントの影響を受けスケールが縮小します
.
ゴブリンのスキンを有効にすると、このようにbodysizeボーンがスケール縮小し、体型が変わります。
このスケルトンでRootmotionを用いて作った前進攻撃のアニメが以下の動画です
.
root_move ボーンの位置を見てください。これは同一のアニメですが、スケール縮小の影響を受けるため、rootmoveボーンがどちらも適切な股下の位置に移動しています。
root_moveボーンをRootmotionに適用すれば、一見問題なく異なる移動量を実現できそうです。
しかし、残念ながらUnityランタイムのRootMotionはローカルの移動量しか計算しません。
エディタ上で適切に見えるrootmotionの移動量は実際には下記の画像の位置で計算されています。
.
スケール縮小が考慮されなくなった分、実際の移動量より前にroot_moveボーンが移動しています。
それはRootMotionの移動量に対してSpineグラフィック上の移動量が足りないことを意味します。
そのためアニメが遷移した際、前の投稿で示した動画のような瞬間移動が起こります。
Spineは公式ブログで異なる体型の実装テクニックを紹介しています。
しかし、現在Rootmotionはエディタ上のワールド位置ではなく、ローカル移動量しか計算しないため、Rootmotionと上記のテクニックを併用することができません。
そのためrootmotionの移動量を調整したアニメを体型の数だけ用意しなければならないケースに直面します。異なる体型が5つあった場合、rootmotionを使用したアニメの数が5倍になります。
また、Rootmotionがワールド位置を参照できた場合、Rootmotionボーンとhipボーンをコンストレイントしてボーン移動を自動化できるかもしれません。
以上がRootmotionがワールド位置を参照してくれるようになってほしい理由です
ここまで読んでくださりありがとうございます。