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 CreateC#-Script, 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 und Update und füge public 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 CreateC#-Script, 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 ComponentPhysicsBox Collider, um einen Box-Collider auf dem Restaurant-Objekt zu erzeugen.

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 .