Reload Courutine Taking To Much Ammo

Hello, In my fps im trying to make a reload. But when I test it instead of taking 1 extra ammo or clip, it takes 2 or more. Instead of one. How can i fix this.

heres my code its not the whole script Though:

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour{

public string Weapon1;

public string Weapon2;

public GameObject MP7;
public GameObjectMakarov

public int CurrentPrimaryAmmo;
public int CurrentPrimaryAmmoClip;
public int CurrentPrimaryClipMax = 30;
public int CurrentSecondaryAmmo;
public int CurrentSecondaryAmmoClip;
public int CurrentSecondaryClipMax = 7;
public float WeaponReloadTime = 2f;

public void Start(){

Weapon1 = MP7;
Weapon2 = Makarov;
MP7.SetActive(true);
Makarov.SetActive(false);

CurrentPrimaryAmmo = PlayerPrefs.GetInt(“CurrentPrimaryAmmo”);
CurrentSecondaryAmmo = PlayerPrefs.GetInt(“CurrentSecondaryAmmo”);
CurrentPrimaryClip = PlayerPrefs.GetInt(“CurrentPrimaryClip”);
CurrentSecondaryClip = PlayerPrefs.GetInt(“CurrentSecondaryClip”);

}

void Update(){
if(EquipedWeapon == “Weapon1”){
if(CurrentPrimaryClip != CurrentPrimaryMaxClip){
if(Input.GetButton(“Reload”)){
StartCoroutine(“Reload1”,WeaponReloadTime);
}
}
}
if(EquipedWeapon == “Weapon2”){
if(CurrentSecondaryClip != CurrentSecondaryMaxClip){
if(Input.GetButton(“Reload”)){
StartCoroutine(“Reload2”,WeaponReloadTime);
}
}
}
}

IEnumerator Reload1(float WeaponReloadTime){

	if(EquipedWeapon == "Weapon1"){
		yield return new WaitForSeconds(WeaponReloadTime);
		CurrentPrimaryClip = CurrentPrimaryMaxClip;
		PlayerPrefs.SetInt("CurrentPrimaryClip", CurrentPrimaryClip);
		CurrentPrimaryAmmo --;
		PlayerPrefs.SetInt("CurrentPrimaryAmmo", CurrentPrimaryAmmo);
	
	}
}
IEnumerator Reload2(float WeaponReloadTime){
	if(EquipedWeapon == "Weapon2"){
		yield return new WaitForSeconds(WeaponReloadTime);
		CurrentSecondaryClip = CurrentSecondaryMaxClip;
		PlayerPrefs.SetInt("CurrentSecondaryClip", CurrentSecondaryClip);
		CurrentSecondaryAmmo --;
		PlayerPrefs.SetInt("CurrentSecondaryAmmo", CurrentSecondaryAmmo);
	}
	ReloadTimer = WeaponReloadTime;
}

}

For any help, please format your code. You can do this by highlighting all your code, then clicking the 10101 button at the top of the edit window. http://video.unity3d.com/video/7720450/tutorials-using-unity-answers

By the way, you should look in to Interfaces. It'll stop you from having to write things like two reload routines. (Weapons would be an interface for example.)

1 Answer

1

If I had to guess, it looks like you use Input.GetButton instead of Input.GetButtonDown. This means for each frame that your button is pressed it will continue to grab the next clip. If you use GetButtonDown, then it will only call that coroutine the first frame that your button is pressed.

This is a good tutorial on the phases of a button press: http://unity3d.com/learn/tutorials/modules/beginner/scripting/get-button-and-get-key