Dúvida no uso de loop no Unity
2 participantes
Página 1 de 1
Dúvida no uso de loop no Unity
Pessoal, tô fazendo um joguinho e sabe, eu não sou tão bom na programação e vezes e outras faço umas gambiarras...
Eu fiz uma pontuação em um jogo e tal, e que mostra os pontos também no topo da tela quanto no meio da tela...
Os números do meio da tela, aparecem e somem... tentei usar o for e o foreach e o while, mas não consegui...
Eu fiz essa gambiarra abaixo que funcionou... mas, gostaria que alguém me mostrasse usando loop, que eu sei que é mais funcional e limpo...
Agradeço...
Também, se puder, mostrar o uso da pontuação normal, aparecendo e desaparecendo, seria bacana...
Eu fiz uma pontuação em um jogo e tal, e que mostra os pontos também no topo da tela quanto no meio da tela...
Os números do meio da tela, aparecem e somem... tentei usar o for e o foreach e o while, mas não consegui...
Eu fiz essa gambiarra abaixo que funcionou... mas, gostaria que alguém me mostrasse usando loop, que eu sei que é mais funcional e limpo...
Agradeço...
- Código:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SocialPlatforms;
using UnityEngine.UI;
public class ContadorPontos : MonoBehaviour {
public static int pontos;
public Text pontostext;
public int pontosTotal;
public GameObject vencer;
public GameObject[] objetos;
void Start()
{
pontos = 0;
}
void Update()
{
pontostext.text = "" + pontos;
if(pontos == 1) { objetos[0].SetActive(true); }
else if (pontos == 2) { objetos[1].SetActive(true); objetos[0].SetActive(false); }
else if (pontos == 3) { objetos[2].SetActive(true); objetos[1].SetActive(false); }
else if (pontos == 4) { objetos[3].SetActive(true); objetos[2].SetActive(false); }
else if (pontos == 5) { objetos[4].SetActive(true); objetos[3].SetActive(false); }
else if (pontos == 6) { objetos[5].SetActive(true); objetos[4].SetActive(false); }
else if (pontos == 7) { objetos[6].SetActive(true); objetos[5].SetActive(false); }
else if (pontos == 8) { objetos[7].SetActive(true); objetos[6].SetActive(false); }
else if (pontos == 9) { objetos[8].SetActive(true); objetos[7].SetActive(false); }
else if (pontos == 10) { objetos[9].SetActive(true); objetos[8].SetActive(false); }
else if (pontos == 11) { objetos[10].SetActive(true); objetos[9].SetActive(false); }
else if (pontos == 12) { objetos[11].SetActive(true); objetos[10].SetActive(false); }
else if (pontos == 13) { objetos[12].SetActive(true); objetos[11].SetActive(false); }
else if (pontos == 14) { objetos[13].SetActive(true); objetos[12].SetActive(false); }
else if (pontos == 15) { objetos[14].SetActive(true); objetos[13].SetActive(false); }
else if (pontos == pontosTotal)
{
Invoke("Vencer", 3);
}
}
void Vencer()
{
vencer.SetActive(true);
}
}
Também, se puder, mostrar o uso da pontuação normal, aparecendo e desaparecendo, seria bacana...
joffersoju- Avançado
- PONTOS : 2504
REPUTAÇÃO : 4
Respeito as regras :
Re: Dúvida no uso de loop no Unity
- Código:
public static int pontos = 0;
public Text pontostext;
public int pontosTotal;
public GameObject vencer;
public GameObject[] objetos;
void Update()
{
pontostext.text = "" + pontos;
/* Obs.: O objetos.Length é o tamanho da Array "Objects" */
for (int i = 1; i < objetos.Length + 1; i++) { // Verificações de todos os objetos
if (pontos == i) { // Verifica item por item
objetos[i - 1].SetActive(true);
if (i != 1) // Exceção do primeiro
objetos[i - 2].SetActive(false);
break; // Se corresponder, ele para (Otimização)
}
else if (pontos == pontosTotal) { // O último else if do seu código
vencer.SetActive(true);
//Invoke("Vencer", 3); <= Não entendi porque disso, então tirei.
break; // Se corresponder, ele para (Otimização)
}
}
}
//void Vencer() { vencer.SetActive(true); } <= Não entendi porque disso, então tirei.
Olha, eu só otimizei teu código p/ ocupar - linhas (Não sei se a performance muda tb), porém, se tu quiser realmente melhorar a performance disso (fazer do jeito certo), explica melhor esse teu joguinho aí e o que tu quer fazer, porque eu não entendi mt não..
Tenta usar prints, vídeos, imagens, etc..
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: Dúvida no uso de loop no Unity
Oi cara...
Valew hein!!!
O Invoke chama a função Vencer que abre uma tela UI depois de 3 segundos, congratulando que o jogador passou de fase... só inseri duas linhas no else if... ficou top... fez a mesma coisa do outro, mas, bem mais limpo...
Valew hein!!!
- Código:
using UnityEngine;
using UnityEngine.UI;
public class ContadorPontos : MonoBehaviour {
public static int pontos;
public Text pontostext;
public int pontosTotal;
public GameObject vencer;
public GameObject[] objetos;
void Start()
{
pontos = 0;
}
void Update()
{
pontostext.text = "" + pontos;
for (int i = 1; i < objetos.Length + 1; i++)
{ // Verificações de todos os objetos
if (pontos == i)
{ // Verifica item por item
objetos[i - 1].SetActive(true);
if (i != 1) // Exceção do primeiro
objetos[i - 2].SetActive(false);
break; // Se corresponder, ele para (Otimização)
}
else if (pontos == pontosTotal)
{ // O último else if do seu código
objetos[objetos.Length - 2].SetActive(false);
objetos[objetos.Length - 1].SetActive(true);
Invoke("Vencer", 3);
break; // Se corresponder, ele para (Otimização)
}
}
}
void Vencer()
{
vencer.SetActive(true);
}
}
O Invoke chama a função Vencer que abre uma tela UI depois de 3 segundos, congratulando que o jogador passou de fase... só inseri duas linhas no else if... ficou top... fez a mesma coisa do outro, mas, bem mais limpo...
joffersoju- Avançado
- PONTOS : 2504
REPUTAÇÃO : 4
Respeito as regras :
Tópicos semelhantes
» Bug Animation <não fica em loop> Unity 2019.4
» Eu estou com dúvida de como instalar a unity com Unity Hub
» Unity 5 Duvida
» [Duvida]Unity pro
» duvida sobre C# e unity
» Eu estou com dúvida de como instalar a unity com Unity Hub
» Unity 5 Duvida
» [Duvida]Unity pro
» duvida sobre C# e unity
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos