Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与WaitForSeconds有问题_C#_Unity3d - Fatal编程技术网

C# 与WaitForSeconds有问题

C# 与WaitForSeconds有问题,c#,unity3d,C#,Unity3d,我试图让我的游戏在玩家与加电冲突时给玩家加电。通电功能正常,但当它到达yield WaitForSeconds语句时,在执行之后什么也没有,导致播放器永远通电,而不是设定的时间量。为什么之后的代码没有执行,我如何修复它 public void OnCollisionEnter2D( Collision2D collision ){ if (collision.gameObject.tag == "Player") { if(isActive){ i

我试图让我的游戏在玩家与加电冲突时给玩家加电。通电功能正常,但当它到达yield WaitForSeconds语句时,在执行之后什么也没有,导致播放器永远通电,而不是设定的时间量。为什么之后的代码没有执行,我如何修复它

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);
    }