c# - 协程完成后如何继续功能?
问题描述
void Generate()
{
StartCoroutine(FallDelayCoroutine());
print("time3- " + Time.time);
}
IEnumerator FallDelayCoroutine()
{
print("time1- "+ Time.time);
yield return new WaitForSeconds(3f);
print("time2- " + Time.time);
}
输出:
time1- 0
time3- 0
time2- 3.0146
我想要的输出是:
时间1- 0
时间2- 3
时间3- 3
解决方案
https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html上的文档似乎有一个与您尝试执行的操作几乎相同的示例:
IEnumerator Start()
{
// - After 0 seconds, prints "Starting 0.0"
// - After 2 seconds, prints "WaitAndPrint 2.0"
// - After 2 seconds, prints "Done 2.0"
print("Starting " + Time.time);
// Start function WaitAndPrint as a coroutine. And wait until it is completed.
// the same as yield WaitAndPrint(2.0);
yield return StartCoroutine(WaitAndPrint(2.0F));
print("Done " + Time.time);
}
// suspend execution for waitTime seconds
IEnumerator WaitAndPrint(float waitTime)
{
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
关键点似乎是他们的Start
例程返回 IEnumerator 然后使用yield return StartCoroutine(WaitAndPrint(2.0F));
它强制它在继续之前等待该方法。
所以对你来说等价的是:
IEnumerator Generate()
{
yield return StartCoroutine(FallDelayCoroutine());
print("time3- " + Time.time);
}
推荐阅读
- vim - gVim 8.2 在菜单栏和缓冲区选项卡区域之间有额外的空白行
- android - 无法使用 FCM 发送单个消息
- postgresql - 使用 Zalando pg Operator Bakcup 和恢复 PostgreSQL 集群
- high-availability - Alwayson 可用性组在其中一个上强制进行故障转移
- html - 从 vue.js 中的列表中删除
- ios - iOS XCode 构建错误 (flutter) -- 无法在带有 M1 芯片的 mac 上构建 iOS (flutter) 的 apk
- assembly - 在 Assembly (.exe) 中将 2 个字符串组合成一个较长的字符串 - 此代码如何工作?
- excel - 范围类的excel vba删除方法失败
- python - 如何拟合时间序列多头模型?
- java - 使用 Android In-App Billing v3 获得多个订阅