【Unity】Animator.SetFloatとは?アニメーションのパラメーターの値を変更できる

Animator.SetFloatとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのSetFloatがどういうものか知りたい!」

「アニメーションのSetFloatの使い方が分からない!」

というお悩みの方に向けた内容となっています。

Unityでは、アニメーションでパラメーターを作成して、そのパラメーターの値でアニメーションの再生速度やモーションタイムなどを変化できるという仕組みがあります。

この仕組みを使う際に、よく使われるのがSetFloatというメソッドで、float型のパラメーターの値をスクリプトから変更することができるようになります。

簡単にいえば、SetFloatメソッドを使うことで、アニメーションの様々な設定を動的に変化させることができるようになります。

そこで、このページでは、UnityのAnimatorコンポーネントで使われるSetFloatメソッドについて、どんなメソッドなのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Animator.SetFloatとは?

まずは、Animator.SetFloatメソッドについて、どういうものなのかを紹介していきます。

アニメーションのfloat型パラメーターの値を変更できる

SetFloatメソッドとは、AnimatorControllerで作成したfloat型のパラメーターの値を変更することができるメソッドです。

そもそもAnimatorControllerとは、様々なアニメーションの切り替えや遷移条件の指定、またアニメーションの動きに対しての設定などを行うことができる機能です。

このAnimatorController上では、複数のパラメーターを作成することができ、そのパラメーターを使ってそれぞれのアニメーションの設定や遷移条件などを変更することができます。

そして、SetFloatメソッドは、このパラメーターの中でも、float型のパラメーターの数値をスクリプトから変更することができるメソッドになっています。

アニメーションの再生速度などを動的に変化させたい場合に使う

SetFloatメソッドを使ってパラメーターの値を変更させることで、アニメーションの動きを動的に変化させることができます。

AnimatorController上では、パラメーターを使うことで、

  • アニメーションの再生速度
  • アニメーションのモーションタイム
  • アニメーションの反転
  • アニメーションのループ時の開始位置
  • アニメーションの切り替え時の遷移

などの設定を変更させることができるようになっています。

もう少し具体的に言うと、AnimatorController上にあるそれぞれのAnimationStateで上記の設定を行うことができますが、スクリプトからは直接値の変更処理を行うことができません。

その代わりに、パラメーターを経由することで変更処理を行えるようになります。

そして、SetFloatメソッドを使うことで、float型のパラメーターをスクリプトから操作することができるようになるので、様々なアニメーションの設定を動的に変化させることができるようになります。

Animator.SetFloatの使い方

ここからは、Animator.SetFloatメソッドの使い方について紹介していきます。

引数でパラメーター名や値を設定する

SetFloatメソッドを使う際は、いくつか書き方がありますが、以下のようにパラメーター名と値を指定して使うことで、パラメーターの値を変更することができます。

Animator.SetFloat(name, value);

name:パラメーターの名称(string型)
value:新しいパラメーターの値(float型)

第1引数に、作成したパラメーターの名称string型で指定します。

ちなみに、第1引数はこのstring型以外にも、パラメーターIDを使ってint型で指定することもできます。

そして第2引数に、そのパラメーターに設定したい値float型で指定してあげます。

アニメーションの再生速度をスクリプトから変更する処理

ここからは、実際にSetFloatメソッドを使って、アニメーションの再生速度を変更する処理を作っていきます。

以下の2Dアニメーションを使って、説明していきます。

float型のパラメーターを作成する

まずは、AnimatorControllerでfloat型のパラメーターを作成していきます。

パラメーターを作成する際は、上部にある「Parameters」を押して、+ボタンから「Float」を選択します。

すると、以下のようにパラメーターが作成されるので、パラメーターの名称を設定しておきます。

ここでは、「AnimeSpeed」という名前で設定しました。

再生速度にパラメーターの値を掛け合わせる

次に、先ほど作成したパラメーターを使って、再生速度の値を操作できるようにしていきます。

再生速度を変更させたいAnimationStateを選択します。

インスペクターウィンドウからSpeedの項目にある「Parameter」にチェックを入れておきます。

そして、Speedの下にある「Multiplier」という項目で、プルダウンから作成した「AnimeSpeed」を選択します。

これで、アニメーションの再生速度に対して、設定したパラメーターの値が掛け合わさって(乗算)速度が決定されるようになります。

つまり現時点では、Speedの値の「1」とAnimeSpeedのパラメータ値の「0」が掛け合わさって、アニメーションの速度は「0」の状態になっています。

SetFloatメソッドでパラメーターの値を変更させる

あとは、スクリプトからSetFloatメソッドを使ってパラメーターの値を変更させていきます。

今回は、

  • スペースキーを押したら再生速度が2倍
  • エンターキーを押したら再生速度が1/2
  • エスケープキーを押したら再生速度が通常に戻る

という処理を作ってみます。

以下のスクリプトを先ほどアニメーションの設定をしていたオブジェクトに紐づけておきます。

using UnityEngine;

public class PlayerAnimation : MonoBehaviour
{
    Animator animator;
    float speed = 1f;   // アニメーションの速度を決める変数
    float preSpeed;     // 過去の速度を取得

    void Start()
    {
        animator = GetComponent<Animator>();    // Animatorコンポーネントを取得する
        animator.SetFloat("AnimeSpeed", speed); // 初期値をパラメーターに設定する
        preSpeed = speed;   // 現在の速度を代入しておく
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            speed *= 2; // 2倍にする処理
        }

        if (Input.GetKeyDown(KeyCode.Return))
        {
            speed /= 2; // 1/2にする処理
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            speed = 1;  // 元に戻す処理
        }

        // 変数の値が変化した場合
        if (speed != preSpeed)
        {
            animator.SetFloat("AnimeSpeed", speed); // speedの値をパラメーターに設定する
            preSpeed = speed;   // 現在の速度を代入しておく
        }
    }
}

SetFloatを使う際は、事前にAnimatorコンポーネントを取得しておく必要があるので、Startメソッドの11行目で、GetComponentを使って取得しています。

また、同じStartメソッドの中の12行目で、SetFloatメソッドを使ってパラメーターの値にスクリプト内で宣言したspeed変数を入れて初期化しています。

そして、

  • 20行目でスペースキーを押した場合にspeed変数を2倍にする処理
  • 25行目でエンターキーを押した場合にspeed変数を1/2にする処理
  • 30行目でエスケープキーを押した場合にspeed変数に「1」を代入する処理

を行い、speed変数の値が変わった際の36行目でSetFloatメソッドを使いパラメーターの値を変更しています。

これでゲームを実行してみると、

キー操作によってアニメーションの速度を変えることができるようになりました。

まとめ

このページでは、Unityのアニメーションで使うSetFloatメソッドについて、どんなメソッドなのか、また使い方までをまとめていきましたが、いかがでしたでしょうか?

SetFloatメソッドは、アニメーションで使うfloat型のパラメーターの値を変更することができるメソッドです。

このSetFloatメソッドを使うことで、スクリプトからパラメーターの値を変更できるので、アニメーションの再生速度やモーションタイムを操作することができるようになります。

特に、数値指定する場合に、float型のパラメータを使うことが多いので、動的変化を作る場合はSetFloatメソッドを使っていきましょう。

最後までお読みいただきまして、ありがとうございました!

コメント