Search code examples
c#unity-game-engineframe-rateflicker

Making an object "Flicker" every X seconds


I need to make an object flicker every X seconds. So far I have the code for the actual flickering and it works great, however I need the flicker to come on for X seconds, then turning off, then come on for X seconds. Similar to turning a strobe light on (it flickers), then off.

I know something like invokeRepeating would work however the flickering relies on being in the FixedUpdate for it to run every frame.

For anyone wondering I'm actually trying to do something with image modulation and attention. Here is what I have so far:

public class scrFlicker : MonoBehaviour {
    public SpriteRenderer sRen;
    public float cycleHz; // Hz, the mesurement of cycles.

    private float dtime = 0; // delta time
    private Color alpha;

    // Use this for initialization
    void Start () {
        sRen = GetComponent<SpriteRenderer>();
        GetComponent<SpriteRenderer>().enabled = false;
        alpha = sRen.color;
        alpha.a = 0.4f;
        sRen.color = alpha;
     }

     // Update is called once per frame
     void FixedUpdate () {
        startFlicker();
     }

     void startFlicker() {
        dtime += Time.deltaTime;

        float wave = Mathf.Sin((dtime * 2.0f * Mathf.PI) * cycleHz);

        if(wave > 0.0f) {
            GetComponent<SpriteRenderer>().enabled = true;
        } else {
            GetComponent<SpriteRenderer>().enabled = false;
        }

        if (wave == 0.0f) {
            dtime = 0.0f;
        }
    }
}

Solution

  • You can create something like a timer below to manage the on and off time:

    float toggletime;
    
     void FixedUpdate () {
        toggletime += Time.deltaTime;
        if (toggletime < 2) // flicker will occur from 0-2 seconds
            startFlicker();
        else if (toggletime > 4) // nothing will occur between 2-4 seconds
            toggletime = 0; // reset timer after 4 seconds have passed
     }