我知道在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;和代表,但似乎没有办法处理任意参数的任意函数。
答案 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);
}