2016-03-26 46 views
0

我在Unity中的C#脚本中的回调函数有问题。Unity3d执行多个脚本的回调

在Corona SDK中,如果你想执行回调,你只需要将它作为参数传递,然后在适当的地方调用它。

local function boom() 
    print("booom!!!") 
end 

local function bang() 
    print("baaaang!!!") 
end 

local function selector(var, func1, func2) 
    if var > 0 then 
     func1() 
    else 
     func2() 
    end 
end 

selector(5, boom, bang) 
selector(-12, boom, bang) 

我也得到:

booom!!! 
baaaang!!! 

这是正确的。

但是,当我尝试在Unity中的C#脚本中实现它时,我遇到了很多问题。首先,传递一个参数是不够的。您需要在selector()函数中指定变量的类型。所以我必须指定类名称func1func2。但是如果我想能够从多个脚本调用它并传递不同的回调函数?然后我无法将类指定为类型。

我发现了几个教程,但没有一个解决了我的问题。他们都描述了如何在类中或只从预定义类

回答

0

其实它工作在C#颇为相似做到这一点,但事实上,你必须更明确一些类型:

void boom() 
{ 
    Debug.Log("booom"); 
} 

void bang() 
{ 
    Debug.Log("baaaang"); 
} 

void selector(int v, Action func1, Action func2) 
{ 
    if (v > 0) 
     func1(); 
    else 
     func2(); 
} 

... 

selector(5, boom, bang); 
selector(-12, boom, bang); 
+0

它的工作原理!真的行!所以“行动”是关于:D – Lukis

+0

顺便说一句。如何将'Action func2'设置为可选项? '行动? func2 = null'不起作用。 – Lukis

+0

它为什么不起作用?提供错误信息或解释您判断为不起作用的行为通常很有帮助。当我尝试调用func2()时,我想你会得到一个NullReferenceException。这是可以预料的,因为你不能调用null。在调用它之前检查它是否为空,并且如果不是则调用它。 –