yield return 之后的代码
waitforsec
。在我从敌人发射的协程中没有被执行。
这是我的敌人剧本
public void Death()
{
playerStats.onXpGathered(stats.xpReward);
if(canRespawn)
{
health = stats.maxHealth;
StartCoroutine(resScript.Respawn(respawnTime, gameObject, spawnPos));
}
else
{
Destroy(gameObject);
}
}
这是我的重生脚本:
public class RespawnScript : MonoBehaviour
{
public IEnumerator Respawn(float cooldown, GameObject enemy, Vector2 spawnPos)
{
//enemy deactivates
enemy.SetActive(false);
yield return new WaitForSeconds(5);
//nothing past this works for some reason
print("got past yield return")
enemy.SetActive(true);
enemy.transform.position = spawnPos;
}
}
我尝试使用
Time.deltaTime
计时器(有效,但我无法使用 void Update 函数 [至少据我所知] 以某种方式在敌人死亡时启动。
我也尝试过使用
WaitForSecondsRealtime
但这并没有改变任何东西。
注意:死亡功能是在敌人
GameObject
上,重生是在gameManager
上GameObject
文件说:
如果您将 SetActive 设置为 false 以禁用游戏对象,协程也会停止 协程附加到.
由于你停用了敌方对象,而敌方对象恰好是运行协程的对象,协程按预期停止工作。
为了解决这个问题,你可以在全局游戏对象上启动一个协程,你提到场景中有一个
gameManager
,如果我假设这个RespawnScript
脚本附加到gameManager
,你可以这样做:
resScript.StartCoroutine(resScript.Respawn(respawnTime, gameObject, spawnPos));
//出于某种原因,过去的一切都行不通
它按预期工作,没有任何反应,因为在上面的这一行中,您已经返回“yield wait for seconds”,之后什么都无法达到。你必须在协程之外声明你的代码。