animation
Unity
Mecanim

UnityのMecanimで個別のAnimationを一時停止する

More than 1 year has passed since last update.

基本的にここで話されていることの翻訳なんですが、UnityのMecanimでアニメーションを行っている時に一時停止するには、animator.speed = 0とすればできますが、この場合Animator配下にあるアニメーション全てが一時停止してしまうため、たとえばLayerを分けてAnimationを複数実行している場合に、個別で停止することができません。個別停止を一発で実現するようなAPIは現時点ではなく、ややハッキーな方法を取る必要があります。

  1. AnimatorのパラメータにAnimationスピードを表すFloat型のパラメータを追加します。名前は何でもよいですが、ここではMovingSpeedとします。デフォルトの値は1.0にします。
    スクリーンショット_2017-07-22_午前1_07_28.png

  2. 一時停止したいAnimationを選択して、Inspectorに表示されるMultiplierの欄でParameterにチェックを入れ、Multiplierで先程作成したパラメータを選択します。
    スクリーンショット_2017-07-22_午前1_08_54.png

  3. Scriptで、一時停止したいタイミングで、以下のようにパラメータ値を変更します。

    animator.SetFloat("MovingSpeed", 0.0f); // 一時停止

    再開したいタイミングで、同様にパラメータ値を変更します。

    animator.SetFloat("MovingSpeed", 1.0f); // 再開

このようにAnimationの幾つかの設定値はパラメータと連動させることができるので、一見プログラムからできなさそうなことでも実現可能です。