Basis-Scripte für Interaktion anlegen
Damit beim Zeigen auf ein Objekt der Text erscheint, brauchen wir zwei Komponenten: den Darsteller im UI sowie die Datenbeschreibung für das Objekt.
Script um Titel bereit zu stellen
-
Klicke mit in Project und wähle , um ein neues Script zu erzeugen.
-
Nenne das Script
ObjektMitTitel
. -
Doppelklicke auf dieses neue Script, um es in Visual Studio zu öffnen.
-
Lösche
Start
undUpdate
und fügepublic string titel="";
ein. -
Speichere die Datei und wechsle zurück in den Unity-Editor.
-
Ziehe das Script
ObjektMitTitel
aus Project in den Tab Hierarchy und zwar dort auf das Restaurant-Objekt. -
Wähle das Restaurant-Objekt in der Hierarchy aus und setze im Inspector unter ▾ Objekt mit Titel Titel = Restaurant.
Script um Text darzustellen
-
Klicke mit in Project und wähle , um ein neues Script zu erzeugen.
-
Nenne das Script
EigenschaftenZeichner
. -
Doppelklicke auf dieses neue Script, um es in Visual Studio zu öffnen.
-
Füge
public Text textName;
ein. -
Füge die folgende Methode ein:
public void zeichneObjekt(ObjektMitTitel dasObjekt)
{
textName.text = dasObjekt.titel;
}
-
Speichere die Datei und wechsle zurück in den Unity-Editor.
-
Ziehe das Script
EigenschaftenZeichner
aus Project in den Tab Hierarchy und zwar dort auf das Canvas-Objekt. -
Wähle das Canvas-Objekt in der Hierarchy aus und setze im Inspector unter ▾ Eigenschaften Zeichner Text Name = Text.
Verbinden der Scripte (Variante mit Suche)
-
Öffne
ObjektMitTitel.cs
in Visual Studio. -
Füge die folgenden Methoden ein:
public void OnMouseEnter() { EigenschaftenZeichner ez = FindObjectOfType<EigenschaftenZeichner>(); ez.zeichneObjekt(this); } public void OnMouseExit() { EigenschaftenZeichner ez = FindObjectOfType<EigenschaftenZeichner>(); ez.zeichneObjekt(null); }
-
Achte darauf, dass die Groß/Klein-Schreibung der Methodennamen exakt der Schreibweise oben entspricht. Nur so erkennt Unity die Ereignisse und ruft sie automatisch auf.
-
Wechsle zu
EigenschaftenZeichner.cs
und ergänze die Unterstützung für den Null-Parameter:public void zeichneObjekt(ObjektMitTitel dasObjekt) { if (dasObjekt==null) // Kein Objekt -> leerer Text textName.text = ""; else // Konkretes Objekt -> dessen Titel zeichnen textName.text = dasObjekt.titel; }
-
Speichere alle Änderungen.
Collider ergänzen
-
Wechsle zurück zum Unity Editor und wähle in der Hierarchy das Restaurant-Objekt aus.
-
Wähle Collider auf dem Restaurant-Objekt zu erzeugen.
, um einen Box-
Testen
-
Starte das Spiel über den Play-Button oder Strg+P.
-
Fahre mit der Maus im Game über das Restaurant und beobachte, wie sich der Text ändert.
Tipp: Achte darauf, dass Game den Eingabefokus hat. Das ist der Fall, wenn der Tab oben eine blaue Linie hat. Klicke ggf. einmal in den Game-Bereich, um den Fokus zu setzen, falls nötig.
Probleme und Verbesserungsbedarf
-
Ineffiziente Suchläufe: Bei jedem Maus-Ereignis auf einem ObjektMitTitel wird ein Find-Befehl ausgeführt. Da Suchen sehr aufwändig sind und viel Leistung erfordern, wäre es besser, die Suchläufe stark zu reduzieren oder sogar ganz darauf zu verzichten.
-
Feste Verdrahtung: Momentan spricht das ObjektMitTitel den EigenschaftenZeichner konkret an. Genau das wollten wir nicht, da wir so die Objektbeziehung im Code festlegen und unflexibel werden.
Beide Probleme lösen wir durch Einführung eines Event-Bus in der nächsten Lektion.
Anhänge
Die hier gezeigten Lektionen sind eine Auswahl von Inhalten aus mehreren verschiedenen kostenpflichtigen Kursen. Um alle Inhalte zu sehen, müssen mehrere Kurse gekauft werden. Änderungen und Aktualisierungen der Kursinhalte werden auf dieser Seite möglicherweise nicht oder nicht sofort dargestellt. Die kostenpflichtigen Udemy-Kurse enthalten neben den Videos auch Übungen, Textartikel, weitere Materialien, sowie ein Support-Forum für Fragen. Vereinzelt kann eine Lektion im mehreren Kursen gleichzeitig enthalten sein. Wenn etwas unklar ist, stelle Deine Frage per E-Mail an rene@gamedev-profi.de .