【Unity】UnityのAnimationがわかんないよ
ずっと避けていた。
自作スクリプトでやっちゃったり、iTweenで代用していた。
プログラマーとしてはそれでいいと思っていた。
細かい制御、イベント発行だって自由自在だし、困ったことも無かったし。
何よりよく分からないし。
何度か挑戦はしてみたが、いつも思った動きが作れないので諦めてしまっていた。
が、このままではずっと出来ない。
もう一度挑戦してみよう。
作りたいもの
作りたいものはこれだ。
出来とるやん、って突っ込まない。
一枚の画像がリズムを取るように上下scaleが伸縮するだけ。
もちろんposition , rotation , scaleをいじっても
それに追従して動いてくれるものじゃないと使い物にならない。
相対で動いてくれるものが絶対だ。
自分がやった手順をまとめておく
触ってこなかったので、調べながら見よう見まねでやってみたのをまとめておく。
配置~初期設定
- 適当なpngを画面にD&Dでinspectorに配置する
- Window > AnimationでAnimationタブを開く
- 1で配置したGameObjectを選択している状態でCreateを押下して、適当な.Animファイルを作る
- Add PropertyでTransform > Scaleを選択。
ここまではいいだろう。思ったまま操作すればいい。簡単だ。
問題はこっからだ。
パラメータ
まずは全体の長さを確認。何もせずそのまま実行する
ちょっとアニメーションの長さが長いので 0:40に短くしたい。
右側にある最後のキーフレームをグイッと0:40の所まで持っていけばOKだ。
さて、では実際にリズムを取るアニメーションを作る
0:25 , 0:30 , 0:35の箇所3つにAdd keyしてkeyframeを作る
赤い線を持っていって、右クリックしてAdd Keyだ。
カーソルの位置ではなく赤い線の箇所に作られちゃうぞ!
そして、0:30にまた赤い線を合わせて、transformのscale.yを0.5にする。
これで良さそうだ。
実行してみる。
おお、それなりに合ってる。もうちょっと感覚を狭くしたら良さそうだ。
調査段階なのでこれでとりあえずいいだろう。
実験
ちゃんと実用に耐えられるかテストしてみよう。
移動してみる
先程のAnimatorを付けたものを移動させてみる
こんなん。
if (Input.GetKey(KeyCode.LeftArrow)) { var p = this.transform.position; p.x += MOVE_VALUE * Time.deltaTime; this.transform.position = p; } else if(Input.GetKey(KeyCode.RightArrow)) { var p = this.transform.position; p.x -= MOVE_VALUE * Time.deltaTime; this.transform.position = p; }
おお、問題なく動くぞ!(当たり前)
回転させてみる
無茶な傾きではどうか
これも問題なし!
Unity最高だな
拡大させてみる
問題はここだ。
scale値を2,2,2にしたオブジェクトをAnimationさせたらどうなるのか。
はい、死にました。
scale2なら
2 -> 1.5 -> 2
と動いてほしい。
相対的に設定するには…?
なんかあるはずだ。Unityは馬鹿じゃない。
何かしら方法があるはずだ…!
あったあああ!
これだ!神がいた!こうすればいけるはずだ!
早速設定して実行!
…
……
………
死
なんだこれは
BlendingをAditiveに設定すると、初期値からの移動量でアニメーションを行う
つまり、初期値からy:-0.5縮んでくれればいいのだ。
が、結果
0 -> -0.5 -> 0
になってしまった。
何故だ。初期値はtranformの2じゃないのか、一体初期値とはどこにあるんだ。
ガクッ。
結果
他で紹介されているのと同じように親オブジェクトの下でAnimation動かせばいいんだ。
そして、親オブジェクトのtransformをいじれば何ら問題ない。