Delay between bullet shot with GetKey

I’m trying to make a shooting game in which you can keep the W key pressed to shoot endlessly. The problem is that there is absolutely no delay between each bullet, so this looks more like a strange laser than a proper shoot. I tried to use WaitForSeconds but it couldn’t work… I would like to know where I’m wrong. Help would be greatly appreciated. :slight_smile:
Here’s my code :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerControl : MonoBehaviour {

	public GameObject playerBulletGO; //bullet prefab
	public GameObject bulletPosition01;
    public GameObject bulletPosition02;
    public float speed;

        // Use this for initialization
        void Start () {
	// Update is called once per frame
	void Update () {

		if(Input.GetKey("w") || Input.GetKey("z")) {



		float x = Input.GetAxisRaw ("Horizontal"); // will be -1 0 or 1 (for left, no input, and right)
		float y = Input.GetAxisRaw ("Vertical"); // will be -1 0 or1 (for down, no input and up)

		//now based on the input we comput a direction vector and we normalize it to get a unit vector
		Vector2 direction = new Vector2 (x, y).normalized;

		//now we call the function that computes and set the player's position
		Move (direction);

	void Move(Vector2 direction)
	{ //here is the code for moving

    void Shoot()
        //instantiate the 1st bullet
        GameObject bullet01 = (GameObject)Instantiate(playerBulletGO);
        bullet01.transform.position = bulletPosition01.transform.position; //set the bullet initial position

        //instantiate the 2nd bullet
        GameObject bullet02 = (GameObject)Instantiate(playerBulletGO);
        bullet02.transform.position = bulletPosition02.transform.position; //set the bullet initial position

    IEnumerator ShootWait()
        yield return new WaitForSeconds(100.0f);

public float fireRate = 2F; // 2seconds wait
private float nextFire = 0.0F;


if(Input.GetKey("w") || Input.GetKey("z")  && Time.time > nextFire ) {

              nextFire = Time.time + fireRate;

That should work
(wont need startcourotine this way )


Use Invoke() :slight_smile:

You have the documentation here : Invoke()