Problema com contator
+2
NKKF
DUT
6 participantes
Página 1 de 1
Problema com contator
Eu estou fazendo um script do HUD do meu jogo e ele contem Fome,Sede,Energia,Vida......Quando o jogador começar o jogo,o boneco vai ter 100 de vida,fome,sede e unidades de comida no saco de comida e a cada 6 segundos 2 unidades de comida do saco vai embora,quando o saco de comida ficar em 0,o contator do de fome começa,a cada 6 segundos cai 1 de fome,e quando fome chegar a 0,a cada 7 segundos 1 de vida cai.Só que ta dando problema,quando o saco de comida acaba,a fome meio que pausa por 6 segundos e depois cai mó rapido pra 0 e depois acontece a mesma coisa com a vida!em vez de contar 6 e 7 segundos!
Meu script:
Oque ta dando errado?Não to conseguindo resolver
Meu script:
- Código:
using UnityEngine.UI;
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using System.Linq;
public class HUD : MonoBehaviour {
public float Vida = 100,Fome = 100,SacoDeComida = 5,Sede = 100;
public Text TextoSaude;
public Text TextoFome2;
public Text TextoSacoDeComida;
public Text TextoSede;
void Start () {
StartCoroutine("Contador");
StartCoroutine("Contador2");
}
void Update () {
//Saco de comida
if (SacoDeComida >= 99){
TextoSacoDeComida.text ="No limite";
}
if (SacoDeComida <= 99){
TextoSacoDeComida.text ="Cabe mais";
}
if (SacoDeComida <= 50){
TextoSacoDeComida.text ="Na metade do espaço";
}
if (SacoDeComida <= 30){
TextoSacoDeComida.text ="Quase pouco";
}
if (SacoDeComida <= 15){
TextoSacoDeComida.text= "Pouco";
}
if (SacoDeComida <= 5){
TextoSacoDeComida.text= "Somente 5 unidades";
}
if (SacoDeComida <= 0) {
TextoSacoDeComida.text = "Vazio";
}
if (SacoDeComida <= 0){
StartCoroutine ("Contador3");
SacoDeComida = 0;
}
//FOME
if (Fome >= 99){
TextoFome2.text ="Intupido";
}
if (Fome <= 99){
TextoFome2.text ="Cheio";
}
if (Fome <= 80){
TextoFome2.text ="Satisfeito";
}
if (Fome <= 70){
TextoFome2.text= "Cabe um petisco";
}
if (Fome <= 50){
TextoFome2.text ="Na metade";
}
if (Fome <= 35){
TextoFome2.text ="Quase com fome";
}
if (Fome <= 25){
TextoFome2.text ="Precisa comer";
}
if (Fome <= 15){
TextoFome2.text ="Com dor";
}
if (Fome <= 5){
TextoFome2.text ="No critico";
}
if (Fome <= 0){
TextoFome2.text ="Vazio";
}
if (Fome <= 0) {
StartCoroutine("Contador4");
Fome = 0;
}
//SEDE
if (Sede >= 100) {
TextoSede.text = "Virou uma fonte d'água";
}
if (Sede <100){
TextoSede.text = "Totalmente hidratado";
}
if (Sede <90){
TextoSede.text = "Hidratado";
}
if (Sede <60){
TextoSede.text = "Quase hidratado";
}
if (Sede <50){
TextoSede.text = "Um gole d'água não faz mal";
}
if (Sede <30){
TextoSede.text = "Quase vazio";
}
if (Sede <20){
TextoSede.text = "Quase desidratado";
}
if (Sede <15){
TextoSede.text = "Dor no rim";
}
if (Sede <5){
TextoSede.text = "Precisa muito de água";
}
if (Sede <2){
TextoSede.text = "Sem agua";
}
if (Sede <0){
Sede = 0;
}
//Vida
if(Vida >= 100 ){
TextoSaude.text = "Super sáudavel";
}
if(Vida <= 100 ){
TextoSaude.text = "Sáudavel";
}
if(Vida <= 90 ){
TextoSaude.text = "Ótimo";
}
if(Vida <= 75 ){
TextoSaude.text = "Boa";
}
if(Vida <= 60 ){
TextoSaude.text = "Estavel";
}
if(Vida <= 50 ){
TextoSaude.text = "Na metade";
}
if(Vida <= 35 ){
TextoSaude.text = "Pode andar";
}
if(Vida <= 20 ){
TextoSaude.text = "Fraco";
}
if(Vida <= 15 ){
TextoSaude.text = "Quase morto";
}
if(Vida <= 5 ){
TextoSaude.text = "Critico";
}
if(Vida <= 2 ){
TextoSaude.text = "Morto";
Vida = 0;
}
}
IEnumerator Contador () {
yield return new WaitForSeconds(6);
SacoDeComida -= 2;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador");
}
IEnumerator Contador2 () {
yield return new WaitForSeconds(7);
Sede -= 2;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador2");
}
IEnumerator Contador3 () {
yield return new WaitForSeconds(6);
Fome -= 1;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador3");
}
IEnumerator Contador4 () {
yield return new WaitForSeconds(7);
Vida -= 1;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador4");
}
}
Oque ta dando errado?Não to conseguindo resolver
Re: Problema com contator
Retorna algum erro ou nada acontece?
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema com contator
Não retornar erro nenhum,somente da esse problema nos contator!Em vez de em cada 6 segundos,1 de fome vai embora,a fome pausa por 6 segundos e depois desce bem rapido pra 0 e depois acontece o mesmo com a vida.
Re: Problema com contator
Provavelmente você não está chamando as Coroutines corretamente :
StartCoroutine("Contador");
o certo seria :
StartCoroutine(Contador());
Veja se resolve o problema
StartCoroutine("Contador");
o certo seria :
StartCoroutine(Contador());
Veja se resolve o problema
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Problema com contator
ficaria assim: StartCoroutine(Contador2()); ou assim StartCoroutine(Contador(2));?
Re: Problema com contator
acho que ficaria na primeira opção, e sim, tem que trocar todos, e também retire isso :DUT escreveu:ficaria assim: StartCoroutine(Contador2()); ou assim StartCoroutine(Contador(2));?
yield return new WaitForSeconds(0);
é desnecessário, já que vai realizar uma função em 0 segundos.
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Problema com contator
O problema também pode ser porque você colocou a verificação na void Update.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema com contator
Eu troquei todos os StartCoroutine,tirei os yield return new WaitForSeconds(0); e coloquei no fixedupdate,tudo que tava no update e ainda ta com o mesmo problema,so que não desce tudo rapidao,diminuiu um pouco a velocidade
Re: Problema com contator
Não precisava ter trocado a void não, man, tava certo. Só pode ser um erro de lógica do seu script então.DUT escreveu:Eu troquei todos os StartCoroutine,tirei os yield return new WaitForSeconds(0); e coloquei no fixedupdate,tudo que tava no update e ainda ta com o mesmo problema,so que não desce tudo rapidao,diminuiu um pouco a velocidade
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Problema com contator
Fixed Update corre menos que o Update (Pelo que me lembro era uns 30x, e o Update o fps do seu jogo).
Então tenta criar um limitador para estes if's com variáveis booleanas.
Então tenta criar um limitador para estes if's com variáveis booleanas.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema com contator
Você pode nos contar o que você quer fazer no script?DUT escreveu:Eu troquei todos os StartCoroutine,tirei os yield return new WaitForSeconds(0); e coloquei no fixedupdate,tudo que tava no update e ainda ta com o mesmo problema,so que não desce tudo rapidao,diminuiu um pouco a velocidade
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Problema com contator
cara troque as voids por cronometros normais que ligam uma bool e que essas bools ligam outro contador
Re: Problema com contator
Além disto tudo, seu código tem um erro de lógica.
Ex.:
int i = 0;
Se (i <= 10) {
printf("olá");
}
Se (i <= 5){
printf("eae");
}
Vejamos: Se i for menor que 10, então ele irá printar "olá" se for menor que 5, irá printar "eae", então se i = 4, ambas serão verdadeiras e ambas serão chamadas.
Isto não tem haver com o seu problema, mas isto poderá causar problemas futuros.
Para resolver este problema, tente fazer uma outra verificação:
Ex.:
int i = 0;
Se (i <= 10) {
printf("olá");
}
Se (i <= 5){
printf("eae");
}
Vejamos: Se i for menor que 10, então ele irá printar "olá" se for menor que 5, irá printar "eae", então se i = 4, ambas serão verdadeiras e ambas serão chamadas.
Isto não tem haver com o seu problema, mas isto poderá causar problemas futuros.
Para resolver este problema, tente fazer uma outra verificação:
- Código:
if(i <= 10 && i > 5){
}
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema com contator
Eu estou fazendo o script do HUD do meu personagem,o HUD so vai aparecer quando o jogador segurar TAB,no HUD vai mostrar a vida,fome,sede,quantos alimentos tem no saco de comida,energia,peso do boneco,mapa,se esta com algum veneno,objetivo,se esta feliz ou triste e o status dele,tipo se esta cansado,doente......Atualmente eu to fazendo a vida,fome,sede,energia e saco de comida.Quando começar o jogo,o personagem tera 100 de vida,100 de fome,100 de sede,100 de energia e saco de comida tb....a cada 6 segundos,2 unidades do saco de comida vao embora(Conforme vai jogando,o jogador pega mais comida)quando o saco de comida estiver 0,a cada 7 segundos 1 de fome vai embora!(se o jogador pegar comida neste momento,a fome pausa em 90(exemplo),e o saco de comida volta a ser "consumido")quando a fome estiver em 0,a cada 7 segundos,1 de vida vai embora,e quando chegar a 0,o player morre.por enquanto eu vou fazer isso!o contator do saco de comida e sede,começa quando começar o game....a energia fica em 100,so desce se o personagem correr ou se a sede ficar em 0,se energia ficar 0,o personagem nao corre nem pula,so anda normal............
Eu nao entendi essa do i <= 10.....e...eu nao manjo de programação ainda,então não sei mexer direito nesse negoso de cronometro,so vi ele em um outro script e tentei entender
Eu nao entendi essa do i <= 10.....e...eu nao manjo de programação ainda,então não sei mexer direito nesse negoso de cronometro,so vi ele em um outro script e tentei entender
Re: Problema com contator
Você conseguiu resolver o problema?DUT escreveu:Agora entendi essa do i<....dexo ver aqui
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: Problema com contator
Eu acho que ao invés de Corroutine você poderia usar um contador normal, seria mais fácil. Vou deixar um exemplo aqui para você incrementar no seu projeto :DUT escreveu:Eu estou fazendo um script do HUD do meu jogo e ele contem Fome,Sede,Energia,Vida......Quando o jogador começar o jogo,o boneco vai ter 100 de vida,fome,sede e unidades de comida no saco de comida e a cada 6 segundos 2 unidades de comida do saco vai embora,quando o saco de comida ficar em 0,o contator do de fome começa,a cada 6 segundos cai 1 de fome,e quando fome chegar a 0,a cada 7 segundos 1 de vida cai.Só que ta dando problema,quando o saco de comida acaba,a fome meio que pausa por 6 segundos e depois cai mó rapido pra 0 e depois acontece a mesma coisa com a vida!em vez de contar 6 e 7 segundos!
Meu script:
- Código:
using UnityEngine.UI;
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using System.Linq;
public class HUD : MonoBehaviour {
public float Vida = 100,Fome = 100,SacoDeComida = 5,Sede = 100;
public Text TextoSaude;
public Text TextoFome2;
public Text TextoSacoDeComida;
public Text TextoSede;
void Start () {
StartCoroutine("Contador");
StartCoroutine("Contador2");
}
void Update () {
//Saco de comida
if (SacoDeComida >= 99){
TextoSacoDeComida.text ="No limite";
}
if (SacoDeComida <= 99){
TextoSacoDeComida.text ="Cabe mais";
}
if (SacoDeComida <= 50){
TextoSacoDeComida.text ="Na metade do espaço";
}
if (SacoDeComida <= 30){
TextoSacoDeComida.text ="Quase pouco";
}
if (SacoDeComida <= 15){
TextoSacoDeComida.text= "Pouco";
}
if (SacoDeComida <= 5){
TextoSacoDeComida.text= "Somente 5 unidades";
}
if (SacoDeComida <= 0) {
TextoSacoDeComida.text = "Vazio";
}
if (SacoDeComida <= 0){
StartCoroutine ("Contador3");
SacoDeComida = 0;
}
//FOME
if (Fome >= 99){
TextoFome2.text ="Intupido";
}
if (Fome <= 99){
TextoFome2.text ="Cheio";
}
if (Fome <= 80){
TextoFome2.text ="Satisfeito";
}
if (Fome <= 70){
TextoFome2.text= "Cabe um petisco";
}
if (Fome <= 50){
TextoFome2.text ="Na metade";
}
if (Fome <= 35){
TextoFome2.text ="Quase com fome";
}
if (Fome <= 25){
TextoFome2.text ="Precisa comer";
}
if (Fome <= 15){
TextoFome2.text ="Com dor";
}
if (Fome <= 5){
TextoFome2.text ="No critico";
}
if (Fome <= 0){
TextoFome2.text ="Vazio";
}
if (Fome <= 0) {
StartCoroutine("Contador4");
Fome = 0;
}
//SEDE
if (Sede >= 100) {
TextoSede.text = "Virou uma fonte d'água";
}
if (Sede <100){
TextoSede.text = "Totalmente hidratado";
}
if (Sede <90){
TextoSede.text = "Hidratado";
}
if (Sede <60){
TextoSede.text = "Quase hidratado";
}
if (Sede <50){
TextoSede.text = "Um gole d'água não faz mal";
}
if (Sede <30){
TextoSede.text = "Quase vazio";
}
if (Sede <20){
TextoSede.text = "Quase desidratado";
}
if (Sede <15){
TextoSede.text = "Dor no rim";
}
if (Sede <5){
TextoSede.text = "Precisa muito de água";
}
if (Sede <2){
TextoSede.text = "Sem agua";
}
if (Sede <0){
Sede = 0;
}
//Vida
if(Vida >= 100 ){
TextoSaude.text = "Super sáudavel";
}
if(Vida <= 100 ){
TextoSaude.text = "Sáudavel";
}
if(Vida <= 90 ){
TextoSaude.text = "Ótimo";
}
if(Vida <= 75 ){
TextoSaude.text = "Boa";
}
if(Vida <= 60 ){
TextoSaude.text = "Estavel";
}
if(Vida <= 50 ){
TextoSaude.text = "Na metade";
}
if(Vida <= 35 ){
TextoSaude.text = "Pode andar";
}
if(Vida <= 20 ){
TextoSaude.text = "Fraco";
}
if(Vida <= 15 ){
TextoSaude.text = "Quase morto";
}
if(Vida <= 5 ){
TextoSaude.text = "Critico";
}
if(Vida <= 2 ){
TextoSaude.text = "Morto";
Vida = 0;
}
}
IEnumerator Contador () {
yield return new WaitForSeconds(6);
SacoDeComida -= 2;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador");
}
IEnumerator Contador2 () {
yield return new WaitForSeconds(7);
Sede -= 2;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador2");
}
IEnumerator Contador3 () {
yield return new WaitForSeconds(6);
Fome -= 1;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador3");
}
IEnumerator Contador4 () {
yield return new WaitForSeconds(7);
Vida -= 1;
yield return new WaitForSeconds (0);
StartCoroutine ("Contador4");
}
}
Oque ta dando errado?Não to conseguindo resolver
- Código:
public int contagem, tempoMin;
public bool contador;
void Start(){
contador = false;
}
void Update(){
if(contador == true)
contagem += Time.deltaTime;
if( contagem <= tempoMin){
//
// Executa a sua ação, no caso remover vida, sede, fome
// entre outras coisas que você citou
//
}
ruanzikaad- Mestre
- PONTOS : 3188
REPUTAÇÃO : 47
Idade : 24
Respeito as regras :
Re: Problema com contator
Deixando meus 2 centavos no tópico.
A sua lógica de verificação está errada, pois pode dar 2 ou 3 ao mesmo tempo, sendo assim refatorei esta parte da forma que precisa, claro que tem formas mais elegantes de tratar este código, porém esta é funcional e bem descritiva.
A sua lógica de verificação está errada, pois pode dar 2 ou 3 ao mesmo tempo, sendo assim refatorei esta parte da forma que precisa, claro que tem formas mais elegantes de tratar este código, porém esta é funcional e bem descritiva.
- Código:
}
if (SacoDeComida > 99){
TextoSacoDeComida.text ="No limite";
}
else if (SacoDeComida <= 99 && SacoDeComida > 50){
TextoSacoDeComida.text ="Cabe mais";
}
else if (SacoDeComida <= 50 && SacoDeComida > 30){
TextoSacoDeComida.text ="Na metade do espaço";
}
else if (SacoDeComida <= 30 && SacoDeComida > 15){
TextoSacoDeComida.text ="Quase pouco";
}
else if (SacoDeComida <= 15 && SacoDeComida > 5){
TextoSacoDeComida.text= "Pouco";
}
else if (SacoDeComida <= 5 && > 0){
TextoSacoDeComida.text= "Somente 5 unidades";
}
else (SacoDeComida <= 0) {
TextoSacoDeComida.text = "Vazio";
}
}
Tópicos semelhantes
» [PROBLEMA] Problema ao conectar a um host com o Unet. (Localmente)
» Problema com NullReferenceException
» Problema com AI
» Problema com o ThirdPersonController
» Problema com desempenho
» Problema com NullReferenceException
» Problema com AI
» Problema com o ThirdPersonController
» Problema com desempenho
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos