[RESOLVIDO] DUVIDA SOBRE ATIVAR UM GAMEOBJECT ATRAVÉS DE UMA CONDIÇÃO
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] DUVIDA SOBRE ATIVAR UM GAMEOBJECT ATRAVÉS DE UMA CONDIÇÃO
Tudo bem galera? Sou iniciante tanto em Unity quanto em C#!
Estou fazendo um game 2D com a ajuda de alguns tutoriais, e implementando algumas coisas que ficariam legais no gameplay, fora do que foi ensinado nos tutoriais, mais a fim de teste e aprendizado mesmo.
Pois bem, a mecanica de jogo é a seguinte: Quando eu coleto todos os itens colecionaveis de uma fase, ele aciona um objeto oculto no cenario que serve como "End Level", onde o personagem encostaria no colisor desse objeto e me levaria para a próxima fase.
Daí bolei o seguinte codigo:
=> a variavel gameObject "endlevel", eu referenciei o objeto que finaliza o nivel em questão
=> a variavel "totalScore" que chamei da classe "Player", é a pontuação acumulada através da coleta dos colecionaveis (essa pontuação é zerada a cada game over/passagem de nivel). Ela é do tipo Int. Ela é alterada por outro Script, que adiciona valores a ela.
=> a variavel publica Int "pontuacaonecessaria" seria onde eu descreveria, no proprio editor do Unity, o valor necessario para a condição ser realizada.
Obs: o GameObject "Scoretext" ali é só a representação gráfica da variavel "totalScore"
No if, meu objetivo era checar se o valor de pontuacaonecessaria (que eu teria que estipular para o objeto Game_Controller, criado em cada Scene para finalidade de controle geral do game em si) é igual ao valor acumulado pela variavel totalScore, e assim, fazendo aparecer o objeto que sinaliza o final da fase.
Porém, estipulado o valor e atingido o valor de pontuação, o Objeto não é ativado. Tanto o compilador quanto o console da Unity não acusam erros na escrita do código, nem a falta de referencia a nenhum objeto em questão.
Gostaria de entender o que fiz errado...se é algo no meu código, alguma sacada que deixei de atentar na minha lógica até então, sei la kkkk Desde ja agradeço!
Estou fazendo um game 2D com a ajuda de alguns tutoriais, e implementando algumas coisas que ficariam legais no gameplay, fora do que foi ensinado nos tutoriais, mais a fim de teste e aprendizado mesmo.
Pois bem, a mecanica de jogo é a seguinte: Quando eu coleto todos os itens colecionaveis de uma fase, ele aciona um objeto oculto no cenario que serve como "End Level", onde o personagem encostaria no colisor desse objeto e me levaria para a próxima fase.
Daí bolei o seguinte codigo:
- Código:
public class Game_Controller : MonoBehaviour
{
public GameObject endlevel;
public int pontuacaonecessaria;
public GameObject gameOver;
public Text Scoretext;
public static Game_Controller instance;
void Start()
{
instance = this;
}
public void AparecerEndLevel()
{
if (pontuacaonecessaria == Player.instance.totalScore)
{
endlevel.SetActive(true);
}
}
public void GameOver()
{
gameOver.SetActive(true);
}
public void restartscene(string LevelName)
{
SceneManager.LoadScene(LevelName);
}
public void nextlevel(string LevelName)
{
SceneManager.LoadScene(LevelName);
}
}
=> a variavel gameObject "endlevel", eu referenciei o objeto que finaliza o nivel em questão
=> a variavel "totalScore" que chamei da classe "Player", é a pontuação acumulada através da coleta dos colecionaveis (essa pontuação é zerada a cada game over/passagem de nivel). Ela é do tipo Int. Ela é alterada por outro Script, que adiciona valores a ela.
=> a variavel publica Int "pontuacaonecessaria" seria onde eu descreveria, no proprio editor do Unity, o valor necessario para a condição ser realizada.
Obs: o GameObject "Scoretext" ali é só a representação gráfica da variavel "totalScore"
No if, meu objetivo era checar se o valor de pontuacaonecessaria (que eu teria que estipular para o objeto Game_Controller, criado em cada Scene para finalidade de controle geral do game em si) é igual ao valor acumulado pela variavel totalScore, e assim, fazendo aparecer o objeto que sinaliza o final da fase.
Porém, estipulado o valor e atingido o valor de pontuação, o Objeto não é ativado. Tanto o compilador quanto o console da Unity não acusam erros na escrita do código, nem a falta de referencia a nenhum objeto em questão.
Gostaria de entender o que fiz errado...se é algo no meu código, alguma sacada que deixei de atentar na minha lógica até então, sei la kkkk Desde ja agradeço!
sopturn- Iniciante
- PONTOS : 1350
REPUTAÇÃO : 2
Idade : 32
Respeito as regras :
Re: [RESOLVIDO] DUVIDA SOBRE ATIVAR UM GAMEOBJECT ATRAVÉS DE UMA CONDIÇÃO
Faz um teste ai bota isso aqui dentro do
AparecerEndLevel();
antes do if()
verifica no console do unity se durante o Play ta sendo exibido o valor correto
AparecerEndLevel();
antes do if()
- Código:
Debug.Log(Player.instance.totalScore);
verifica no console do unity se durante o Play ta sendo exibido o valor correto
Re: [RESOLVIDO] DUVIDA SOBRE ATIVAR UM GAMEOBJECT ATRAVÉS DE UMA CONDIÇÃO
dutrabr100 escreveu:Faz um teste ai bota isso aqui dentro do
AparecerEndLevel();
antes do if()
- Código:
Debug.Log(Player.instance.totalScore);
verifica no console do unity se durante o Play ta sendo exibido o valor correto
Show, man!
O problema estava sendo como em 80% das vezes entre a cadeira e o teclado! kkkkk tudo estava correto, mas percebi que o metódo não estava sendo acionado em nenhum lugar! Joguei ele no Start() e vi que ele debugou o totalScore normal. Show, mas dai ele só atingia a condição enquanto o valor de "pontuacaonecessaria" fosse 0. Se eu mudasse a condição, ele não debugava...daí achei o real problema. Ele tem que ser executado frame por frame.
Joguei no Update() e foi sucesso. Setei a condição que eu queria e funcionou 100% muito obrigado pela dica!!
sopturn- Iniciante
- PONTOS : 1350
REPUTAÇÃO : 2
Idade : 32
Respeito as regras :
Re: [RESOLVIDO] DUVIDA SOBRE ATIVAR UM GAMEOBJECT ATRAVÉS DE UMA CONDIÇÃO
Denadasopturn escreveu:dutrabr100 escreveu:Faz um teste ai bota isso aqui dentro do
AparecerEndLevel();
antes do if()
- Código:
Debug.Log(Player.instance.totalScore);
verifica no console do unity se durante o Play ta sendo exibido o valor correto
Show, man!
O problema estava sendo como em 80% das vezes entre a cadeira e o teclado! kkkkk tudo estava correto, mas percebi que o metódo não estava sendo acionado em nenhum lugar! Joguei ele no Start() e vi que ele debugou o totalScore normal. Show, mas dai ele só atingia a condição enquanto o valor de "pontuacaonecessaria" fosse 0. Se eu mudasse a condição, ele não debugava...daí achei o real problema. Ele tem que ser executado frame por frame.
Joguei no Update() e foi sucesso. Setei a condição que eu queria e funcionou 100% muito obrigado pela dica!!
Acho que em vez de chamar ele frame por frame, tu poderia chamar apenas quando a pontuação aumentasse.
Tópicos semelhantes
» [RESOLVIDO] Dúvida sobre GameObject
» [RESOLVIDO] Duvida sobre versao da unity e sobre o lerp
» [RESOLVIDO]Duvida com butao UI para ativar Void
» [RESOLVIDO] Não consigo ativar/desativar um script através de outro
» [Resolvido]Duvida sobre meu HUD
» [RESOLVIDO] Duvida sobre versao da unity e sobre o lerp
» [RESOLVIDO]Duvida com butao UI para ativar Void
» [RESOLVIDO] Não consigo ativar/desativar um script através de outro
» [Resolvido]Duvida sobre meu HUD
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos