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 :
(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 :
(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.
[RESOLU] Double barre de temps
[RESOLU] Double barre de temps
Dernière édition par Alexis.B le 13 Mai 2020 13:48, édité 2 fois.
Re: Barre de temps "évolutive"
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:
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
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:
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
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
Re: Barre de temps "évolutive"
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
Re: Barre de temps "évolutive"
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 :
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);
}
}