【问题标题】:StartCoroutine for delayed reactionStartCoroutine 用于延迟反应
【发布时间】:2020-05-05 10:05:06
【问题描述】:
我有一个对象需要时间才能开始执行。当它立即执行时,它不会在两者之间留出时间。
我有一个功能可以检测我何时发生碰撞,现在我希望几秒钟后发生一些事情。如果它立即发生,那么它不会顺利。
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "(your tag)")
{
//immediate reaction
}
}
在与具有给定标签的对象发生碰撞后,我可以立即做出反应,但我无法在几秒钟后或几秒钟后将某些东西放在轨道上执行?如何为这样的实例设置计时器?
【问题讨论】:
标签:
c#
unity3d
timer
delay
ienumerator
【解决方案1】:
使用 StartCoroutine() 函数可以完成很多计时。然后将其发送到 IEnumerator 进行处理。假设您希望触发器不是立即做出反应,而是在几秒钟后做出反应。这是我们的触发函数:
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "(your tag)")
{
StartCoroutine(name());
}
}
在我们的 IEnumerator 中,我们使用 WaitForSeconds() 实例等待秒数。在将其重新投入使用之前等待尽可能多的秒数
IEnumerator name()
{
yield return new WaitForSeconds(4);
func();
}
与物体碰撞四秒后,我们调用响应。
void func()
{
//execute four seconds later
}
总而言之,看起来像:
NewBehaviorScript:learning()
{
void start()
{
//N/A
}
void Update()
{
//N/A
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "(your tag)")
{
StartCoroutine(NAME());
}
}
IEnumerator NAME()
{
yield return new WaitForSeconds(4);
func();
}
void func()
{
//execute reaction
}
}