【Unity】アニメーションのスピードをスクリプトで変更する

投稿者: | 2021-02-16

スクリプトでステートごとにアニメーションのスピードを変更してみました。

まずFloat型のパラメーターを作って、スピードを変えたいステートを選択してインスペクタを見ます。

Speed Multiplierの右端のチェックを入れると、ドロップダウンメニューからそのパラメーターを選択できます。

これでパラメーターの値がスピードに掛け合わされます。後はパラメーターの値をスクリプトで変更するだけです。

using UnityEngine;
using UnityEngine.UI;

public class ChangeSpeed : MonoBehaviour
{
    [SerializeField] Text text;
    Animator animator;
    float speed = 1f;
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
        text.text = $"Speed = {speed.ToString("F1")}";
    }

    // Update is called once per frame
    void Update()
    {
        // MotionTimeを操作
        // animator.SetFloat("MotionTime", Time.time * 0.1f);

        // スピードを上げる
        if(Input.GetKeyDown(KeyCode.W))
        {
            speed += 0.2f;
            animator.SetFloat("Speed", speed);
            text.text = $"Speed = {speed.ToString("F1")}";
        }
        // スピードを下げる
        else if(Input.GetKeyDown(KeyCode.S))
        {
            speed -= 0.2f;
            animator.SetFloat("Speed", speed);
            text.text = $"Speed = {speed.ToString("F1")}";
        }
        // ミラーをオンオフ
        else if (Input.GetKeyDown(KeyCode.M))
        {
            animator.SetBool("Mirror", !animator.GetBool("Mirror"));
        }
    }
}

これで簡単にスピードを変更できました。

他にもMirrorで左右反転させたり、Cycle Offsetでアニメーションの開始位置を変えたりできます。

Motion Timeでは、アニメーションの再生ヘッドの位置を設定できます。なので、値を変えない間は静止しています。MirrorだけBool型を使います。

パラメーターを新規作成するには、アニメーターウィンドウのParametersタブをクリックして、+ボタンから型を選びます。

コメントを残す

メールアドレスが公開されることはありません。