2016-11-09 3 views
-6

eine einzige Zeile Code setzen ich eine Codezeile haben:Wie einer Variablen

GameObject.Find("colorswitchred (" + id.ToString() + ")").transform.GetComponent<Main>().state 

diese Zeile mehrmals über den gesamten Code verwendet wird. Ich habe mich gefragt, ob es einen Weg gab, es zu bekommen, also könnte ich einfach eine Variable wie s haben, um diese Codezeile darzustellen, also jedes Mal, wenn ich GameObject.Find sagen will ("colorswitchred (" + id.ToString() + ") . „) .transform.GetComponent() state = 0 ist, kann ich nur s = 0

setzen
+5

Sie keinen Code in Variablen setzen, es ist eine Funktion, die Sie – dahui

+4

Manchmal auch als "Methode" wollen –

+0

Ja, gameState = GameObject.Find ("colorswitchred (" + id.ToString () + ")"). transform.GetComponent

() .state –

Antwort

5

kleben Sie es einfach in einem Verfahren mit einem sinnvollen Namen:

public void SetColorSwitchRedState(int id, int newState) 
{ 
    GameObject.Find("colorswitchred (" + id.ToString() + ")").transform.GetComponent<Main>().state = newState; 
} 

Dann können Sie das nennen:

SetColorSwitchRedState(42, 0); 
+1

Nützlicher Name! Ja! Das! –

2

... ich kann einfach setzen s = 0

Nein, aber Sie können nahe kommen

s(id, 0); 

Sie können dies tun, indem Sie einen Delegierten erklärt:

Action<int, int> s = (id, newState) => GameObject.Find("colorswitchred (" + id.ToString() + ")").transform.GetComponent<Main>().state = newState; 

Ein Delegierter ein Zeiger auf ein Verfahren ist, in diesem Fall ein es erwarten int (id) und ein anderes int (der Wert, den Sie festlegen möchten).

Es sollte jedoch erwähnt werden, dass s ist kein sehr aussagekräftiger Name, und Methoden sollten aussagekräftige Namen haben. Diese Antwort ist NICHT der richtige Weg, aber sie beantwortet deine Frage buchstäblich.

+4

Während technisch korrekt, bezweifle ich, dass OP versteht, was dies tut. OP weiß nicht einmal, was eine Methode ist. Warum sollte er Lambdas verstehen? –

+1

@ThomasWeller Während * du * technisch korrekt bist, beantworte ich nur die gestellte Frage. Wenn dies das OP dazu bringt, eine andere Frage zu haben, so sei es. – Jamiec

+2

@Jamiec Das ist nicht sehr hilfreich. –

0

Sie könnten eine Eigenschaft verwenden.

public int S 
{ 
     get {return GameObject.Find("colorswitchred (" + id.ToString() + ")").transform.GetComponent<Main>().state;} 
     set 
     { 
     GameObject.Find("colorswitchred (" + id.ToString() + ")").transform.GetComponent<Main>().state = value; 

     } 

}

+0

OP möchte ein Argument auf den Zeiger setzen, das Sie mit Ihrem Code nicht können. – HimBromBeere

+0

Ja, stimmt. Er sollte eine Methode verwenden. Oder er könnte eine Klassenvariablen-ID zuerst setzen und dann den Wert mit S = 0 setzen. Viele Möglichkeiten, es wirklich zu tun – Isaak