首页 > 解决方案 > 保存和加载协程状态

问题描述

我是 Unity 的新手。是否可以保存协程的当前状态并加载它然后继续协程?我的项目中有一些协程,我想全部保存。

标签: c#unity3d

解决方案


当您定义协程时,例如;

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();
}

然后由您决定如何保存/加载和恢复您的协程。


推荐阅读