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