ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

Unity / アニメーション(Mecanim編)

f:id:covory10101101276:20180221145841j:plain

バチカン市国

 

みなさんこんにちは🌚

最近朝もそんなに寒くなくなってきたなあと感じるブルーノです。もっとも田舎なので常に寒く、気温に慣れてきただけなのかもしれませんが笑

 

さて今回はアニメーションの新しいウィンドウ、「Mecanim」についてやっていきたいと思います。

とその前に一つ、アニメーションの中にイベントを発生させる方法についてだけ勉強します。

イベントとは、スクリプトコンポーネントの関数(メソッド)のことで、アニメーションウィンドウのSamplesの隣の隣にある四角いマーク(Add Event)から追加することができます。

f:id:covory10101101276:20180221232101p:plain

ん?でもこれじゃあアニメーションは繰り返されてるんだからその度にイベントが呼び出されることになるのか?

それはその通りなのですが、そもそもそのアニメーションを条件分岐させれば、例えばテニスのサーブの時はサーブのモーションとインパクトの瞬間にボールが打ち出されるメソッドを呼び出す、といった風にすれば違和感なくこの機能を使えますね。その条件分岐の詳しい設定が次のMecanimなのです。

 

Mecanim

f:id:covory10101101276:20180226165301p:plain

最初にアニメーションを作った際にできた樹形図のようなファイルをアニメーターコントローラー(Animator Controller)と言います。これをクリックすると

f:id:covory10101101276:20180226165338p:plain

このようなメニューが開きます。前回のAnimationのように視覚的なメニューですね。色がついたそれぞれの中身はステート(State)と言います。ゲーム用語でいう「ステータス」のように状態を表すと考えると理解しやすいです。名前をそれぞれ選択して見ると前回作ったCubeAnimation01以外は中身が記述されていませんね。このコントローラは現在CubeAnimation01しか持っていないことになります。 では開いておいてアレですがこのメニューをいじる前に別のアニメーションを作成しましょう。これはあくまでコントローラーであって新しいアニメーションステートを作れるわけではないみたいなので。

f:id:covory10101101276:20180226171309p:plain

さて戻ってきましたアニメーションウィンドウ。前回同様ゲームオブジェクトのCubeを選択しています。Animationウィンドウタブの下の下を見るとCubeAnimation01という名前と上下の矢印がありますね。ここから別のアニメーションを編集したり新たに追加したりできます。01は回転するアニメーションだったので今度は上下に移動するCubeAnimation02を作ってみます。

f:id:covory10101101276:20180226171707p:plain

f:id:covory10101101276:20180226171914p:plain

前回の要領でPositionを追加しましょう

f:id:covory10101101276:20180226172137p:plain

f:id:covory10101101276:20180226172431p:plain

Position.Yをやんわり持ち上げました。これで再生すると上に動く....と思ったら動かなかったです。

f:id:covory10101101276:20180226172837p:plain

どうやらAnimatorウィンドウにヒントがあるようです。この再生中の画面ではCubeAnimation01ステートの青いゲージが時間経過とともに変動しているだけですね。先ほど作ったCubeAnimation02は追加されましたが色がついておらず沈黙した状態ですね。どうやら現在機能していないようです。ちなみにオレンジのステートは初期ステートで、ここからアニメーションは開始します。早速02をアクティブにしてあげましょう。

f:id:covory10101101276:20180226173524p:plain

CubeAnimation01を右クリックし、[Make Transition]から道を作ります。

するとマウスポインタにステートから矢印がついてくるので02に引っ張ってきましょう

f:id:covory10101101276:20180226173723p:plain

この状態で再生すると

f:id:covory10101101276:20180226173949p:plain

一通り色付きで回転した後上下にピストン運動(CubeAnimation02)をし始めました。その後はずっと02の方をしていますね。これは01⇨02の道しかないためで逆に02⇨01の道を作ってあげると交互にアニメーションを繰り返すようになります。

f:id:covory10101101276:20180226174257p:plain

ここまでは予想通りでしたが、これをよく見ると互いのアニメーションが終わりきる前に次のアニメーションが再生されていますね。おかげでスムーズに動いているように見えますが。これは一体どうしてでしょうか。

これはそれぞれの矢印に秘密があり、矢印を選択するとそのインスペクターを覗くことができます。

f:id:covory10101101276:20180226174624p:plain

f:id:covory10101101276:20180226174748p:plain

この矢印は先ほどあったようにトランジション(Transition)といい、ここで別のアニメーションとの移り変わりを設定します。このインスペクターの最後のConditionsはパラメータを設定することで再生される条件を追加できます。なんかC#の時と似ていますね。ここでパラメータを新規作成して、スクリプトでそれを操作できるようにしておけば条件にそってアニメーションを実行できます。

最後に他の最初からあるステートについてだけ勉強しておきます。

Entry...文字通り最初に再生されるステートで、ここから伸びているオレンジのトランジションの先のステートに向かいます。ここからたくさんトランジションを伸ばすこともでき、その場合は条件に応じて、どの条件にも当てはまらない場合は初期ステートに向かいます

Any State...直訳すると「どんなときでも」。どの状態からでもこのステートから先ほどのコンディションを満たせば再生されます。

Exit...このアニメーションコントローラーを終了します。

 アニメーションとアニメーションコントローラ。この二つを上手に使うことで様々な動きを生き生きと生み出すことができるようですね。今回はここまでにしておきます。

 

前回から2回分やっているアニメーション編ですが、最後にもう一つブレンドツリーという概念が待っています。

次回はそのブレンドツリーについても勉強していきます。