C# 与WaitForSeconds有问题
我试图让我的游戏在玩家与加电冲突时给玩家加电。通电功能正常,但当它到达yield WaitForSeconds语句时,在执行之后什么也没有,导致播放器永远通电,而不是设定的时间量。为什么之后的代码没有执行,我如何修复它C# 与WaitForSeconds有问题,c#,unity3d,C#,Unity3d,我试图让我的游戏在玩家与加电冲突时给玩家加电。通电功能正常,但当它到达yield WaitForSeconds语句时,在执行之后什么也没有,导致播放器永远通电,而不是设定的时间量。为什么之后的代码没有执行,我如何修复它 public void OnCollisionEnter2D( Collision2D collision ){ if (collision.gameObject.tag == "Player") { if(isActive){ i
public void OnCollisionEnter2D( Collision2D collision ){
if (collision.gameObject.tag == "Player") {
if(isActive){
isActive = false;
gameObject.renderer.enabled = false;
StartCoroutine( activatePowerup( collision.gameObject ) );
}else;
Debug.Log ("Hit player");
}else if (collision.gameObject.tag == "Ground") {
Destroy(gameObject);
}
}
public IEnumerator activatePowerup( GameObject player ){
player.GetComponent<Player>().setAttackDelaySeconds (0.25f);
Debug.Log ("Powerup Activated");
yield return new WaitForSeconds(2.0f);
Debug.Log ("Finisehd waiting");
deactivatePowerup ( player );
}
public void deactivatePowerup( GameObject player ){
player.GetComponent<Player> ().setAttackDelaySeconds (0.75f);
Debug.Log ("Powerup Finished");
Destroy (gameObject);
}
公共空间OnCollisionInter2D(Collision2D碰撞){
如果(collision.gameObject.tag==“Player”){
如果(isActive){
isActive=假;
gameObject.renderer.enabled=false;
start例程(activatePowerup(collision.gameObject));
}否则;
Log(“命中播放器”);
}else if(collision.gameObject.tag==“地面”){
摧毁(游戏对象);
}
}
公共IEnumerator activatePowerup(游戏对象玩家){
player.GetComponent().setAttackDelaySeconds(0.25f);
Log(“加电激活”);
收益率返回新的WaitForSeconds(2.0f);
Log(“finishehd waiting”);
停用电源(播放器);
}
公共无效停用EPowerUp(游戏对象玩家){
player.GetComponent().setAttackDelaySeconds(0.75f);
Log(“加电完成”);
摧毁(游戏对象);
}
我发现了问题所在。由于通电在玩家身上激活后会撞击地面,因此在禁用通电之前会破坏该对象,因此它永远不会禁用。这是通过改变
}else if (collision.gameObject.tag == "Ground") {
Destroy(gameObject);
}
到
}else if (isActive && collision.gameObject.tag == "Ground") {
Destroy(gameObject);
}