- Home /
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.)
Answer by LyanApps · Apr 04, 2013 at 07:51 PM
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
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Buying Ammo HELP 0 Answers
How to add the needed amount to the AmmoCount (current ammo)? 1 Answer
Time.deltaTime stops counting up, after the Player is destroyed 1 Answer
Reloading Help 2 Answers