Jump to content
Unity Insider Forum

DanielG

Members
  • Content Count

    9
  • Joined

  • Last visited

Community Reputation

0 Neutral

About DanielG

  • Rank
    Newbie

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Hi und Danke für deinen Tipp. Ja, den Animator kenne ich und damit habe ich auch schon gearbeitet. Jetzt, wo du es sagst, scheint dieser Weg wohl doch der sinnvollere zu sein. Obwohl ich mit dem Animator schon einige Sachen realisiert habe, hänge ich leider gerade fest. Die Animation habe ich erstellt und dem Button (Image) hinzugefügt und diese auch in den Inspector reingezogen (bei Controller). An der Main Camera hängt das Script und auch dort existiert eine Animator-Komponente (mit zugewiesenem Controller). Der Animation (Fade-Out) habe ich die Variable Animation mit Integer 1 zugewiesen. Sobald im Code diese auf 1 gesetzt wird, müsste also die Ausblend-Animation laufen. Der Code ist dieser hier (im Vergleich zum anderen deutlich abgespeckter): using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // Notwendig, damit z.B. auf die Image-Componente zugegriffen werden kann public class PanelToggle : MonoBehaviour { private bool buttonStatus = true; // Mit wahr initialisieren private GameObject[] buttonArray; // Array aller Buttons public Animator animator; // Variable für den Zugriff auf die Animator-Komponente void Start() // Buttons beim Start einmal suchen und im Array cachen. { buttonArray = GameObject.FindGameObjectsWithTag("Button"); // Array aus allen GameObjects generieren, die Buttons sind } public void ToggleButtons() // Alle Buttons ein- bzw. ausblenden { buttonStatus = !buttonStatus; // buttonStatus togglen foreach (GameObject button in buttonArray) // Für alle Buttons: { Transparenz(buttonStatus, button); // Transparenz für aktuellen Button verändern Debug.Log("Buttons sind: " + buttonStatus); // OK } } public void Transparenz(bool buttonStatus, GameObject button) // Übergebenen Button entweder ein- oder ausblenden { animator = GetComponent<Animator>(); // Zugriff auf die Animator-Komponente if (buttonStatus) // Wenn Button eingeblendet werden soll: { animator.SetInteger("Animation", 0); // Idle-Animation abspielen bzw. keine } else // Ansonsten, ausblenden: { animator.SetInteger("Animation", 1); // Fade-Out-Animation abspielen } } } Leider passiert nichts, wenn ich mit der Maus auf das Panel klicke Auf dem Screenshot sieht man, dass die Animation schon mal korrekt ist: So sieht der Animator-Controller aus: (Komischerweise scheint die Vorschau unten rechts nicht zu funktionieren - sie wird abgespielt, es passiert aber nichts.) Ziel ist, dass beim Klick/Touch auf das Panel die Animation abgespielt wird, so dass alle Buttons ausgeblendet werden. Danke nochmal für eure Hilfe!
  2. Hallo nochmal, ich habe das Problem bereits selber gelöst: Die Buttons können jetzt transparent dargestellt werden, statt komplett deaktiviert zu werden. Es lag eingentlich nur daran, dass ich im Programmkopf die "using UnityEngine.UI;" vergaß. Leider schaffe ich es nicht, die Button-Transparenz mithilfe einer for-Schleife von 255 auf 0 zu bekommen. Anders gesagt: Es funktioniert zwar, aber es wirkt wieder wie An und Aus. Meine eingebaute Verzögerung, die zwischen jedem Durchlauf ausgeführt werden soll, scheint nicht zu funktionieren. Das ist der aktuelle Programmcode, der zwar funktioniert, aber genau wie der erste läuft: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // Notwendig, damit z.B. auf die Image-Componente zugegriffen werden kann public class PanelToggle : MonoBehaviour { private bool buttonStatus = true; // Mit wahr initialisieren private GameObject[] buttonArray; // Array aller Buttons void Start() // Buttons beim Start einmal suchen und im Array cachen. { buttonArray = GameObject.FindGameObjectsWithTag("Button"); // Array aus allen GameObjects generieren, die Buttons sind } public void ToggleButtons() // Alle Buttons ein- bzw. ausblenden { buttonStatus = !buttonStatus; // buttonStatus togglen foreach (GameObject button in buttonArray) // Für alle Buttons: { Transparenz(buttonStatus, button); // Transparenz für aktuellen Button verändern Debug.Log("Buttons sind: " + buttonStatus); // OK } } public void Transparenz(bool buttonStatus, GameObject button) // Übergebenen Button entweder ein- oder ausblenden { byte alpha = 255; ; // Alphawert mit 255 initialisieren (keine Transparenz zu Beginn) if (buttonStatus) // Wenn Button eingeblendet werden soll: { button.GetComponent<Image>().color = new Color32(255, 255, 255, 255); // Voller Alphawert (keine Transparenz) } else // Ansonsten, ausblenden: { for (int x = 0; x < 255; x++) // 255 Durchgänge { alpha--; // Alphawert in jedem Durchgang dekrementieren button.GetComponent<Image>().color = new Color32(255, 255, 255, alpha); // Neuer Alphawert für den Button StartCoroutine(Verzögerung()); // Verzögerungsfunktion ausführen - FUNKTIONIERT LEIDER NICHT WIE GEWÜNSCHT! } } } IEnumerator Verzögerung() // Fügt eine Verzögerung von 1000 Millisekunden hinzu { yield return new WaitForSeconds(1); // 1 Sekunde Verzögerung } }
  3. Vielen Dank für deine Antwort, das funktioniert schon mal! Ich habe noch ein wenig nachgedacht und bin zum Entschluss gekommen, dass es evt. sinnvoller wäre, die Buttons transparent zu machen. Dadurch müssen sie anfangs nicht gecacht werden, da nie die Gefahr bestehen wird, dass sie deaktiviert sind. Außerdem wird es optisch auch einen besseren Eindruck machen, wenn diese aus- bzw. eingeblendet werden. Leider verzweifle ich mal wieder an den Basics. Das hier funktioniert schon mal nicht: public void ToggleButtons() // Alle Buttons ein- bzw. ausblenden { buttonStatus = !buttonStatus; // buttonStatus togglen foreach (GameObject button in buttonArray) // Für alle Buttons: { //button.SetActive(buttonStatus); // Aktuellen Button ein- bzw. ausblenden button.GetComponent<Renderer>().SetTransparency(1f); // WIE MÜSSTE ES KORREKT SEIN? Debug.Log("Buttons sind: " + buttonStatus); // OK } } Ich habe verschiedenes probiert, aber leider hat's nie geklappt. P.S. Dein anderer Gedanke mit dem Inspector ist interessant, aber noch bin ich nicht so weit Gruß
  4. Hallo, ich versuche gerade mithilfe eines Mausklicks alle Buttons ein- bzw. auszublenden. Mein aktuelles Skript ist das hier: using System.Collections; using System.Collections.Generic; using UnityEngine; public class PanelToggle : MonoBehaviour { private bool buttonStatus = true; // Mit wahr initialisieren public void ToggleButtons() // Alle Buttons ein- bzw. ausblenden { buttonStatus = !buttonStatus; // buttonStatus togglen GameObject[] buttonArray = GameObject.FindGameObjectsWithTag("Button"); // Array aus allen GameObjects generieren, die Buttons sind foreach (GameObject button in buttonArray) // Für alle Buttons: { button.SetActive(buttonStatus); // Aktuellen Button ein- bzw. ausblenden Debug.Log("Buttons sind: " + buttonStatus); // OK } } } Dieses habe ich an die Main Camera gehangen. Meinem Panel habe ich die "Button Componente" gegeben und in der OnClick Funktion (im Inspector) hab ich dann die Main Camera reingezogen und die FUnktion ausgewählt. (K.a. ob es einfacher geht.) Starte ich den Playmode, werden die Buttons ausgeblendet, sobald ich auf das Panel klicke (alles richtig). Klicke ich erneut, werden sie aber nicht eingeblendet. Wo liegt der Fehler? Danke für jede Hilfe!
  5. Hey, super, vielen Dank! Das klappt ganz gut. Selbst das Reinziehen eines Partikelsystems (fortan PS) in ein Image klappt, wenn man dem PS einen hohen "Order" gibt. Schade finde ich nur, dass ich beim Anpassen des PS' (wenn es innerhalb des Images ist) etwas raten muss. In der Scene befinden sich das Image (und somit auch das PS) ganz unten und ich sehe die kaum. Mit dem Hand-Symbol kann ich die auch nicht hochziehen. Hier, so sieht es aus: Wie schon im Screenshot beschrieben: Zoome ich rein, ist das PS nicht mehr zu sehen. Zoome ich weit raus, ist es zwar sichtbar, aber sehr klein. Das Problem ist, dass ich das gesamte Canvas (bzw. die Ansicht) nicht hochziehen kann und dann reinzoomen kann. Hab auch oben schon sämtliche Buttons gedrückt - keine Änderung. Mfg
  6. Hallo, wahrscheinlich/hoffentlich ein einfaches Anfängerproblem. Ich versuche gerade mithilfe eines YT-Videos, eine Art Blitz-Effekt zu erzeugen. An sich hat es gut geklappt und in der Scene-Preview sieht es zufriedenstellend aus, wie ich finde: Ingame ist das Problem, dass die Blitze teilweise irgendwo in der Mitte spawnen und sich dann auch von links nach rechts bewegen. Ich hätte erwartet, dass es wirklich wie in der Scene abläuft. Ein Beispiel: Die Rotation vom Partikelsystem habe ich komplett auf 0 gelassen (oben bei Transform). Auch beim Shape habe ich überall die Rotation von 0 angegeben. In der Hierarchy sind nur die Main Camera und das Partikelsystem (gleiche Ebene - PS ist nicht in der Main Camera) Das sind alle Einstellungen (in einem Screenshot zusammengefasst) : Hat jemand einen Tipp, warum es in der Vorschau anders aussieht und abläuft als im tatsächlichem Spiel? Danke für jede Hilfe!
  7. Werte Unity Communtiy, ich würde in meinem Hauptmenü gerne ein Partikelsystem hinzufügen, das Partikel über/vor einem Image Button darstellt. Aktuell habe ich das Problem, dass die Partikel zwar sichtbar sind, aber nie vor einen Image Button zu sehen sind. Der Begriff "Image Button" ist allerdings nicht ganz korrekt, da es Images sind, die die Button Componente besitzen. Also klickbare Bilder, die sich unter Anderem optisch ändern, sobald der Cursor drauf zeigt oder man diese klickt. Ziehe ich ein ganz normales Bild in die Hierarchy, so dass ich Inspector nur Transform und Sprite Renderer sehe, sind die Partikel über dem Bild sichtbar. Allerdings habe ich dann das Problem, dass ich beim Hinzufügen einer Button Componente keine Target Graphic habe (reinziehen der Grafik ging nicht). (Diese bräuchte ich, um Farb-Änderungen beim Klicken oder Highlighten zu haben.) So sieht es aktuell aus: Wie müsste ich denn korrekt vorgehen, um ein klickbares und animierbares Bild zu haben, welches nicht die Partikel überdeckt? Ich hatte auch versucht, eines der UI-Image-GameObjects zu modifizieren, aber die Partikel sind nie sichtbar gewesen. Danke für jede Hilfe!
  8. Problem 3 hab ich gelöst. Ich hatte seltsamerweise die Rotation des Partikel Systems auf x-90 (also bei Transform). Keine Ahnung warum, evt. weil ich ursprünglich Probleme beim Positionieren hatte (das Partikel System war anfangs nie sichtbar). Wäre schön, wenn ihr trotzdem noch was zu den anderen 2 Punkten sagen könntet.
  9. Guten Tag, ich möchte gern für mein Hauptmenü einen Schnee-Effekt erzeugen. Obwohl ich nun mehrere YT-Videos angeschaut habe, gibt es noch einige Unklarheiten. Aktuell befinden sich in der Hierarchy meines Projekts 3 GameObjects: - Main Camera - Hintergrundbild (funktioniert, hab es aber vorerst ausgeblendet) - Particle System 1) Main Camera Die erste Unklarheit ist, ob die Kamera "Orthographic" oder "Perspectivic" sein sollte. Aus der Unity-Dokumentation bin ich leider nicht schlau geworden. Außerdem hätte ich gedacht, dass die x, y und z-Position auf jeden Fall 0 sein müssten. Die Size (Orthographic) bzw. den FOV (Perspectivic) müsste ich sicherlich so anpassen, dass alles sichtbar ist. Ich habe jetzt erstmal auf gut Glück die "Orthographic" gewählt. 2) Hintergrund Statt ein Canvas -> Image zu erzeugen, habe ich die PNG-Datei (die im Assets-Ordner ist) einfach in die Hierarchy gezogen. Es funktioniert, aber komischerweise muss ich bei der z-Position mindestens 0.3 eintragen, damit das Bild sichtbar ist. (Scale ist für alle Achsen auf 1 gesetzt, unverändert.) Ansonsten sehe ich nur einen blauen Hintergrund (bei der Main Camera ist alles weiterhin bei 0 - also die Positions) 3) Particle System Ich habe einen Cone gewählt und bei x-Rotation den Wert 90 eingetragen, damit die Partikel von oben nach unten fallen. In der Scene-View sieht es korrekt aus, aber wenn ich auf Play drücke, spawnen die Partikel in der Mitte. Außerdem bewegen sie sich in "meine Richtung" statt nach unten. Hier mal 2 Bilder, wie es aussieht: Bitte um Support! Vielen Dank!
×
×
  • Create New...