ブレンドツリーでアニメーションをなめらかに切り替える

投稿者: | 2020-04-16


(顔の画像はGenerated Photos
円形に歩いているキャラクターが、中心のボールに手を伸ばしてボールを取るアニメーションをブレンドツリーを使って作ってみました。

まず、キャラクターが円形に歩くアニメーションと、その中心で小さく逆回転する球のアニメーションをBlenderで作りました。

歩くアニメーションを複製して、片方をキャラクターが常に中心のボールに触れながら歩くように変更します。

はじめの歩くアニメーションをもう一度複製して、今度は中心のボールと同じ大きさのボールを手に持ちながら歩くアニメーションに変更します。

物を持たせる方法はこちら

これらをFBX形式でエクスポートします。中心で回るボールは別ファイルでエクスポートしました。
キャラと同じファイルにも中心で回るボールは含まれています。

Unityでインポートしてシーンに配置します。シーン上には、キャラが持っているボールが1つと、中心で回るボールが2つあります。
中心で回るボールのうち、個別にエクスポートしたボールの位置を、キャラのプレハブに含まれてるボールに合わせて、後者は非表示にしました。

キャラにアタッチするアニメーターコントローラーを作ります。デフォルトのステートをブレンドツリーにします。

Blend Typeは1Dにして、キャラの3つのアニメーションを、上から ①歩く ②ボールに手をのばす ③ボールを持って歩くの順に追加します。

Blendパラメーターを増減させると、これらのアニメーションをなめらかに切り替えることができます。

そして、Blendパラメーターを使った条件によって、手に持っているボールの表示を切り替えたり、中心で回るボールの不透明度を切り替えたりして、ボールが中心と右手を行き来するように見せます。

if (getBall)
{

    // falseに遷移
    if (animator.GetFloat("Blend") < 1f)
    {
        getBall = false;
        sphere.SetActive(false);
        sphereMeshRenderer.material = sphereMaterial;
    }
}
else {

    // trueに遷移
    if (animator.GetFloat("Blend") >= 1f)
    {
        getBall = true;
        sphere.SetActive(true);
        sphereMeshRenderer.material = transparentMaterial;
    }
}

これで冒頭のGif画像のようになりました。キーフレームを多くするともう少しボールと手の位置が合うと思います。

コメントを残す

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