【发布时间】:2021-10-24 00:42:50
【问题描述】:
我对编程很陌生,所以我很喜欢任何帮助。
这在 theory 中应该可以工作,但由于某种原因,当我在 unity 中运行它时,它就是不工作,我不知道 为什么.
我希望这个伤害系统能够工作,但我希望SFX和伤害率是不同但是我不知道该怎么做,这是我能想到的最好的。
问题: 尽管它确实会造成伤害,但它会反复叠加伤害。当我不应该受到伤害时,它不会因为某种原因而停止。
IEnumerator OnTriggerStay2D(Collider2D collision)
{
if (collision.CompareTag("Damage"))
{
//The StopCoroutine here is supposed to stop it from stacking however I am getting
//mixed results
StopCoroutine(Damager());
StopCoroutine(DamageSFX());
StartCoroutine(Damager());
StartCoroutine(DamageSFX());
}
//I feel like it should be an "else if" method but I'm not sure why or how
else
{
StopCoroutine(Damager());
StopCoroutine(DamageSFX());
}
yield return new WaitForEndOfFrame();
}
IEnumerator Damager()
{
while (true)
{
curruntHealth--;
yield return new WaitForSeconds(Delay);
}
}
IEnumerator DamageSFX()
{
while (true)
{
//This part works perfectly fine on its own but not in this context
FindObjectOfType<AudioManager>().Play("Damage SFX");
yield return new WaitForSeconds(SoundDelay);
}
}
【问题讨论】:
-
为什么要重新启动例程每个 FixedUpdate 调用?
-
最后的
yield return new WaitForEndOfFrame();也没什么用;) -
@derHugo lel good one...如果我不知道更好的话,我的电脑会崩溃
-
那么 .. 随心所欲 ... 我只能告诉你的是,它在你拥有它的地方绝对不会做任何事情 ... 没有无限循环可能会冻结你的应用程序,并且可以肯定它不会“让你的电脑崩溃”^^ 如果你这么信任这个页面上的人,那么为什么还要在这里问呢? ^^
-
@derHugo 啊等等,我明白你的意思了,对不起,我以为你在谈论不同的东西
标签: c# unity3d new-operator coroutine