[RESOLU][DB-AL] Unity Freeze à cause d'un script

Pour les scripts écrits en C#
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
damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

[RESOLU][DB-AL] Unity Freeze à cause d'un script

Message par damien-max » 13 Mai 2018 23:29

Bonjour, j'ai un petit soucis.

J'ai suivit un tutoriel sur YouTube pour implémenter un code du style Konami Code dans un jeu. Le problème est que quand je démarre le jeu (via Unity) sans le script sur aucun Gameobject, tout se passe bien, mais quand je le met sur un Gameobject, alors Unity freeze.

Je ne comprend pas pourquoi cela arrive (c'est la première fois et en relisant le script, tout me semble bon et je n'ai aucune erreur de signalé dans la console.

Voici le script en question:

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class KonamiCodeMainMenu : MonoBehaviour {

	private const float WaitTime = 1f;

	private KeyCode[] keys = new KeyCode[] {
		KeyCode.UpArrow,
		KeyCode.UpArrow,
		KeyCode.DownArrow,
		KeyCode.DownArrow,
		KeyCode.LeftArrow,
		KeyCode.RightArrow,
		KeyCode.LeftArrow,
		KeyCode.RightArrow,
		KeyCode.B,
		KeyCode.A,
		KeyCode.Return
	};

	public bool succes;

	
	IEnumerator Start () {

		float timer = 0f;
		int index = 0;
		while (true)
		{
			if (Input.GetKeyDown(keys[index]))
			{
				index++;

				print (index);

				if (index == keys.Length)
				{
					succes = true;
					timer = 0f;
				} 
				else
				{
					timer = WaitTime;
				}
			}

			timer -= Time.deltaTime;
			if (timer<0)
			{
				print ("resetting time");
				timer = 0;
				index = 0;
			}
		}
	}
}
Il fonctionne également avec un second script qui se charge d'afficher un texte:

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(KonamiCodeMainMenu))]
public class Debloquer : MonoBehaviour {

	private KonamiCodeMainMenu code;

	public Text succesText;

	void Awake()
	{
		code = GetComponent<KonamiCodeMainMenu> ();
	}

	void Update()
	{
		if (code.succes) 
		{
			succesText.gameObject.SetActive (true);
		}
	}
}
Voilà, merci encore de votre aide!

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: [DB-AL] Unity Freeze à cause d'un script

Message par ZJP » 14 Mai 2018 03:01

Une boucle infinie dans un "Start" avec des "GetKeyDown" ?!. :mrgreen:

C'est la philosophie d'Unity qui t'est étrangère semble-t'il.
Si ça bloque dans un Start aucun Update (ou autre) ne s'exécute. ===> Projet figé...

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

Re: [DB-AL] Unity Freeze à cause d'un script

Message par damien-max » 14 Mai 2018 18:41

Ah d'acord, en gros le Start sert à mettre en place des choses pour le jeu, alors si je met une série infinie, il devra tout calculer jusqu'à l'infini donc le projet ne se lancera jamais X)

Je dois donc passer sur un Update et revoir ma commande?

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

Re: [DB-AL] Unity Freeze à cause d'un script

Message par boubouk50 » 15 Mai 2018 09:04

Tu dois surtout ne pas faire de boucle infinie.
L'Update () est ta boucle infinie en quelque sorte. Cette fonction est appelée à chaque frame. Donc tu initialises ce dont tu as besoin dans le Start () et testes ensuite dans l'Update () (sans boucle)
"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

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

Re: [DB-AL] Unity Freeze à cause d'un script

Message par damien-max » 15 Mai 2018 19:35

Merci pour vos réponse! Mon script marche normalement.

Je me suis aidé de l'option "Attach to process" dans MonoDevelop pour identifier le Loop et je l'ai corriger en me rendant compte que la seule chose qui bloquée le processus (comme vous l'avez cités) été... Le While (true). Je l'ai retiré et j'ai également crée des public bool/int/float pour les valeurs succes, index et timer. Et apparement, tout est rentré dans l'orde :)

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Unity Freeze à cause d'un script

Message par Max » 15 Mai 2018 20:00

damien-max a écrit :
15 Mai 2018 19:35
Et apparemment, tout est rentré dans l’ordre :)
si tel est le cas, passe ton sujet en [RESOLU]
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »