- AUTEUR(S): sazer
- DESCRIPTION : Script de cycle jour/nuit avec gestion des lumières la nuit. Actuellement implémenté dans mon jeu VCS (bientot une présentation sur ce forum de celui ci).
- UTILISATION : Placer le script sur une directional light muni d'un flare pour simuler le soleil.
- LICENCE : open source, non utilisation commercial.
- Liste des variables direct :
var duree_cycle : nombre entier, qui définit le temps du cycle en seconde, par exemple 60 créra un cycle d'une minute, 300 : un cycle de 5 minute, ...
var duree_jour : nombre entier, qui définit le temps de la journée en seconde, par exemple 60 créra une journée d'une minute, 180 : un cycle de 3 minutes, ...
var hour_txt_h : GUIText permettant d'afficher l'heure du jour (en format 24h)
var hour_txt_m : GUIText permettant d'afficher l'heure du jour, enfin les minute ...
- Liste des objets éventuelle où un tag est nécéssaire :
* Toutes les caméra à taguer avec : MainCamera
* Toutes les lumières de la ville ou des vehicules (pour moi c'est des lumière de boués) par : Buoys
Code : Tout sélectionner
//var clouds : ParticleRenderer[];
private var lerpedColor : Color = Color.white;
private var hour : float = 0;
private var hour_ : float = 0;
var duree_cycle : int = 3600;
var duree_jour : int = 1800;
private var color : float = 0;
private var blend : float = 0;
var hour_txt_h : GUIText;
var hour_txt_m : GUIText;
private var h : int;
private var m : int;
private var cams : GameObject[];
private var buoys : GameObject[];
private var off_light = false;
private var on_light = true;
function Start() {
buoys = GameObject.FindGameObjectsWithTag("Buoys");
for(var y = 0; y < buoys.length; y++){
buoys[y].light.active = false;
}
}
function Update() {
cams = GameObject.FindGameObjectsWithTag("MainCamera");
hour_ = Time.time%duree_cycle;
if(hour_ <= duree_jour/2){
hour = hour_/duree_jour;
blend = hour*1.5;
transform.localEulerAngles = new Vector3(90+(360*(hour/2)), 270, 0);
}
if(hour_ <= duree_cycle/2 && hour_ > duree_jour/2){
hour = 0.5+((hour_-(duree_jour/2))/(duree_cycle-duree_jour));
blend = 0.25 + hour;
transform.localEulerAngles = new Vector3(90+(360*(hour/2)), 270, 0);
}
if(hour_ <= ((duree_jour/2)+(duree_cycle-duree_jour)) && hour_ > duree_cycle/2){
hour = 1-((hour_-(duree_cycle/2))/(duree_cycle-duree_jour));
blend = 0.25 + hour;
transform.localEulerAngles = new Vector3(90+(360*((1+(1-hour))/2)), 270, 0);
}
if(hour_ > ((duree_jour/2)+(duree_cycle-duree_jour))){
hour = 0.5-((hour_-(duree_jour/2)-(duree_cycle-duree_jour))/duree_jour);
blend = 1.5*hour;
transform.localEulerAngles = new Vector3(90+(360*((1+(1-hour))/2)), 270, 0);
}
if(hour > 0.4 && on_light){
for(var z = 0; z < buoys.length; z++){
buoys[z].light.active = true;
}
off_light = true;
on_light = false;
}
if(hour < 0.4 && off_light){
for(var e = 0; e < buoys.length; e++){
buoys[e].light.active = false;
}
on_light = true;
off_light = false;
}
lerpedColor = Color.Lerp(Color.white, Color.black, hour);
transform.light.color = lerpedColor;
for(var y = 0; y < cams.length; y++){
cams[y].camera.backgroundColor = Color((0.44*(1-hour*1.5)),(0.62*(1-hour*1.5)),(0.8*(1-hour*1.5)));
}
color = (195 -(hour*270))/255;
if(color < 0){
color = 0;
}
color = (170 -(hour*170))/255;
if(color < 0){
color = 0;
}
RenderSettings.fogColor = Color(color,color,color);
color = 1-hour;
/*for(var i = 0; i < clouds.length; i++){
clouds[i].material.color = Color(color,color,color);
}*/
if(hour_/duree_cycle <= 0.5){
h = (((hour_/duree_cycle)*1440)/60)+12;
m = (((hour_/duree_cycle)-(h/24))*1440)-((h-12)*60);
} else {
h = (((hour_/duree_cycle)*1440)/60)-12;
m = (((hour_/duree_cycle)-(h/24))*1440)-((h+12)*60);
}
if(h >= 10){
hour_txt_h.text = h+"";
} else {
hour_txt_h.text = "0"+h;
}
if(m >= 10){
hour_txt_m.text = m+"";
} else {
hour_txt_m.text = "0"+m;
}
}
// Day-Night.js by sazer - Erwan Locart - erwanloc@sfr.fr
// Create for VCS project (Virtual Cloud in Sea)
* Le soleil représenté par ma directional light se voit a travers mon sol/mur/autre ...
=> Rajoutez un collider sur l'objet en question, mais attention que des colliders de forme primitive quand cette objet possède un rigidebody.
* A compléter par moi :p