我如何防止协同程序膨胀我的班级

时间:2017-03-13 06:33:28

标签: c# unity3d coroutine

每次我需要通过协程来完成某些事情时,我有点恼火。我需要协程和另一种方法来启动协同程序。也就是说,我需要一些代码才能在以前的代码完成时执行。

我想通过启动一个匿名方法作为协程来解决它但我已经知道它不起作用。有没有其他的提示或技巧可以避免因为需要协程而让你的课程因为额外的方法而变得臃肿?

3 个答案:

答案 0 :(得分:2)

所以...如果我理解这一点是正确的,那么你需要执行一个启动协程的方法的代码,但是你不想用特定的1:1关系来膨胀你的代码启动每个特定协程的方法。

而且你不想使用" StartCoroutine"在你的主要代码?如果膨胀代码是您想要避免的,您可以这样做,这类似于三种方法解决方案,但使用相同的方法来启动每个协程。

void Start()
{
    _(DoThings("Hello"));
    _(DoAnotherThing(" world!"));
}

void _(IEnumerator Method)
{
    StartCoroutine(Method);
}

IEnumerator DoThings(string value)
{
    yield return new WaitForSeconds(1);
    Debug.Log(value);
}

IEnumerator DoAnotherThing(string value)
{
    yield return new WaitForSeconds(1);
    Debug.Log(value);
}

答案 1 :(得分:1)

我做@Fredrik在他的回答中说明的内容(相当于使用StartCoroutine,但只是将其封装在另一种方法中),如果你想避免{{1}乱丢你的代码。这有助于保持方法倒计时,即使您正在为可以从不继承StartCoroutine并且无法调用MonoBehaviour的类调用的API执行此操作。

至于

  

也就是说,我需要一些代码才能在以前的代码完成时执行。

我在协同程序中使用回调方法,如下所示:

StartCoroutine

利用如下:

IEnumerator Coroutine1(Action callback) {
    // Contents of coroutine

    callback();
}

答案 2 :(得分:0)

在我的示例method_01。

public void HandleMethod() { 
    StartCoroutine (Method_01 ());
}

private IEnumerator Method_01() {
    var count = 5;
    var wait1Second = new WaitForSeconds (1f); // wait
    Debug.Log ("Start method 1");
    while (count > 0) {
        Debug.Log (count);
        yield return wait1Second;     // Each second
    }
    Debug.Log ("End method 1");
    yield return null;
    Debug.Log ("Start method 2");
    yield return wait1Second;
    Debug.Log ("End method 2");
}