MRが楽しい

MRやVRについて学習したことを書き残す

Unityで基本変形(移動・回転・スケール)のアニメーションを作成する その4(アニメーションを任意のタイミングで実行する)

本日は Unity の技術調査枠です。
基本変形(移動・回転・スケール)のアニメーションを作成する方法についてまとめます。
前回記事の続きになります。
bluebirdofoz.hatenablog.com
今回はアニメーションを任意のタイミングで実行する方法についてです。

アニメーション任意のタイミングで実行する

指定のタイミングでアニメーションを実行するにはアニメーションコントローラで State を定義する必要があります。
前回記事で作成したアニメーションコントローラを編集するため、controller ファイルを選択して[Animator]画面を開きます。
f:id:bluebirdofoz:20180930223108j:plain

前回開設した通り、自動作成されたアニメーションコントローラにはアニメーションへの自動遷移が既に設定されています。
アニメーションを任意のタイミングで実行するため、以下の通りコントローラを修正します。
1.最初はアニメーション無しの状態に遷移する
2.トリガーに応じてアニメーションの状態に遷移する

まず、最初に遷移するアニメーション無しの状態を作成します。
作成済みのアニメーション状態を 右クリック -> Delete で削除します。
f:id:bluebirdofoz:20180930223115j:plain

状態が何もないところで 右クリック -> Create State -> Empty で新しい状態を作成します。
f:id:bluebirdofoz:20180930223123j:plain

State が作成出来たら分かりやすい名前に変更します。今回は[EntryState]としました。
Motion は[None]のままにしておきます。
f:id:bluebirdofoz:20180930223130j:plain

同じ手順でもう一つ State を作成します。
こちらは任意のタイミングで実行したいアニメーションを設定します。
先ほど削除した[CubeAnimation]と同じように設定しました。
f:id:bluebirdofoz:20180930223140j:plain

次にアニメーションを実行するトリガーを作成します。
[Animator]画面の[Parameters]タブを開きます。[+]ボタンから[Trigger]を選択し、追加します。
f:id:bluebirdofoz:20180930223152j:plain

作成されたトリガーの名称を設定します。
ここで指定した名称はコード上で利用するため、綴り誤りなどがないよう気を付けます。
今回は[AnimTrigger]としました。
f:id:bluebirdofoz:20180930223159j:plain

State 間を結ぶ遷移を作成します。
[EntryState]上で右クリックして[Make Transition]を選択します。
遷移を示す線が表示されるので[CubeAnimation]と接続します。
f:id:bluebirdofoz:20180930223209j:plain

作成したトランザクションの線を選択し、遷移のトリガーを設定します。
[+]ボタンをクリックし、先ほど作成した[AnimTrigger]を設定します。
f:id:bluebirdofoz:20180930223216j:plain

これでアニメーションコントローラの修正は完了しました。
次に任意のタイミングでトリガーをキックするスクリプトを Create -> C# Script で作成します。
f:id:bluebirdofoz:20180930223224j:plain

以下のようなキーボードの[Z]キーでトリガーを実行するコードを作成しました。
・TriggerKick.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// スクリプトを追加するオブジェクトに必要なコンポーネントの列記
[RequireComponent(typeof(Animator))] 
public class TriggerKick : MonoBehaviour {
    /// <summary>
    /// Animatorコンポーネント
    /// </summary>
    private Animator animator;

    /// <summary>
    /// 起動時の初期化
    /// </summary>
    void Start () {
        // Animatorコンポーネントの取得
        animator = GetComponent<Animator>();
    }

    /// <summary>
    /// 定期実行
    /// </summary>
    void Update()
    {
        // Zキー押下で実行する
        if (Input.GetKey(KeyCode.Z))
        {
            // トリガーを実行する
            animator.SetTrigger("AnimTrigger");
        }
    }
}

スクリプトをアニメーションコントローラが設定された Animator コンポーネントを持つオブジェクトに設定します。
f:id:bluebirdofoz:20180930223231j:plain

以上で設定は完了です。
Unity の[再生]ボタンをクリックし、動作確認を行ってください。
キーボードの[Z]キーを押下したタイミングでアニメーションが開始するようになります。
f:id:bluebirdofoz:20180930223239j:plain

コントローラの状態は Animator コンポーネントを設定したオブジェクトごとに保持されます。
前回同じコントローラを流用した別オブジェクトはスクリプトを設定していないため、静止したままです。
f:id:bluebirdofoz:20180930223250j:plain