
FPSコントローラーに両手を付けて、刀で攻撃させてみます。
まず前の記事と同様にBlenderで腕を作ってアニメーションを付け、Unityに持ってきました。

今回は「刀を取り出す」「刀を構える」「刀を振る」「刀を持って歩く」「刀を持って走る」の5つのアニメーションを作って、武器を切り替える記事で作ったアニメーターコントローラーに設定しました。
歩きと走りのアニメーションでは、最初だけにキーフレームを追加して静止させています。

そして上のアニメーターコントローラーに歩きと走りのステートを追加してそれぞれのアニメーションを設定します。

走るステートと、歩きや構えのステートの遷移でTransition Durationを0より大きい値にすることで、アニメーションが自動でなめらかにブレンドされます。

プレイヤーが動いているかどうかや、走っているかどうかはFirstPersonControllerクラスでBoolパラメーターを切り替えることでアニメーターコントローラーに伝えます。
// GetInput()
armsAnimator.SetBool("IsWalking", m_IsWalking || m_Jumping);
if (horizontal == 0 && vertical == 0)
{
armsAnimator.SetBool("Moving", false);
}
else {
armsAnimator.SetBool("Moving", true);
}
走っているときにジャンプすると、歩きのアニメーションに戻るようにしています。
歩きや走りのステートからでも、Attackトリガーがセットされると攻撃するステートに遷移させるようにして、移動やジャンプをしながら刀を振って攻撃できるようにしています。
しゃがみやリーン中も攻撃できます。
