LoginSignup
12
12

More than 5 years have passed since last update.

UnityでAnimatorを使いキャラクターなどをアニメーションさせる方法

Last updated at Posted at 2015-12-18

はじめに

Unityでアニメーションをさせる方法は、大まかに2種類あります。

1つは、タイトルの通りAnimatorを使い対象のオブジェクト用にAnimationClipを作成する方法です。
もう一つは、スクリプトによりソースコード上でMath関数を使い対象オブジェクトを動かす方法です。(Unity iTweenなんかで検索するとAssetが出てきます)

人によっては、ソースコード上で作成するのになれている方も居るかとは思いますが、今回はAnimatorを使ってアニメーションを作成する方法について説明します。

アニメーションさせたいオブジェクトのAnimationClipを作成する

まずは、アニメーションさせたいオブジェクトを選択した状態にします。
スクリーンショット 2015-07-06 18.17.56.png

次にWindwo->Animationのウィンドを表示します。
スクリーンショット 2015-07-06 18.19.32.png

これで選択されたオブジェクトのアニメーション作成の準備ができました、AnimationウィンドーのAddPropertyボタンを押して、AnimationClipを作成します。アニメー ションクリップ名は Start@Animatino としておきましょう。
ss03.png

AnimationControllerの作成を確認する

このとき新規でアニメーションを作成するので AnimationController も作成されます。 AnimationController の Animator を使う事により複数のアニメーションを制御する事 がきます。
ss04.png

アニメーションさせたいオブジェクトのAnimationClipにアニメーションの要素を追加する

他の画面に遷移すると表示が隠れてしまうので、また Add Property ボタンを押して、 Anchored Position をプラスボタンで追加します。今回は、uGUI のボタンにをアニメー ションさせるのでアンカーポジションを使います。
ss05.png

アニメーションのキーフレームを設定する

追加すると1秒後のフレームが、0フレームと同じ値でコピーされ作成されます。ちな みに Samples の数字フレーム分を 1 秒でアニメーション指定するイメージになります。 default は 60 なので 1 秒 60 フレームでアニメーションさせるイメージです。
ss06.png

これは、この AnimationClip の座標していを意味していて、一秒間掛け右から左の指定 座標に移動する事を意味しています。なので 0 フレーム目の Anchored Position.y の値 に 280 を入れると上の方から真ん中に移動する Animation Clip を作成することになります。
ss07.png

Animation ウィンドーの録音ボタンを解除し、Unity の再生をするとボタンが上からし たに繰り返しアニメーションします。
ss08.png

う~ん。でも、ボタンのアニメーションが繰り返されてしまってボタンを押す事が出来 にくいです。これでは、いつボタンを押していいのかユーザーにもわからないので、こんどは、止まって欲しいので、止まっているだけのアイドリング用アニメーションを作 る事にしましょう。
Animation Clip 名の所を選択して、[Create New Clip] を選択してください。
Animation Clip 名を入れるダイアログ画面に今度は、Idling@ButtonAnime という名前 で Animation Clip を作成しましょう。
ss09.png

ss10.png

AnimationClip同士の遷移を設定する

2つ目の Animation Clip を作成すると Animator ウィンドーに作成した Animation Clip が作成されます。ただし、1つ目は自動的に Animation Clip を呼び出すのですが、2つ 目からは手動で遷移用線を結ばな無ければ、動いてくれません。Start@ButtonAnime の Animation Clip を選択し、右クリックの Make Transion で遷移を Idling@ButtonAnimeに接続します。
ss11.png

Unity の実行ボタンで実行すると Start@ButtonAnime から Idling@ButtonAnime へア ニメーションが遷移し、アイドリングでループ状態になっている事を確認できます。
ss12.png

ss13.png

スクリプトを作成し、ボタンをクリックしたらアニ メーションが呼び出されるようにする

上からボタンがやって来て真ん中で止まるようになりました。どうせならボタンを押すとそのボタンもアニメーションさせましょう。ボタンを押すとそのボタンがアニメーションするようにするには、ボタンが押されたタイミングでアニメーションを呼び出すスクリプトと、その呼び出されるAnimatino Clipの2つが必要です。

それでは、ボタンが押されたときのAnimation Cplipから作成していきましょう。動き的には、ツムツムのボタンをイメージしています。Create New Cplipを選択し、ButtonClick@Animationと名前をつけてsaveしましょう。
スクリーンショット 2015-07-15 23.08.52.png

