忍者ブログ

エンジニアリングメモ

技術系情報を書き留める日記

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

現在、新しいコメントを受け付けない設定になっています。

[Unity]Animatorがアクティブのとき軸がロックされたり、動かなくなる現象

[事象]

Unity Ver 5.5.0f3 Personal (64bit)
Aniamtorでアニメーション中 スクリプトやRidibody等で位置Positionや回転Rotationをいじったとき
全体や特定の軸だけ動かなくなった現象に見舞われた。

[前提]

アニメーションの実装についてググった場合二通りの方法が見つかる。
※アニメーションした対象をAと呼ぶ。Aの親空オブジェクトをBと呼ぶ

1.B作成しこれにAnimatorを実装することで、
「親のオブジェクトが移動したとき子のオブジェクトもつられて移動すること」を利用して、
Bを基準としてAにアニメーションさせる方法

2.
Root Motionについての記事。
Bが存在しなくてもAにAnimatorを実装しRootMotionにチェックをいれると
Bを基準にしたようなアニメーションが出来るようになったという記事

[原因]

私は、2の記事を読み空オブジェクトをわざわざ作る必要が無くなったと誤解していたからだった。
RootMotionは確かに自transformを基準としたアニメーションをしてくれるが、これには一つ致命的問題があった。
 というのは、同一オブジェクトにAnimatorとTransformをいじるスクリプト(Ridibody等を含む)が存在すると動作しなくなり初期値をずっと示すようになるという挙動が存在するということだ。

[解決法]

 つまりRootMotionを利用するしないにせよ、transformをいじるのであれば「Bを作成する作業は必要である。」ということ。

 結局のところ、RootMotionの働きは「Animationの作成時Dopesheetではワールド座標を指定して作成しても、それとは関係なくCurvesの値をlocal座標に反映した状態でアニメーションしてくれる」だけなのだ。

 つまりRootMotionは「(私が勘違いしていた)空オブジェクトを作る作業を無くすため」のものでは無いのだ。

[最善策?]

1.の方法でBにAnimatorを実装し、Aにtransformをいじるスクリプト等を実装したとき
AがBより離れれば離れるほどアニメーションにその距離分の差異が反映されてしまう。
そのためBにスクリプト、AにAnimator(RootMotion)を実装したほうが良いと思う。
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

HN:
テク
性別:
非公開

フリーエリア

P R