【Unity】アニメーションクリップにカーブを追加する

投稿者: | 2021-06-18

インポート設定でアニメーションクリップにカーブを追加して、アニメーションとエフェクトを連動させてみました。

カーブを追加する

まず、アニメーションを付けたCubeをインポートして、そのFBXファイルを選択し、インスペクタのAnimationタブを見ました。

Clipsでカーブを付けたいアニメーションクリップを選択して、Curvesセクションを開き、+ボタンでカーブを追加します。

新しいカーブが表示されるので、緑の線が描かれた部分を左クリックすると、カーブを編集するウィンドウがでます。

カーブを編集する

このウィンドウを見ると、カーブが一直線で、値が0から変化しないことがわかります。

プリセットも用意されています。

0の直線から開始してみます。値が0でない場合は、すべてのキーを選択して、右クリックします。

Edit Keys..を選択すると、キーごとに時間と値を入力できます。複数選択しているので、値だけ0に変えます。

値が0になったので、カーブの中央あたりをダブルクリックしてキーを追加しました。

Cubeが素早く動いているときのエフェクトを目立たせたいので、その地点を1にしました。

これでカーブが山なりになりました。止まっているときは0にしたいので、左端に値が0の範囲を作ります。キーを追加して値を0にすると、カーブが曲がって0にとどまっていない部分があります。

このキーを右クリックしてFlatを選択すると、まっすぐになりました。

その下のプレビューでCubeが動き出したり止まったりするタイミングを確認できます。

Curvesセクションでは、カーブの名前を変更できます。

また、Applyする前に、Loop Timeのチェックを入れて、アニメーションがループするようにしました。

アニメーターコントローラー

インポートしたCubeをシーンに配置して、Animatorコンポーネントを付けました。また、アニメーターコントローラーを新規作成して、このAnimatorコンポーネントにアタッチしました。

アニメーターコントローラーでは、カーブを追加したアニメーションをドラッグアンドドロップしてデフォルトステートを作り、編集したカーブと同じ名前のFloat型のパラメーターを追加します。

カーブと同名にすると、このパラメーターにカーブの値が設定されます。なので、GetFloatメソッドを使って、カーブの値を取得できます。

VFXグラフを作る

アニメーションと連動させるための、新しいVFXグラフを作りました。

このVFXグラフでは、「Conform to Sphere」ブロックにつなぐ2つのプロパティがあります。一つはStick Distanceに使うもので、もう一つはそれを伸縮させるための0~1の範囲の値です。

後者のパラメーターに、カーブの値をセットします。

このVFXグラフがアタッチされた、Visual Effectオブジェクトを作り、Cubeの上部に置きました。ライフタイムの値もオーバーライドしておきます。

カーブの値を取得する

2つのオブジェクトを空のゲームオブジェクトの子にして、この空のゲームオブジェクトにスクリプトを付けました。

スクリプトでは、Updateメソッドで、アニメーターのパラメーターの値を、Visual Effectのプロパティに設定します。

using UnityEngine;
using UnityEngine.VFX;

public class CurveTest : MonoBehaviour
{
    [SerializeField] Animator animator;
    [SerializeField] VisualEffect vfx;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {

        vfx.SetFloat("StickDistanceMultiplier", animator.GetFloat("Curve"));

    }
}

これで、アニメーションと連動するカーブに合わせて、エフェクトが変化します。

後は、カーブの形を調整します。

コメントを残す

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