Frage von Crysali, 38

Aktiven Status eines GameObjects umdrehen ( Unity, C#)?

Ich möchte den Status meiner Panel ( Enabled, Disabled) meiner UI umdrehen, wenn ich einen Button klicke.

using UnityEngine;
using System.Collections;

public class Button_PanelEvent : MonoBehaviour {
    public GameObject Panel;
    public void OnButton(){
        Panel.SetActive( !Panel.activeSelf);
    }
}

Warum funktioniert das nicht ? Bei dem Event OnButton müsste nun das definierte GameObject, das Panel, seinen Status umdrehen, funktioniert aber nicht. Ist das Skript so richtig und sollte funktionieren, liegt der Fehler an anderer Stelle ?

Antwort
von Dexti, 13

HalloCrysali,

ich bin ein deutscher Unity Entwickler. Dein Quellcode ist soweit richtig. 

Um den Fehler zu finden, stelle bitte mithilfe von Debug.Log sicher, dass die oben aufgelistete Methode auch tatsächlich aufgerufen wird und Debugge zusätzlich die ActiveSelf Variable. So hast du eine grobe Einschätzung wo der Fehler liegen könnte.

Kleiner Tipp am Rande: Es gibt eine Variablen Konvention die besagt, dass Variablennamen klein geschrieben werden :-) 

Kommentar von Crysali ,

Danke, ich dachte, OnButton würde ähnlich funktionieren wie Update(){} oder Start(){}, ich habe naiv angenommen, die Funktion OnButton(){} würde laufen, wenn der Button geklickt wurde. Erst nachdem ich das Event im Inspektor des GameObjects Button hinzugefügt habe und mit der Funktion OnButton(){} verknüpft hatte, läuft es jetzt wie geschmiert :)

Danke wegen dem Variablenname, das hatte ich ganz vergessen. Kennst du zufällig einen Artikel, in dem die Konventionen aufgelistet sind ? Bei Google findet man da doch recht unteschiedliche Konventionen.

Kommentar von Dexti ,

Es gibt von Microsoft höchst persönlich eine Liste mit den zu beachtenden Konventionen: 

https://msdn.microsoft.com/de-de/library/ff926074.aspx

Kommentar von Crysali ,

Danke!

Antwort
von dosenbiiir, 6

Ja ich kann dir auch empfehlen dich im Unity Insider Forum anzumelden ;)

das mit dem ersten Buchstaben der Variablen wurde dir ja bereits gesagt und du den Fehler hast du bereits gefunden.

Hab jedoch noch 1 Tipp für dich, wenn eine Variable nicht umbedingt public sein muss, du also von außerhalb auf die Variable zugreifen willst, nimm das public weg und ersetze es durch [SerializeField]. Das sorgt dafür, dass die Variable sozusagen private ist, aber trotzdem im Inspector in Unity verfügbar ist.

Viel Erfolg,

LG Dosenbiiir

Kommentar von Crysali ,

Danke, guter Tipp! Erleichtert einiges!

Kommentar von dosenbiiir ,

gerne :)

Antwort
von m4xWARE, 14

ich bezweifel das du hier einen richtigen findest der dir helfen kann, ich habe früher mal mit untiy gearbeitet um eine app zu erstellen aber das ist lange her. ich habe hier mal ein forum rausgesucht für dich: http://forum.unity-community.de/

Kommentar von Crysali ,

Danke, ich überlege auch schon seit längerem, mich dort anzumelden. 

Kommentar von m4xWARE ,

ist nunmal das größte deutsche forum über untiy, schadet nicht dort mal nachzufragen

Keine passende Antwort gefunden?

Fragen Sie die Community