tobias583 Geschrieben 18. Januar 2018 Melden Share Geschrieben 18. Januar 2018 Hey, Ich habe verschiedene Gameobjekt Variabeln mit den Namen B0b00/B0b01/B1b00 und so weiter. Nun möchte ich über 2 INT Variabeln die anderen Variabeln ansprechen. Am liebstens so: <String Variabel> = "B" + <1. INT Variabel > +"b" + <2. INT Variabel>.name Danke im Voraus für die Hilfe Gruß Tobias Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 19. Januar 2018 Melden Share Geschrieben 19. Januar 2018 Geht genau so. Wenn du ein String bildest und mit einem String anfängst, dann kannst du da einfach ints mit bei geben und alles wird zum String. also: int number1=0; int number2=0; string between="b"; if(number2<10){ between="b0"; } else{ between="b"; } string goName ="B"+number1+between+number2; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
tobias583 Geschrieben 19. Januar 2018 Autor Melden Share Geschrieben 19. Januar 2018 Danke nun habe ich nur noch eine Frage: Ich habe nun den String goName so gebildet wie du es gesagt hast. public GameObjekt B0b5; int X = 0; int Y = 5; string beetwen = "b"; string goName = "B" + X + beetwen + Y; Nun möchte ich von dem Game Objekt B0b5 den Namen des Hinzugefügten Objektes erfahren. public gameObjekt B0b5; string Objektname = ""; //Diese Funktion nur mit einem String als "B0b5" Objektname = B0b5.name; //Also so... Objektname = goName.name; Danke für die Hilfe. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 19. Januar 2018 Melden Share Geschrieben 19. Januar 2018 Ich weiß nicht genau, was du da vor hast, aber es sieht GANZ falsch aus. Du willst auf keinen Fall einen String bauen und dann eine Variable finden, die so heißt wie es in dem String steht. Daher die Bitte: Geh mal ein paar Schritte zurück und erzähl mal, was du wirklich vorhast. Was sind das für GameObject-Referenzen und wofür willst du sie benutzen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
tobias583 Geschrieben 19. Januar 2018 Autor Melden Share Geschrieben 19. Januar 2018 Also ich habe verschiedene Gameobjekt Variablen nach der gleichen Struktur: public Gameobjekt B<Zahl>b<Zahl> Nun möchte ich gerne zwei Zahlen eingeben mit der ich eine von den vielenGameobjekt Variablen finden kann. Und dann mit der Funktion <Gameobjekt Variable>.name den zugehörigen Objektname erfahren will Das wäre eigentlich alles Gruß Tobias Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 19. Januar 2018 Melden Share Geschrieben 19. Januar 2018 Ja, da bist du schon viel zu weit auf dem Holzweg. Du musst echt ein paar Schritte zurückgehen. Grundsätzlich gilt: Wenn du mehr als zwei Variablen hast, die gleich heißen bis auf eine andere Zahl im Namen, dann hast du schon etwas falsch gemacht. Wenn du Objekte über einen Index finden willst, dann baust du ein Array statt mehrerer Variablen. Falsch: public GameObject object1; public GameObject object2; public GameObject object3; public GameObject object4; Richtig: public GameObject[] objects; Die eckigen Klammern zeigen an, dass du hier keine Variable definierst, die sich ein GameObject merken kann, sondern eine, die sich ein Array von GameObjects merken kann. Ein Array ist eine Art Liste von gleichartigen Werten. Beim Zählen startet man bei 0. Das erste Element des Arrays ist also nicht das mit der Nummer 1, sondern das mit der Nummer 0. Entsprechend hat das letzte Element bei 4 Elementen nicht die Nummer 4, sondern die Nummer 3 (0, 1, 2 und 3 = vier Elemente). Zugreifen kannst du folgendermaßen: private void Start() { var firstObject = objects[0]; Debug.Log("The first object is " + firstObject.name); } Einfach eine Zahl in die eckigen Klammern hinter dem Variablennamen der Array-Variable packen, schon hast du den Wert des X-ten Elements im Array. Schreiben geht genauso: objects[0] = someGameObject; Du kannst mit "length" abfragen, wie viele Elemente ein Array hat: var count = objects.length; Debug.Log("objects has " + count + " elements"); Wenn du dein Array serialisierst (also z.B. public machst), dann zeigt dir Unity im Inspektor auch ein Array an. das sieht dann so aus: Wie du siehst, kannst du bei "Size" angeben, wieviele Elemente das Array haben soll, und dann stehen darunter entsprechend viele Elemente. Da du jetzt aber zwei Indizes hast statt einem, brauchst du ein mehrdimensionales Array. Da gibt's zwei leicht unterschiedliche Varianten von, die beide erst einmal nicht im Inspektor angezeigt werden können. Aber dafür gibt es Lösungen. Ersteinmal - So definiert man ein multidimensionales Array: public GameObject[,] objects; Mit dem Komma zeigst du an, dass du zwei Indizes statt einem haben willst. Der Zugriff sieht dann so aus: private void Start() { var object00 = objects[0, 0]; var object10 = objects[1, 0]; var object01 = objects[0, 1]; } Statt der Zahlenwerte kannst du (auch bei einem eindimensionalen Array wie oben) jederzeit einfach auch Variablennamen nehmen. Also: public int x; public int y; private void Start() { var theObject = objects[x, y]; Debug.Log("The Name is " + theObject.name); } Und damit haben wir das, was du haben willst - nur eben ohne zusammengesetzte Strings, die einen Variablennamen ergeben sollen. Die Zahlen steckst du stattdessen direkt in die eckigen Klammern und kriegst direkt eine Referenz auf das gewänschte Objekt zurück. Probier das alles erstmal aus. Wenn du dann weitere Fragen hast, stell sie gerne Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.