c# - 保存和加载协程状态
问题描述
我是 Unity 的新手。是否可以保存协程的当前状态并加载它然后继续协程?我的项目中有一些协程,我想全部保存。
解决方案
当您定义协程时,例如;
using System.Collections;
public class C {
private void before() { }
private void after() { }
public IEnumerator MyCoroutine()
{
before();
yield return null;
after();
}
}
编译器定义了一个新类型来跟踪方法的状态,包括任何局部变量。您可以通过使用反编译器看到这一点。
虽然它的工作量更大,也更复杂,但您可以实现自己的IEnumerable
类型。
public class MyCoroutine : IEnumerator
{
private int state = 0;
public object Current { get; private set; }
private void before() { }
private void after() { }
public bool MoveNext()
{
switch (state)
{
case 0:
before();
state++;
Current = null;
return true;
case 1:
after();
state++;
break;
}
return false;
}
public void Reset() => throw new System.NotImplementedException();
}
然后由您决定如何保存/加载和恢复您的协程。
推荐阅读
- android - 想要在 Constraintlayout 中更改条件时更改按钮位置
- postgresql - 在 Google Data Studio 上,使用 PostgreSQL 数据,除了 camelCase 列,我如何“选择 * ...”?
- asterisk - Asterisk Sip 可达超时
- kotlin - 为什么杰克逊不能反序列化这个 JSON?
- javascript - Shopify - Slick Slider / Carousel - 响应设置不起作用
- angular - 使用 esnext 模块升级 Angular 9 后,Typescript 文件停止转换
- python - python模块未找到错误没有模块命名
- matlab - 您将如何在 MATLAB 中进行此矩阵运算?
- python - Sympy:Exp(-iHt):错误 Mutabledensematrix
- r - 如何用 R 计算子组内的出现次数?