你能告诉我这段代码有什么问题吗?它不会调用Invoke函数
public class ReazioneBonus : MonoBehaviour {
void OnTriggerEnter(Collider collider){
string nomeBonus;
if(collider.gameObject.name.Contains("Pallina")){
nomeBonus = gameObject.name;
Debug.Log("bonus colpito");
Debug.Log("il nome del bonus è " + nomeBonus);
if(nomeBonus == "PaddleLungo(Clone)"){ //Allunga il paddle per 5 secondi
Debug.Log("attivazione Paddle Lungo");
Destroy(gameObject);
Debug.Log("bonus colpito da " + Pallina.ultimoGiocatoreToccato);
if(Pallina.ultimoGiocatoreToccato.name == "AvversarioRosso" || Pallina.ultimoGiocatoreToccato.name == "AvversarioVerde"){
Debug.Log("giocatore riconosciuto");
AllungaPaddleVerticale();
Invoke ("RipristinaPadVerticale", 5f); //non chiama la funzione
}else if(Pallina.ultimoGiocatoreToccato.name == "AvversarioBlu" || Pallina.ultimoGiocatoreToccato.name == "AvversarioGiallo"){
Debug.Log("giocatore riconosciuto");
AllungaPaddleOrizzontale();
Invoke ("RipristinaPadOrizzontale", 5f); //non chiama la funzione
}
}
}
}
void AllungaPaddleVerticale(){
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(3F, 0, 0);
}
void AllungaPaddleOrizzontale(){
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(0, 0, 3F);
}
void RipristinaPadVerticale(){
Debug.Log("ripristino il paddle");
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(-3F, 0, 0);
}
void RipristinaPadOrizzontale(){
Debug.Log("ripristino il paddle");
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(0, 0, -3F);
}
}
答案 0 :(得分:1)
你破坏了那个monobehaviour的游戏对象:
Destroy(gameObject);
如果monobehaviour本身已被破坏,如何调用这些方法?
答案 1 :(得分:0)
当你摧毁一个GameObject时,所有附加的MonoBehaviours'活动调用被取消。这样可以防止错误的引用。
完成调用后,只需销毁GameObject:
public class ReazioneBonus : MonoBehaviour {
void OnTriggerEnter(Collider collider){
string nomeBonus;
if(collider.gameObject.name.Contains("Pallina")){
nomeBonus = gameObject.name;
Debug.Log("bonus colpito");
Debug.Log("il nome del bonus è " + nomeBonus);
if(nomeBonus == "PaddleLungo(Clone)"){ //Allunga il paddle per 5 secondi
Debug.Log("attivazione Paddle Lungo");
Debug.Log("bonus colpito da " + Pallina.ultimoGiocatoreToccato);
if(Pallina.ultimoGiocatoreToccato.name == "AvversarioRosso" || Pallina.ultimoGiocatoreToccato.name == "AvversarioVerde"){
Debug.Log("giocatore riconosciuto");
AllungaPaddleVerticale();
Invoke ("RipristinaPadVerticale", 5f); //non chiama la funzione
}else if(Pallina.ultimoGiocatoreToccato.name == "AvversarioBlu" || Pallina.ultimoGiocatoreToccato.name == "AvversarioGiallo"){
Debug.Log("giocatore riconosciuto");
AllungaPaddleOrizzontale();
Invoke ("RipristinaPadOrizzontale", 5f); //non chiama la funzione
}
}
}
}
void AllungaPaddleVerticale(){
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(3F, 0, 0);
}
void AllungaPaddleOrizzontale(){
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(0, 0, 3F);
}
void RipristinaPadVerticale(){
Debug.Log("ripristino il paddle");
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(-3F, 0, 0);
Destroy(gameObject);
}
void RipristinaPadOrizzontale(){
Debug.Log("ripristino il paddle");
Pallina.ultimoGiocatoreToccato.transform.localScale += new Vector3(0, 0, -3F);
Destroy(gameObject);
}
}