Script de Semaforo
5 participantes
Página 1 de 1
Script de Semaforo
- Código:
public class Semaforo : MonoBehaviour {
public Light[] Luzes;
// Use this for initialization
void Start() {
Luzes = GetComponentsInChildren<Light>();
Luzes[1].enabled = false;
Luzes[2].enabled = false;
}
// Update is called once per frame
void Update() {
StartCoroutine(EnableRed());
StartCoroutine(EnableGreen());
StartCoroutine(EnableYellow());
}
IEnumerator EnableGreen()
{
yield return new WaitForSeconds(2f);
Luzes[0].enabled = false;
Luzes[2].enabled = true;
}
IEnumerator EnableYellow()
{
yield return new WaitForSeconds(2f);
Luzes[2].enabled = false;
Luzes[1].enabled = true;
}
IEnumerator EnableRed()
{
yield return new WaitForSeconds(2f);
Luzes[1].enabled = false;
Luzes[0].enabled = true;
}
}
Ae galerinha boa noite a todos, podem me ajudar com esse script.
Seguinte, a parte de hierarquia não vai importar, simplesmente esse script acende o sinal vermelho e já pula para o amarelo depois dos 2 segundos definidos no IEnumerator e depois não faz mais nada, sabem o que esta acontecendo? ajudem ai pff
endersoneneilsa- Membro
- PONTOS : 2759
REPUTAÇÃO : 4
Respeito as regras :
Re: Script de Semaforo
endersoneneilsa escreveu:
- Código:
public class Semaforo : MonoBehaviour {
public Light[] Luzes;
// Use this for initialization
void Start() {
Luzes = GetComponentsInChildren<Light>();
Luzes[1].enabled = false;
Luzes[2].enabled = false;
}
// Update is called once per frame
void Update() {
StartCoroutine(EnableRed());
StartCoroutine(EnableGreen());
StartCoroutine(EnableYellow());
}
IEnumerator EnableGreen()
{
yield return new WaitForSeconds(2f);
Luzes[0].enabled = false;
Luzes[2].enabled = true;
}
IEnumerator EnableYellow()
{
yield return new WaitForSeconds(2f);
Luzes[2].enabled = false;
Luzes[1].enabled = true;
}
IEnumerator EnableRed()
{
yield return new WaitForSeconds(2f);
Luzes[1].enabled = false;
Luzes[0].enabled = true;
}
}
Ae galerinha boa noite a todos, podem me ajudar com esse script.
Seguinte, a parte de hierarquia não vai importar, simplesmente esse script acende o sinal vermelho e já pula para o amarelo depois dos 2 segundos definidos no IEnumerator e depois não faz mais nada, sabem o que esta acontecendo? ajudem ai pff
use o StartCoroutine() na void Start(){}
e caso queira reptir um coroutine basta chamar dentro de outro coroutine
exemplo:assim q passar o segundo acima,vai chamar o amarelo dnovo,
- Código:
IEnumerator EnableGreen()
{
yield return new WaitForSeconds(2f);
Luzes[0].enabled = false;
Luzes[2].enabled = true;
StartCoroutine(EnableYellow());
}
Re: Script de Semaforo
Chamar coroutines no Update não é nada legal amigo, tenta chamar o próprio IEnumerator, tenta colocar essa chamada no final de cada um. :D Seja bem vindo amigo.
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Script de Semaforo
você fala apenas eliminando os StartCoroutines? e chamando direto o nome do IEnumerator?Souris escreveu:Chamar coroutines no Update não é nada legal amigo, tenta chamar o próprio IEnumerator, tenta colocar essa chamada no final de cada um. :D Seja bem vindo amigo.
endersoneneilsa- Membro
- PONTOS : 2759
REPUTAÇÃO : 4
Respeito as regras :
Re: Script de Semaforo
Você está chamando os IEnumerators na Update varias vezes, e todas as açoês são executadas na mesma hora, experimente chamar o IEnumerator dentro do outro. Exemplo:
- Código:
IEnumerator EnableRed()
{
yield return new WaitForSeconds(2f);
StartCoroutine(EnableGreen());
Luzes[1].enabled = false;
Luzes[0].enabled = true;
}
rafaelllsd- ProgramadorMaster
- PONTOS : 5241
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: Script de Semaforo
rafaelllsd escreveu:Você está chamando os IEnumerators na Update varias vezes, e todas as açoês são executadas na mesma hora, experimente chamar o IEnumerator dentro do outro. Exemplo:Assim quando ativar a vermelha ja vai contar para aparecer a verde depois do tempo, e é só fazer o mesmo depois, IEnumerator verde chama o amarelo, e o amarelo o vermelho. E coloca na void Start para chamar o vermelho. E retira esses StartCoroutine da Update.
- Código:
IEnumerator EnableRed()
{
yield return new WaitForSeconds(2f);
StartCoroutine(EnableGreen());
Luzes[1].enabled = false;
Luzes[0].enabled = true;
}
Para que um IEnumerator fique sendo executado nao é necessário estar no update?
endersoneneilsa- Membro
- PONTOS : 2759
REPUTAÇÃO : 4
Respeito as regras :
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Script de Semaforo
Blz galera eu entendi bem agora o funcionamento dos IEnumerators vlwww
endersoneneilsa- Membro
- PONTOS : 2759
REPUTAÇÃO : 4
Respeito as regras :
Re: Script de Semaforo
Ai galera eu mudei essa variável Light pra uma do tipo Renderer e acessei o Emission do material de cada objeto, ficou mesma coisa, mas em questão se caso eu tivesse vários semáforos desses em um cenário ficaria melhor em desempenho usando apenas o Emission ao invés de ter varias Lights na cena?
endersoneneilsa- Membro
- PONTOS : 2759
REPUTAÇÃO : 4
Respeito as regras :
Re: Script de Semaforo
Acho que seria mais compensável você criar apenas 3 materiais (verde, amarelo e vermelho) e apenas um objeto com o Script, mudando tudo.endersoneneilsa escreveu:Ai galera eu mudei essa variável Light pra uma do tipo Renderer e acessei o Emission do material de cada objeto, ficou mesma coisa, mas em questão se caso eu tivesse vários semáforos desses em um cenário ficaria melhor em desempenho usando apenas o Emission ao invés de ter varias Lights na cena?
Assim, você compartilharia os materiais. :D
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Script de Semaforo
Foi exatamente o o que eu fiz, modelei o semaforo e adicionei 3 EmptyObjects como filho e adicionei a cada um material de cada corSouris escreveu:Acho que seria mais compensável você criar apenas 3 materiais (verde, amarelo e vermelho) e apenas um objeto com o Script, mudando tudo.endersoneneilsa escreveu:Ai galera eu mudei essa variável Light pra uma do tipo Renderer e acessei o Emission do material de cada objeto, ficou mesma coisa, mas em questão se caso eu tivesse vários semáforos desses em um cenário ficaria melhor em desempenho usando apenas o Emission ao invés de ter varias Lights na cena?
Assim, você compartilharia os materiais. :D
endersoneneilsa- Membro
- PONTOS : 2759
REPUTAÇÃO : 4
Respeito as regras :
Tópicos semelhantes
» Semáforo
» COMO DESATIVAR O SCRIPT "FisrtPersonController" DO PLAYER ATRAVÉS DE OUTRO SCRIPT
» Meu script de Movimento não deixa meu script do Pulo duplo funcionar.
» Como acessar variável de um script usando outro script (Entre e entenda).
» Não Acho o Erro no Script - é um script para o player se mover
» COMO DESATIVAR O SCRIPT "FisrtPersonController" DO PLAYER ATRAVÉS DE OUTRO SCRIPT
» Meu script de Movimento não deixa meu script do Pulo duplo funcionar.
» Como acessar variável de um script usando outro script (Entre e entenda).
» Não Acho o Erro no Script - é um script para o player se mover
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos