Markierung interagierbarer Objekte

Damit der Spieler nicht blind raten muss, welche Objekte in der Umgebung nutzbar sind und welche nicht, wird ein interagierbares Objekte bei Betrachtung durch den Spieler fokussiert und dieser Fokus sichtbar gemacht. Zu diesem Zwecke schrieben wir den interactionLoop, welcher in den Haupt-Loop des Spiels eingehängt wurde.

Dieser prüft zunächst, ob der Spieler gerade mindestens ein interagierbares Objekt direkt ansieht. Dafür verwenden wir, genau wie bei der Kollision, die Methode des Raycasting und schicken einen Strahl aus Kopfhöhe des Spielers in dessen Blickrichtung1. Geschnittene Objekte werden, nach Entfernung sortiert, in einem Array zurückgeliefert. Das vorherig genannte Problem der Unterscheidung der interagierbaren Objekte vom gewöhnlichen Terrain war dann bereits gelöst - zu nicht interagierbaren Objekte wird kein GameObject erstellt und nur solche werden im weiteren Verlauf des Loops weiter beachtet.

Um nun den Fokus auf ein interagieres Objekt darstellen zu können, wurde einmalig ein spezielles Wireframe-Material erstellt. Das Mesh des interagierbaren Objekts, das als erstes in Blickrichtung des Spielers gefunden wird, wird geklont und erhält dieses Wireframe-Material, welches seine Kanten hell hervortreten lässt. Zusätzlich erhält die separate Variable activeObject die Referenz auf dieses Objekt - bei Mausklick des Spielers kann somit die Interaktionsfunktion des gerade aktiven Objekts aufgerufen werden.

Wenn der Spieler auch nur leicht am Feuerlöscher vorbei schaut, wird dieser nicht markiert.

Durch den interactionLoop wird außerdem konstant aktualisiert, ob der Spieler nun ein neues Objekt oder gar kein Objekt mehr ansieht - in diesem Fall muss die Referenz des aktiven Objekts neu gesetzt und das alte Wireframe-Mesh wieder aus der Umgebung entfernt werden.


1. Das Raycasting-Verfahren wird im Abschnitt Kamera & Kollision/Kollision genauer beschrieben

results matching ""

    No results matching ""