基本的な使い方
Unityアニメーションシステムは、ステートマシンを使用し、各アニメーションを状態として扱い、ユーザーの入力に応じてステートマシンの条件を変更し、特定の条件を使用して状態の切り替えを制御し、アニメーションの変更を実現します。次の4つの手順は、アニメーションシステムの使用方法を示しています。
- プロジェクトに新しいアニメーターコントローラーを作成し、キャラクターのアニメーターコンポーネントに割り当てます。
- [ウィンドウ]-> [アニメーター]ウィンドウを開き、アニメーションをウィンドウにドラッグアンドドロップして、アニメーションの状態を生成します。
- アニメーション状態間の遷移および遷移パラメータを設定し、[終了時間あり]のチェックを外すことに注意してください。デフォルトでは、アニメーション間の遷移は[終了時間あり]をオンにします。これは、遷移後のアニメーションが、アニメーションの終了後に自動的に再生されることを意味します。トランジションパラメータを設定しているので、条件がトランジションを満たしたときに、あるアニメーションから別のアニメーションへのトランジションが実現されます。したがって、ここで「終了時間あり」をチェックする必要はありません。
- コードを使用して、アニメーション状態間の遷移を制御します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCtroller : MonoBehaviour
{
private Animator anim;
private void Start()
{
anim = GetComponent<Animator>();
}
private void Update()
{
if(Input.GetButtonDown("Vertical"))
{
anim.SetBool("Run", true);
}
else
{
anim.SetBool("Run", false);
}
}
}
中級使用
ターンラン
この段階では、左右に曲がったり、前方に走ったりするなど、さまざまな方向に走るアニメーションを実装します。
- アニメーションの状態、アニメーションの遷移、および遷移パラメーターを設定します。
- コードを書く。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCtroller : MonoBehaviour
{
private Animator anim;
private void Start()
{
anim = GetComponent<Animator>();
}
private void Update()
{
anim.SetBool("Run", false);
anim.SetBool("RunLeft", false);
anim.SetBool("RunRight", false);
if (Input.GetKey(KeyCode.W))
anim.SetBool("Run", true);
if (Input.GetKey(KeyCode.A))
anim.SetBool("RunLeft", true);
if (Input.GetKey(KeyCode.D))
anim.SetBool("RunRight", true);
}
}
この方法では、異なるキーを押し続けると、キャラクターは異なる方向に走りますが、実行プロセス中に問題が見つかります。キャラクターは、異なる方向への実行を切り替えるときに直立するプロセスを経て、アニメーションが表示されます。それは首尾一貫していません。
アニメーションに一貫性がないのはなぜですか?左に走る、前に走る、右に走るの間に直接の遷移がないため、それらはすべて遷移としてアイドル状態を通過する必要があり、異なる方向に到達する前にキャラクターを直立させます実行中、この問題を解決するには、さまざまな方向に実行しているアニメーション状態に直接遷移を追加する必要があります。
AnyStateの使用
Any Stateは、任意の状態を表し、アニメーションシステムの現在のレイヤーの任意の状態を表し、さまざまな方向に実行するアニメーション切り替えの継続性を完了するために使用できます。
- アニメーションの状態、トランジション、トランジションのパラメータを設定します。
- コードを記述します。遷移パラメータは変更されていないため、コードを調整する必要はありません。
ここにはまだいくつかの問題があります。キャラクターが実行されるとフリーズします。これには、アニメーション遷移での混合時間の比率を調整する必要があります。この記事では詳しく説明しません。
高度な使用法
ブレンドツリー
このパートでは、ブレンドツリーを使用して、さまざまな方向に走るキャラクターのアニメーションを実現します。
- Animatorウィンドウで、右クリック->状態の作成->新しいブレンドツリーからブレンドツリーを作成します。
- [ベースレイヤー]-> [ブレンドツリー]に移動し、インスペクターパネルで+記号を押して、3つのモーションフィールドの追加を追加し、3つのモーションフィールドにRun、RunLeft、およびRunRightアニメーションを割り当てます。
- マウスを使用して[アニメーター]ウィンドウで[ブレンド]の値を調整すると、インスペクターパネルのプレビューウィンドウでキャラクターのアニメーションの変化を確認できます。
- ベースレイヤーで、アニメーション状態の名前をBlend TreeからRunTreeに変更し、パラメーターの名前をBlendからRunTreeに変更します。Runパラメータで制御して、アイドル状態からRunTree状態への遷移を増やします。
- コードを変更します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCtroller : MonoBehaviour
{
private Animator anim;
private void Start()
{
anim = GetComponent<Animator>();
}
private void Update()
{
anim.SetBool("Run", false);
if(Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.D))
{
anim.SetBool("Run", true);
float dir = (Input.GetAxis("Horizontal") + 1) / 2;
anim.SetFloat("RunTree", dir);
}
}
}
その他のトピック
カーブ
アニメーションシステムイベント