Jump to content
Unity Insider Forum

Variable Funktion für Back-Button -> absoluter Neuling


thecellar

Recommended Posts

Hallo zusammen,

ich bin relativ neu bei Unity, entschuldigt also falls ich mich etwas sperrig anstelle oder ausdrücke.

Ich bin gerade dabei meine erste App über Unity zu programmieren.

Das ganze soll eine Art geleitete Meditations-App sein. 

Hier ein Scribble der Hauptfunktion:

 

1424096812_App_Entwurf2-2.thumb.jpg.d36faecc9f990d117df6dcf8faca98ea.jpg

 

In der Hauptfunktion (siehe Anhang) soll man durch Drücken auf den Bildschirm (roter Bereich) zum jeweils nächsten Meditations-Punkt kommen (Das sind insgesamt 47).

Hier erscheint dann wieder neuer Text, welcher auch vorgelesen wird (Audiospur wird abgespielt). Durch nochmaliges Drücken ins rote Feld kommt dann wieder der nächste Punkt usw.

Die Funktion der einzelnen Meditations-Punkte konnte ich relativ einfach lösen:

Die einzelnen Meditations-Punkte (oder auch Textfenster) sind einfache Buttons. Durch das on Click-Feature im Inspektor lasse ich einfach den eingeblendeten Punkt ausblenden (also "GameObject.SetActive" für den aktuellen Button mit Text auf "aus") und den nächsten Punkt einblenden ("GameObject.SetActive" für den nächsten Buttonauf "an"). 

So weit so relativ einfach.

Der Back Button (unten links) soll einen zum vorherigen Meditations-Punkt zurück bringen.

Den Back Button könnte ich nun als Objekt jedes mal wieder mit an den aktuellen Meditations-Punkt hängen, und wieder über das on Click-Feature einstellen.

Ich würde das ganze aber gerne über ein Script lösen.

Und zwar hätte ich gerne nur einen Back-Button, welcher abhängig vom aktuell angezeigten Meditations-Punkt (bzw. Button) immer zum letzten Meditations-Punkt zurück springt.

Scripten ist für mich allerdings noch ziemlich neu, daher bin ich auf eure Hilfe angewiesen. Durch Tutorials konnte ich mir eine "Ahnung" über das scripten zusammenstellen, weiß aber leider noch nicht wie ich das so umsetze, dass es auch funktioniert.

Vermutlich müsste im Code sinngemäß etwas wie folgt stehen:

Wenn Folie Meditation_02 angezeigt wird/aktiv ist, dann wechsle bei Druck auf Back-Button zu Folie Meditation_01.

Wenn Folie Meditation_03 angezeigt wird/aktiv ist, dann wechsle bei Druck auf Back-Button zu Folie Meditation_02.

usw.  

 

ich hatte mir da auch schon mal in nem Script was zusammengeschrieben, aber das ist vermutlich totaler Bullshit (wie gesagt, das ist gerade meine erster selbstständiger Programmierversuch) :D

/*/ 

        if (Res_02_Button = active)
            onClick.BackButton.setActive.Res_02_Button = false
                onClick.BackButton.setActive.Res_01_Button = true

        else if (Res_03_Button = active)
            onClick.BackButton.setActive.Res_03_Button = false
                onClick.BackButton.setActive.Res_02_Button = true

/*/

 

 

Kann mir da jemand weiterhelfen? Konnte ich meine Anfrage verständlich ausdrücken?

Ich könnte mir denken dass es ein relativ einfaches Script mit vermutlich viel wiederholender Schreibarbeit ist.

Ich bin für jede Hilfe dankbar!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 4.7.2019 um 17:24 schrieb thecellar:

soll einen zum vorherigen Meditations-Punkt zurück bringen.

Ist der vorhergehende Punkt immer einfach eins weniger als der aktuelle Punkt, oder kann das auch sein, dass man z.B. von Punkt 4 zurück auf Punkt 2 geht weil man Punkt 3 übersprungen hat?

Edit:

Am 4.7.2019 um 17:24 schrieb thecellar:

GameObject.SetActive" für den aktuellen Button mit Text auf "aus"

Würde ich nicht so machen. Damit musst du wenn du später die Textgrösse oder Schriftart ändern willst, durch alle deine Objekte durchgehen und alle anpassen. Ich würde einfach ein Objekt machen und nur den Text als string austauschen. Gleiches für z.B. Bilder.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Stunden schrieb Jomnitech:

Ist der vorhergehende Punkt immer einfach eins weniger als der aktuelle Punkt, oder kann das auch sein, dass man z.B. von Punkt 4 zurück auf Punkt 2 geht weil man Punkt 3 übersprungen hat?

Genau, der Back-Button bringt mich immer nur einen Punkt zurück (also von 4 auf 3, von 3 auf 2... ).

 

vor 15 Stunden schrieb Jomnitech:

Würde ich nicht so machen. Damit musst du wenn du später die Textgrösse oder Schriftart ändern willst, durch alle deine Objekte durchgehen und alle anpassen. Ich würde einfach ein Objekt machen und nur den Text als string austauschen. Gleiches für z.B. Bilder.

Klingt nach ner guten Idee. Ich würde aber auch gerne die Hintergrundfarbe des Textes bei jedem Punkt verändern. Dazu müsste ich ja das komplette Objekt (also den Kasten in dem der Text steht) ändern, oder?

