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

投稿者: | 2021-02-16

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

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

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

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

  1. using UnityEngine;
  2. using UnityEngine.UI;
  3.  
  4. public class ChangeSpeed : MonoBehaviour
  5. {
  6. [SerializeField] Text text;
  7. Animator animator;
  8. float speed = 1f;
  9. // Start is called before the first frame update
  10. void Start()
  11. {
  12. animator = GetComponent<Animator>();
  13. text.text = $"Speed = {speed.ToString("F1")}";
  14. }
  15.  
  16. // Update is called once per frame
  17. void Update()
  18. {
  19. // MotionTimeを操作
  20. // animator.SetFloat("MotionTime", Time.time * 0.1f);
  21.  
  22. // スピードを上げる
  23. if(Input.GetKeyDown(KeyCode.W))
  24. {
  25. speed += 0.2f;
  26. animator.SetFloat("Speed", speed);
  27. text.text = $"Speed = {speed.ToString("F1")}";
  28. }
  29. // スピードを下げる
  30. else if(Input.GetKeyDown(KeyCode.S))
  31. {
  32. speed -= 0.2f;
  33. animator.SetFloat("Speed", speed);
  34. text.text = $"Speed = {speed.ToString("F1")}";
  35. }
  36. // ミラーをオンオフ
  37. else if (Input.GetKeyDown(KeyCode.M))
  38. {
  39. animator.SetBool("Mirror", !animator.GetBool("Mirror"));
  40. }
  41. }
  42. }

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

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

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

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

コメントを残す

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