- Home /
How would I make my shoot script automatic?
Alright, for some reason the last time I asked this question it got rejected, and I don't know why. It could have been some jerk just reporting for some reason, but that is not my final conclusion.
How would I make this so that when you held down the left mouse button, bulletShoot
would keep repeating, but when the mouse button is released the repeating of bulletShoot
is stopped.
public GameObject ScarHBullet;
public float showTime = 0.1f;
public AudioSource ScarHSound;
public int maxAmmo = 31;
public float reloadTime = 2.148f;
public AudioSource ScarHReload;
public GameObject AmmoDisplayer;
private int currentAmmo;
void Start () {
AmmoDisplayer.GetComponent<Text> ().text = "" + maxAmmo;
currentAmmo = maxAmmo;
ScarHBullet.SetActive (false);
}
IEnumerator Reload() {
ScarHReload.Play ();
yield return new WaitForSeconds (reloadTime);
currentAmmo = maxAmmo;
}
void Update () {
AmmoDisplayer.GetComponent<Text> ().text = "" + currentAmmo;
Debug.Log (currentAmmo.ToString ());
if (currentAmmo <= 1) {
StartCoroutine (Reload ());
return;
}
if (Input.GetButtonDown ("Fire1")) {
StartCoroutine (bulletShoot ());
}
}
IEnumerator bulletShoot () {
ScarHBullet.SetActive (true);
currentAmmo--;
ScarHSound.Play ();
yield return new WaitForSeconds (showTime);
ScarHBullet.SetActive (false);
}
Hey, this is the "jerk". Yes, I have rejected your question and deleted it. And if you had read your emails, you would have known why.
Answer by mnarimani · Oct 07, 2017 at 10:05 PM
create a bool variable called "mouseDown", then in your Update function, change
if (Input.GetButtonDown ("Fire1")) {
StartCoroutine (bulletShoot ());
}
to
if (Input.GetButtonDown ("Fire1")) {
StartCoroutine (bulletShoot ());
mouseDown = true;
}
if(Input.GetButtonUp("Fire1")){
mouseDown = false;
}
then, change your coroutine to this:
IEnumerator bulletShoot () {
while(mouseDown) {
if(currentAmmo <= 0) break; //break if the gun ran out of ammo
ScarHBullet.SetActive (true);
currentAmmo--;
ScarHSound.Play ();
yield return new WaitForSeconds (showTime);
ScarHBullet.SetActive (false);
}
}
let me know if this code has any problem because I didn't test it
Your answer
Follow this Question
Related Questions
Reset a coroutine on event 1 Answer
Draw call minimizer 1 Answer
Why is the secondary showing on play? 1 Answer
Lerp coroutine not executing 0 Answers
My coroutine wont stop working if I am stopping it from another script 0 Answers