Das mit den Strings klingt aber gut, ich les mich mal da rein.

 

Noch mal allgemein...brauche ich dann auch IF-Befehle in meinem Script?

 

Das ist gerade alles noch so ein bisschen wie Kochen ohne Rezept :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast dir auch gerade eine etwas ungewöhnliche Zielsetzung gemacht, so für den Anfang. Da ist nichts schlimmes dran, aber du musst hier mehrere Dinge auf einmal lernen, bevor du dein erstes Ergebnis zu sehen bekommst. Du hast jetzt zwei Möglichkeiten: Entweder, du machst Pause und arbeitest das eine oder andere Tutorial durch, damit du Schritt für Schritt deine verschiedenen Werkzeuge kennenlernst; oder du bleibst bei diesem Projekt. An beiden Wegen ist nichts auszusetzen, aber bei Variante zwei musst du dich drauf einstellen, dass die ganze Sache etwas nerviger wird, weil du mit lauter Sachen jonglierst, die du gerade noch kennenlernst.

Ob du if-Abfragen brauchst, lässt sich nicht eindeutig beantworten, da viele Wege nach Rom führen. Meine Einschätzung wäre: Wenn du es irgendwie™ machst, dann ja, wenn du eine elegantere Lösung baust, dann nicht mehr, und wenn du eine richtig professionelle Implementation machst, dann sind wieder welche drin :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 42 Minuten schrieb Sascha:

Du hast dir auch gerade eine etwas ungewöhnliche Zielsetzung gemacht, so für den Anfang. Da ist nichts schlimmes dran, aber du musst hier mehrere Dinge auf einmal lernen, bevor du dein erstes Ergebnis zu sehen bekommst. Du hast jetzt zwei Möglichkeiten: Entweder, du machst Pause und arbeitest das eine oder andere Tutorial durch, damit du Schritt für Schritt deine verschiedenen Werkzeuge kennenlernst; oder du bleibst bei diesem Projekt. An beiden Wegen ist nichts auszusetzen, aber bei Variante zwei musst du dich drauf einstellen, dass die ganze Sache etwas nerviger wird, weil du mit lauter Sachen jonglierst, die du gerade noch kennenlernst.

Ob du if-Abfragen brauchst, lässt sich nicht eindeutig beantworten, da viele Wege nach Rom führen. Meine Einschätzung wäre: Wenn du es irgendwie™ machst, dann ja, wenn du eine elegantere Lösung baust, dann nicht mehr, und wenn du eine richtig professionelle Implementation machst, dann sind wieder welche drin :)

Also "bisher" habe ich das Gefühl, dass die App an sich eine ganz gute Übung zum Erlernen der Grundkenntnisse ist. Sie erscheint mir nicht zu komplex zu sein, hat viele einfache Elemente und ein paar komplexere Elemente. Zudem bewege ich mich komplett im UI.Sektor...also nichts mit 3D etc.

Bisher bin ich ohne Hilfe sogar schon relativ weit gekommen. Ich habe den Start-Bildschirm mit den 4 Buttons (Meditations-Start / Anleitung / Gruppen / Impressum), und ich habe es hinbekommen, auf Knopfdruck der Buttons zu den jeweiligen Screens zu wechseln. Das grobe Grundgerüst steht also schon mal :D

Natürlich kann man das ganze jetzt schon an vielen Stellen optimieren. Aber sicherlich kann man das immer, wenn man auf seine alten Projekte zurück schaut.

Das ist mein erstes Projekt, von daher ist mein Anspruch nicht, es "perfekt" zu machen. Wenn die App am Ende funktionsfähig und bereit für den App-Store ist wäre das schon ein riesen Erfolg für mich. 

Meine Vorgehensweise ist bisher: Ich arbeite immer so weit wie ich es hinbekomme. Wenn ich auf ein Hindernis stoße versuche ich, die Thematik zu erlernen, und in die App einzubinden. Dann gehts weiter bis zum nächsten Hindernis. Am Ende werde ich auf jeden Fall ne Menge hinzugelernt haben :) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Könnte irgendwie so aussehen:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DemoScript : MonoBehaviour
{
    public string[] text;
    public Text uiText;
    private int index=0;

    private void Start()
    {
        uiText.text = text[0].ToString();
    }
    public void next()
    {
        int size = text.Length;
        if (index < size-1)
        {
            index++;
            uiText.text = text[index].ToString();
        }
        
    }

    public void last()
    {
        
        if (index > 0)
        {
            index--;
            uiText.text = text[index].ToString();
        }
    }
}

Dieses Skript kannst du z.B. auf ein EmptyGameobject machen welches als Manager fungiert. Dann erstellst du zwei Buttons, einer für zurück, einer für weiter(roter Bereich). Bei denen kannst du dann das Skript als Referenz nehmen und die Funktion next oder last ausführen. Im Skript kannst du das Array so gross machen, wie du verschiedene Texte hast und dann direkt im Inpsektor den Text eingeben. Ist ja noch recht überschaubar.

Kannst du dann natürlich auch für Farben für den Hintergrund oder Sounds erweitern.

Hier ne kleine Demo damit du siehst wie alles verknüpft ist: Demo_thecellar.unitypackage

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...