玩家死亡后游戏重新启动时 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()
调用的问题,您可以:
- 将
IEnumerator
方法保留为私有成员。
- 将开始的
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;
我检查了游戏中的重启按钮,它就像一个魅力,玩家仍然可以通过碰撞障碍物受到伤害,但是当玩家死亡并按下重启按钮时,玩家不会与任何障碍,
所以我认为这是因为我的“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()
调用的问题,您可以:
- 将
IEnumerator
方法保留为私有成员。 - 将开始的
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;