Einführung
Hier ist eine Lösung für einen First Person Player, um Knöpfe, Schalter, Hebel und mehr in Unity zu aktivieren.
Die Lösung besteht aus drei Skripten, die miteinander interagieren, um die Erkennung der interaktiven Elemente und ihre Aktivierung zu lösen. Zwei Skripte werden als Beispiele zur Verfügung gestellt, um das zu erreichen, was im folgenden Video beobachtet wird:
In dem folgenden Video lade ich die Dateien von dieser Seite herunter und konfiguriere das Interaktionssystem von Grund auf neu.
Es ist wichtig zu erwähnen, dass bei dieser Lösung keine bestimmte Aktion gelöst wird, obwohl zwei Skripte vorgesehen sind, die die Verwendung veranschaulichen, muss jede bestimmte Aktion programmiert werden.
Beschreibung der Download-Dateien
Diese Lösung besteht aus drei grundlegenden Skripten: „CheckInteraction“, „InteractionReceiver“ und „IAction“.
CheckInteraction hat die Aufgabe zu prüfen, ob der Charakter etwas beobachtet, mit dem er interagieren kann. Du kannst dieses Skript zu jedem beliebigen GameObjekt hinzufügen, aber es ist kohärent, es in unseren Charakter zu platzieren.
Der InteractionReceiver wird an allen Objekten in unserer Welt angebracht, die der Charakter benutzen kann, z.B. Knöpfe, Hebel, Türen usw. Den Objekten, die diesem Skript zugeordnet sind, muss auch ein Collider zugewiesen werden, damit das CheckInteraction Skript sie erkennen kann, sonst kannst du dieses Skript nicht zum GameObject hinzufügen.
IAction ist eine Programmierschnittstelle, sie wird nicht auf irgendein GameObject angewendet, aber sie ist für die Lösung notwendig, und wir müssen darauf achten, wie man sie benutzt.
Darüber hinaus werden zwei weitere Skripte als Beispiele bereitgestellt, um zu verstehen, wie die Lösung verwendet wird.
Extra: Grafische Benutzeroberfläche
Das Paket enthält auch die einfache grafische Schnittstelle, die im Video zu sehen ist und die es uns ermöglicht, Nachrichten auf dem Bildschirm anzuzeigen.
Anwendungsbeispiel – Schaltfläche in Unity aktivieren
Nun wollen wir sehen, wie man diese Lösung nutzen kann, um in Unity eine Schaltfläche zu aktivieren und damit Aktionen durchzuführen.
Zunächst beginnen wir mit einer einfachen Szene, in der es einen Knopf und ein Tor gibt.
Charakter
Wir haben das vorgefertigte FPSController-Paket von Standard Assets in die Szene gesetzt. Wenn du das Paket nicht hast, kannst du es herunterladen, indem du hier klickst.
Wir weisen diesem Prefab das CheckInteraction Script zu, das Feld „minInteractionDistance“ ist der Mindestabstand, den der Spieler haben muss, um mit dem Objekt zu interagieren, in meinem Fall habe ich 4 angegeben.
Das Feld „rayOrigin“ ist der Punkt, von dem der Strahl ausgeht, um die Interaktion zu überprüfen. In diesem Fall platziere ich die Kamera des Charakters, damit der Charakter die Objekte in der Mitte des Bildschirms „sehen“ kann.
Empfänger – Schaltflächen oder Schalter
Die zu bedienenden Objekte (wie Knöpfe, Schalter, Hebel usw.) werden mit dem Skript „ReceiverInteraction“ versehen, wodurch das Skript „CheckInteraction“ diese Objekte erkennt und sie mit der E-Taste bedient werden können.
Wir können eine Nachricht an den Interaktionsempfänger hinzufügen und dann Dinge mit dieser Nachricht tun, z.B. sie auf dem Bildschirm zeigen, wie sie im Video zu sehen ist. Dafür gibt es einen mit Kommentaren markierten Bereich im CheckInteraction-Skript, in dem ein Debug.log erstellt wird, das die Nachricht in der Konsole anzeigt.
Objekte mit Aktionen
Wenn wir den Knopf drücken, geschehen zwei Dinge: erstens, dass sich das Tor je nach seinem aktuellen Status öffnet oder schließt, und zweitens, dass der Knopf auf grün wechselt, wenn das Tor geöffnet ist, und auf rot, wenn es geschlossen ist.
Diese beiden Aktionen werden mit Hilfe von zwei Skripten individuell programmiert: „Switch“, das dem GameObjekt des Buttons (Abbildung 2) und Gate (Porton in Spanisch), das dem GameObjekt des Tors (Abbildung 3) zugeordnet ist.
Skripte, die die Aktionen lösen
Die Aktionen müssen spezifisch programmiert werden, das heißt, wir müssen mehr Skripte erstellen, die die Aktion lösen. Dies wird von den Bedürfnissen jedes einzelnen abhängen.
In diesem Artikel werden wir die beiden Skripte sehen, die die Tasten- und Gate-Aktionen lösen.
Die Anforderung an Aktionsskripte ist, dass sie „IAction“, eine Programmierschnittstelle, implementieren. Dazu muss in unserem Skript eine Methode namens „Activate“ definiert werden, innerhalb derer wir alles tun, was die Aktion bei ihrer Aktivierung durch den Empfänger tun muss.
In den Abbildungen 4 und 5 sehen wir Beispiele für den Knopf und für das Tor. Ich werde wahrscheinlich Videos machen, die erklären, wie man mit diesem grundlegenden Interaktionssystem weitere Mechanismen lösen kann, und wahrscheinlich werden wir es auch verbessern.
Zuweisen von Aktionen zum Interaktionsempfänger
Sobald wir die Aktionen programmiert haben, weisen wir sie den entsprechenden GameObjects zu und wählen das Objekt aus, das wir als Auslöser für diese Aktionen verwenden (in diesem Fall die Schaltfläche).
Im Script InteractionReceiver haben wir ein Feld namens „ObjectsWithActions“, das ein Vektor von GameObjects ist, in dem wir alle Objekte platzieren werden, die aktiviert werden, wenn wir den Knopf drücken.
Die Objekte, die wir hier platzieren, müssen ein zugewiesenes Skript haben, das die IAction implementiert, damit sie funktionieren. In den Wert „Size“ setze ich 2 und weise die GameObjects Gate und Button zu, die das Skript Gate bzw. Switch zugewiesen haben (siehe Abbildungen 3 und 6).
Damit erreichen wir, dass das InteractionReceiver-Skript beim Drücken des Knopfes die Objekte „Gate“ und „Button“ übernimmt, die Skripte erhält, die das IAction-Interface implementieren, und die Aktivierungsmethode von jedem einzelnen ausführt.
Fazit
In diesem Artikel haben wir gesehen, wie das grundlegende Interaktionssystem funktioniert. Mit dieser Lösung werden wir in der Lage sein, interagierbare Objekte in der Szene zu platzieren (wie Knöpfe, Schalter oder Hebel), und wenn sie aktiviert werden, werden eine oder mehrere Aktionen ausgeführt.
Jede Aktion, die wir durchführen müssen, muss insbesondere mit Hilfe eines Skripts gelöst werden. Die einzige Voraussetzung ist, dass dieses Skript die IAction-Schnittstelle implementiert und daher innerhalb dieses Skripts eine öffentliche Methode namens Activate definiert werden muss.