ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、競プロ始めましたー!良ければフォローお願いします(`・ω・´)

【unity2017】Animationで設定した値を相対的な値として扱う方法

はじめに

Animtionの使い方は ”unity Animation 使い方” で素晴らしいサイトが沢山ありますのでそちらを参考にしてください!今回はAnimationの小技(?)の話です。

「前置きはいいから、解決方法だ早く教えて!」という方は《解決したいこと》を読み飛ばしてください(`・ω・´)b

解決したいこと

では早速ですが、下の写真の赤枠の箇所をみてくださいー。

f:id:PafuOfDuck:20171001143152p:plain

枠内の値を変更することでアニメーションを作成していきますよね。この値がアタッチされているオブジェクトのTransformを書き換えてくれることでアニメーションとなっているのですが...

f:id:PafuOfDuck:20171001144730p:plain

このままでは大変不便に感じますね。
例えば、原点で(親を持たない)Cubeがジャンプするようなアニメーションを作ったとします。その後、「このCubeを隣にもう一つ並べたい!」と思った時にこのままでは使えません。(Animationで設定した値でTransformを書き換えているので、配置時にずらしていても同じ場所で同じ動きをします。)

問題点
同じAnimation Clipを設定すると同じ場所で同じ動きをするオブジェクトになってしまう

さて、これを解決するためには配置時のTransformを基準としてAnimationで設定した値を適用してくれればOKですね。その方法について説明します。

解決方法

"Root Motion"という機能を使用して問題を解決していきます。

まず、適用したいAnimation Clipを選択してください。選択するとInspectorが以下の画像のようになるので、赤線の箇所をクリックしてください。

f:id:PafuOfDuck:20171001150635p:plain

次に、アニメーション予定のオブジェクトにアタッチされているAnimatorの設定を変更します。赤線の箇所にチェックを入れてください。(画像はチェック後です。)

f:id:PafuOfDuck:20171001151020p:plain

はい。たったこれだけで完了です!
実際にGIFを用意すればちゃんと意図通りに動いてるのをお見せできるのですが、GIFを用意するのが面倒くさ.. 今回は用意できていません(´・ω・`。)

小噺

この機能を知るまで私がどのように実装していたかという話に興味があれば読んでみてください。(笑)

「Transformが書き換わるのかー。ってことは親を設定してあげるとLocalPositionが書き換わるってことでしょ?じゃあ親を設定してあげれば(無駄なオブジェクトにはなるけど)実装できるじゃん。」ってな訳で...ほいっとな。

f:id:PafuOfDuck:20171001152325p:plain

こうすることで"JumpCubeSet"の位置を動かせばその位置を基準としてアニメーションしてくれます。めでたしめでたし...?

・・・。

はい。これはAnimationの遷移に対応するのが面倒でした。(おかげで"Root Motion"に辿り着けたのですがネ。)

おわり

"Root Motion"を上手く使えば、Animationだけで移動させることも簡単です!是非お試しをば(`・ω・´)b

ブログの書き方を試行錯誤して、分かりやすい構成を模索中です...。今回も迷走している気がしますが優しく見守ってください(´・ω・`。)

初心者の方や熟練者の方を問わずTwitterのフォローお待ちしています...(`・ω・´) ヨロシク!