Problème avec le temps

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Problème avec le temps

Message par Xann_71 » 29 Mars 2016 00:58

Bonsoir.
Je fais appel à vos connaissances car j'ai un problème sur ma ligne de temps dans un projet. Je ne suis pas sûr que sa vienne de mes scripts mais je ne vois pas d'où sa pourrait venir d'autre. En gros j'ai dans mon jeu des canons qui tirent à intervalles réguliers et des système des particules qui fonctionnent aussi avec le temps. Lorsque je travaillais sur mon projet il y'a quelques semaines, tout ce passait bien mon système de particules simulait des étoiles se déplaçant horizontalement et mes "canons" tiraient des astéroïdes toutes les 3 secondes.
En relançant mon projet ce soir, les étoiles ne bougent plus et les canons ne tirent plus. Tout ce qui semble dépendre du temps ne fonctionne plus.
mais ce qui dépend des update() fonctionne toujours (comme le déplacement verticale de mes canons à astéroïde).
J'ai donc glissé dans un update() les lignes:
Debug.Log(Time.time);
Debug.Log(Time.deltaTime);

Pour me rendre compte que leur valeur restait à 0. J'ai une scène menu et une scène jeu et le temps semble figé dans les 2.
Savez vous d'où peut venir ce problème? Ai je pu faire une erreur de script qui gèle le temps dans toutes les scènes du jeu?
Y'a t il un paramètre quelque part dans unity (à cocher ou liste déroulante, ...) qui stop le temps au lancement du jeu?
Merci d'avance pour votre aide.

Edit: J'ai réussi à corriger le freeze du temps en ajoutant :
Time.timeScale = 1;
dans un script lié à la caméra de ma scène menu. Mais je ne comprend tjs pas pourquoi mon temps est sur pause en lançant le jeu alors qu'avant il était par défaut actif.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6246
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème avec le temps

Message par boubouk50 » 29 Mars 2016 11:02

As-tu fais une recherche globale dans tout ton code pour vérifier qu'à aucun autre endroit tu as un timeScale = 0?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Problème avec le temps

Message par Xann_71 » 29 Mars 2016 23:35

Oui je l'avais fait. J'ai un seul endroit dans tous mes scripts où j'y fais appel, c'est le moment où le joueur se prend une astéroïde. Là, la pause arrête la génération et le défilement des astéroïdes et chargera le score obtenue par le joueur. Du coup je ne comprend pas qu'il mette le temps de la scène de jeu en pause avant la collision entre le joueur et une astéroïde et je comprend encore moins qu'il mette en pause le temps du menu principal avant même que la scène de jeu soit chargée.
Mon problème est résolu car je vais laisser cette ligne par sécurité au chargement du menu principal mais j'avoue que j'aurais bien aimé comprendre ce qu'il se passe.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6246
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème avec le temps

Message par boubouk50 » 30 Mars 2016 09:15

Tu peux nous soumettre ton code si tu veux qu'on essaie de t'expliquer. Si le temps s'arrête selon une certaine condition, il est possible qu'au Start () cette condition soit remplie.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Problème avec le temps

Message par Xann_71 » 30 Mars 2016 18:47

Voici le code:

Code : Tout sélectionner

#pragma strict

var Hmax: float;	//Variable définissant la hauteur maximale autorisé pour le vaisseau
var Hmin: float;	//Variable définissant la hauteur minimale autorisé pour le vaisseau

static var pos: float;		//variable recevant la position du vaisseau sur l'axe Y. Elle permet au script GsnLanceurPlayer d'aligner le lanceur au vaisseau

//private var PosY : float = 0.0;		//Variable qui permet de suivre la hauteur du vaisseau et ainsi de limiter ses déplacements sur la zone de l'écran.

function Start () 
{

}

function Update () 
{
	//Gestion des déplacements du vaisseau en limitant ses mouvement sur l'axe Y via Hmax et Hmin
	if(Input.GetButton("Ship_Up") && pos < Hmax)
	{
		//PosY += 0.1;
		transform.Translate(Vector3(0, 0, 0.1));
	}
	if(Input.GetButton("Ship_Down") && pos > Hmin)
	{
		//PosY -= 0.1;
		transform.Translate(Vector3(0, 0, -0.1));
	}
	pos = transform.position.y;
}

function OnTriggerEnter(collisionInfo: Collider)
{
	//Mettre en pause le jeu et détruire l'astéroide et le vaisseau en contact
	if(collisionInfo.gameObject.tag == "asteroide")
	{
		Time.timeScale = 0;
		Destroy(collisionInfo.gameObject);
		Destroy(gameObject);
	}
}
Après réflexion. La seule explication qui me vient est que j'ai du tester le jeu, perdre ma partie et sauvegarder le projet après avoir perdu sans relancer une partie ni retourner au menu. Du coup le timeScale aurait été sauvegarder dans le projet à la valeur 0 et en relaçant le jeu hier soir, vu qu'il était sauvegardé à 0, le jeu était sur pause dés que je le lançais.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Problème avec le temps

Message par Moi 1971 » 30 Mars 2016 21:45

Bonsoir,
Je ne crois que très peu à la sauvegarde.
Le truc c'est que tu as un "Time.timeScale = 0;" dans le Ontrigger.
Met un "Debug.Log("Dans le trigger");" ici

Code : Tout sélectionner

function OnTriggerEnter(collisionInfo: Collider)
{
   //Mettre en pause le jeu et détruire l'astéroide et le vaisseau en contact
   if(collisionInfo.gameObject.tag == "asteroide")
   {
      Debug.Log("Dans le trigger!!! Le temps va s'arreter....");      
      Time.timeScale = 0;
      Destroy(collisionInfo.gameObject);
      Destroy(gameObject);
   }
}
Et regarde dans la console si le message ne s'affiche pas au départ de ton jeu.

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Problème avec le temps

Message par Xann_71 » 30 Mars 2016 23:33

Je viens de faire le test. Donc le message ne s'affiche ni en arrivant dans le menu principal, ni au lancement de la partie mais uniquement lorsque le joueur se prend une astéroïde (comme il doit le faire). Donc le problème ne vient a priori pas de mon script.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Problème avec le temps

Message par Moi 1971 » 31 Mars 2016 17:24

Haa.. est-ce que le temps était arrêté avant l'apparition du message Debug.Log?

Avatar de l’utilisateur
Glloq
Messages : 26
Inscription : 30 Juin 2014 16:00
Localisation : Check your six!

Re: Problème avec le temps

Message par Glloq » 06 Avr 2016 12:10

J'avais déjà eu un problème équivalent sur Car League lors de l'implémentation du menu pause: je fixais le Time.timeScale à 0 pour mettre en pause et parfois je quittais le jeu de manière violente sans quitter ce menu pause (et donc sans remettre le timeScale à 1).

Contrairement à tes éléments appartenant à la scène qui sont "réinitialisés" lorsque tu quittes l’exécution du jeu, là tu vas taper dans les réglages du projet Project Settings/Time/Time Scale et la modification du Time Scale reste donc à 0 si tu quittes le jeu en pleine pause.

Tu dois donc vérifier au lancement de ta scène que tu as bien Time.timeScale = 1.0f; pour une exécution normale.

Verrouillé

Revenir vers « (Js) Javascript »