Jump to content
Unity Insider Forum

Manueller Sortieren von UI-Objekten im Skript


Recommended Posts

Hallo...

Mal wieder stellt Unity mich vor ein nicht zu lösendes Problem.

Ich hab in der Scene zwei Canvases. Das muss sein weil ich zwei verschiedene Scaler anwende und die Canvas Scaler ja leider nur den root Canvas Scalen... oder so...

Ich benutze Drag und Drop. Mein 2. Canvas ist ein Dialogfenster. Dort öchte ich mein Item von Canvas A in Canvas B ziehen. Funktioniert grundsätzlich auch.

Das blöde ist nur... ich kriege es einfach nicht hin dass es ÜBER Canvas B angezeigt wird beim Ziehen. Ich hab schon allerlei Spielereien ausprobiert und am Ende sogar jedem Ziehbaren Objekt einen eigenen canvas und einen GraphicRaycaster hinzugefügt. Was darin reduzierte dass aus irgendeinem völlig unlogischen Grund alles beim Ziehen plötzlich um 1 Element versetzt war.

Ich hab es mit Z-Position versucht, versucht irgendwie nur einen Root-Canvas zu benutzen damit ich über die Hierarchie gehen kann, nichts geht. Ich würde nur ungerne das Workaround mit der 2. Kamera benutzen müssen.

hoffe hier weiß jemand Rat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin mir nicht sicher, was jetzt genau dein Problem ist.

Du möchtest ein Objekt aus dem Canvas A Draggen und in Canvas B fallen lassen?
Beim rüberziehen ins Canvas B ist das Objekt aber hinter dem Canvas, weil B in der Reihenfolge über A ist?
Wenn das dein Problem ist, dann sollte die SortingOrder eigentlich dein Problem lösen.
 

Oder geht es um Das Objekt selbst, wenn es dem Anderen Canvas zugeordnet wird, dass es nicht on Top zu sehen ist?
Wenn ja, dann kannst du das über transform.SetSiblingIndex verändern.
 

https://docs.unity3d.com/ScriptReference/Transform.SetSiblingIndex.html

Aber wie gesagt. Ich habs noch nicht so ganz verstanden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein beim Ziehen das ist schon richtig. also während des ziehens ist es unter Canvas B.

Aber Canvas B MUSS über Canvas A sein, es ist ja eine Dialogbox. Das Problem ist also dass ich das Objekt noch WÄHREND des Ziehens in eine höhere Sortier-Reihnfolge schieben muss ohne den aktiven Canvas zu verändern.

Ich hab ja schon versucht dem Objekt slebst einen Canvas zuzuordnen aber das ging richtig übel schief weil dann die 50 Graphic Raycaster die es zwangsweise geben musste versagt haben. Und während des Ziehens nen neuen Canvas hinzuzufügen das brauch ich vermutlich gar nicht erst zu versuchen.

SiblingIndex ist die Hierarchie, da es Canvas-ÜÜberreifend ist bringt das leider nix :( abgesehen davon benutze ich viele Layouts, die Hierarchien haben also alle einen Sinn.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ah, ok.

Ich dachte die Canvas wären nebeneinander, nicht übereinander.
Ja da sehe ich eigentlich nur die Möglichkeit, dass du das gedragte Objekt zum Kind vom oberen Canvas machst, sobald du es eben dragst. Ist ja auch nur ein Gameobject, welches du mit transform.Parent woanders unterordnen kannst.
Ich persönlich hätte solch eine Sache eigentlich nur mit einem Canvas gelöst. Mehrere Canvas, bei denen Objekte links wie rechts reagieren sollen ist immer doof.

Link zu diesem Kommentar
Auf anderen Seiten teilen

naja faktisch ist es eine Message-Box die ich gebaut habe und die sollte halt auch aufgerufen werden können wenn kein anderer canvas da ist. und natürlich auch selbstbestimmte eigenschaften eines canvases haben, besonders im scaler.

es direkt zum parent zu machen... ja das wäre vermutlich ein workaround der möglich wäre...

um details zu liefern: Ich baue mir ein Kartenspielfeld um meine KI zu konsultieren. Zuerst baue ich mir also das SPielfeld zusammen. Die Hand des aktiven Spielers, das Spielfeld, die gesammelten Karten beider Spieler, also alles was öffentlich bekannt ist. Dann rufe ich meine KI an, die vorschlägt welche ich karte ziehe.

im nächsten Schritt wird eine Karte vom Deck gezogen, die aber zu diesem Zeitpunkt natürlich nicht bekannt ist. Meist ist dafür nichtmal eine Aktion erforderlich. Aber manchmal eben doch. und dann muss die KI sagen,, welche Akion gewählt werden soll. Also muss ich genau dann die Karte die gezogen wurde im Dialogfeld einfügen.

generell ist mein Layout für das Zusammenbauen des Spielfelds schon recht überladen, sodass ich da kaum noch ein Feld unterbringen kann ohne dass es schlecht aussieht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja welche denn? XD

das Spiel hat 48 Karten, davon 8 auf der Hand des Spielers, 8 auf dem Feld.

Was man tun muss ist also die Karten irgendwie in die verschiedenen sammlungen zu schieben. Klar könnte man in jeder Sammlung so wie ich es zuerst gemacht hab alle 48 karten ausgegraut anzeigen und bei klicken aktivieren. aber ehrlich gesagt ist das unhandlich und unpraktikabel.

also arbeite ich jetzt mit Drag- und Drop.

Aber das ganze ist interaktiv. Ich baue diese Szene um meine KI mit einem echtne Spiel zu verbinden, sodass man manuell gegen eine fremde Implementation des Spiels antreten kann. Das meine ich mit Consulting. es ist also völlig unklar welche Karte vom Deck gezogen wird. Das weiß nur der Spieler.

Er muss also aus den verbleibenden Karten eine auswählen die vom Deck gezogen wird um dann zu sehen ob die KI daraufhin eine entscheidung treffen muss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...