2016-03-26 68 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。在調用它之前檢查它是否爲空,並且如果不是則調用它。 –