Unityアニメーションシステムの使用

基本的な使い方

Unityアニメーションシステムは、ステートマシンを使用し、各アニメーションを状態として扱い、ユーザーの入力に応じてステートマシンの条件を変更し、特定の条件を使用して状態の切り替えを制御し、アニメーションの変更を実現します。次の4つの手順は、アニメーションシステムの使用方法を示しています。

  1. プロジェクトに新しいアニメーターコントローラーを作成し、キャラクターのアニメーターコンポーネントに割り当てます。
    ここに写真の説明を挿入
  2. [ウィンドウ]-> [アニメーター]ウィンドウを開き、アニメーションをウィンドウにドラッグアンドドロップして、アニメーションの状態を生成します。
    ここに写真の説明を挿入
  3. アニメーション状態間の遷移および遷移パラメータを設定し、[終了時間あり]のチェックを外すことに注意してください。デフォルトでは、アニメーション間の遷移は[終了時間あり]をオンにします。これは、遷移後のアニメーションが、アニメーションの終了後に自動的に再生されることを意味します。トランジションパラメータを設定しているので、条件がトランジションを満たしたときに、あるアニメーションから別のアニメーションへのトランジションが実現されます。したがって、ここで「終了時間あり」をチェックする必要はありません。
    ここに写真の説明を挿入ここに写真の説明を挿入
  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);
        }
    }
}

中級使用

ターンラン

この段階では、左右に曲がったり、前方に走ったりするなど、さまざまな方向に走るアニメーションを実装します。

  1. アニメーションの状態、アニメーションの遷移、および遷移パラメーターを設定します。
    ここに写真の説明を挿入
  2. コードを書く。
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は、任意の状態を表し、アニメーションシステムの現在のレイヤーの任意の状態を表し、さまざまな方向に実行するアニメーション切り替えの継続性を完了するために使用できます。

  1. アニメーションの状態、トランジション、トランジションのパラメータを設定します。
    ここに写真の説明を挿入
  2. コードを記述します。遷移パラメータは変更されていないため、コードを調整する必要はありません。
    ここにはまだいくつかの問題があります。キャラクターが実行されるとフリーズします。これには、アニメーション遷移での混合時間の比率を調整する必要があります。この記事では詳しく説明しません。
    ここに写真の説明を挿入

高度な使用法

ブレンドツリー

このパートでは、ブレンドツリーを使用して、さまざまな方向に走るキャラクターのアニメーションを実現します。

  1. Animatorウィンドウで、右クリック->状態の作成->新しいブレンドツリーからブレンドツリーを作成します。
  2. [ベースレイヤー]-> [ブレンドツリー]に移動し、インスペクターパネルで+記号を押して、3つのモーションフィールドの追加を追加し、3つのモーションフィールドにRun、RunLeft、およびRunRightアニメーションを割り当てます。
    ここに写真の説明を挿入
  3. マウスを使用して[アニメーター]ウィンドウで[ブレンド]の値を調整すると、インスペクターパネルのプレビューウィンドウでキャラクターのアニメーションの変化を確認できます。
    ここに写真の説明を挿入
  4. ベースレイヤーで、アニメーション状態の名前をBlend TreeからRunTreeに変更し、パラメーターの名前をBlendからRunTreeに変更します。Runパラメータで制御して、アイドル状態からRunTree状態への遷移を増やします。
  5. コードを変更します。
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);
        }
    }
}

その他のトピック

カーブ
アニメーションシステムイベント

おすすめ

転載: blog.csdn.net/Abecedarian_CLF/article/details/90544293