本日は Unity の技術調査枠です。
基本変形(移動・回転・スケール)のアニメーションを作成する方法についてまとめます。
前回記事の続きになります。
bluebirdofoz.hatenablog.com
今回はアニメーションを任意のタイミングで実行する方法についてです。
アニメーション任意のタイミングで実行する
指定のタイミングでアニメーションを実行するにはアニメーションコントローラで State を定義する必要があります。
前回記事で作成したアニメーションコントローラを編集するため、controller ファイルを選択して[Animator]画面を開きます。
前回開設した通り、自動作成されたアニメーションコントローラにはアニメーションへの自動遷移が既に設定されています。
アニメーションを任意のタイミングで実行するため、以下の通りコントローラを修正します。
1.最初はアニメーション無しの状態に遷移する
2.トリガーに応じてアニメーションの状態に遷移する
まず、最初に遷移するアニメーション無しの状態を作成します。
作成済みのアニメーション状態を 右クリック -> Delete で削除します。
状態が何もないところで 右クリック -> Create State -> Empty で新しい状態を作成します。
State が作成出来たら分かりやすい名前に変更します。今回は[EntryState]としました。
Motion は[None]のままにしておきます。
同じ手順でもう一つ State を作成します。
こちらは任意のタイミングで実行したいアニメーションを設定します。
先ほど削除した[CubeAnimation]と同じように設定しました。
次にアニメーションを実行するトリガーを作成します。
[Animator]画面の[Parameters]タブを開きます。[+]ボタンから[Trigger]を選択し、追加します。
作成されたトリガーの名称を設定します。
ここで指定した名称はコード上で利用するため、綴り誤りなどがないよう気を付けます。
今回は[AnimTrigger]としました。
State 間を結ぶ遷移を作成します。
[EntryState]上で右クリックして[Make Transition]を選択します。
遷移を示す線が表示されるので[CubeAnimation]と接続します。
作成したトランザクションの線を選択し、遷移のトリガーを設定します。
[+]ボタンをクリックし、先ほど作成した[AnimTrigger]を設定します。
これでアニメーションコントローラの修正は完了しました。
次に任意のタイミングでトリガーをキックするスクリプトを Create -> C# Script で作成します。
以下のようなキーボードの[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 コンポーネントを持つオブジェクトに設定します。
以上で設定は完了です。
Unity の[再生]ボタンをクリックし、動作確認を行ってください。
キーボードの[Z]キーを押下したタイミングでアニメーションが開始するようになります。
コントローラの状態は Animator コンポーネントを設定したオブジェクトごとに保持されます。
前回同じコントローラを流用した別オブジェクトはスクリプトを設定していないため、静止したままです。