(この記事の使用環境: Unity5.4.2f2 Personal、Windows10


今回は、Assetに含まれているAnimationClipの動きをまとめて確認する仕組みを作ってみました。

動きはこんな感じ。


使い方その1。
Hierarchy直下には空のゲームオブジェクトを置き、モデルはその下にぶら下げます。空のゲームオブジェクトにはモデルをスクリプトをアタッチしておきます。
SnapCrab_NoName_2017-1-8_14-27-24_No-00

使い方その2。
モデルには、AnimatorOverrideControllerをアタッチしておきます。
SnapCrab_NoName_2017-1-8_14-31-21_No-00

使い方その3。
AnimatorOverrideControllerが参照するAnimatorContollerには、空のAnimationClipがセットされたAnimatorContollerを指定し、各モーションの枠に、そのモデルで動かしたいAnimationClipをセットします。
SnapCrab_NoName_2017-1-8_14-34-35_No-00
 
使い方その4。
シーンを再生すると、冒頭で紹介したとおり、モーションを連続して確認することができます。

この仕組みを使うと、AnimatorContoller等の作成を毎回行わなくて済むので、だいぶラクチンになると思います。

それでは作り方。

作り方その1。
Projectビューで、Create > Animation で空のAnimationClipを作ります。連続して確認したい数だけ用意します。今回の例では10個作っています。
SnapCrab_NoName_2017-1-8_14-40-27_No-00

作り方その2。
ベースとなるAnimatorContollerを作ります。今回の例では「BaseAC_10」という名前にしています。Trigger「Next」と「Prev」を作っておきます。さきほど作ったAnimationClipをAnimatorContoller上に配置して、Transitionで輪になるようにつなげます。
SnapCrab_NoName_2017-1-8_14-46-48_No-00

作り方その3。
各Transitionでは、Has Exit Timeのチェックを外して、モーションが終了するのを待たずに前後のモーションへ遷移できるようにしておきます。Conditionsには、順回りでは「Next」を、逆回りでは「Prev」を指定しておきます。
SnapCrab_NoName_2017-1-8_14-48-45_No-00

作り方その4。
親のゲームオブジェクトにあたっちするスクリプトの中身はこんな感じ。キー操作にあわせてAnimatorのNextまたはPrevトリガーを引きます。

using UnityEngine;
using System.Collections;

public class MotionTestFromParent : MonoBehaviour {

    Animator anim;

    private void Start ()
    {
        anim = GetComponentInChildren<Animator> ();         // 子オブジェクトのAnimatorコンポーネントを取得する
    }

    private void Update ()
    {
        if (Input.GetKeyDown (KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
        {
            anim.SetTrigger ("Next");                       // 次のモーションを再生する
        }
        if (Input.GetKeyDown (KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S))
        {
            anim.SetTrigger ("Prev");                       // ひとつ前のモーションを再生する
        }
    }
}


今回は以上です。