2016-03-26 6 views
0

Ich habe ein Problem mit der Rückruffunktion in C# Skript in Unity.Unity3d führen einen Rückruf von mehreren Skripten aus

In Corona SDK, wenn Sie einen Rückruf durchführen möchten, müssen Sie es nur als Argument übergeben und dann an der richtigen Stelle aufrufen.

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) 

Und ich bekomme:

booom!!! 
baaaang!!! 

Was ist richtig.

Aber wenn ich versuche, es in C# Skript in Unity zu implementieren, habe ich viele Probleme. Zuallererst reicht es nicht, nur einen Parameter zu übergeben. Sie müssen den Typ der Variablen in der Funktion selector() angeben. Also muss ich den Klassennamen für func1 und func2 angeben. Aber wenn ich es aus mehreren Skripten aufrufen und verschiedene Callback-Funktionen übergeben möchte? Dann kann ich die Klasse nicht als Typ angeben.

Ich fand einige Tutorials, aber keine von ihnen löste mein Problem. Sie alle beschreiben, wie es innerhalb einer Klasse zu tun, oder nur aus einer vordefinierten Klasse

Antwort

0

Eigentlich ist es in C# sehr ähnlich funktioniert, mit Ausnahme der Tatsache, dass Sie über die Typen sein persönliches Vertrauen haben:

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

Es funktioniert! Es funktioniert wirklich! So "Action" war alles über: D – Lukis

+0

BTW. Wie stelle ich 'Action func2' als optional ein? "Aktion? func2 = null' funktioniert nicht. – Lukis

+0

Warum funktioniert es nicht? In der Regel ist es hilfreich, eine Fehlermeldung oder eine Erklärung für das Verhalten zu geben, das Sie für nicht funktionsfähig halten. Ich nehme an, Sie erhalten eine NullReferenceException, wenn Sie versuchen, func2() aufzurufen. Das ist zu erwarten, denn Sie können nicht null nennen. Überprüfen Sie, ob es vor dem Aufruf null ist, und rufen Sie es nur an, wenn dies nicht der Fall ist. –