Jump to content
Unity Insider Forum

Methodenaufruf


Kojote

Recommended Posts

Grüße!

Nach fast nem 1/2 Jahr bin ich auch mal wieder da.  Schön das es das Forum noch gibt. 😀

Bin etwas aus der Übung und hätte mal eine Einsteigerfrage.

Ich möchte in meinem Menü gern das UI ausblenden und einblenden lassen. Wenn ich z.B. vom Main Menü in die Options gehe oder zurück. Darum wollte ich mir nun eine einfache Klasse mit einer Methode schreiben, die ich dann einfach aufrufen muss und ein paar Parameter übergebe. Die Methode soll dann eine Coroutine aufrufen, um den Blendeffekt zu realisieren.

Beispiel:

public bool Methode (canvasgroup group, float speed);

So in etwa. Frage ist nun, wenn ich die Methode aufrufe und die wiederrum die Coroutine aufruft. Wird dann im ersten Script gewartet bis meine aufgerufene Methode ein return zurück gibt, wenn die Coroutine fertig ist oder arbeitet das Script nach dem Methodenaufruf weiter?

Nebenfrage, mögt ihr solche Blendeffekte oder nerven die eher?

Grüße von Kojote

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wegen deiner Frage, ob Blendeffekte gemocht werden oder nicht: Kommt auf den Style an! :)
Ich persönlich mag es schon, wenn gewisse Dinge nicht sofort rein ploppen. Aber trotzdem sollte sich sowas schon zügig aufbauen, denn das Verhalten eines Menüs wird nur beim ersten Mal beachtet. Später will der Spieler einfach nur so schnell wie möglich durch das Menü navigieren, denn er will ja spielen!

Übrigens: Man kann auch eine UI animieren und muss eigentlich nur ein paar Trigger im Animator anstubsen. Ich habe das bei meiner Pinball Collection so gemacht. Die einzelnen Menüs werden außerhalb des sichtbaren Bereiches geparkt und kommen dann über eine Animation zum gewünschten Zeitpunkt rein. In meiner ersten Version habe ich sie auch einblenden lassen und hatte ganz viele Einzelteile animiert, aber inzwischen fliegen sie mehr oder weniger als Ganzes rein, weil ich für die Leute, die hochkant spielen, eine extra UI gebaut hatte. Der Aufwand wurde mir dann doch zu hoch. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke erst ma für die ausführliche Antwort. 🙂

Meine Scenen-Einblendung habe ich auch über ein Image gemacht, ihm einen Animator verpasst und einfach den Alpha-Regler verschoben. Das ist nur ein Animator und eine Codezeile, die an den Animator gerichtet ist. Frage von mir wäre, könnte man das selbe mit einem ganzen Menü machen, mit Hintergründen, Buttons und sonst was, müsste das nicht auch einfacher und sparsamer sein? Denn nun habe ich zwar eine Canvas-Group, wo ich den Regler verschiebe, jedoch brauch ich erst mal eine Methode, mit der ich eine Coroutine aufrufe und die Coroutine wiederrum blendet aus, da ich ja die Wait-Befehle aus der Coroutine brauche.

So dann brauch ich also:

  • Eine Methode + Coroutine von Main-Menue zum Charakter-Menue
  • Eine Methode + Coroutine von Main-Menue zum Settings-Menue
  • Eine Methode + Coroutine von Main-Menue zum Load-Menue

Das gesamte dann noch ma in umgekehrter Reihenfolge. Sind dann sechs Methoden + Coroutinen, kann ich auch leider nicht kürzen, weil ich ja auch den Raycast-Block an- und abschalten muss. Einfacher wäre das mit zwei Zeilen. Raycast-Block und Animator aufruf. Wäre es möglich so was über den Animator zu realisieren?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst Mecamin auf dein gesamtes UI loslassen. Dazu sei aber gesagt, dass das in Sachen Performance zwei der eher problematischen Systeme sind, die Unity so anbietet. Das kann in der Kombination schnell nach hinten losgehen. Und wenn jemand wie ich, der sonst alle Hände damit voll hat, Leuten zu sagen, sie sollen sich mal nicht wegen Performance in's Hemd machen, dann weißt du, dass es ernst ist :)

Hier hast du dazu ein Video mit Timestamp:

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also eher doch wie auf alt hergebrachte Art und Weise über Coroutine und Canvas Group ausblenden. Überleg mir gerade auch das ganze ausblenden wieder auszubauen. Ist eigentlich wenig wichtig und bläht den Code nur auf. Wenn man wüsste, wie man´s richtig macht. *grübel*

Malzbie hat schon recht, der User will vorran kommen und mach ich im Main-Menue Blendeffekte, muss ich das auch im Game-Menue machen, sonst wirkts unprofessionell. Einmal Blenden, einmal nicht.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja schon klar. Mich beschäftigt nur gerade die Frage, was da so viel Leistung frisst. Es geht bei mir z.B. ja nur um das Ausblenden, von sagen wir 10 Grafiken in ein bis zwei Sekunden. Davon dürfte das Spiel bzw. die Performance doch eigentlich nichts mitbekommen. Frag mich, was genau das so an der Performance zieht. Denke heute oder morgen mache ich mal einen Test, mal sehen ob es signifikante Unterschiede gibt.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde mir da jetzt keinen großen Kopf machen.
So wie es der Kerle da im Video gesagt hat, erzeugt jeder Animator eine Grundlast, egal ob gerade auch wirklich ein UI Element animiert wird oder nicht. Diese Grundlast ist meiner Erfahrung nach nicht besonders hoch, summiert sich aber natürlich, wenn viele UI Elemente einen Animator haben.

Ein Mainmenu ist in der Regel eine eigene Szene, wo die ganzen vielen Elemente drin sind. Dort ist es meiner Meinung nach total egal, ob da eine hohe Grundlast auftritt, denn da passiert ja sonst nichts!
Innerhalb des Spiels könnte es schon sein, das ein oder zwei Frames für die UI drauf gehen, "wenn" da viele Dinge animiert werden, die vielleicht besser ins Game investiert wären. Joah... kann man natürlich optimieren.
Ich sehe da aber trotzdem keinen Grund, sich die dollsten Coroutinen oder Tween zu bauen, wenn ich das mit ner Animation in kurzer Zeit lösen kann. Außerdem kann man ohne Weiteres auch mehrere Elemente mit einem einzigen Animator steuern, wenn sieh in der Hierachie unter dem Objekt mit dem Animator sind.

Just my two cents!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...