[RESOLVIDO] Trocar valor de variável apos X segundos que ativar o triggercollider
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Trocar valor de variável apos X segundos que ativar o triggercollider
Oi
Estou me aventurando num projetinho estilo space shooter, hoje tentei colocar uns Power Up que aumentar a cadencia de tiro da nave, consegui fazer tudo menos o final, simplesmente não consigo fazer a cadencia voltar ao estado inicial depois de X tempo, ate consigo fazer ela voltar, mas não consigo por um delay pra ela voltar a original, ja tentei evoke e WaitForSecondRealTime, alguém
poderia me ajudar
OBS: essas "boca" seria por onde sai o tiro, como coloquei um spawn de powerup nascendo aleatoriamente eles são prefab, então o unico jeito que achei de referenciar as bocas pro script do powerup foi preencher o array por tag manualmente, se alguém souber um jeito de melhorar essa parte tb agradeceria :D
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cadenciaUp : MonoBehaviour
{
//public float cadenciaInicial;
public GameObject[] boca;
void Start(){
boca[0] = GameObject.FindGameObjectWithTag("boca");
boca[1] = GameObject.FindGameObjectWithTag("boca 2");
}
void OnTriggerEnter2D(Collider2D colisor){
if (colisor.gameObject.CompareTag("player")){
//cadenciaInicial = boca[0].GetComponent<atirar>().maxTime; // pegar maxTime do scritp "Atirar" e coloca numa variavel nesse script
StartCoroutine(fimPowerUp());
//this.Invoke("fimPowerUp()", 1.0f); // corrotina pra esperar 5 segundo antes de voltar cadencia original
}
}
IEnumerator fimPowerUp(){
for (int i = 0; i < boca.Length; i++){ // for pra fazer nos dois lugar de disparo de tiro
boca[i].GetComponent<atirar>().maxTime -= 0.5f; // colocar valor desse script direto no valor maxTime do script Atirar
}
Destroy(gameObject); //destroi o objeto do powerup
yield return new WaitForSecondsRealtime(1);
for (int i = 0; i < boca.Length; i++){
boca[i].GetComponent<atirar>().maxTime = 1.0f; // colocar valor desse script direto no valor maxTime do script Atirar
}
}
}
Shidote- Iniciante
- PONTOS : 1546
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Trocar valor de variável apos X segundos que ativar o triggercollider
ué, mas você está destruindo o objeto antes do segundo yield fazer o return dele...
Re: [RESOLVIDO] Trocar valor de variável apos X segundos que ativar o triggercollider
colocar o destroy depois fez funcionar,obrigado, mas tem como eu desativar o sprite do PowerUp e a pollygonCollider dele ? Pq se eu so destruir depois de 5s(por exemplo) vai da pra pegar o mesmo power up varias vezes e ele vai ficar na tela esse tempo todo, mesmo depois de passar por cima dele
Shidote- Iniciante
- PONTOS : 1546
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Trocar valor de variável apos X segundos que ativar o triggercollider
Tente isto:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cadenciaUp : MonoBehaviour {
//public float cadenciaInicial;
public GameObject[] boca;
void Start() {
boca[0] = GameObject.FindGameObjectWithTag("boca");
boca[1] = GameObject.FindGameObjectWithTag("boca 2");
}
void OnTriggerEnter2D(Collider2D colisor) {
if (colisor.gameObject.CompareTag("Player")) {
//cadenciaInicial = boca[0].GetComponent<atirar>().maxTime; // pegar maxTime do scritp "Atirar" e coloca numa variavel nesse script
StartCoroutine(fimPowerUp());
http://this.Invoke("fimPowerUp()", 1.0f); // corrotina pra esperar 5 segundo antes de voltar cadencia original
}
}
IEnumerator fimPowerUp() {
for (int i = 0; i < boca.Length; i++) { // for pra fazer nos dois lugar de disparo de tiro
boca[i].GetComponent<atirar>().maxTime -= 0.5f; // colocar valor desse script direto no valor maxTime do script Atirar
}
GetComponent<Collider2D>().enabled = false;
GetComponent<SpriteRenderer>().enabled = false;
yield return new WaitForSecondsRealtime(1);
for (int i = 0; i < boca.Length; i++) {
boca[i].GetComponent<atirar>().maxTime = 1.0f; // colocar valor desse script direto no valor maxTime do script Atirar
}
Destroy(gameObject); //destroi o objeto do powerup
}
}
Re: [RESOLVIDO] Trocar valor de variável apos X segundos que ativar o triggercollider
Muito obrigado, funcionou. :D
Shidote- Iniciante
- PONTOS : 1546
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Como ativar uma câmera após coletar/destruir um objeto.
» ATIVAR UM OBJETO QUANDO PASSAR POR UM TRIGGER E SUMIR APÓS 3 SEGUNDOS
» [RESOLVIDO] Executar animação após um X segundos
» [RESOLVIDO] ativar isKinematic por 3 segundos e depois desativar
» [RESOLVIDO] Como mostrar o valor atual de uma variável do tipo Int em um text
» ATIVAR UM OBJETO QUANDO PASSAR POR UM TRIGGER E SUMIR APÓS 3 SEGUNDOS
» [RESOLVIDO] Executar animação após um X segundos
» [RESOLVIDO] ativar isKinematic por 3 segundos e depois desativar
» [RESOLVIDO] Como mostrar o valor atual de uma variável do tipo Int em um text
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos