(First of all, sorry if my english is bad)
So i have this async function for when i pickup an item, it activate a GameObject, then wait for 3 seconds and deactivate it.
But if i pickup multiple items during those 3 seconds, it stacks the script and force it to deactivate my object.
Any solution to just stop the function when i reuse it ?
async void TriggerPickupPopUp(string ItemName, Sprite itemSprite)
{
pickupAlert.SetActive(true);
pickupName.text = ItemName;
pickupImage.sprite = itemSprite;
await Task.Delay(3000);
pickupAlert.SetActive(false);
}
Thanks for your help.
Don’t use a coroutine or async thing… this is just a cooldown timer.
Cooldown timers, gun bullet intervals, shot spacing, rate of fire:
This is commonly called a "cooldown timer." You can google for examples and tutorials, but the simplest way is this:
have a private float gunHeat; variable
In Update(), if that variable is greater than zero, subtract Time.deltaTime from it (this cools down the gunHeat)
if (gunHeat > 0)
{
gunHeat -= Time.deltaTime;
}
When you go to fire:
--- A. only fire if that gunHeat variable is zero or less.
--- B. set that variable to the time (in seconds) you want to have between shots.
if (Us…
GunHeat (gunheat) spawning shooting rate of fire:
Don't use a Timer... that's super overkill.
Instead, use just a float. I like to call my float "gunHeat."
private float gunHeat;
private const float TimeBetweenShots = 0.25f; // seconds
Now... in Update():
// cool the gun
if (gunHeat > 0)
{
gunHeat -= Time.deltaTime;
}
// is the player asking to shoot?
if (PlayerAskedToShoot)
{
// can we shoot yet?
if (gunHeat <= 0)
{
// heat the gun up so we have to wait a bit before shooting again
gunHeat = TimeBetweenShots;
…
i tweaked it a bit but it works now, and i find this easier than using async functions, but i guess both works well.
Will this be much better than using the timer mentionned above ? If yes i might start to look into it.
It’s up to you and your project! glad it worked!