DSVGO
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu.
Server Wartungsarbeiten
...
Nachdem wir die Animation erstellt und Unity mitgeteilt haben wann er welche Animation setzten soll kümmern wir uns um das Verhalten von unserem Hamster, anders gesagt, wir entwickeln seine Künstliche Intelligenz.
Im Folgenden werden wir das Script was dafür zuständig ist, Code-Schnipsel weiße erklären:
Hier sehen wir den Header unseres Hamster Script („TeemoControl“), in welchen wir unsere Variablen initialisieren welchen wir im Script benutzen.
Die [Header(„X“)] Anweisung dient zur Übersichtlichkeit im Unity Editor.
Public Variablen lassen sich in Unity Editor verändern, private Variablen hingegen sind nur im Script verwendbar und änderbar. Die Variablen wurden so benannt wie die Funktion die sie im Script erfüllen.
In der vorgenerierten Funktion void Start(), welche beim Starten der Szene einmal ausgeführt wird, binden wir die Position des Spielers an die Variable Player und weißen der Variable animator dem Hamster Animator zu den wir vor dem Skript erstellt und konfiguriert haben.
Ausserdem binden wir die public Variablen health und attackCooldown an private Variablen um feste Werte im Script weiter zu verwenden.
Vielleicht mag man sich fragen warum wir dann überhaupt public Variablen verwenden, wenn die sowieso wieder in private verwandelt werden. Der Grund dafür ist das man so in Unity schnell verschiedene Balancing Veränderung durchführen kann.
Die void Update() Funktion ist auch von Unity generiert und wird nach jedem Frame aufgerufen. Daraufhin lassen wir unsere HP Leiste Prozentual zu den Aktuellen Leben füllen.
Sollte der Welt auf kleiner gleich 0 fallen zerstören wir unser Spielobjekt und lassen ein neues Objekt erstellen, welche unsere Blutlache ist die an der Stelle des Gegners spawnt, wenn eine Gegner getötet wurde. Alle Gameobjekte haben ein eigenes Verhalten, dementsprechend auch ein Skript.
Mit der nächsten If Abfragen prüfen wir ob unser boolean move auf true gesetzte, welche dann die Funktion Movement() aufruft, zu welcher wir noch später einmal zurückkommen.
In Zeile 71 reduzieren wir die attackCooldown um die System Zeit, also wenn im Spiel 200ms vergangen sind, ist geht der attackCooldown Timer auch wirklich 200ms runter.
In der letzten If Abfrage überprüfen wir ob unser Hamster wieder angreifen darf und er sich in einer Angriffs Animation befindet, also das die variable AttackDir nicht den Wert 0 hat.
Wenn dies erfüllt ist rufen wir die Funktion shot() auf und die Funktion resetAttackCooldown(), welche später erläutert werden.
Auf dem Bild sehen wir die Funktion Movement() die wir zur Erinnerung immer aufrufen wenn der boolean move auf True gesetzt ist, also sich der Gegner bewegt.
In den ersten beiden Zeilen (87 und 88) berechnen wir jemals den Unterschied zwischen dem Spieler und unseren Gegner für die X- und für die Y-Achse.
In den nächsten 4 Zeilen errechnen wir die Hypotenuse der zuvor ausgerechneten zwei Strecken um die direkte Entfernung des Gegners zu erhalten.
...
Dazu auch ein Schaubild was die Theorie dahinter nochmal verbildlicht.
Wir befinden unser noch immer in der Movement() Funktion. Auf diesen Bild geht es um das Animator verhalten was wir relativ am Anfang konfiguriert haben. Ziel hier ist es das unser Hamster passend zur Position die Richtige Angriff und Bewegungsanimation abspielt.
...
Falls sich der Spieler Links befindet wird die If in Zeile 135 ausgelöst, welche dasselbe wie die If in Zeile 119 macht, nur sind alle Anweisung angepasst um die Animation nach Links zu steuern.
Der Vollständigkeitshalber der letzte Teil der Movement() Funktion. Sollte die If in der wir testen, ob der Spieler sich mehr links oder rechts befindet als oben oder unten, fehlschlagen wird die else in Zeile 152 ausgelöst. Dementsprechend testen die Nachfolgenden If Abfragen ob der Spieler sich über oder unter unseren Hamster befindet und führt dementsprechend dieselben Anweisungen aus nur auf die richtige Richtung getrimmt.
...
Um das Thema abzuschließen noch ein Schaubild was das ganze verbildlichen soll.
In Zeile 190 definieren wir die Funktion resetAttackCooldown() welche lediglich dafür sorgt das bei jedem Aufruf die derzeitige attackCooldown wieder auf den defenierten Wert von maxCooldown gesetzt wird.
Die nächste Funktion die wir definieren attackOffset() sorgt dafür das auf attackCooldown 0.7f addiert wird. Der Grund dafür das der Hamster den Pfeil erst schießen soll wenn bei der Animation der richtige Frame abgespielt wird, daher müssen wir die künstliche Verzögerung einbauen.
Die Letzte Funktion auf den Bild (Zeile 200) shot() sorgt dafür das unser Hamster wenn die Funktion aufgerufen wird ein GameObject erzeugt was der Pfeil vom Hamster ist und ihn mitteilen wo er erzeugt wird und in welche Richtung der Pfeil fliegen soll. Aus diesen Grund setzten wir in der Movement() Funktion den currentShotPoint und die shotDirection.
Diese Information Teilen wir dem Skript mit der mit den Pfeil vom Hamster verbunden ist und der regelt das Verhalten vom Pfeil.
Auf diesen Bild sehen wir die Funktion OnTriggerEnter2D(Collider2D collision) Funktion.
Diese macht letztendlich nix anderes als die Information von Unity zu bekommen was für eine Berührung bei der Hamster Hitbox, die wir in Unity definiert haben, stattgefunden hat.
...
Als Beispiel gehen wir davon aus das uns ein Maschien Gewehr Kugel, mit den Tag „BulletMG“, getroffen hat. Daraufhin wird von der health Variable der Wert 10 abgezogen, die Kugel die uns getroffen hat wird zerstört und wir initialisieren das Objekt bloodSplattern an der derzeitigen Position des Hamsters. Das bloodSplattern sind die Blut Treffer welche auch wieder von einem eigenen Skript gesteuert wird.
Im letzten Teil des Skripts definieren wir die Funktion setMoveTrue() und die Funktion setMoveFalse() welche jeweils den boolean move auf true oder false setzten.
...