2016-07-31 20 views
0

ich StartCoroutines in einer anderen Klasse bin mit, Problem ist, ich brauche die Klasse dynamisch zu sein, seine Berufung. LevelSelected = "Camera.GetComponent<Level"+levelnumber+">().Pattern1()";Unity C# StartCoroutines - ist es möglich, eine Zeichenfolge in das StartCoroutine zu setzen

LevelSelected ist eine Zeichenfolge, die levelnumber ist die Ebene (int), und ich möchte es die Enumerator-Funktionen aus dieser Klasse abholen. Die Level-Nummer wird von der Ebene bestimmt, die der Spieler im Startmenü auswählt.

Problem das ich habe ist ... wenn ich Ausgang, was ich in den String benötigen.

`StartCoroutine (LevelSelected);` 

Es Fehler heraus sagen - Coroutine 'Camera.GetComponent() Pattern2()' konnte nicht gestartet werden! Aber wenn ich diesen Wert in hart codieren, es funktioniert gut ...

gibt es einen Weg, um dieses ??

Danke, Craig

+0

Lesen ändern, haben Sie ein anderes Verhalten für jedes Level? 'Level1',' Level2' und so weiter? Das ist keine gute Idee. Beachten Sie auch die ['StartCoroutine'-Dokumentation] (https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html), dass Sie nur einen Methodennamen und keinen C# -Ausdruck übergeben können (was Sie gerade versuchen) bestehen). – 31eee384

+0

Ja, ich bekommen, dass ich frage mich nur, wenn Theres eine Abhilfe - ich kann buchstäblich hart codieren nur in dem, was der String sagt und es funktioniert .. Es gibt Level 1, Level 2 usw., aber die Ebenen sind alle gleich. – Craig

+0

Haben Sie das versucht? 'LevelSelected = "Camera.GetComponent () Pattern1().";' – josehzz

Antwort

0

Ich bin ziemlich sicher, dass Sie genau dort GetComponent eine illegale Aktion ausführen <> können nur direkte Verweise auf Klassennamen verwenden. Anstatt zu versuchen, in den Wert innerhalb der Zeichenfolge zu werfen, tun Sie etwas wie folgt aus: zwischen den Zeilen

var levelScript = Camera.GetComponent<Level>(); 
StartCoroutine(levelScript.Pattern(levelnumber)); 

Und in Ihrer Musterfunktion es so etwas wie dieses

IEnumerator Pattern(int levelnumber) 
{ 

} 
+0

hey Mann, LevelSelected = "Camera.GetComponent () .Pattern2() "; war der Fehler, sorry aus dem Fehlerprotokoll kopiert .. Problem ist die Zeichenfolge, die ich benutze kann nicht in der StartCoroutine aufgerufen werden, da seine andere Zeichenfolge ... Ich kann es funktioniert sonst nur fragen, wenn ich kann Verwenden Sie eine Zeichenfolge als Wert, der in eine Coroutine eingefügt werden soll (anstelle des Ienumerationsnamens) – Craig

+0

Ich bin mir nicht sicher, was Sie meinen, wenn Sie beim Starten der Routine eine Zeichenfolge angeben möchten, verwenden Sie diese: IEnumerator Pattern (string levelnummer) – spatbord

+0

Ich habe gerade festgestellt, dass Sie versuchen, mehrere Funktionen aus einer Zeichenfolge aufzurufen. Nein, Sie können das nicht tun. – spatbord