Jump to content
Unity Insider Forum

Per Variabel eine Gameobjekt Variabel ansprechen


tobias583

Recommended Posts

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

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

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

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

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

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:

GFjaO.png

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...