[Unity]Unity4.3の2Dツールを使ってみる -Mecanim編-

たのしいMecanim

こんにちは!布浦です。

Unityの2D機能をつかってみる企画、3回目です。
今日は、
「3. 複数のアニメを切り替える仕組みをつくる(Mecanim)」
をやってみたいと思います!

全5回の予定です。

  1. 画像をSpriteとして画面に配置する
  2. Spriteにコマアニメを設定する(Animation View の使い方)
  3. 複数のアニメを切り替える仕組みをつくる(Mecanim)
  4. 2D物理エンジンでキャラクターを動かす(Physics2D)
  5. キー操作によるキャラクターの移動を実装する(Physics2Dつづき)

Mecanimとは?

Mecanimは、Unity4から組み込まれたアニメーションシステムです。
複数のアニメーションの遷移をGUIをつかって制御することができます。
さらに、その遷移のデータにはパラメータも持たせることができるので、少しのコードでアニメの切り替えを実装できます。
他にも色々できるのですが、今回は2つのアニメの遷移を構築していきたいと思います。

Mecanimを言葉で説明するとちょっとややこしいですが、
とりあえず今回のサンプルでやりたいことは、
「地面に足がついていないときは飛ぶモーション、足がついているときは歩くモーションを再生する」ということです。

飛ぶアニメと歩くアニメ

今回やりたいこと

この構造を、GUIを使ってデータ化してしまえるのがMecanimです。

Mecanim

Mecanimでつくった遷移データ

このデータさえつくってしまえば、後はプログラムから「地面に足がついているか」パラメータを切り替えるだけで、自動でアニメーションが切り替わります。
今までは、Animation Controllerのようなものを自分で実装する必要がありましたが、それが不要になるので、慣れるととても便利なツールです。

Mecanimを利用したアニメーションのデータ構造

Mecanimをつかってアニメーションを再生するには、いくつか必要なデータがあります。

データ構造

まず、アニメを再生するには「Animator」コンポーネントをGameObjectにはりつける必要があります。
さらに、再生するためのアニメーションデータ「Animation Clip」も必要です。
この2つは、前回のコマアニメ作成の時に準備ができています。

そして、この2つをつなぐのが「Animator Controller」というデータです。
「Animator Controller」内の要素について、1つずつ見ていきます。

アニメーションの遷移データをつくる

Animator Controller [A] について

「Animator Controller」は、遷移の構造やパラメーターをもつ、Mecanimで一番重要なデータです。

これがないと、アニメが動かないので、Unity上でコマアニメなどをつくったときは、
自動で生成されて、Animatorコンポーネントにも自動で割り当てられていると思います。

Animator Controller

自動生成された「Animator Controller」

Controllerの割り当て

すでに、Animatorコンポーネントの、Controllerプロパティへの割り当てもされている

前回、Animation Clipの作成時に、勝手につくられたファイルが、「Animator Controller」です。
この中身を見るには、Unityのメニューの「Window -> Animator」を選択して、Animator Viewを開きましょう。

Animator View

Animator View

Project View内で、「Animator Controller」にフォーカスが当たっていると、中身が表示されます。
このViewをつかって、アニメ間の遷移の構造をつくっていきます。

Animation State [B] について

Animation Stateは、アニメの遷移図の中の基本構成要素です。
Animator Viewの格子状の背景の部分にある箱1つ1つのことです。

Animation State1つにつき、1つのAnimation Clipを割り当てるイメージです。

AnimationStateのInspector

AnimationStateを1つ選択して、Inspectorをみてみる

Animation Stateをクリックで選択すると、Inspector に情報が表示されます。
「Motion」というパラメータに、前回つくったAnimation Clipが、すでに割り当てられていると思います。

3Dで、外部ツールでアニメをつけた場合などは、Animation Stateの作成やAnimation Clipの割当は手動で行う必要があります。
今回はUnity上でアニメをつくったので、Animation State をController 上に自動で生成してくれている上に、Animation Clipの割当もしてくれています。
今回はAnimation Stateに関しては特に何もすることがありません。

Animation Transition [C] について

Animation State同士をつなぐ矢印が、Animaton Transition です。
この矢印には、条件を持たせることができ、その条件を満たしたときにアニメの遷移が起こります。

さっそく、矢印をつくってみます。
ひとつのAnimation Stateの四角の上で右クリックすると、メニューが出ます。
「Make Transition」を選択すると、マウスに矢印がくっついてくるので、
遷移させたい別のAnimation Stateをクリックすると、スナップがきいたように矢印がつながります。

Transitionのつくりかた

つくった矢印を選択すると、Inspector で「Conditions」という部分に遷移条件を設定できます。

TransitionのInspector

デフォルトで設定されている「Exit Time」は、「時間経過」という条件です。
つまり、一定時間経つと何もしなくてもアニメが切り替わるということです。

今回は、時間経過ではなく、「地面に足がついているか」を条件としたいので、
条件に使えるようなパラメータを追加する必要があります。

Animation Parameter [D] について

Animation Parameter は、遷移条件につかうパラメータのことです。
Animator Viewの左下に、Parametersというパネルがあるので、ここで「+」を押して追加します。

パラメータも、いくつかタイプがありますが、
今回の条件「「地面に足がついているか」はtrueかfalseしかないので、「Bool」を選びます。

プロパティ追加

名前は「Grounded」にして、足がついていたらtrue、ついていなかったらfalseということにしたいと思います。
Unityでおなじみですが、Bool値はGUI上でチェックボックスとして表示されます。
チェックが入っていたらtrue、入っていなかったらfalseということですね。

プロパティ名

プロパティ「Grounded」が追加された

パラメーターを追加しておくと、さっき開いたTransitionのInspectorで、「Conditions」の選択肢が増えます。
たとえば「Kotori@Fly」を再生中、つまり飛んでいるときに、「Groundedがtrueになったら(地面に足がついたら)」、「Kotori@Walk」歩くアニメに切り替える、という風に「Conditions」を設定します。

Conditions

「Grounded」が選択できるようになる

Animation Transitions

やりたいことに合わせて条件を設定する

遷移条件が設定できたら、今回のサンプル用の「Animator Controller」は完成です。
一旦再生してみます。

プレビューする

再生ボタンを押して、再生します。

Hierarchy 上で、「Kotori」を選択して、Animator Viewをみてみると、Animation State上に動くバーが出ます。
今、「ことり」がどの状態にあるか(どのAnimation Clipを再生しているか)がわかります。

Mecanim プレビュー

Animator Viewでリアルタイムで状態を確認できる

再生中に、Animator View上で、「Grounded」プロパティにチェックを入れたり外したりしてみましょう。
パラメータがtrue(チェックが入った状態)になると「歩く」モーションが再生されます。もう一度クリックしてfalseにすると、「飛ぶ」モーションに戻ります。

Kotori@Fly Kotori@Walk

歩いたり飛んだり

切り替わりましたか?

ここまでできれば、あとはプログラムで地面に足がついているかを判定(接地判定)をして、
「Grounded」というパラメータに適用さえすれば、アニメーションは勝手に切り替わるというわけです。

記事が長くなってしまいましたが・・・GUI上での作業なので、
実際にやってみると、意外とすぐできてしうまうのではないかなと思います。

Mecanimについては今回で終わりますが、まだまだMecanimにはおもしろ機能があります。
詳しく知りたいという方は、公式のマニュアルを一度見てみてください!

Unity講座バナー
Unity講座第5期、受講生募集中ですー。