Partage
  • Partager sur Facebook
  • Partager sur Twitter

[unity 2D] création d'un timer

    18 avril 2017 à 13:40:34

    Bonjour,

    J'ai créé un jeu 2D dont le but est de collectionner tout les objets en moins d'une minute. Du coup il me faudrait un timer qui dépasser 60 secondes nous fasse atterir sur l'écran gameover. Voici le code que j'ai fait réédité par un ami:

    using UnityEngine;

    using System.Collections;

    using MagicLib;

    using UnityEngine.SceneManagement;

    public class Timer : MonoBehaviour {

    private bool isTimerSetUp = false;

       void Update () {

           if (MM_LIB.Timer (60f, gameObject)) {

                 if (!isTimerSetUp){

                    isTimerSetUp = true;

                 }else{

                 MM_LIB.CameraShake ();

                 SceneManager.LoadScene ("GameOver");

                 }

          }

        }

    }

    (timer est une fonction qui est sensé démarrer le code toutes les 60 secondes d'après mon ami et camerashake comme son nom l'indique secoue la caméra .Elles sont dans la bibliothèque mmlib noté plus haut).

    mais le problème c'est que dès que je démarre le jeu je vais directement sur l'écran gameover il ne veut pas attendre les 60 secondes. Des suggestions sur les modifications que je pourrais faire? Aussi j'aimerais bien redémarrer le timer à chaque fois que je change de niveau mais je ne connais pas de fonctions unity qui reset mon timer.
    Merci d'avance pour vos réponses :)
    • Partager sur Facebook
    • Partager sur Twitter
      18 avril 2017 à 13:59:19

      Bonjour,

      Est-ce qu'il y a moyen de savoir à quoi correspond MM_Lib.Timer (comment ça fonctionne) ? J'imagine que ça vient de MagicLib mais bon...

      • Partager sur Facebook
      • Partager sur Twitter
        18 avril 2017 à 23:35:26

        non pas vraiment j'ai essayé avec un autre programme sans la MM.LIB j'ai le même problème.

        using UnityEngine;

        using System.Collections;

        using UnityEngine.SceneManagement;

        public class Timer : MonoBehaviour {

        private int temps = 60;

        // Update is called once per frame

        void Update () {

        System.Threading.Thread.Sleep(1000); 

        temps--;

        if(temps == 0)

        {

        SceneManager.LoadScene ("GameOver");

        }

        }

        }

        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2017 à 9:35:05

          Hmm. Je pense que tu t'y prends de travers ^^' Déjà, es-tu sûr que System.Threading.Thread.Sleep(1000) attend correctement le temps que tu souhaites ? Vu que tu fais cette appel à chaque frame, je doute que ce soit le cas. En théorie, si ton PC tourne bien, ton Update se fait 60 fois ou plus par seconde, ce qui expliquerait pourquoi tu démarres directement sur ta scène de Game Over.

          Histoire de pas tout faire à ta place, je te conseille de regarder les coroutines pour Unity ainsi que la classe WaitForSecondsRealtime. Logiquement, avec ces deux éléments tu devrais pouvoir faire un timer très simplement.

          • Partager sur Facebook
          • Partager sur Twitter
            21 avril 2017 à 11:45:26

            IEnumerator wait()
            {
                yield return new WaitForSeconds(60f);/*attendre 60                     secondes*/
             Application.LoadLevel(......)//le temps est écoulé }

             Utilise une couroutine comme ci dessus, pour appeler une coroutine dans ton code, il faut écrire cela :

            StartCoroutine(wait());

            Fait bien attention aux parenthèses :). Et voilà avec ça tu devrais pouvoir coder ton propre timer ! Hop Hop Hop

            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2017 à 14:49:21

              Merci je vais essayer tout ça :)

              -
              Edité par NinaDesir 22 avril 2017 à 15:27:27

              • Partager sur Facebook
              • Partager sur Twitter

              [unity 2D] création d'un timer

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown