Jump to content
Unity Insider Forum

nordseekrabe

Members
  • Content count

    32
  • Joined

  • Last visited

Community Reputation

0 Neutral

About nordseekrabe

  • Rank
    Advanced Member

Recent Profile Visitors

357 profile views
  1. nordseekrabe

    Grid aus Buttons

    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 !
  2. nordseekrabe

    Grid aus Buttons

    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.
  3. nordseekrabe

    Grid aus Buttons

    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(); }
  4. nordseekrabe

    Grid aus Buttons

    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ß !
  5. nordseekrabe

    Grid aus Buttons

    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
  6. nordseekrabe

    Gameobject im Szenenwechsel

    werde ich garantiert "studieren"
  7. nordseekrabe

    Gameobject im Szenenwechsel

    ein weites Feld, das Speichern in Unity. Habe schon einiges mit mehr oder weniger Erfolg ausprobiert. Werde mich bei Gelegenheit wieder damit befassen. Wenn ich dann wieder in einer Sackgasse lande, melde ich mich im Forum. Dank Deiner großen Hilfe kann ich ja nun das Coden aller Objektaktivitäten in meinem Spiel angehen. Die Vorteile der neuen Codierung werden dann sicher schnell sichtbar. Einen schönen Tag noch und Gruß von einer nass-kalten Ostseeküste mit Schneematsch Peter
  8. nordseekrabe

    Gameobject im Szenenwechsel

    Moin, moin den neuen Code muss ich erst noch "verdauen". Die Szenen übergreifende Lösung für die Collectables finde ich gut. In diesem Consens bleibt meine Frage bezüglich "Speichern" für andere, nicht seltene Ereignisse: als Beispiel: eine Tür ist verschlossen, der Spieler kann nur dann diese Tür öffnen, wenn er den Schlüssel gefunden hat und sich im Inventar befindet. Dabei werden auch Eigenschaften der Tür verändert (zu öffnen = true, begehbar = true oder ähnliches). Der Spieler betritt diesen Raum durch die jetzt geöffnete Tür, sucht dort nach weiteren Objekten und verlässt wieder den Raum. Will er jetzt nochmals hinein, muss er wieder die komplette Prozedur durchlaufen, wie beim ersten Mal, da ja die Szene als "Originalszene" geladen wird. Aber das scheint ja dann doch ein anderes Thema. Also erstmals besten Dank.
  9. nordseekrabe

    Gameobject im Szenenwechsel

    okay, läuft soweit, ein Hindernis überwunden, danke, Zer0Cool. Gerne würde ich aber auch die Codeänderungen v e r s t e h e n. 1. Mein logisches Denken als Mensch: man betritt einen Raum, sieht ein Objekt, nimmt es in den Rucksack und geht in den nächsten Raum. Umherschauen, okay, geht wieder in den ersten Raum, Rucksack mit Objekt auf dem Rücken, auf dem Boden nichts. Das Programm kann das nicht, es hat nur das Ausgangsbild der Szene gespeichert und das wird beim zurückgehen in Raum1 wieder aufgerufen. D.h. eigentlich müsste man vor jedem Szenenwechsel speichern und dann beim Zurückgehen in diesen Raum (egal zu welchem Zeitpunkt im Spiel) nicht die Ursprungsszene1 aufrufen sondern ihre geänderte und gespeicherte Version? Wie aber speichern, PlayerPrefs erlauben meines Wissens keine Images ? Diese Situation ergibt sich doch bei jedem Szenenwechsel, vor dem im Raum irgendwelche "Aktivitäten" waren. Das Problem mit doppelten Objekten hat Zer0Cool mit RemoveDuplicates gelöst. Ginge das auch mit Singleton ? Müsste man dann jedes einzelne Objekt (Collectable) mit einer eigenen Klasse (Singleton) mit static Konstruktor versorgen ? 2.Die Abfrage einer Objektliste über den Namen eines Objektes scheint denn doch nicht so einfach, wie ich das aus dem Studium zahlreicher Bücher zu verstehen glaubte. Am schwierigsten ist für mich das Verständnis, aus einer Liste mit Items(itemsInInventory) ein Objekt an Hand seines Namens in einer Liste der Klasse "Inventory" zu finden (ich bin kein Programmierer, kein gelernter IT-Mensch, nur Rentner, der am Metier Freude hat, ich will kein Spiel veröffentlichen, kein Geld verdienen, lediglich ...Lebensfreude): "Item searchedItem = itemInInventory.Find(x => x.itemName.Contains("Papier") ... bringt zunächst keine Lösung. Erst die Verknüpfung von Inventory (Inventory m_Inventory) mit List<Item> itemsInInventory (das ist doch den Name der Liste mit Item-Objekten?) führt die beiden zusammen und erlaubt, mit Find(..Contains..) das gesuchte Objekt zu finden. Verstehe ich das so richtig? Denn diese Frage stellt sich in diesem Spiel permanent, wo ein Objekt mit einem anderen Objekt benutzt werden soll, um ein Hindernis zu überwinden. Danke jedenfalls für die große Hilfe aus diesem Forum. Ohne Unterstützung von außen bleibt doch schnell die Freude aus, vor allem, wenn man auf der Stelle tritt. Da helfen auch keine 1000 Bücher, wenn einem die Praxis und der Kollege am Nachbarschreibtisch fehlen. Gruß von der Ostseeküste Peter
  10. nordseekrabe

    Gameobject im Szenenwechsel

    Besten Dank für Deine Geduld, Zer0Cool. Leider : 1. Debug.Log(collectedItem) in der Inventory-Klasse zwischen den Zeilen "itemInInventory.Add(collectedItem) und hit.collider.gameObject.SetActive(false) => Papier(Item) 2. Debug.Log(itemInInventory) direkt darunter => System.Collections.Generic.List ' 1[Item] 3. Debug.Log( "Level Loaded: in "OnLevelFinishedLoading" => Level Loaded: Tuerspalte 4. print("Alle...) => Alle Items im Inventory: 5. in der ObjektKombinieren-Klasse Debug.Log(searchedItem) unter der Zeile Item searchedItem = itemInInventory.Find.... => Null 6. das 2. print wird nicht ausgeführt
  11. nordseekrabe

    Gameobject im Szenenwechsel

    Habe auf public umgeschrieben -> im Inspector zeigt sich 1 Item mit "Papier" bezeichnet. Dennoch gibt der Ausdruck false an (Infotext von else).
  12. nordseekrabe

    Gameobject im Szenenwechsel

    Sehr gute Idee, eine Instanz für "itemInInventory" zu erzeugen. Leider ist "searchedItem" aber null, da meines Erachtens in itemInInventory nicht "itemName" gefunden wird, sondern lediglich Size. Wenn ich z.B. in der Klasse Inventory nach Erzeugen von collectedItem mit Debug.Log(itemInInventory) nachfrage, erhalte ich lediglich 1 und nicht den itemName. (itemID habe ich auskommentiert und in RemoveDuplicates mit itemName ausgetauscht). Daher erfolgt auch in Debug.Log(searchedItem) nach erzeugen von searchedItem die Ausgabe "null" und die If-Abfrage landet bei else mit dem entsprechenden Infotext.
  13. nordseekrabe

    Gameobject im Szenenwechsel

    Moin, moin, leider ist es ja oft so....aus der Lösung von Problemen ergeben sich neue Probleme. Daher muss ich (darf ich) nochmals nachhaken. Im o.g. Script wird ein Objekt "itemInInventory" ins Inventar gehievt, wird es auch noch in einer Liste gespeichert (List<Item> itemInInventory) ? Meine Frage ergibt sich aus der Fehlermeldung (ArgumentNullException) bei folgendem Code: if (zimmer == Room.Tuerspalt) { if (itemInInventory.Any<Item>(item => item.itemName.Equals("Papier", StringComparison.CurrentCultureIgnoreCase))) //Zeile 40 mit Fehlermeldung { interaktivitaet.aufnehmbar = true; aktionsManager.Infotext.text = "Jetzt könnte eigentlich der Schlüssel auf das Papier fallen! Also ran an das Türschloss."; } Im Inventar ist ein Zettel aus Szene1, also eigentlich nicht leer ? Oder suche ich in der falschen Liste? ObjektKombinieren.cs
  14. nordseekrabe

    Gameobject im Szenenwechsel

    Perfekt, einfach große Klasse. Das war wohl "höhere Unity-/Programmierkunst" !! Hätte ich in diesem Leben nicht mehr gelöst. Also, lieber Zer0Cool, vielen, vielen Dank !! Einen schönen Abend noch und Gruß von der Ostseeküste Peter
  15. nordseekrabe

    Gameobject im Szenenwechsel

    Tausend Dank!! Habe diesen Vorschlag umgesetzt, und es klappt alles wie gehabt, jetzt aber ohne Tag und mit MonoBehaviour (könnte man mit Singleton etwas erreichen?). Ein erneuter Test (Scene1 ohne Objekte gespeichert, Objekte eingefügt, Play) bringt dasselbe Ergebnis: Objekte "fliegen" ins Inventar, verschwinden aus der Szene, werden im Inventar mit in die Szene2 mitgenommen und auch beim Zurückgehen in Szene1 bleiben sie im Inventar.....aber leider liegen sie auch wieder in der Szene1 auf dem Boden. Wie auch immer ? Ich habe versucht, im o.g. Script nach "SceneManager.LoadScene(2)" folgendes einzufügen, um die Objekte aus der Szene(Hierarchy) herauszubekommen : itemInInventory.gameObject.SetActive(false);" ...leider kein Effekt ! Dennoch, besten Dank für die Code-Verbesserung.
×