Jump to content
Unity Insider Forum

UI anlegen: 3 Buttons - 3 Szenen


Sugarbaby

Recommended Posts

Hallo,

mein UI soll mehrere Buttons bekommen, mit denen jeweil eine andere Szene/Möblierung eines Raumes einblendet/ausblendet werden kann. Videos über die Arbeit mit Buttons/Canvas´/EventSystem habe ich mir angesehen. Speziell meine Anforderung, mit einem Button unterschiedliche Raumkonzepte ein- und auszublenden, habe ich nicht heraus ziehen können.

Frage also: komme ich der Lösung meiner Anwendung mit "EventSystem", welches ich den jeweiligen Buttons zuordne näher? Oder bin ich da auf dem falschen Dampfer.

Cheers, SB

Buttons.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das EventSystem hat erstmal nichts damit zu tun. Es kümmert sich darum, dass mit Buttons und anderen UI-Elementen interagiert werden kann, z.B. durch Mausklicks oder Touch. Was allerdings bei welchem Button passiert, ist dem EventSystem komplett egal - kümmere dich daher nur um die Buttons.

Dein Button hat ja ein UnityEvent mit dem Titel "On Click". Das ist diese Liste, zu der du sozusagen Reaktionen hinzufügen kannst. Wenn der Button jetzt durch das EventSystem angepiekst wird, egal ob durch Klick, Touch oder sonst irgendetwas, dann werden alle Reaktionen ausgelöst, die der Button in dieser Liste hat. Du willst also, dass "Button I" zwei deiner GameObjects deaktiviert und eines aktiviert. Oder von mir aus auch, dass der dritte Button beide aktiviert, wenn ich das richtig sehe. Tatsächlich könntest du jetzt jeweils zwei bzw. drei Reaktionen in die Liste tun und deine GameObjects hineinziehen. Dann aus dem Drop Down-Menü GameObject.SetActive auswählen und damit die richtigen Objekte an- oder ausschalten, indem du entsprechend das dann erscheinende Häkchen setzt - oder eben nicht.

Allerdings wird das etwas nervig, wenn noch einmal mehr Modelle hinzukommen, weil du dann auf jedem der Buttons jeweils wieder eine Zeile hinzufügen und einrichten musst. Daher ein anderer Vorschlag. Du nimmst folgendes Script:

public class ActivateFromList : MonoBehaviour
{
  public GameObject[] allObjects;
  
  public void Activate(GameObject objectToActivate)
  {
    foreach (var obj in allObjects)
    {
      obj.SetActive(obj == objectToActivate);
    }
  }
}

Dieses Script packst du auf ein beliebiges GameObject in der Szene, auch wenn sich ein Parent deiner zu (de)aktivierenden GameObjects anbieten würde. Dann ziehst du alle diese Objekte in die Liste im Inspektor. Deinen Butons weist du jeweils nur noch eine Reaktion in der "On Click"-Liste zu. Dort ziehst du das GameObject mit diesem Script hinein, wählst aus der Liste ActivateFromList.Activate aus und ziehst dann nur noch das GameObject in das Parameterfeld unten rechts, das aktiviert werden soll. Das Script deaktiviert dann automatisch alle anderen GameObjects aus der Liste.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde erst mal die zu Fuß Variante, also die Erstere, probieren wollen, dann die Scriptversion. Zumal es nicht mehr als 3 unterschiedliche Zustände werden dürften, und ich mit dem scripten noch keine Berührung hatte (auch wenn es hier ziemlich simpel erscheint).

In der Liste (siehe screenshot) des Button I sind jetzt meine drei Zustände wovon der Zustand I sichtbar und II und III unsichtbar bleiben sollen. Selbiges für die Buttons II und III.

Wo ich hake ist deine Formulierung "..und deine GameObjects hineinziehen". Welcher Vorgang ist das?

NurMods.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da, wo "No Function" steht, kannst du jetzt auswählen, was gemacht werden soll.

Generell gilt für jede dieser Zeilen:

  • Wer - unten links (da ziehst du das Objekt hinein, das etwas machen soll)
  • Was - oben rechts (da wählst du dann eine der Komponenten des Objekts aus oder das GameObject selbst, und dann eine Funktion davon, die aufgerufen werden soll, oder einen Wert, der geändert werden soll)
  • Wie - unten rechts (da erscheint dann ein Feld, das vom "Was" abhängt, z.B. ein Zahlenfeld oder eine Checkbox)

Wenn du jetzt oben rechts in der Liste auf "GameObject" gehst, kannst du danach "SetActive" auswählen. Es geht also darum, das gesamte GameObject an- oder auszuschalten. Dann erscheint unten rechts (wie) eine Checkbox, wo du dann ein Häkchen setzen kannst (an) oder es eben weglassen kannst (aus).

Link zu diesem Kommentar
Auf anderen Seiten teilen

P.S.: Im Prinzip funktionierts - habe es für das AndroidTablet ausgegeben und alle 3 Buttons zeigen ihre jeweiligen Zustände an. Sehr cool.

Uncool: Beim Startscreen sehe ich alle 3 Zustände...

Ok - habe eine Lösung, weiß aber nicht, ob die sauber ist: Ich habe in der Szene nur die Version I angeschaltet im Inspector, die anderen Aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oh Mann, jetzt funktionieren meine Buttons nicht mehr auf dem Tablet. Auch nicht in Unity. Dachte´ ich wäre durch. Hmmmm´...habe nochmals einen neuen Testbutton zum überprüfen angelegt, aber auch keine Reaktion bei Touch am Tablet....grmpfl...

Und - auch cool...die Objektschatten sind zwar in Unity, aber auf dem Tablet nicht sichtbar...

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke,

stimmt, das kommt, wenn man zuviel herumfuchtelt und nicht mehr bei Jedem Ding weiß, wie Was wohin geraten ist. Ich hatte "aufgeräumt" und im Hinterkopf, dass du erwähnt hattest, das das an- und abschalten nicht die die EventSytem-Komponente bräuchte. Das ES-GO...hole ich mir da ein Neues rein, oder wird das implementiert beim aufrufen eines anderen Features?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt funktionierts wieder, nachdem ich einfach ein EventSystem erstellt habe. (...dankbar)

Bleibt der Schatten...ich habe ja eine plane erstellt, die unsichtbar ist, und Schatten wirft (Dank deines Materialshaders, aus einem vorherigen Thread). Zum Test habe ich eine neue TestPlane erstellt, mit normalen Shader. Aber auch hier wird der Schatten in Unity zwar generiert, aber nicht auf dem Tablet.

Woran könnte das liegen?

Cheers, SB

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...