使用具有延迟的委托链来统一c#

时间:2018-07-18 06:35:53

标签: c# unity3d callback delegates

我尝试使用如下所示的委托链,试图统一制作动画:

public class Class1
{
    class Dele {

        delegate void MyDelegate();
        private MyDelegate dele;

        private int count = 0;

        public void Animate() {
            dele = new MyDelegate(DoIe);
        }

        IEnumerator Ie() {
            Debug.Log(count);
            count += 1;
            yield return new WaitForSeconds(5f);
        }

        private void DoIe() {
            StartCouroutine(Ie());
            for (int i=0; i<10; i++) {
                dele += DoIe;
            }

            dele();
        }
    }

    //call new Dele().Animate() here
}

我认为日志会像 1个 (5秒) 2 (5秒) ... 10

但是, 1个 2 .. 10 是同时记录的。

如果我想在5秒后回叫另一个Ie, 我该怎么办?

2 个答案:

答案 0 :(得分:1)

使用协程,这是稍后在例程中使用的代码 IEnumerator方法)。像上面所看到的那样,上面的空返回方法中的代码之后 StartCoroutine()将运行synchronously(直接)。

您根本不需要在这里的代表。您需要的只是这个:

IEnumerator Ie() {
    for (int i=0; i<10; i++) {
        Debug.Log(count);
        count += 1;
        yield return new WaitForSeconds(5f);
    }
}

private void DoIe() {
    StartCoroutine(Ie());
}

答案 1 :(得分:0)

首先,您的类需要从MonoBehavious继承,才能使StartCoroutine正常工作。   然后考虑到您的问题:您需要延迟启动协程,仅将它们添加到多播代理中根本就没有按照您的想法