アニメーションでオブジェクトを動かそう(その2)

前回のつづき)
アニメーションは簡単で便利だが初心者がつまづきやすい問題も抱えている。このGIF動画のように再生すると位置が変わってしまうのもそのひとつ。

アニメーションはデフォルトだと
ワールド座標に対して設定されてるんだ
ワールド座標!


ワールド座標とローカル座標

ワールド座標はシーン内のX:0, Y:0, Z:0を基準とした絶対座標、
ローカル座標はオブジェクト等の位置を基準とした相対座標のこと



アニメーションをローカル座標に設定する

オブジェクトを選択し、インスペクタービュー→アニメータールートモーションを適用(Apply Root Motion)にチェックを入れよう



ローカル座標に設定された!



以前は
GenerateRootMotionCurbボタン
というのも押す必要があったけど
Unity2018からなくなったぞ
少し昔のWeb記事だと
そのボタンを説明してるサイトも
多いっすね
バージョンのアップデートで
変わることがあるんだよねぇ……




オブジェクトの拡大/縮小(Scale)をすると位置アニメーションがおかしくなる

あれ?
オブジェクトの大きさを変えたら
動きが早くなった?
これはオブジェクトのScaleが拡大されているため、位置のアニメーションもそのぶん長距離になっている状態である。同じフレーム(時間)で長距離を移動しているから動きも早くなっている。



言葉で説明しづらいがこんな感じのイメージである。オブジェクトが拡大されていると移動幅も大きくなってしまう



オブジェクトごとに個別にアニメーションを設定・調整すれば力技で解決できるが、それは大変だ。この問題を根本的に解決するには、オブジェクトの拡大/縮小(Scale)を設定せず、上のような直方体をスケール1,1,1で用意すればよい。これにはUnityのProBuilderや3Dモデリングソフトを使うが、その説明はまたの機会に……。

拡大/縮小(Scale)で
引き伸ばしたキューブだと
位置も引き伸ばされるってことっすね
実はこの現象で2時間くらい詰まって
夜中に友達のヤスに
電話かけて教えてもらいました……
ちょwww詰まってたんすかwww
ネット検索しても
全然ヒットしなくてな……

ヤス先生ェ
ありがとうございます……
ありがとうございます……


この記事が誰かの救いになると願ってるぞ~。



拡大/縮小(Scale)や回転(Rotation)のアニメーション

さて、ここまで位置(Position)のアニメーションを設定してきたが、勝手に自分のやり方で操作する方……もとい、勘のいい方なら気づいたかもしれない。

拡大/縮小や回転の
アニメーションもつくれるよ




ゲームでよくある動き!
アニメーションは便利だね!




とりあえず増やしてみた
ちょwww
難しすぎwww
とりあえず増やしたり
数値をでっかくするのは
基本だからサ……
たくさんのオブジェクトが動くのは見ていて面白いが、同じ画面内に動くものがありすぎると訳のわからないゲームになってしまう。ここからは開発者のセンスでデザインしてみてくれ!



アニメーションカーブ

前回の記事ではドープシート上の数値入力でアニメーションを作成していたが、アニメーションカーブというグラフでも設定することができる。

これがアニメーションカーブ



回転の動きをヌルンッとしたものに変更。数値入力でもできるが、カーブだとグラフを操作して編集ができる



仕掛けがスッと動いたり、宇宙船のドアをシュインッと開閉するようなシチュエーションで使うとよさそう



よくあるエラー"AnimationEvent has no function~"

アニメーションを色々いじっているとエラー「AnimationEvent has no function name specified!」が出ることがある(というか出た)。







このエラーはアニメーションウィンドウ内で誤って「イベントを追加」ボタンを押してしまっていると発生する。



右クリックでイベントを削除するとエラーは消滅するぞ



まずはサンプルゲームなどで
オブジェクトに動きをつけて
遊んでみてくれっ!