Jump to content
Unity Insider Forum

Gameobjekte orden im GridlayoutGroup


dewa

Recommended Posts

Hallo zusammen, ich habe ein Problem.

Und zwar Erstelle ich am Start meines Spieles eine Freundschaftsliste die aus den Kontaktdaten(Android) und einer Datenbank erstellt wird.

Durch eine For Schleife erstelle ich dann Gameobjekte in einem Grid Layout Group die den Namen,Exp und Handynummer erhalten.

Nun möchte ich das die Gameobjekte so angeordnet werden das der "Freund" mit den meisten EXP ganz oben im Grid erscheint.

habt Ihr ein paar gute Ideen? :huh:

Link zu diesem Kommentar
Auf anderen Seiten teilen

hey

also du hast ja schon deine liste,diese solltest du bevor du sie aufs canvas zeichnest sortieren. gibt da ein paar grundlegende sortieralgorithmen die einfach zu implementieren sind,  zb bubble sort. einfach mal googlen

ich glaube c# hat da sogar schon was rdy aber das wäre ja langweilig^^

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja wie mikomi schon gesagt hast musst du einfach nur die Liste der Kontakte durchgehen und die Kontakte nach EXP sortieren.
Allerdings würde ich nicht unbedingt Bubble Sort benutzen, sondern vllt Quick Sort. 
Gibt sehr viele Wege das zu machen und ist eigentlich auch kein Hexenwerk z.B. durch sowas

	kontaktListe.Sort((x, y) => x.EXP.CompareTo(y.EXP));
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für eure Antworten.

Ich habe es mal mit dem bubble sort versucht. Ich stoß aber immer auf ein problem.

Egal wie oft ich die  For Schleife auch durchlaufen lasse Sie ordnet immer nur einen durchgang.

Selbst wenn ich statt X 1000 Eingebe werden Alle Gameobjekte nur 1 Durchgang geordnet :wacko:

EDIT: Habe eine lösung gefunden.

Ich setze einfach sortieren(); in mein if Statement sodas er solange durchlaufen muss bis er nix mehr zum ändern hat :)

  public  void sortieren()
    {
     //Wieviel Childs im Gameobjekt  
      int childs  = Scorepanel.transform.childCount;
      int welches_child=0;
      int x=0;
        for (int i = 0; i < childs +x; i++)
        {

     //Damit kein Child ausgewählt wird welches nicht existiert
            if(welches_child+1==childs)
            {
                welches_child = 1;
            }

            Transform child_1 = Scorepanel.gameObject.transform.GetChild(welches_child);
            Transform child_2 = Scorepanel.gameObject.transform.GetChild(welches_child + 1);

            Transform ThisEXP_1 = child_1.Find("EXP");
            Transform ThisEXP_2 = child_2.Find("EXP");

            Text EXP_1 = ThisEXP_1.GetComponent<Text>();
            Text EXP_2 = ThisEXP_2.GetComponent<Text>();

            int.TryParse(EXP_1.text, out oberes_child_int);
            int.TryParse(EXP_2.text, out unteres_child_int);

            //beim nächsten durchgang das nächste Child auswählen
            welches_child++;

            //Wenn EXP vom oberen Child höher sind Ihn dann runtersetzen
            if (oberes_child_int > unteres_child_int)
            {
                x++;
                child_1.SetSiblingIndex(i+1);
            }
        }
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

du scheinst ja schon eine lösung gefunden zu haben :D

ich hätte allerdings nicht die kindobjekte sortiert bzw nicht mit gameobjekten direkt gearbeitet
(weil ich mir nicht sicher wäre, ob die sich so verhalten hätten wie gewollt)
sondern hätte die liste mit informationen, bevor ich sie als ui elemente instanziiere, erstmal sortiert.
sieht für mich nämlich etwas überkompliziert aus :lol:

aber das wichtigste ist, es klappt ;) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...