スクリプトでステートごとにアニメーションのスピードを変更してみました。
まず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タブをクリックして、+ボタンから型を選びます。