Why does my Color.Lerp switch the colors on every other cycle?
I'm new to Unity and C#, and I'm experimenting with Day/Night cycles in a 2D top-down environment. After much research, I decided to try Color.Lerp to transition between white and black for day and night. It worked, but now I want more colors. To test this, I threw a bunch of Color.Lerps into a series of if else statements with colors going from white to yellow, yellow to blue, blue to black, black to gray, and gray back to white. Amazingly, it works on the first "cycle" but flip flops the colors in the second, and then flip flops back to what I want. I'm sure there's a better way to do what I'm trying to do, and I'm still looking for it. But I was wondering why do the colors flip flop every other cycle?
I have the following script attached to a Directional Light:
using UnityEngine;
public class DayNightCycle : MonoBehaviour
{
public Light skylight;
Color color0 = Color.white;
Color color1 = Color.yellow;
Color color2 = Color.blue;
Color color3 = Color.black;
Color color4 = Color.gray;
public bool isMorning;
public bool isNoon;
public bool isAfternoon;
public bool isEvening;
public bool isTwilight;
public float duration = 5.0f;
public float timer = 25f;
void Start()
{
skylight = GetComponent<Light>();
isMorning = true;
}
void Update()
{
timer -= Time.deltaTime;
if (timer <= 0)
{
timer = 25f;
}
DayNightLighting();
}
void DayNightLighting()
{
float t = Mathf.PingPong(Time.time, duration) / duration;
if (timer > 20f)
{
skylight.color = Color.Lerp(color0, color1, t);
isMorning = true;
isTwilight = false;
}
else if (timer > 15f && timer < 20f)
{
skylight.color = Color.Lerp(color2, color1, t);
isNoon = true;
isMorning = false;
}
else if (timer > 10f && timer < 15f)
{
skylight.color = Color.Lerp(color2, color3, t);
isAfternoon = true;
isNoon = false;
}
else if (timer > 5f && timer < 10f)
{
skylight.color = Color.Lerp(color4, color3, t);
isEvening = true;
isAfternoon = false;
}
else if (timer > 0 && timer < 5f)
{
skylight.color = Color.Lerp(color4, color0, t);
isTwilight = true;
isEvening = false;
}
}
}
Your answer
Follow this Question
Related Questions
how to make mathf.pingpong not from 0 3 Answers
How to animate fog color over time for day night cycle 1 Answer
Sun Variable Rotation 1 Answer
My enemy cube moves through walls 0 Answers
Separate Numbers ? 1 Answer