【发布时间】:2017-12-07 11:35:08
【问题描述】:
如何使 Coroutine 的名称动态化? 我用它来让目标在几秒钟后自动死亡:
void InitiateKill(int i)
{
//i is the number of the target
StartCoroutine(TargetDie(i, timeAlive/1000));
//some other stuff
}
当目标在此计时器结束之前被杀死时,我显然会出错,因为它无法再次杀死目标。
这就是为什么我想停止那个特定目标的协程,但我不知道怎么做。
我试过了:
Coroutine b[i] = StartCoroutine(TargetDie(i, timeAlive/1000));
但这会产生语法错误。 b[i] 不能用于协程。
如何以正确的方式做到这一点?
更新:
这是我的 TargetDie 函数的(相关部分):
IEnumerator TargetDie(int i, float delayTime)
{
yield return new WaitForSeconds(delayTime);
Destroy(targets[i]);
}
当玩家杀死目标时,我会这样做:
void Damage(int i)
{
// at this time, the first Coroutine, started in InitiateKill, should stop, because otherwise it tries to destroy the target twice
StartCoroutine(TargetDie(i, 0));
}
【问题讨论】:
-
您是否将目标的编号存储在某处?如果您希望它自动停止,您可以在 TargetDie 函数本身中执行此操作。值得解释一下这个函数在做什么,什么时候应该死/停止运行
-
是的,顾名思义:target0, target1, ... 这与协程部分有什么关系?
-
@Programmer:我已经更新了我的问题
-
因为首先您应该在目标上运行协程,以便在它死亡时自动停止。否则,您需要从目标获取一些参考,以便目标可以传播它死亡的事实。或者如果项目已死,一些循环会破坏协程。
-
我了解如何在目标上运行协程。但是我的所有代码,包括 StartCoroutines,都在一个不同的、名为 Controller 的空游戏对象上。