- Home /
How to loop a function for a limited time
using System.Collections;
using UnityEngine;
using System;
public class Timer : MonoBehaviour
{
private bool doReturn = true;
public bool Ability(Action action, float time, string key,bool DoLoop)
{
if (Input.GetKeyDown(key)&&!DoLoop)
{
doReturn = true;
StartCoroutine(LateCall(time, action, DoLoop));
}
else if(Input.GetKeyDown(key) &&DoLoop)
{
//HERE IS THE PIECE OF CODE THATS MISSING!!!!
}
return doReturn;
}
private IEnumerator LateCall(float Duration, Action action,bool DoLoop)
{
action();
yield return new WaitForSeconds(Duration);
doReturn = false;
}
}
The basic usage of this code is to do an "ability" in my case call a function for a limited time, and some "abilities" need to be continuous or in this case the function needs to be looped for a time, I wanna keep the code as simple as possible.
The thing i can't seem to find is how to loop an Action for a limited amount of time, also invoke didn't seem to work. The functions I'm using are in another class, the whole reason behind that is so I could make this a more universal script.
Answer by ErikHallmarkDev · Jan 19, 2017 at 06:48 PM
I'm not sure if I understand exactly what your code needs to do. But if what I'm guessing is right, this is how I would solve this problem. All you need to do is call StartLoop
once, and it will take care of the rest. It may take a bit more work to fit into your code, but I think it's the simplest solution.
The condition for the loop could easily be changed to something other than time, or time and some other condition.
public float loopDuration = 2.0f; //How long the loop lasts in seconds
private float time = 0.0f;
void StartLoop() {
StartCoroutine(DoLoop());
}
IEnumerator DoLoop() {
do {
//Your code goes here
time += Time.deltaTime;
yield return new WaitForEndOfFrame();
} while (time < loopDuration);
time = 0.0f;
}
I'll try and implement this on my code and post final results, thank you until then!
Your answer
![](https://koobas.hobune.stream/wayback/20220612105149im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Unity while loop causing freezes on play 2 Answers
Trouble with Moving an Enemy back and forth 1 Answer
Vector3.Lerp snaps when called too frequently. 2 Answers
Windows phone phantom touch event 0 Answers
Trigger Not Activating 0 Answers