private IEnumerator FlashingCoroutine(TrafficLightLamp lamp, float sec)
 {
     while (true)
     {
         lamp.SetON();
         StartCoroutine(FadeOutCoroutine(lamp, sec));
         yield return(new WaitForSeconds(sec + 0.4f));
     }
 }
    private IEnumerator FadeOutCoroutine(TrafficLightLamp lamp, float duration)
    {
        const float Step           = 0.05f;
        float       intensity      = 1f;
        int         numberOfFrames = Mathf.RoundToInt((intensity - 0.1f) / Step);
        float       delay          = duration / numberOfFrames;

        for (int i = 0; i < numberOfFrames; ++i)
        {
            lamp.SetEmissionIntensity(intensity);
            intensity -= Step;
            yield return(new WaitForSeconds(delay));
        }
        lamp.SetOFF();
    }
        public TrafficLight()
        {
            GameObject topLamp    = GameObject.Find("TrafficLightBase/TrafficLightHead/TopLamp");
            GameObject middleLamp = GameObject.Find("TrafficLightBase/TrafficLightHead/MiddleLamp");
            GameObject bottomLamp = GameObject.Find("TrafficLightBase/TrafficLightHead/BottomLamp");

            this.topLamp    = new TrafficLightLamp(new Color(0.1f, 0f, 0f, 0f), new Color(1f, 0f, 0f, 0f), topLamp);
            this.middleLamp = new TrafficLightLamp(new Color(0.1f, 0.1f, 0f, 0f), new Color(1f, 1f, 0f, 0f), middleLamp);
            this.bottomLamp = new TrafficLightLamp(new Color(0f, 0.1f, 0f, 0f), new Color(0f, 1f, 0f, 0f), bottomLamp);

            currentState = States.OFF;
            this.topLamp.SetOFF();
            this.middleLamp.SetOFF();
            this.bottomLamp.SetOFF();
        }