Esse Script está certo ? Como melhorá-lo ?
3 participantes
Página 1 de 1
Esse Script está certo ? Como melhorá-lo ?
- Código:
using UnityEngine;
using UnityEngine.UI
using System.Collections;
public class Relogio : MonoBehaviour;
{
[ Header (" UI Text com Hora e Minuto " )]
public Text Hora;
public Text Minuto;
public Font Fonte;
public Color Cor = Color.White;
[ Header (" Hora do inicio " )]
[ Range (00,05)] // Valor minimo-máximo das Hrs
public int HoraAtual = 00;
[ Range (00,59)] // Valor minimo-máximo dos Minutos
public int MinutoAtual = 00;
[ Header (" Velocidade do Relógio " )]
public float VelocidadeDoRelógio = 1f;
private float Contador = 0;
void fixedUpdate () {
Hora.text = HoraAtual.ToString ();
Minuto.text = MinutoAtual.ToString ();
Relogio ();
}
void Relogio () {
Contador += Time.deltaTime * VelocidadeDoRelogio
if ( Contador >= 1 ) {
MinutoAtual = MinutoAtual++
Contador = 0
}
if ( MinutoAtual >= 60 ) {
HoraAtual = HoraAtual++;
MinutoAtual = 0
}
switch ( VelocidadeDoRelogio )// se a velocidade normal de um relogio é 10f irei reduzir a float para que o tempo entre 00:00 as 05:00 não demore 5 horas de fato e passe em +- 10 minutos /*
{
case (( HoraAtual ) && ( MinutoAtual )) == 00:00
VelocidadeDoRelogio = 1f;
case (( HoraAtual ) && ( MinutoAtual )) == 01:00
VelocidadeDoRelogio = 1.2f;
case (( HoraAtual ) && ( MinutoAtual )) == 02:00
VelocidadeDoRelogio = 1.5f;
case (( HoraAtual ) && ( MinutoAtual )) == 03:00
VelocidadeDoRelogio = 2.0 f;
case (( HoraAtual ) && ( MinutoAtual )) == 04:00
VelocidadeDoRelogio = 2.5f;
}
}
Olá pessoal, sou Leigo em programação e meio burro para pensar hahaha. Mas msm assim continuo estudando e querendo aprender a cada dia mais sobre programação.
A idéia é criar um relógio que vá de 00:00 até 05:00 hrs e com passar de cada hora velocidade do relógio diminui. Tbm queria saber como fazer para que mostre na tela o relógio atualizando de hora em hora e não tipo 00:01 , 00:02, 00:03
Se alguem puder me ajudar com criticas construtivas agradeceria muito.
Gabriel M- Membro
- PONTOS : 1840
REPUTAÇÃO : 6
Respeito as regras :
Re: Esse Script está certo ? Como melhorá-lo ?
Tem algumas coisas que podem melhorar sim no código, por exemplo, ao invés de usar um contador dentro do FixedUpdate, você pode usar uma Corrotina pra fazer esse tempo, aliás ela serve para essas situações.
Basta definir um tempo para essa Corrotina ser chamada.
Outra coisa, como a velocidade aumenta em 0.5 a cada uma hora, não precisa daquela cláusula do switch case.
E mais,acredito que seu script não limite de 0 à 5, porque vejo que em nenhum momento o relógio reseta pra zero quando ele tiver em 5, ele vai incrementar o relógio pra 6, 7, 8 e assim sucessivamente.
Precisa fazer uma validação pra ver se a hora quando for mudar já é 5, se sim, ele reseta pra 0 ao invés de aumentar pra 6.
Por fim, para o relógio mostrar só a hora, sem ter que passa minuto a minuto, basta chamar uma função que mostre na hora quando a hora atualizar.
O script refatorado seria mais ou menos assim:
Basta definir um tempo para essa Corrotina ser chamada.
Outra coisa, como a velocidade aumenta em 0.5 a cada uma hora, não precisa daquela cláusula do switch case.
E mais,acredito que seu script não limite de 0 à 5, porque vejo que em nenhum momento o relógio reseta pra zero quando ele tiver em 5, ele vai incrementar o relógio pra 6, 7, 8 e assim sucessivamente.
Precisa fazer uma validação pra ver se a hora quando for mudar já é 5, se sim, ele reseta pra 0 ao invés de aumentar pra 6.
Por fim, para o relógio mostrar só a hora, sem ter que passa minuto a minuto, basta chamar uma função que mostre na hora quando a hora atualizar.
O script refatorado seria mais ou menos assim:
- Código:
using UnityEngine;
public class TimeManager : MonoBehaviour {
public UnityEngine.UI hourUI;
public float timeToUpdate = 1; // tempo pra atualizar os minutos, no caso aqui, um segundo
private float timeVeloctity = 1;
private minute = 0, hour = 0;
private Start(){
StartCorroutine (TimeUpdate(timeVeloctity*timeToUpdate));
}
private IEnumerator TimeUpdate (float timeToWait){
yield return new WaitForSeconds (timeToWait);
minute++;
if(minute >= 60){
minute = 0;
hour = hour == 5 ? 0 : (hour + 1); // limitando até 5 horas
timeVeloctity = hour == 5 ? 1 : (timeVeloctity + 0.5F);
UpdateUI();
StartCorroutine (TimeUpdate (timeVeloctity*timeToWait));
}
}
private void UpdateUI(){
hourUI.text = "0" + hour.ToString() + ":00";
}
}
Re: Esse Script está certo ? Como melhorá-lo ?
MayLeone obg por sua ajuda , msm tendo elementos que não conhecia como o Start Corroutine entendi bem.
VC flw que para a velocidade do relógio aumentar a cada 0.5 a cada hora não precisa do comando switch case, se fosse você como você faria ?
E outra, como criar a função que você disse para atualizar na tela de hora em hora.
Tipo 00:00 , 01:00 , 02:00
Eu teria que deixar o contador , minute e hour no private ? Parece confuso mas é pq queria tentar criar o sistema de horas estilo o do game Five Night's at Freddy.
VC flw que para a velocidade do relógio aumentar a cada 0.5 a cada hora não precisa do comando switch case, se fosse você como você faria ?
E outra, como criar a função que você disse para atualizar na tela de hora em hora.
Tipo 00:00 , 01:00 , 02:00
Eu teria que deixar o contador , minute e hour no private ? Parece confuso mas é pq queria tentar criar o sistema de horas estilo o do game Five Night's at Freddy.
Gabriel M- Membro
- PONTOS : 1840
REPUTAÇÃO : 6
Respeito as regras :
Re: Esse Script está certo ? Como melhorá-lo ?
- Código:
public float maxMinute = 5; //MINUTO MAXIMO
public float defaultSpeed = 0.5f; //SPEED ADICIONAL
private int _CurrentMinute; //MINUTO ATUAL
private float _CurrentTime = 0; //TEMPO ATUAL
public Text hourText;
private IEnumerator Start()
{
while (true)
{
_CurrentTime += Time.deltaTime * (defaultSpeed * (_CurrentMinute + 1)); //CALCULANDO TEMPO MAIS UM SPEED ADICIONAL
_CurrentTime = _CurrentMinute > (maxMinute - 1) ? 0 : _CurrentTime; //LIMITE DE 5 HORAS CONTANDO COM O ZERO
_CurrentMinute = (int)_CurrentTime / 60; //CALCULANDO HORA
hourText.text = string.Format("{0}:{1}", _CurrentMinute.ToString("00"), (_CurrentTime % 60).ToString("00")); //IXIBINDO TEMPO
yield return null;
}
}
Weslley- Moderador
- PONTOS : 5729
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Esse Script está certo ? Como melhorá-lo ?
Sim, tudo o que eu postei já está no código de exemplo que eu postei.
A substituição do switch case está nessa linha:
A substituição do switch case está nessa linha:
- Código:
if(minute >= 60) // a hora vai atualizar
{
timeVeloctity = hour == 5 ? 1 : (timeVeloctity + 0.5F);
}
Re: Esse Script está certo ? Como melhorá-lo ?
Vlw cara, como disse ainda estou aprendendo e dps que fui interpretar direito. Só mais uma dúvida. Na linha 18 vc limitou até 5 horas. Logo em seguida posso adicionar um LoadScene ?
Gabriel M- Membro
- PONTOS : 1840
REPUTAÇÃO : 6
Respeito as regras :
Re: Esse Script está certo ? Como melhorá-lo ?
Ah, vc quer que quando chegue em 5 horas mude a cena? Então não é um horário com loop, sendo assim, é mais fácil ainda.
O script fica assim:
O script fica assim:
- Código:
using UnityEngine;
public class TimeManager : MonoBehaviour {
public float timeToUpdate = 1;
public UnityEngine.UI hourUI;
private float timeVeloctity = 1;
private float minute = 0, hour = 0;
private void Start(){
StartCorroutine (TimeUpdate (timeVeloctity*timeToUpdate));
}
private IEnumerator TimeUpdate (float timeToWait){
yield return new WaitForSeconds (timeToWait);
minute++;
if(minute >= 60){
minute = 0;
timeVeloctity += 0.5F;
UpdateHour();
UpdateUI ();
}
StartCorroutine (TimeUpdate (timeVeloctity * timeToUpdate));
}
private void UpdateHour(){
if(hour == 5){
StopCorroutine("TimeUpdate");
SceneManagment.SceneManager.LoadScene(); // cena a carregar
} else hour++;
}
private void UpdateUI (){
hourUI.text = "0" + hour.ToString() + ":00";
}
}
Re: Esse Script está certo ? Como melhorá-lo ?
Sim pq no caso a idéia é um game ( nada profissional apenas para alto conhecimento e brincar conhecendo a Unity e C# ) onde o player sobrevive das 00:00 as 05:00 hrs numa floresta, caso o player sobreviva até 05:00 hrs queria carregar uma cena parabenizando o jogador ou algo do tipo, mas o que tava pegando era esse script. Obrigado vc me ajudou muito além de me ensinar coisas que eu não sabia. Ainda bem que tem pessoas como vc que tem um bom conhecimento e passa adiante, Vlw msm amigo
Gabriel M- Membro
- PONTOS : 1840
REPUTAÇÃO : 6
Respeito as regras :
Tópicos semelhantes
» Oq esta de errado com esse script?
» Como eu posso resumir esse script?
» Alguém pode me dizer o que esse script está fazendo?
» Porque esse script não esta funcionando alguém poderia me explicar ??
» Como funciona esse script?!
» Como eu posso resumir esse script?
» Alguém pode me dizer o que esse script está fazendo?
» Porque esse script não esta funcionando alguém poderia me explicar ??
» Como funciona esse script?!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos