【Unity】連射の間隔を変える

投稿者: | 2020-08-03

マウスを押している間は弾を連射するようにして、その間隔を調節してみます。

弾を連射するには前の記事のスクリプトのInput.GetMouseButtonDownをInput.GetMouseButtonに変えるだけです。

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    // 攻撃可能な時にマウスクリックで攻撃する
    if (Input.GetMouseButton(0) && attackable)
    {
        animator.SetTrigger("Attack"); // 攻撃ステートへ
        ttackable = false; // 攻撃不可能にする
 
        if (animator.GetInteger("Weapon") == 5) // 武器が銃のとき
        {
            var b = Instantiate(bullet, player.position + player.forward, player.rotation); // 銃弾を生成
            Rigidbody r = b.GetComponent<Rigidbody>(); // 銃弾のRigidbody
            r.AddForce(Vector3.Lerp(player.forward, player.up, 0.02f) * 38f, ForceMode.Impulse); // 銃弾を発射
        }
    }
}

弾の連射速度を変えるには、アニメーターコントローラーで攻撃ステートのExit TimeやTransition Durationを小さくして、弾を発射した後すぐに遷移が始まるようにしたり、素早く遷移するようにします。冒頭のGIF画像ではExit Timeが0.8です。

Exit Timeが0.5の場合

Exit Timeを0.5にすると連射速度が上がりましたが、さらに小さくするとかえって遅くなりました。Exit Timeで指定した時点に到達した最初のフレーム以外ではfalseになるのが原因かもしれません。

攻撃ステートへの遷移のTransition Durationを0にすると問題なく連射速度が上がりました。遷移中にExit Timeに達しても遷移せず、通り過ぎてしまうのだと思います。

コメントを残す

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