(顔の画像は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画像のようになりました。キーフレームを多くするともう少しボールと手の位置が合うと思います。