[RESOLU] date et heure

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
jones
Messages : 39
Inscription : 29 Jan 2021 11:01

[RESOLU] date et heure

Message par jones » 13 Juin 2021 12:49

Bonjour tout le monde,
J'aurais besoin d'aide s'il vous plait.
Je bloque sur tout ce qui est date et heure sur Unity malgré tous les tutos que j'ai vu.
En fait, je crée un nouveau jeu ; dont le principe est que dès lors qu'on termine le niveau 1 (par exp), le niveau 2 ne s'ouvre qu'à "minuit".
Et je ne vois vraiment pas comment faire ça, dés lors que j'essaye de faire une condition avec l'heure, il me sort (read only).
Autre chose, je voudrais que si le joueur ne complète pas le niveau 2 au cour du "jour 2", toute sa progression s'efface.

Donc en somme, ce dont j'ai besoin c'est de créer une condition pour vérifier l'heure.

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System;

public class levelSelector : MonoBehaviour
{
     public Button buttonLev1;
     public Button buttonLev2;

    void Start(){
    
        DateTime time = DateTime.Now;
         DateTime tomorrow = DateTime.Today.AddDays(1);
     
         buttonLev2.interactable = false;
        
         //  string time = System.DateTime.UtcNow.ToLocalTime().ToString("HH:mm:ss");
          
     }
     public void LoadA(string scenename)
    {       
        SceneManager.LoadScene(scenename);
    }
    void Update()
    {
        if(PlayerPrefs.GetInt("levelComplete1")== 1  ){
             buttonLev2.interactable = true;
        }
    }
}
Et merci infiniment

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

Re: date et heure

Message par Max » 13 Juin 2021 14:09

Bonjour,
jones a écrit :
13 Juin 2021 12:49
Et je ne vois vraiment pas comment faire ça, dés lors que j'essaye de faire une condition avec l'heure, il me sort (read only).
Comment t'y prends tu pour tester ? car cela n'apparait pas dans le code que tu listes (sauf erreur).
Les données de DateTime ne sont effectivemenet qu'en ReadOnly. Après tu peux facilement récupérer l'heure et les minutes par exemple (DateTime.Hour et DateTime.Minute).
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

jones
Messages : 39
Inscription : 29 Jan 2021 11:01

Re: date et heure

Message par jones » 13 Juin 2021 14:39

non, là je ne testais rien...
mais entre temps, j'ai réussi la première étape mais je coince sur la deuxième, c'est à dire, effacer la progression SI "le niveau 2 n'est pas terminé le jour 2 (de minuit à minuit)

Code : Tout sélectionner

using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System;

public class levelSelector : MonoBehaviour
{
     public Button buttonLev1;
     public Button buttonLev2;
     public Button buttonLev3;
    void Start(){
         buttonLev2.interactable = false;
          buttonLev3.interactable = false;          
     }
     public void LoadA(string scenename)
    {    
        SceneManager.LoadScene(scenename);
    }
    void Update()
    {
     string time = System.DateTime.UtcNow.ToLocalTime().ToString("HH:mm");
     Debug.Log(time);
     string timeFin = "00:00";  
     // la j'essayais de trouver une solution pour le 2ème problème 
      string tomorrow = DateTime.Today.AddDays(1).ToString("mm:dd");
      
        if(PlayerPrefs.GetInt("levelComplete1")== 1  ){
            if(time== timeFin ){
             buttonLev2.interactable = true;
        }
        }
         if(PlayerPrefs.GetInt("levelComplete2")== 1  ){
             buttonLev3.interactable = true;
        }

    }
}

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: date et heure

Message par jmhoubre » 13 Juin 2021 14:54

Bonjour,

visiblement tu n'as pas utilisé ce que t'as écrit Max, c'est dommage. Datetime est une structure très utile du C#, complètement documentée et illustrée de nombreux exemples.

Je ne vois pas trop ce qu'il y a à ajouter à la réponse de Max.

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

Re: date et heure

Message par Max » 13 Juin 2021 16:22

jones a écrit :
13 Juin 2021 14:39
c'est à dire, effacer la progression SI "le niveau 2 n'est pas terminé le jour 2 (de minuit à minuit)
qu'entends-tu par effacer la progression ? Réinitialiser les valeurs DaltaTime ? Purger Les PlayerPrefs ?
Essais d'être plus précis, car là techniquement cela reste assez vague.

En relisant ton dernier script, j'éviterais les if(time== timeFin ) pour privilégier plutôt un if(time > timeFin ).
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

jones
Messages : 39
Inscription : 29 Jan 2021 11:01

Re: date et heure

Message par jones » 13 Juin 2021 16:26

