有没有办法存储并稍后执行任意函数调用

时间:2016-08-06 15:51:03

标签: c# unity3d

我知道在javascript中,我可以传入一个函数名和一个vars数组,然后在任意时刻执行该函数。

这使得一切都变得更容易变化。在C#中,还有var,但看起来类型根据放入的内容进行定义。

我想要完成的是说:

取功能和参数: FOO(BAR1,BAR2 ...为barN)

并在5秒内执行它们。

我使用Unity,因此计时部分很简单,但我无法弄清楚如何传递函数并指定任意类型的任意可能参数。

伪代码:

class myTimerClass{
   functionHandle myFunction;
   var params;
   float startTime, delayTime;
   bool pending = false;

   public myTimerClass(functionHandle myFunction, var params, float delay){
     this.myFunction = myFunction;
     this.params = params;
     this.delay = delay;
     this.startTime = System.currentTime;
     pending = true;
   }
   public void update(){
     if(System.currentTime>=startTime+delay && pending){
         pending = false;
         INVOKE(myFunction,params);
     }
   }

}
<something calls the update() every frame>

我已经阅读了行动和功能&lt;&gt;和代表,但似乎没有办法处理任意参数的任意函数。

1 个答案:

答案 0 :(得分:1)

经过多次搜索,我终于找到了有效的方法:

http://answers.unity3d.com/answers/932529/view.html

我可以直接传递任何代码,它会随时执行。完美!

现在我有一个单独的类(只是为了保持整洁),它具有以下块:

public void doThingAfterTime(System.Action action, float time){
    StartCoroutine(CoroutineUtils.DelaySeconds(action,time));
}

所以我可以做类似

的事情
doThingAfterTime (() => doPrint ("s", "d"), 2);

将找到调用该函数的函数,以供参考:

public void doPrint(string s, string s2){
    print (s);
    print (s2);
}