[RESOLU] Double barre de temps

Questions à propos du GUI, y compris la partie script.
Alexis.B
Messages : 31
Inscription : 17 Avr 2020 12:51

[RESOLU] Double barre de temps

Message par Alexis.B » 08 Mai 2020 12:33

Bonjour,
Je n'arrive pas à trouver le bon mot pour le titre mais en gros actuellement j'ai une barre de temps avec une étoile (or ou argent) et le temps affiché sous l'étoile pour savoir combien de temps il reste avant de changer d'étoile :
Image
(https://drive.google.com/open?id=1wxVQx ... chB3IeNlNX)

Les étoiles changent bien, la barre s'écoule bien, le temps aussi mais je préférerai au lieu d'avoir le temps affiché sous l'étoile, avoir un marqueur (déplaçable en fonction du temps alloué à l'étoile) sur la barre qui une fois dépassé passerai à l'étoile argent :

Image
(https://drive.google.com/open?id=1lxsa6 ... Zl3tpoGnqd)

La 2e image n'est qu'un exemple pour essayer de mieux comprendre.
Ce que je cherche à savoir c'est comment, sur une image, placer un marqueur où je veux par rapport à un temps et en même temps gérer facilement de Fill Amount; je ne sais pas si ce que je dis est très clair.. mais j'espère que quelqu'un comprendra :)

Merci d'avance pour votre aide.
Dernière édition par Alexis.B le 13 Mai 2020 13:48, édité 2 fois.

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

Re: Barre de temps "évolutive"

Message par Max » 08 Mai 2020 13:58

Bonjour,

Si j'ai bien saisi, on parle d'éléments UI.
Il existe plusieurs techniques possibles. Tu peux faire une recherche sur internet avec les mots progress bar par exemple, ce n'est pas les ressources qui manquent..
Globalement, soit tu passes par les Sliders, (voir après comment interpoler avec deux couleurs), soit par des Images avec un masque, genre:
Image

PS: quand tu postes des images, essais de passer par un service permettant une bonne insertion dans les messages, comme décrit ici: Charte:Poster une image
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

Alexis.B
Messages : 31
Inscription : 17 Avr 2020 12:51

Re: Barre de temps "évolutive"

Message par Alexis.B » 11 Mai 2020 10:26

Désolé je réponds un peu tard, merci pour ta réponse, je regarde ça et je reviens te dire ce que ça donne :)

Alexis.B
Messages : 31
Inscription : 17 Avr 2020 12:51

Re: Barre de temps "évolutive"

Message par Alexis.B » 13 Mai 2020 13:47

Problème résolu, internet ne m'a pas vraiment aidé mais finalement la solution n'était pas très compliquée : ma barre de temps est composée de 2 images, une première avec le fill.Amount à 1 qui commence à diminuer dès le début et une 2e avec le fill.Amount inférieur suivant les temps demandés (temps pour or et temps max) et qui ne diminue que lorsque le temps pour l'or est écoulé.

je vous partage mon script pour les personnes intéressée, étant donné qu'il n'y a pas de visuel je ne sais pas si ce sera très clair :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class TimeBar : MonoBehaviour
{
    public Image timeBar;
    public Image timeBarArgent;
    public float maxTime;
    public float totalTime;
    public float timeRemaining;
    public float timeGold;
    public float timeSilver;
    public float goldTime;
    public float silverTime;
    public bool isGameStart = false;
    public Text totalTimeText;
    public Text timeSilverLeft;
    public GameObject goldUI;
    public GameObject silverUI;
    public GameObject failUI;


    // Start is called before the first frame update
    void Start()
    {
        timeRemaining = maxTime;
        totalTime = 0f;
        timeSilver = maxTime;
        goldTime = timeGold;
        silverTime = maxTime;
        timeBarArgent.fillAmount = (maxTime - timeGold) / 10;
    }

    // Update is called once per frame
    void Update()
    {
        if (isGameStart)
        {
            totalTime += Time.deltaTime;

            if (timeRemaining > 0)
            {
                timeGold -= Time.deltaTime;
                timeSilver -= Time.deltaTime;
                timeRemaining -= Time.deltaTime;
                timeBar.fillAmount = timeRemaining / maxTime;
                if(timeBar.fillAmount <= timeBarArgent.fillAmount)
                {
                    timeBarArgent.fillAmount = timeRemaining / maxTime;
                }
            }
 
            if (totalTime > goldTime)
            {
                GoldToSilver();
            }

            if (totalTime > silverTime)
            {
                SilverToFail();
            }            
        }
        totalTimeText.text = "" + totalTime.ToString("F") + "";
        timeSilverLeft.text = "" + timeSilver.ToString("F") +"";
    }

    void GoldToSilver()
    {
        goldUI.SetActive(false);
        silverUI.SetActive(true);
    }

    void SilverToFail()
    {
        silverUI.SetActive(false);
        failUI.SetActive(true);
    }
}

Répondre

Revenir vers « L'interface GUI »