j'ai passé toute la matinée avec datetime, et je n'ai pas réussi. j'ai essayé pleins de variants entre la documentation et les tutos... mais je n'ai pas réussi à trouver une solution spécifique pour mon problème.
là je cois que j'ai réussi à le résoudre, même si je pense que c'est de la pire façon qui soit...

Code : Tout sélectionner

        if(PlayerPrefs.GetInt("levelComplete1")== 1  ){
     string time = System.DateTime.UtcNow.ToLocalTime().ToString("HH:mm");
     string timeFin = "00:00"; 
          if(time == timeFin ){
          string today = DateTime.Today.ToString("dd:MM");
          string tomorrow = DateTime.Today.AddDays(1).ToString("dd:MM");  
          buttonLev2.interactable = true;
          if(today==tomorrow){
               if(PlayerPrefs.GetInt("levelComplete2")== 0  ){
              PlayerPrefs.DeleteAll();
               }
          }
        }
        }

jones
Messages : 39
Inscription : 29 Jan 2021 11:01

Re: date et heure

Message par jones » 13 Juin 2021 16:32

Max a écrit :
13 Juin 2021 16:22
En relisant ton dernier script, j'éviterais les if(time== timeFin ) pour privilégier plutôt un if(time > timeFin ).
oui, je crois aussi.
et je voulais dire purger les playerprefs. Un peu pour obliger le joueur à jouer tous les jours, sinon il recommence dés le début.
J'ai eu cette idée avec ma dernière expérience avec un Game Publisher. J'ai compris que le plus important pour ce genre de boite c'est la fidélité jour 1 et jour 7. Donc je crée un jeu de 7 niveaux où le joueur pourra avancer d'un niveau par jour... :diable: :diable:

jones
Messages : 39
Inscription : 29 Jan 2021 11:01

Re: date et heure

Message par jones » 14 Juin 2021 10:57

J'ai du rajouter une coroutine mais maintenant ça fonctionne comme je l'ai pensé au début même si ce n'est pas le meilleur script au monde.

Il me reste toutefois un petit point : c'est que je voudrais faire un compte à rebours de Maintenant (cette heure-ci) jusqu'à minuit, et là encore, j'ai beaucoup de mal.

ça serait top si quelqu'un pouvait me dire comment faire

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

Re: date et heure

Message par Max » 14 Juin 2021 18:49

Bonsoir,
jones a écrit :
14 Juin 2021 10:57
Il me reste toutefois un petit point : c'est que je voudrais faire un compte à rebours de Maintenant (cette heure-ci) jusqu'à minuit, et là encore, j'ai beaucoup de mal.
Tu peux définir un DateTime avec l'heure de minuit du jour, et faire la différence avec l'heure de moment, cela te donnera l'écart restant avant d'atteindre minuit.
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

jones
Messages : 39
Inscription : 29 Jan 2021 11:01

Re: date et heure

Message par jones » 14 Juin 2021 23:16

c'est incroyable, déjà il rien de rien sur le net puis je ne comprends pas qu'un truc pareil soit aussi compliqué. Toutefois, j'ai réussi à créer une méthode pour avoir un compte à rebours de "maintenant" à minuit.
Et ça fonctionne!! à un souci prés, d'ailleurs pourriez vous m'aider sur ce point, car je ne vois vraiment pas : en fait le problème est que les minutes changent quand les secondes arrivent à 30 et non pas à 0. :ghee:

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System;

public class levelSelector : MonoBehaviour
{
     public float secondQuiReste;
     public Text countDownText;

      float heureQuiReste;
      float minutesQuiRest;
       float SecondeQuiReste;
 void Update()
    {  

                  DateTime localDate = DateTime.Now;
           int hour = localDate.Hour;
           int minute = localDate.Minute;
           int second = localDate.Second;

         float hourInsecond= hour*3600;
         float mintuteInSecond = minute*60;
         float secondeInSeconde = second;
         float totalSecond = hourInsecond + mintuteInSecond + secondeInSeconde;
          StartCoroutine(countDown());
}
         IEnumerator countDown(){
             yield return new WaitForSeconds(1);
             secondQuiReste = ( (24 * 3600) - totalSecond);
             heureQuiReste =Mathf.Round(secondQuiReste/3600);
             minutesQuiRest=Mathf.Round((secondQuiReste%3600)/60);
             SecondeQuiReste =((secondQuiReste%3600)%60 );

              countDownText.text = heureQuiReste.ToString("00") +" : " + minutesQuiRest.ToString("00") +" : " +SecondeQuiReste.ToString("00");
             Debug.Log(secondQuiReste);
        }
}    
}

Répondre

Revenir vers « Scripting »