- Home /
Object rotation shifting
So I'm trying to expand on an old day/night cycle I found and it is working really well. I have a sun animate across the sky and a directional light that rotates. Everything is controlled by a slider which I have looping whenever it exceeds max (1). The problem is that the light (and sun) sometimes doesn't cycle 360 degrees but stop halfway and then starts going in the opposite direction. It sometimes does this multiple times in a row. The light intensity still works but the rotating of the directional light doesn't. I hope you can help me out :) Here is the code:
var slider : float;
var slider2 : float;
var Hour : float;
private var Tod: float;
var sun: Light;
var speed = 50;
var NightFogColor : Color;
var DuskFogColor : Color;
var MorningFogColor : Color;
var MiddayFogColor : Color;
var NightAmbientLight : Color;
var DuskAmbientLight : Color;
var MorningAmbientLight : Color;
var MiddayAmbientLight : Color;
var NightTint : Color;
var DuskTint : Color;
var MorningTint : Color;
var MiddayTint : Color;
var SkyBoxMaterial1 : Material;
var SkyBoxMaterial2 : Material;
var SunNight : Color;
var SunDay : Color;
function OnGUI () {
if(slider >= 1.0)
{
slider = 0;
}
slider= GUI.HorizontalSlider( Rect(20,20,200,30), slider, 0,1.0);
Hour= slider*24;
Tod= slider2*24;
sun.transform.localEulerAngles.x= (slider*360)-90;
slider = slider +Time.deltaTime/speed;
sun.color = Color.Lerp (SunNight, SunDay, slider*2);
if(slider<0.5){
slider2= slider;
}
if(slider>0.5){
slider2= (1-slider);
}
sun.intensity = (slider2-0.2)*2;
if(Tod<4){
//it is Night
RenderSettings.skybox=SkyBoxMaterial1;
RenderSettings.skybox.SetFloat("_Blend", 0);
SkyBoxMaterial1.SetColor ("_Tint", NightTint);
RenderSettings.ambientLight = NightAmbientLight;
RenderSettings.fogColor = NightFogColor;
}
if(Tod>4&&Tod<6){
RenderSettings.skybox=SkyBoxMaterial1;
RenderSettings.skybox.SetFloat("_Blend", 0);
RenderSettings.skybox.SetFloat("_Blend", (Tod/2)-2);
SkyBoxMaterial1.SetColor ("_Tint", Color.Lerp (NightTint, DuskTint, (Tod/2)-2) );
RenderSettings.ambientLight = Color.Lerp (NightAmbientLight, DuskAmbientLight, (Tod/2)-2);
RenderSettings.fogColor = Color.Lerp (NightFogColor,DuskFogColor, (Tod/2)-2);
//it is Dusk
}
if(Tod>6&&Tod<8){
RenderSettings.skybox=SkyBoxMaterial2;
RenderSettings.skybox.SetFloat("_Blend", 0);
RenderSettings.skybox.SetFloat("_Blend", (Tod/2)-3);
SkyBoxMaterial2.SetColor ("_Tint", Color.Lerp (DuskTint,MorningTint, (Tod/2)-3) );
RenderSettings.ambientLight = Color.Lerp (DuskAmbientLight, MorningAmbientLight, (Tod/2)-3);
RenderSettings.fogColor = Color.Lerp (DuskFogColor,MorningFogColor, (Tod/2)-3);
//it is Morning
}
if(Tod>8&&Tod<10){
RenderSettings.ambientLight = MiddayAmbientLight;
RenderSettings.skybox=SkyBoxMaterial2;
RenderSettings.skybox.SetFloat("_Blend", 1);
SkyBoxMaterial2.SetColor ("_Tint", Color.Lerp (MorningTint,MiddayTint, (Tod/2)-4) );
RenderSettings.ambientLight = Color.Lerp (MorningAmbientLight, MiddayAmbientLight, (Tod/2)-4);
RenderSettings.fogColor = Color.Lerp (MorningFogColor,MiddayFogColor, (Tod/2)-4);
//it is getting Midday
}
}
Answer by aldonaletto · May 26, 2013 at 09:48 PM
I suspect that the problem is caused by this line:
sun.transform.localEulerAngles.x= (slider*360)-90;
You should never assign to single components of eulerAngles or localEulerAngles - always assign the 3 components at once. Supposing that the components Y and Z are zero, change this line to:
sun.transform.localEulerAngles = Vector3((slider*360)-90, 0, 0);
If Y and Z aren't both zero, save their initial values at Start:
private var euler: Vector3;
function Start(){
euler = sun.transform.localEulerAngles;
}
...
// modify X in variable euler and update localEulerAngles:
euler.x = (slider*360)-90;
sun.transform.localEulerAngles = euler;
...
Thank you very much, this was just what I need, it solved my problem :)
Your answer
Follow this Question
Related Questions
Photon Day Night Cycle Unsynced 1 Answer
Blend two lightmaps for day/night cycle? (terrain) 0 Answers
Day Night Cycle Script Not Working 3 Answers
Day/Nights cycle 2 Answers
Day Night cycle question 1 Answer