panel ein-und ausblenden, in NGUI
Ich bin neu NGUI
und unity 3d
.
Ich habe zwei Platten in einem ui
root. seinen Namen als firstPanel
und secondPanel
. secondPanel ist deaktiviert in Szene. In firstPanel
ich habe so viele Tasten und eine play
- Taste, Bild-Schaltfläche. Während Sie auf play
Schaltfläche firstPanel
bekommen sollte verstecken und secondPanel
sollte zeigen.Ich adde ein neues Skript zu play
button und code geschrieben in es
void OnClick(){
GameObject panel2 = GameObject.Find("secondPanel");
NGUITools.SetActive(panel2,true);
GameObject panel1 = GameObject.Find("firstPanel");
NGUITools.SetActive(panel1,false);
}
Aber ich bekomme diese Fehler : "NullReferenceException"
In dem Skript von ngui
muss ich Bearbeiten und wie kann ich es tun? bitte helfen Sie mir, dieses Problem zu lösen
Vielen Dank im Voraus.
In welcher Zeile bekommst du die Ausnahme?
GameObject panel2 = GameObject.Finden("secondPanel"); hier bin ich immer Fehler
GameObject panel2 = GameObject.Finden("secondPanel"); hier bin ich immer Fehler
InformationsquelleAutor Sona | 2013-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihre Platten sind als die den Namen Panel1 und Panel2, werden Sie nicht finden Sie mit GameObject.Finden("secondPanel") und GameObject.Finden("firstPanel"). Wenn "Panel1" und "Panel2" ist der einzige name in der game-Szene(Keine anderen Panel1 oder Panel2), dann können Sie versuchen, verwenden Sie
Ich denke also, halten Sie diese als Referenz arbeiten. Probieren Sie es aus: Fügen Sie "public GameObject panel2;" in deinem script(in der Klasse Körper, zum Beispiel oberhalb der void OnClick). Wählen Sie dann Ihr play-Taste, sehen Sie ein Feld namens "Panel2" auf Ihr Skript in der Inspector. Ziehen Sie die secondPanel aus der game-Szene auf dem Feld. Sie können dann löschen Sie die GameObject-Linie und verwenden Sie panel2 direkt.
Warum GameObject.Finden und NGUITools.SetActive? Das ist so langsam... gibt es nicht eine Möglichkeit einfach nicht zu Rendern?
InformationsquelleAutor onevcat
GameObject.Finden("Etwas") nicht finden können, keine Behinderten-Spiel-Objekt, so dass Sie nicht verwenden können, diese Art und Weise. Sie können versuchen, hinzufügen, um die Reflexion zu Ihrem button-code:
und legen Sie Sie zum rechten panel in den Szene-editor-Fenster.
Anderen Weg, zuerst müssen Sie sowohl Ihre Platten aktiv in der Szene, fügen Sie code hinzu, um Ihre Schaltfläche Skript wie dieses:
GameObject.Find(string name) die Funktion ist nicht sehr effizient, in Unity3D, so versuchen Sie nicht, um es in Update() oder jedes mal, wenn Sie klicken Sie auf die Schaltfläche.
InformationsquelleAutor Nicolas Dai
Ich weiß, dieser thread ist alt, aber wenn jemand anderes ein Problem hat ruft panels, wenn Sie inaktiv sind, können Sie Ihr Fertighaus-panel und verwenden Sie die NGUITools.AddChild rufen Sie Ihre Systemsteuerung. Es würde in etwa so Aussehen.
Weisen Sie Ihren UIRoot parent (oder was auch immer Sie möchten, fügen Sie die Systemsteuerung), und weisen Sie Ihrem Bedienfeld auf das Kind in den editor, und Sie sind alle gesetzt! Ich hoffe, dies hilft jemand aus, dies ist ein häufiges problem beim ersten arbeiten mit NGUI.
Happy Coding 🙂
InformationsquelleAutor Steve Griffin
Können Sie nicht verwenden GameObject.Find() zum suchen eines Behinderten gameobject, es ist return null;
InformationsquelleAutor JoaquinG