玩家死亡后游戏重新启动时 Collider2d 不工作

Collider2d not working when game restarted after player die

我检查了游戏中的重启按钮,它就像一个魅力,玩家仍然可以通过碰撞障碍物受到伤害,但是当玩家死亡并按下重启按钮时,玩家不会与任何障碍,

所以我认为这是因为我的“void Die”,但我只禁用了一些而且当我重新启动游戏时它仍然有效,只是玩家不会与任何障碍物发生碰撞,只是...帮助我!

public void Die() {
    //Disable Score
    ScoreCounter.SetActive(false);

    //Animation
    AN.Play("Death");

    //Stop Coroutine
    StopCoroutine("Invulnerability");

    //Load Restart Menu
    PanelRestart.SetActive(true);

    //Disable Object Function
    GetComponent<CapsuleCollider2D>().enabled = false;
    this.enabled = false;
}

这是我的暂停按钮脚本,我在游戏中使用了这个暂停按钮然后重新启动,当玩家死亡然后重新启动时

public void RestartButton() {
    SceneManager.LoadScene(1);
}

When I restart the game, only the player won't collide with any obstacle

很可能您的碰撞不是问题,但您的 StopCoroutine() 调用才是。因为它目前不会阻止玩家的"Invulnerability",因此他不会在碰撞后死亡。

要解决您需要像这样调整 StopCoroutine() 调用的问题,您可以:

  1. IEnumerator 方法保留为私有成员。
  2. 将开始的 Coroutine 保留为私人成员。

IEnumerator 示例:

// Keep the executing script as a private variable.
// This is needed to stop it with StopCoroutine.
private IEnumerator coroutine;

void Start() {
    coroutine = ExampleIEnumerator();
    // Start the given Coroutine.
    StartCoroutine(coroutine);
    // Stop the given Coroutine.
    StopCoroutine(coroutine);
}

private IEnumerator ExampleIEnumerator() {
    yield return new WaitForSeconds(1f);
}

协程示例:

// Keep the executed coroutine as a private variable.
// This is needed to stop it with StopCoroutine.
private Coroutine coroutine;

void Start() {
    // Start the given Coroutine.
    coroutine = StartCoroutine(ExampleIEnumerator());
    // Stop the given Coroutine.
    StopCoroutine(coroutine);
}

private IEnumerator ExampleIEnumerator() {
    yield return new WaitForSeconds(1f);
}

此外,您还需要在死亡后禁用 CapsuleCollider2D 后重新启用它。

GetComponent<CapsuleCollider2D>().enabled = true;

StopCoroutine Unity Documentation