[RESOLU] date et heure

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

Re: date et heure

Message par jones » 27 Juin 2021 16:40

en fait, je l'ai refait hier, en mettant objectifMinuit dans Start et ça n'a pas marché non plus

Code : Tout sélectionner


    void Start(){
           DateTime now = DateTime.Now;
            objectifMinuit = new DateTime(now.Year, now.Month, now.Day+1, 00, 00, 00);           
     }
   void Update(){
   
if(PlayerPrefs.GetInt("levelComplete1")== 0 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){               
                   buttonLev2.interactable = false; 
           }
           
if(PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){
                   buttonLev2.interactable = false; 
            DateTime localtime = DateTime.UtcNow.ToLocalTime();
            
            buttonLev2.GetComponentInChildren<Text>().text  =(objectifMinuit-localtime).ToString();          
                     if( localtime > objectifMinuit){
                    PlayerPrefs.SetInt("Level2Ouvert", 1);
                  }
           }
if( PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 1 ){
                buttonLev2.interactable = true;
                buttonLev2.GetComponentInChildren<Text>().text =("level 02");
                 DateTime localtime = DateTime.UtcNow.ToLocalTime();

                  if( PlayerPrefs.GetInt("levelComplete2")== 0 ){
                                 petitText2.text = (objectifMinuit-localtime).ToString(); 
                                 if( localtime > objectifMinuit){
                                   petitText2.text  ="";
                                   PlayerPrefs.DeleteAll();
                                 }
                  if ( PlayerPrefs.GetInt("levelComplete2")== 1){
                                   petitText2.text  ="";
                                   buttonLev2.interactable = true;         
                                 } 
                  }
        }

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

Re: date et heure

Message par Max » 27 Juin 2021 18:00

Tu sembles afficher dans ta partie UI le temps restant. Tu dois bien voir je pense si c'est cohérent. Ou si tu as plutôt un soucis dans l'organisation des tes différents tests. Le soucis ce situe peut-être plutôt là plus que dans la partie décomptage.
D'ailleurs, j'ai toujours du mal à comprendre pourquoi cette partie est dans l'Update. Ce genre de setting se fait en général soit en début de niveau, soit lors d'un événement spécifique, et/ou en fin de niveau. Faire des tests comme cela sur tes Playerprefs plusieurs milliers de fois par minute, est-ce vraiment utile ?
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 » 27 Juin 2021 18:33

ah ouiiii, pas bête. c'est vrai que je pourrais laisser les playerprefs dans le Start(). il y a juste le localTime que je garde dans l'update. Je vais me pencher sur ça.

Sinon, dés lorsque, je choisis une heure d'aujourd'hui, par exp dans une heure, je teste, ça fonctionne nickel. Le bouton du Level2 s'active et il y a le deuxième compte à rebours qui fonctionne. C'est pour ça que je n'ai pas remis en question ma logique. mais dés lorsque je met day+2 à minuit, ça ne fonctionne plus, le bouton reste inactivé et le compte à rebours redémarre J'ai soupçonné la deuxième partie du script, celle qui marcher le 2éme compte à rebours uns fois que le bouton s'active alors je l'ai supprimé pour voir mais pareil, ça donne le même résultat.

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

Re: date et heure

Message par jones » 27 Juin 2021 20:58

alors, je viens de tester comme tu m'as dit

Code : Tout sélectionner

public class levelSelector : MonoBehaviour
{
 public DateTime  objectifMinuit ;
 public DateTime localtime=DateTime.UtcNow.ToLocalTime();
 
  void Start(){
        
           DateTime now = DateTime.Now;
            objectifMinuit = new DateTime(now.Year, now.Month, now.Day+1, 00, 00, 00);
         
          if(PlayerPrefs.GetInt("levelComplete1")== 0 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){               
                   buttonLev2.interactable = false; 
           }
           
    if(PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){
                   buttonLev2.interactable = false; 
          //  DateTime localtime = DateTime.UtcNow.ToLocalTime();
            
            buttonLev2.GetComponentInChildren<Text>().text  =(objectifMinuit-localtime).ToString();          
                     if( localtime > objectifMinuit){
                    PlayerPrefs.SetInt("Level2Ouvert", 1);
                  }
           }

    if( PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 1 ){
                buttonLev2.interactable = true;
                buttonLev2.GetComponentInChildren<Text>().text =("level 02");
                // DateTime localtime = DateTime.UtcNow.ToLocalTime();

                  if( PlayerPrefs.GetInt("levelComplete2")== 0 ){
                                 petitText2.text = (objectifMinuit-localtime).ToString(); 
                                 if( localtime > objectifMinuit){
                                   petitText2.text  ="";
                                   PlayerPrefs.DeleteAll();
                                 }
                                  if ( PlayerPrefs.GetInt("levelComplete2")== 1){
                                   petitText2.text  ="";
                                   buttonLev2.interactable = true;         
                                 } 

                  }
        }
     }   
     }
en fait j'ai juste tout mis dans le Start(); résultat: le compte à rebours sur le bouton est figé comme on pouvait s'y attendre , mais il se réinitialise à chaque fois que je change de scène ou que je ferme et ouvre. Je vais donc tester comme ça ; si ça marche ça me mettra surement sur une piste.

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

Re: date et heure

Message par jones » 28 Juin 2021 11:12

idem
et pourtant, tu vois quand le premier compte à rebours se termine, je fait "level2ouvert=1", je vérifie dans le registre et c'est bien "level2ouvert=1". Donc normalement ça passe à la condition suivante qui ouvre le boutonLevel2 mais non, c'est toujours fermé avec recommencent du compte à rebours :? :?
je vais donc essayer en mettant cette condition au début

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

Re: date et heure

Message par jones » 30 Juin 2021 06:55

hey Max, ça y est!!!! ça fonctionne!!!!
en fait, il fallait enregistrer la date.
la variable "level1FstTime", c'est pour que la date ne s'enregistre qu'une seule fois.
c'est pas parfaitement optimisé et puis je devrais mettre tout ça dans Start() comme tu me l'a recommandé mais d'ici là, c'est déjà ça de fait.
Donc ce script traite seulement de la première partie, c'est à dire, qu'une fois le niveau 1 complété, le niveau 2 s'ouvre à minuit.

Code : Tout sélectionner

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

public class levelSelectorMRZ : MonoBehaviour
{
    public Button buttonLev1,buttonLev2;
    public Text petitText2;
    
    public DateTime DTlocalTimeSaved;
    public DateTime currentTime;
    public DateTime tomorrow ;
     public static levelSelectorMRZ instance;

    public void Awake(){

        if(instance != null){
           
            return;
        }
        instance = this;
    
    }
    void Start()
    {
       
         
    }

    void Update()
    {
        currentTime = DateTime.UtcNow.ToLocalTime(); 

if(PlayerPrefs.GetInt("levelComplete1")== 0 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){               
                   buttonLev2.interactable = false; 
           }

if(PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 0 ){
                    buttonLev2.interactable = false; 
               
               if(loadAndSaveData.instance.level1FstTime==0){
                        String localTimeSaved = System.DateTime.UtcNow.ToLocalTime().ToString();
                        PlayerPrefs.SetString("localTimeSaved", localTimeSaved);                
                        PlayerPrefs.SetInt("level1FstTime", 1);
               }     
                    DTlocalTimeSaved = DateTime.Parse(PlayerPrefs.GetString("localTimeSaved"));
                     DateTime now = DTlocalTimeSaved;
                     tomorrow = new DateTime(now.Year, now.Month, now.Day+1, 0, 0, 0);
                     
                     // si vous préférez ajouter un délai de 24h plutôt qu'une heure précise : 
                     // // tomorrow = DateTime.Today.AddDays(1);
         
                     buttonLev2.GetComponentInChildren<Text>().text  =(tomorrow-currentTime).ToString();        
                     if( currentTime >=tomorrow){
                    PlayerPrefs.SetInt("Level2Ouvert", 1);
                  }

if( PlayerPrefs.GetInt("levelComplete1")== 1 && PlayerPrefs.GetInt("Level2Ouvert")== 1 ){
                buttonLev2.interactable = true;
                buttonLev2.GetComponentInChildren<Text>().text =("level 02");
                  }
}

    }
}
Merci Max de toute ton aide, je reviendrai dans quelques jours pour vous montrer le résultat final. :coeur: :coeur:

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

Re: date et heure

Message par Max » 30 Juin 2021 08:16

Pas de soucis. On peut passer le sujet en résolu alors ?
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 » 30 Juin 2021 11:49

oui bien sûr. :)

Répondre

Revenir vers « Scripting »