【Unity】FPSで武器を切り替える

投稿者: | 2020-05-24

FPSキャラの手を引っ込めたり、持たせる武器を切り替えてみます。

まず前の記事と同様に、ナイフやライターを取り出すアニメーションやライターの火を付けるアニメーション等を作りました。

これらをUnityに持っていって、アニメーターコントローラーを設定します。初期状態と、各武器の取り出す・持ったままにする・攻撃する・仕舞うの状態があります。

デフォルトは手が下がっているアニメーションがアタッチされていて、パラメーターによって武器を取り出します。武器を取り出すアニメーションが1度再生されると自動で武器を持つ状態に変わります。武器を持つ状態では呼吸に合わせて手が上下に揺れるアニメーションがループ再生されます。

この状態でAttackトリガーがセットされると、攻撃アニメーションが再生されて、自動で武器を持つ状態へ戻ります。

武器を持ち上げるステートを複製して、逆再生させることで武器を仕舞うアニメーションにしています。逆再生させるにはステートを選択してインスペクタのSpeedをマイナスの値にします。

武器の切り替えはキー入力を使います。スクリプトでキーによって整数型のパラメーターの値を変えています。武器を持っている状態で他の武器を選択すると、選択した武器を取り出すステートに遷移します。

if(Input.GetKeyDown(KeyCode.Alpha0))
{

    animator.SetInteger("Weapon", 0);

}
else if (Input.GetKeyDown(KeyCode.Alpha1))
{

    animator.SetInteger("Weapon", 1);

}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{

    animator.SetInteger("Weapon", 2);

}
else if (Input.GetKeyDown(KeyCode.Alpha3))
{
           
    animator.SetInteger("Weapon", 3);

}

前の記事の方法でBlenderで手に武器をもたせたままUnityでインポートすると、ナイフとライターが手のボーンの子オブジェクトになっています。

各武器を取り出すときに、スクリプトで取り出す武器だけをアクティブにします。

if (animator.GetCurrentAnimatorStateInfo(0).IsName("PickKnife"))
{
    knife.SetActive(true);
    lighter.SetActive(false);
}

if (animator.GetCurrentAnimatorStateInfo(0).IsName("PickLighter"))
{
    knife.SetActive(false);
    lighter.SetActive(true);

    fire.SetActive(false); // 火を消す
}

また、火のエフェクトを作って、ライターの子オブジェクトにしておき、ライターの攻撃状態で半分くらい時間がたったら火をつけ、ライターを仕舞う状態の序盤で火を消します。

if (animator.GetCurrentAnimatorStateInfo(0).IsName("LighterAttack") && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.4f)
{
    fire.SetActive(true); // 火をつける
}

if (animator.GetCurrentAnimatorStateInfo(0).IsName("PickLighter 0") && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.1f)
{
    fire.SetActive(false); // 火を消す
}

これでFPSで武器の切り替えができました。

コメントを残す

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