Jump to content
Unity Insider Forum

Grid aus Buttons


nordseekrabe

Recommended Posts

Moin, moin Unityfreunde,

komme mit einem Problem nicht weiter und hoffe wieder einmal auf eine freundliche Anregung aus Euren Reihen.

Derzeit versuche ich, in Unity ein eigenes Sudoku zu erstellen. Dazu habe ich ein Canvas mit 9x9 Buttons gewählt(A0-I8).

Wenn ich einen Button anklicke, kommt ein kleines Display mit den Buttons 1 -9  zum Vorschein. Ein Klick auf die Zahlen führt zum Eintrag der gewählten Zahl immer nur auf den ersten Button(A0). Ist eigentlich auch klar, da mit  z.B

public void WriteNumberInCell3()
    {
        buttonText.text = "3";
    }                                                                   wohl nur Text von Button A0 (als ersten Button von 9x9)angesprochen wird. Was mir bislang nicht gelingt, dass ich einen Button  anklicke, der dann sozusagen markiert ist und bei anschließenden Klick auf eine Zahl des Zahlendisplays die gewählte Ziffer im Text des "gewählten" Buttons eingetragen wird. Also weniger kompliziert, wie kann ich ein Objekt aus 9x9 Objekten markieren, um dann dort im Textfeld eine Ziffer einzutragen.

Bedanke mich im voraus und wünsche ein schönes Wochenende von der Ostseeküste

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab ein ähnliches Spiel als App gebaut, kann dir da ganz gut weiter helfen, dann wollen wir mal! :)

Mit den Buttons ist schon der richtige Weg. Habe jedoch kein Feld zum eintippen eingeblendet, sondern eine Zahleneingabe, wie einen Nummernblock gleich daneben eingesetzt, ist vielleicht einfacher.

So, wenn man nun auf dem Feld einen Button klickt, passiert folgendes. Alle Buttons des Feldes haben eine Methode als Ziel, es wird als Parameter übergeben, welcher Button geklickt wurde:

gewaehlteZahl = zahlenAuswahl.Zahl_1;
ausgewaehlteZahlGameObjekt = zahl1GameObjekt;
ausgewaehlteZahlGameObjekt.GetComponent<Image>().color = new Color32(154, 154, 154, 255);
selektiert = true;

Es wird in einem Enum vermerkt welche Zahl gedrückt wurde, und ganz einfach über das Gameobjekt die Image-Farbe des Buttons geändert.

Damit weiß der Spieler schon mal das er eine Aktion ausgeführt hat, alle anderen Felder-Buttons werden danach gesperrt und nur noch der Numblock ist aktiv. Er gibt auch per Parameter an, welche Zahl gedrückt wurde. So, nun haben wir beides, den gewählten Button und die Eingabe. Jetzt brauchst du in deinem Button nur noch das Texteingabefeld anweisen, die ausgewählte Zahl anzuzeigen und damit wäre die erste Zahl eingetragen. :)

Bei Fragen, fragen! :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank für die rasche Reaktion, Kojote !

Mit einer kleinen Animation war ein Panel mit 9 Buttons (Zahlen 1-9) kein Problem; bei einem Buttonklick auf einen der 81 Buttons erscheint das Display und beim Eintrag einer Zahl von 1 bis 9 verschwindet es wieder. (Lösen muss ich allerdings noch, dass das Display nur bei Klick auf eine leere Zelle(Buttontext leer) erscheint.

Mit Deinem oben beschriebenen  Codeausschnitt  komme ich noch nicht klar. 

Im Code gegeben ist ein enum "BoardButtons" mit allen 81 Buttons A0-I8. In der gestarteten Scene klickt der User z.B D5 an, es erscheint das kleine Display mit Nummernblock 1-9, klickt man jetzt auf dem Nummernblock(kleines Display) die 5 an, erscheint die dann im Textfeld von Button A0 , da D5 ja nicht markiert/selektiert ist.  Daher ist der Ansatz  "Selektiert = true"  perfekt, nur

wer und wie wird das im Code selektiert ? "gewählteZahl" wäre dann gewählter BoardButton oder ? und wie kann der gekennzeichnet werden ? Also, ich

 habe es noch nicht so ganz verstanden. Dennoch, danke und Gruß !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin, moin, 

nochmals zum Thema. Mit folgendem Code ist es mir "gelungen", die Zahlenangabe statt immer in A0 nun in C5 zu erhalten. Warum ? , verstehe ich 

eigentlich nicht. Vielleicht ist jemand bereit, mir das zu erklären. Danke !

 private void Start()
    {
        inputPad.SetBool("isHidden", true);  // Animator für Zahlendisplay, wird "false" bei Klick auf einen der 81 Buttons des Sudokuboards
        buttonText.fontSize = 24;
        buttonText.fontStyle = FontStyle.Bold;
        buttonText = GameObject.FindObjectOfType<Text>().GetComponentInChildren<Text>();
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

            if (hit.collider != null)
            {
                GameObject currentSelectedButton = hit.collider.gameObject;
                buttonText = currentSelectedButton.GetComponent<Text>();
            }
        }
    }

public void WriteNumberInCell2()
    {
        buttonText.text = "2";
        CloseInputPad();
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich schnür dir mal fix nen Demo-Projekt zusammen, dass ist einfacher und verständlicher als wenn ich jetzt 100 Jahre erzähle.^^

EDIT:

So, hier mal die Demo, dass sollte in die Richtung gehen, was du so denke ich erreichen möchtest, hoffe es hilft dir weiter. Ich habe auch einige Anmerkungen hinterlassen, sollte selbsterklärend sein, wenn nicht Frag einfach. :)

https://gamealchemists.com/anderes/sudoku_test.zip

Seh gerade nen Minimicrofehler, die Variable "ausgewaehlteZahl" sollte eigentlich privat sein, hatte ich nur zum Testen auf public gestellt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tausend Dank, Kojote, das war wirklich eine große Hilfe. Alleine hätte ich das lange nicht selbst bewältigen können.

Leider bleibt ein seltsames Phänomen bestehen: wenn ich auf einen Spielfeldbutton klicke, werden dieser Button (z.B. E7) und Button A0 blau und bei Eingabe der Zahl über das Display ist diese in A0 eingetragen. Das blaue Highlight verschwindet dabei bei beiden.

Mein Aufbau ist ein Canvas, als Child ein Panel, als Children vom Panel die 81 Buttons. Ein Empty GO ist der GameController, der mit dem Sudoku-Script verbunden ist. Dann die Verknüpfungen der 81Buttons  im Inspektor. Zuteilung der richtigen Methoden mit den Buttonklicks.

Wo ist da der Fehler ? Was habe ich übersehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Als kurzen Nachtrag, habe meinen Fehler gefunden:

Bei der Zuweisung der Klickfunktion für jeden einzelnen Spielfeldbutton muss nicht nur der Methodennamen sondern auch die richtige Nummer des entsprechenden Buttons eingetragen werden. Bei mir stand bei allen  die  0  !!! Nochmals  ein großes Danke !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...