Add Propertyボタンを押し、今度は、Rect TransformのScaleを追加します。
スクリーンショット 2015-07-15 23.10.50.png

とりあえず、10フレーム目に移動し、xとyのスケールを1.5倍にしてみましょう。
スクリーンショット 2015-07-15 23.15.09.png

スクリーンショット 2015-07-15 23.16.32.png

20フレームに移動し、xとyを元の1倍に戻します。0フレーム目の値を全部コピーしてみましょう。
スクリーンショット 2015-07-15 23.19.20.png

キー値のコピーは全選択のCTL+c or Command+c,CTL+v or Command+vが使えます。
スクリーンショット 2015-07-15 23.20.14.png

とりあえず60フレームをこの繰り返しで埋めてみます。
スクリーンショット 2015-07-15 23.23.22.png

キー値を全体的に移動させて、30フレームで完結する用にしてみました。
スクリーンショット 2015-07-15 23.25.14.png

次にCubeのAnimation Controllerをダブルクリックして、Animatorタブを表示させます。
スクリーンショット 2015-07-15 23.34.00.png

Animatorタブ画面の格子のところを右クリックし、Create StateのEmptyを作成します。
スクリーンショット 2015-07-15 23.34.43.png

New StateをButtonClickに名称変更し、Motionに作成したAnimation Clipを割り当てます。
スクリーンショット 2015-07-15 23.37.34.png

スクリーンショット 2015-07-15 23.38.08.png

アニメーションのステート設定するのでidling@Animationを右クリックし、Make Transitionを選択して、ButtonClickに接続します。
スクリーンショット 2015-07-15 23.42.45.png

スクリーンショット 2015-07-15 23.43.09.png

作成したAnimation Clipを動作させたら、アイドルのアニメーションに戻る制御を同じ様に実装します。
スクリーンショット 2015-07-20 18.57.40.png

この状態で、Unityを実行するとつなげた線とAnimation Clipが遷移して行くのがわかります。
スクリーンショット 2015-07-20 19.06.24.png

でもこのままでは、作ったアニメーションを繰り返すだけになってしまいます。
Animatorは、パラメータで制御できるので、パラータを追加しましょう。
スクリーンショット 2015-07-20 19.37.42.png

ParmetersをTriggerで追加するとアニメーションの終わりにもとに戻ります。名前はあとでスクリプトなどで使うのでちゃんと設定しましょう。
スクリーンショット 2015-07-20 19.45.30.png

スクリプトでトリガーイベントを発生させて、AnimationClipを制御する

ここからの制御を実装して行く方法として、わたくしの勉強不足でスクリプトから制御する方法しか思い浮かびません。スクリプトで、ボタンをクリックしたときのアニメーションとホワイトアウト的なアニメーションを追加し、スクリプトで制御します。

ClickActionManager.cs

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ClickActionManager : MonoBehaviour {

    public Animator anim;
    public GameObject UIbackgroundImage;

    public void AnimationStart() {
                //AnimatorのTriggerをtrueにする
        anim.SetBool ("onClick", true);

        StartCoroutine(WaitForButtonAnime(1.0f));
    }
        //指定秒数後に
    IEnumerator WaitForButtonAnime(float waitTime) {
        yield return new WaitForSeconds(waitTime);
                //バックグラウンドをホワイトアウトするゲームをオブジェクトを呼び出す
        UIbackgroundImage.gameObject.SetActive (true);

        StartCoroutine(WaitForNextScene(1.0f));
    }
        //指定秒数後に
    IEnumerator WaitForNextScene(float waitTime) {
        yield return new WaitForSeconds(waitTime);
        Application.LoadLevel (Application.loadedLevel + 1);
    }

}

それぞれのゲームオブジェクトに対して、インスペクターで設定する

というスクリプトを作り必要要素をアタッチします。
スクリーンショット 2015-07-23 22.28.20.png

これで旨く行けば、キャンディークラッシュのボタンを押したときのアニメーションの後に画面がホワイトアウトして、次のシーンへ切り帰ります。

スクリーンショット 2015-07-24 16.57.34.png

スクリーンショット 2015-07-24 16.57.47.png

スクリーンショット 2015-07-24 16.59.20.png

これを利用したゲームを#ゆにジャムで作成しました。もし良かったら遊んでね。
http://unitygameuploader.jpn.org/game/5569.html

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12