[Js] Cycle Jour/Nuit [Day/Night]

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
Avatar de l’utilisateur
sazer
Messages : 41
Inscription : 14 Sep 2013 17:25
Localisation : chalons

[Js] Cycle Jour/Nuit [Day/Night]

Message par sazer » 20 Août 2014 19:47

- NOM DU SCRIPT : Day-Night.js

- 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)
- FAQ
* 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
Merci de vos réponses futures. (au moin j'aurais pas a le retaper a chaque fois ...) :p
Image

Répondre

Revenir vers « Scripts »