[Résolu] [MY-AL] Faire gameobject horloge à parir de UI

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

[Résolu] [MY-AL] Faire gameobject horloge à parir de UI

Message par freepl » 20 Déc 2019 16:00

Bonjour

Je poste ici alors que cela peut bien aussi être dans la rubrique UI.

J'ai sur ma scène un compteur éphéméride avec heure, jours, mois, année et time laps en script C#.
Z013.jpg
Z013.jpg (48.36 Kio) Consulté 1401 fois
Z015.jpg
Z015.jpg (169.88 Kio) Consulté 1401 fois
Je cherche à faire une horloge en réutilisant le même script ( moins le time lasp).

Code

Code : Tout sélectionner

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

public class InfoHorloge : MonoBehaviour
{

	public Text _afficheHorloge;
	public TOD_Sky tod_Sky;
	public TOD_Time tod_time;
	public InputField _hh;
	public InputField _mm;
	public InputField _jj;
	public InputField _ms;
	public InputField _aaaa;
	public InputField _cycle;
	private bool minute60 ;

	// Use this for initialization
	void Start ()
	{
		Reset ();
	}

	void Update ()
	{

		int heureCal = 0;

		if (tod_Sky.Cycle.Hour < (int)tod_Sky.Cycle.Hour)
			heureCal = (int)tod_Sky.Cycle.Hour - 1;
		else
			heureCal = (int)tod_Sky.Cycle.Hour;

		if (heureCal == 24) {
			heureCal = 0;
		}


		string heureTampo = heureCal.ToString ("00");
		string minuteTampo = Convert.ToInt32 ((tod_Sky.Cycle.Hour - (int)tod_Sky.Cycle.Hour) * 60.0f).ToString ("00");

		string jourTampo = tod_Sky.Cycle.Day.ToString ("00");
		string moisTampo = tod_Sky.Cycle.Month.ToString ("00");
		string anneeTampo = tod_Sky.Cycle.Year.ToString ("0000");

		//*******************************************************

		int ajout1heure = 0;  // variable à ajouter à l'heure pour la changer lors du passage de 60 à 00 mn

		if (((tod_Sky.Cycle.Hour - (int)tod_Sky.Cycle.Hour) * 60.0f) <= 59) {
			minuteTampo = minuteTampo;
			// si les minutes sont inférieures ou égale à 59, on affiche le memes chiffres de 0 à 59
		} else {
			minuteTampo = "00";// sinon on affiche 00 à la place de 59
			ajout1heure = heureCal + 1; // on ajoute +1 à integer heureCal pour faire changer le chiffre de l'heure
			heureTampo = ajout1heure.ToString ("00");
			// on converti ajout1heure en string pour l'écrire
			// Problème on a pour la minute Heure 60  : affichage (Heure +1) 00mn pendant 1 mn
			// puis pour (Heure+1) 00mn , on a aussi : affichage (Heure +1) 00mn pendant 1 mn
			// DONC 2 fois (Heure+1) 00mn ; soit 2 mn d'affichage avec (Heure+1) 00mn
		}
		//******************************************************************



		_afficheHorloge.text = heureTampo + ":" + minuteTampo + " - " + jourTampo + "/" + moisTampo + "/" + anneeTampo + " - Time Laps : " + _cycle.text;
	}

	public void ChangeHorloge ()
	{
		if (_hh.text != "" && _mm.text != "")
			tod_Sky.Cycle.Hour = Convert.ToSingle (_hh.text) + Convert.ToSingle (_mm.text) / 60.0f;

		if (_jj.text != "")
			tod_Sky.Cycle.Day = Convert.ToInt32 (_jj.text);

		if (_ms.text != "")
			tod_Sky.Cycle.Month = Convert.ToInt32 (_ms.text);

		if (_aaaa.text != "")
			tod_Sky.Cycle.Year = Convert.ToInt32 (_aaaa.text);

		if (_cycle.text != "" && _cycle.text != "0") {
			tod_time.DayLengthInMinutes = Convert.ToSingle (_cycle.text);
		} else if (_cycle.text == "0") {
			tod_time.DayLengthInMinutes = 1440.0f; // pour mettre au meme rythe que l'hoerloge pc 1440 pourquoi ??
		}

		if (Convert.ToInt32 (_ms.text) >= 4 && Convert.ToInt32 (_ms.text) <= 10)
			tod_Sky.World.UTC = 2.0f;
		else
			tod_Sky.World.UTC = 1.0f;
	}

	public void Reset ()
	{
		DateTime heureActuel = DateTime.Now;

		_hh.text = "" + heureActuel.Hour;
		_mm.text = "" + heureActuel.Minute;

		_jj.text = "" + heureActuel.Day;
		_ms.text = "" + heureActuel.Month;
		_aaaa.text = "" + heureActuel.Year;

		_cycle.text = "0";// attention 0 veux dire qu'en 0.00000sec le jour se fait, il faut mettre 3600 ( pour 1 heure ou 36 000 pour 10h pour 1 cycle jour nuit)

		ChangeHorloge ();
	}

}
Comment dois-je faire ?
Un cube pour l'horloge et un plane pour l'affichage des heures ? Sur quel élément mettre le script horloge ?

Merci
Dernière édition par freepl le 22 Déc 2019 10:30, édité 1 fois.

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: [MY-AL] Faire gameobject horloge à parir de UI

Message par freepl » 22 Déc 2019 10:29

Bonjour

Résolu.
Il faut passer de Screen Space Overlay
ScreenShot008.jpg
ScreenShot008.jpg (28.29 Kio) Consulté 1364 fois
à World Space pour être un élément de la scne et non plus de la fenêtre
ScreenShot011.jpg
ScreenShot011.jpg (9.58 Kio) Consulté 1364 fois

Répondre

Revenir vers « (C#) CSharp »