Problemas com IEnumerator
2 participantes
Página 1 de 1
Problemas com IEnumerator
Estou com problemas na execução de uma rotina. Quando chamo a rotina "BackHomePosition", como mostra abaixo, ele executa até " yield return new WaitForSeconds(.5f) " e acaba não executando mais nenhuma linha da rotina. Alguém consegue me ajudar? Agradeço desde já.
- Código:
private void OnCollisionEnter2D (Collision2D collision) {
if (collision.gameObject.CompareTag("EnemyPoint")) {
PlayerScore++;
ChildTrailBall = true;
}
else if (collision.gameObject.CompareTag("PlayerPoint")) {
Enemy_CPUScore++;
StartCoroutine(_ballSpawner.BackHomePosition());
ChildTrailBall = true;
}
}
- Código:
public class BallSpawner : MonoBehaviour {
Vector2 pos;
// Start is called before the first frame update
void Start () {
pos = transform.position;
}
internal IEnumerator BackHomePosition () {
gameObject.SetActive(false);
transform.position = pos;
yield return new WaitForSeconds(.5f);
gameObject.SetActive(true);
}
}
ckToB- Iniciante
- PONTOS : 1331
REPUTAÇÃO : 2
Respeito as regras :
Re: Problemas com IEnumerator
Está dando erro pois voce está desativando o objeto, e quando voce faz isso, nada depois disso funciona. Este problema é um problema meio complicado, pois quando voce desativa um objeto, nao tem milagre que faz ele ativar novamente no mesmo script.
Porque voce nao coloca tudo no primeiro script e só chama o "pos" do segundo nele.
Mude o primeiro script para este:
E o segundo mude apenas para isso:
Ve se funciona, olhei seu script, fiz alguns testes e acho que essa é a melhor maneira de lhe dar com seu problema.
Selecionar Código
Abrir Codigo
Porque voce nao coloca tudo no primeiro script e só chama o "pos" do segundo nele.
Mude o primeiro script para este:
- Código:
public GameObject ballSpawnerObject; //coloque o objeto que tem o Script BallSpawner
private void OnCollisionEnter2D (Collision2D collision) {
if (collision.gameObject.CompareTag("EnemyPoint")) {
PlayerScore++;
ChildTrailBall = true;
}
else if (collision.gameObject.CompareTag("PlayerPoint")) {
Enemy_CPUScore++;
ballSpawnerObject.SetActive(false);
StartCoroutine(BackHomePosition());
ballSpawnerObject.transform.position = _ballSpawner.pos;
ChildTrailBall = true;
}
IEnumerator BackHomePosition()
{
yield return new WaitForSeconds(.5f);
ballSpawnerObject.SetActive(true);
}
}
E o segundo mude apenas para isso:
- Código:
public class BallSpawner : MonoBehaviour {
public Vector2 pos;
void Start () {
pos = transform.position;
}
}
Ve se funciona, olhei seu script, fiz alguns testes e acho que essa é a melhor maneira de lhe dar com seu problema.
Selecionar Código
Abrir Codigo
Pokedlg- ProgramadorMaster
- PONTOS : 2133
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
ckToB- Iniciante
- PONTOS : 1331
REPUTAÇÃO : 2
Respeito as regras :
Pokedlg- ProgramadorMaster
- PONTOS : 2133
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» Coroutine & IEnumerator. O que são?
» IEnumerator não funciona
» IEnumerator Unity 2017
» [RESOLVIDO] Ajuda com erro no IEnumerator!
» Como jogo o valor de uma Int em uma IEnumerator?
» IEnumerator não funciona
» IEnumerator Unity 2017
» [RESOLVIDO] Ajuda com erro no IEnumerator!
» Como jogo o valor de uma Int em uma IEnumerator?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos