ぐーるらいふ

底辺。

【Unity】UnityのAnimationがわかんないよ

ずっと避けていた。
自作スクリプトでやっちゃったり、iTweenで代用していた。
プログラマーとしてはそれでいいと思っていた。
細かい制御、イベント発行だって自由自在だし、困ったことも無かったし。
何よりよく分からないし。
何度か挑戦はしてみたが、いつも思った動きが作れないので諦めてしまっていた。

が、このままではずっと出来ない。
もう一度挑戦してみよう。

作りたいもの

作りたいものはこれだ。
出来とるやん、って突っ込まない。

f:id:ghoul_life:20170526150208g:plain

一枚の画像がリズムを取るように上下scaleが伸縮するだけ。
もちろんposition , rotation , scaleをいじっても
それに追従して動いてくれるものじゃないと使い物にならない。
相対で動いてくれるものが絶対だ。

自分がやった手順をまとめておく

触ってこなかったので、調べながら見よう見まねでやってみたのをまとめておく。

配置~初期設定
  1. 適当なpngを画面にD&Dでinspectorに配置する
  2. Window > AnimationでAnimationタブを開く
  3. 1で配置したGameObjectを選択している状態でCreateを押下して、適当な.Animファイルを作る
  4. 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にする。
これで良さそうだ。

実行してみる。

f:id:ghoul_life:20170526150546g:plain

おお、それなりに合ってる。もうちょっと感覚を狭くしたら良さそうだ。
調査段階なのでこれでとりあえずいいだろう。

実験

ちゃんと実用に耐えられるかテストしてみよう。

移動してみる

先程の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;
  }

f:id:ghoul_life:20170526151032g:plain

おお、問題なく動くぞ!(当たり前)

回転させてみる

無茶な傾きではどうか

f:id:ghoul_life:20170526151147g:plain

これも問題なし!
Unity最高だな

拡大させてみる

問題はここだ。
scale値を2,2,2にしたオブジェクトをAnimationさせたらどうなるのか。

f:id:ghoul_life:20170526152146g:plain

はい、死にました。

scale2なら
2 -> 1.5 -> 2
と動いてほしい。

相対的に設定するには…?

なんかあるはずだ。Unityは馬鹿じゃない。
何かしら方法があるはずだ…!

tsubakit1.hateblo.jp

あったあああ!
これだ!神がいた!こうすればいけるはずだ!

早速設定して実行!

f:id:ghoul_life:20170526152944g:plain


……
………

なんだこれは

BlendingをAditiveに設定すると、初期値からの移動量でアニメーションを行う

つまり、初期値からy:-0.5縮んでくれればいいのだ。
が、結果

0 -> -0.5 -> 0

になってしまった。
何故だ。初期値はtranformの2じゃないのか、一体初期値とはどこにあるんだ。

ガクッ。

結果

他で紹介されているのと同じように親オブジェクトの下でAnimation動かせばいいんだ。
そして、親オブジェクトのtransformをいじれば何ら問題ない。