Fazer uma contagem de tempo regressiva
+3
George Lucas Vieira
JohnRambo
Marc7
7 participantes
Página 1 de 1
Fazer uma contagem de tempo regressiva
Bom dia a todos,
tenho aqui um menu Continue? que, quando o jogador morre todas as vidas, aparece esse menu e uma contagem regressiva vai começar de 10 a 0.
quando o jogador morre a ultima vida, aparece o menu e tudo fica paralisado porque usei o comando Time.timeScale = 1f; , que paralisa o tempo corrente, então tudo paralisa.
mas eu queria que, mesmo o menu ativado e tudo parado, um outro numero comece a reduzir de 10 a 0, que é aquele classico tempo regressivo que a gente tem para apertar start e continuar antes que o tempo acaba.
existe algo como "ignoreTimeScale" na Unity, ou algo parecido, que me permite fazer uma segunda contagem mesmo com o Time.timeScale ativado?
tenho aqui um menu Continue? que, quando o jogador morre todas as vidas, aparece esse menu e uma contagem regressiva vai começar de 10 a 0.
quando o jogador morre a ultima vida, aparece o menu e tudo fica paralisado porque usei o comando Time.timeScale = 1f; , que paralisa o tempo corrente, então tudo paralisa.
mas eu queria que, mesmo o menu ativado e tudo parado, um outro numero comece a reduzir de 10 a 0, que é aquele classico tempo regressivo que a gente tem para apertar start e continuar antes que o tempo acaba.
existe algo como "ignoreTimeScale" na Unity, ou algo parecido, que me permite fazer uma segunda contagem mesmo com o Time.timeScale ativado?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Saudações Marc7!
Bom, não dá pra fazer muita coisa com Time Scale zerado, mas você pode fazer um teste com o Time.realtimeSinceStartup, veja:
https://docs.unity3d.com/ScriptReference/Time-realtimeSinceStartup.html
Dúvidas, estamos à disposição!
Bom, não dá pra fazer muita coisa com Time Scale zerado, mas você pode fazer um teste com o Time.realtimeSinceStartup, veja:
https://docs.unity3d.com/ScriptReference/Time-realtimeSinceStartup.html
Dúvidas, estamos à disposição!
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Primeiramente, corrigindo o que eu disse:
usei o comando Time.timeScale = 0f; , que paralisa o tempo corrente (o 0 pára tudo e o 1 retorna o tempo corrente)
Rambo eu cheguei a tentar com o Time.realtimeSinceStartup, mas não funcionou, talvez eu não tenha usado da forma correta.
vou postar o script onde estou fazendo, vou só esperar a moderação corrigir o site porque não tenho opção nenhuma na resposta rápida, não aparece botão nenhum.
usei o comando Time.timeScale = 0f; , que paralisa o tempo corrente (o 0 pára tudo e o 1 retorna o tempo corrente)
Rambo eu cheguei a tentar com o Time.realtimeSinceStartup, mas não funcionou, talvez eu não tenha usado da forma correta.
vou postar o script onde estou fazendo, vou só esperar a moderação corrigir o site porque não tenho opção nenhuma na resposta rápida, não aparece botão nenhum.
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Bom, ao invés de usar o Time.timeScale = 0, tente fazer à modo grosso, que seria desativando todos os scripts indesejáveis quando o Player morrer. Pra não ficar muito bagunçado, aconselho-o à criar um método somente para isso, algo como:
- Código:
public void AtivarScripts(){
PlayerMovement.enabled = true;
PlayerAnimations.enabled = true;
PlayerHealth.enabled = true;
EnemyBehaviour.enabled = true;
}
public void DesativarScripts(){
PlayerMovement.enabled = false;
PlayerAnimations.enabled = false;
PlayerHealth.enabled = false;
EnemyBehaviour.enabled = false;
}
George Lucas Vieira- Avançado
- PONTOS : 3391
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
ou ate trabalhar um pouco com enum
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Verdade! Se você conseguir trabalhar com Enum, vai facilitar muito sua vida e o script vai ficar bem mais organizado.weslleyFx escreveu:ou ate trabalhar um pouco com enum
George Lucas Vieira- Avançado
- PONTOS : 3391
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Beleza George posso testar esse script depois!
Como o weslley falou sobre usar o enum, ainda não estou familiarizado com ele mas pode ser que funcione para o que quero fazer. vou pedir ajuda de vocês para isso.
aqui está o script que faz aparecer um painel de Continue? onde terá a contagem regressiva:
esse script está anexado a um objeto chamado "GCGOver".
tenho um outro script chamado "CountdownManager" que faz aparecer o numero 10 na hora que o menu abrir, este script está anexado a um objeto texto UI que vai aparecer junto com o painel Continue?. Na verdade o numero 10 vai ser um HUD.
no primeiro script acima, o que voces sugerem com o uso do enum para fazer essa contagem regressiva?
Como o weslley falou sobre usar o enum, ainda não estou familiarizado com ele mas pode ser que funcione para o que quero fazer. vou pedir ajuda de vocês para isso.
aqui está o script que faz aparecer um painel de Continue? onde terá a contagem regressiva:
- Código:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
public class GCGameOver : MonoBehaviour {
public GameObject menuGameOver;
public GameObject textoGameOverFinal;
public int opcao = 1;
public float duracaoGameOver = 7f;
public bool ativandoMenu = false;
public GameObject[] objetoGCGOver;
public bool posicao;
public float pastTime;
public float contagemRegress = 10;
public AudioSource somOpcoes_;
private LifeScript scriptVidas;
private MovimentoBackground cenario;
private int quantCreditos;
void Start() {
somOpcoes_ = GetComponent<AudioSource>();
}
void Awake() {
objetoGCGOver = GameObject.FindGameObjectsWithTag("gameOver");
if (objetoGCGOver.Length >= 2) {
Destroy(objetoGCGOver[0]);
}
DontDestroyOnLoad(transform.gameObject);
}
void Update() {
var vidas = LifeManager.life;
var quantCreditos = GCMenuPrincipal.credits;
pastTime += Time.deltaTime;
//Abre o menu Game Over quando as vidas chegarem a zero.
if (vidas <= 0 && !ativandoMenu) {
if (quantCreditos > 0) {
ativandoMenu = true;
Invoke("AtivaMenu", 1f); //Chama apos 1 segundo.
contagemRegress -= Time.realtimeSinceStartup / 3;
}
}
if (!ativandoMenu) {
opcao = 1;
}
//So posso selecionar as opçoes Sim e Nao se ativandoMenu for verdadeiro.
if (ativandoMenu) {
gameOverOptions();
botaoSim();
botaoNao();
}
if (quantCreditos <= 0) {
if (vidas <= 0) {
Invoke("AtivaGameOverFinal", 1f); //Chama apos 1 segundo.
if (pastTime >= duracaoGameOver) {
pastTime = 0;
if (posicao) {
posicao = false;
}
else {
posicao = true;
}
}
if (!posicao) {
SceneManager.LoadScene("Main");
GCMenuPrincipal.habilitaMenu = 0;
}
}
}
}
void gameOverOptions() {
var imagemSim = GameObject.Find("YesImage").GetComponent<Image>();
var imagemNao = GameObject.Find("NoImage").GetComponent<Image>();
//Selecionar as opçoes Sim e Nao atraves das teclas frente e tras.
if (Input.GetKeyDown("down")) {
opcao += 1;
somOpcoes_.Play();
}
if (Input.GetKeyDown("up")) {
opcao -= 1;
somOpcoes_.Play();
}
if (opcao == 3) {
if (Input.GetKeyDown("down")) {
opcao -= 2;
}
}
if (opcao == 0) {
if (Input.GetKeyDown("up")) {
opcao += 2;
}
}
if (opcao == 1) {
imagemSim.enabled = true;
imagemNao.enabled = false;
}
if (opcao == 2) {
imagemSim.enabled = false;
imagemNao.enabled = true;
}
}
void AtivaMenu() {
Time.timeScale = 0f;
menuGameOver.SetActive(true);
}
void AtivaGameOverFinal() {
textoGameOverFinal.SetActive(true);
}
public void botaoNao() {
if (opcao == 2) {
if (Input.GetKeyDown("return")) {
Time.timeScale = 1f;
menuGameOver.SetActive(false);
ativandoMenu = false;
SceneManager.LoadScene("Main");
GCMenuPrincipal.habilitaMenu = 1;
GCMenuPrincipal.level = PlayerPrefs.GetInt("NivelSelecionado");
GCMenuPrincipal.player = PlayerPrefs.GetInt("VidaSelecionada");
GCMenuPrincipal.credits = PlayerPrefs.GetInt("CreditoSelecionado");
}
}
}
public void botaoSim() {
if (opcao == 1) {
if (Input.GetKeyDown("return")) {
Time.timeScale = 1f;
menuGameOver.SetActive(false);
SceneManager.LoadScene("Level1");
ativandoMenu = false;
GCMenuPrincipal.credits -= 1;
}
}
}
void GameOverDefault() {
opcao = 1;
}
}
esse script está anexado a um objeto chamado "GCGOver".
tenho um outro script chamado "CountdownManager" que faz aparecer o numero 10 na hora que o menu abrir, este script está anexado a um objeto texto UI que vai aparecer junto com o painel Continue?. Na verdade o numero 10 vai ser um HUD.
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class CountdownManager : MonoBehaviour {
public static int contador;
private Text number;
void Awake() {
number = GetComponent<Text>();
contador = 10;
}
void Update() {
number.text = "" + contador;
}
}
no primeiro script acima, o que voces sugerem com o uso do enum para fazer essa contagem regressiva?
Última edição por Marc7 em Qua Ago 31, 2016 12:43 am, editado 1 vez(es)
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Marc7, tente colocar os códigos dentro da caixa de códigos. Se o seu navegador não suporta java ou não está vendo a barra, tente usar estes comandos:
Por que se não, vários componentes do script são perdidos.
- Código:
[code]
seu código aqui
[/code]
Por que se não, vários componentes do script são perdidos.
Re: Fazer uma contagem de tempo regressiva
MarcosSchultz escreveu:Marc7, tente colocar os códigos dentro da caixa de códigos. Se o seu navegador não suporta java ou não está vendo a barra, tente usar estes comandos:
- Código:
[code]
seu código aqui
[/code]
Por que se não, vários componentes do script são perdidos.
Marcos, agora que eu resolvi o problema editei o ultimo post com os scripts
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
E aí pessoal, alguma sugestão sobre como usar o enum para fazer a contagem regressiva?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Marc7 escreveu:E aí pessoal, alguma sugestão sobre como usar o enum para fazer a contagem regressiva?
Enum? contagem regressiva?
Especifique um pouco melhor, que o meu próximo tutorial da série de C# é justamente sobre enum.
Re: Fazer uma contagem de tempo regressiva
Marcos lá em cima no primeiro post eu explico o que exatamente quero fazer, aí o weslley sugeriu fazer isso com enum.
O Time.timescale = 0; interrompe tudo então não teria como eu fazer outro cronometro, mas usando enum é possivel?
O Time.timescale = 0; interrompe tudo então não teria como eu fazer outro cronometro, mas usando enum é possivel?
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Acho que a ideia do enum dele seira o seguinte, em algum script principal como um GameManager ter um enum com estados do jogo e um deles seria por exemplo INGAME e nesse estado tudo funcionaria ok, e tambem um estado PAUSE que nao executaria nada e isso daria a impressão de pause.
Re: Fazer uma contagem de tempo regressiva
Ah ta, isto vai ser um outro tutorial mais para frente... você está querendo trabalhar com escalas de tempo independentes do Time.deltaTime... existem MUITAS escalas no Timer da Unity, mas depende para que exatamente você quer usar, por que é bem difícil separar parâmetros com Time.deltaTime e outros com outra escala... dependendo do que você está fazendo, é bem trabalhoso.
Quero tentar ver se consigo gravar alguma coisa fim de semana... mas ta difícil com a faculdade.
Quero tentar ver se consigo gravar alguma coisa fim de semana... mas ta difícil com a faculdade.
Re: Fazer uma contagem de tempo regressiva
Pode tentar usar isso:
- Código:
print (System.DateTime.Now.Second);
RenanMSV- Instrutor
- PONTOS : 4483
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
Ok Marcos, aguardo seu video explicando sobre os tempos.
e é isso mesmo, eu precisaria de uma escala de tempo à parte que conte deforma regressiva e que não seja afetada quando os outros tempo pararem.
Renan não entendi esse codigo, me explique melhor!
e é isso mesmo, eu precisaria de uma escala de tempo à parte que conte deforma regressiva e que não seja afetada quando os outros tempo pararem.
Renan não entendi esse codigo, me explique melhor!
Marc7- Mestre
- PONTOS : 3443
REPUTAÇÃO : 28
Respeito as regras :
Re: Fazer uma contagem de tempo regressiva
O próximo vídeo da série de C# vai ser COM CERTEZA sobre o TIME da Unity
Tópicos semelhantes
» [RESOLVIDO] Contagem Regressiva de Tempo
» Como fazer contagem de tempo em jogo offline?
» Colocar contagem regressiva
» como fazer um Objeto ir parando com o tempo?
» Ajuda e Contagem regressiva com um barra
» Como fazer contagem de tempo em jogo offline?
» Colocar contagem regressiva
» como fazer um Objeto ir parando com o tempo?
» Ajuda e Contagem regressiva com um barra
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos