Bewegungssyteme _ 2D – 3D
Allgemeines bewegen des Spiele Charakters
Projektname: Adam
Projektansicht: 3D
Hierbei wurden die drei Achsen X, Y und Z benutzt um den Charakter zu bewegen, wobei Y nur zum
springen benutzt wurde dieser sollte aber nicht möglich sein daher wurde es bei diesem Projekt
weggelassen.
Diese Steuerung wurde sowohl von mir für Controller als auch für Tastatur und Maus ausgelegt, je
nach Präferenz des Spielers.
Projektname: Neon Blood
Projektansicht: 2D
Bei Neon Blood, wurde im 2D Bereich entwickelt und
durch die zwei Formen des Hauptcharakters wurden die Bewegungen einzeln angepasst. Zudem ist
der 2 D Bereich nur auf 2 Achsen beschränkt die X und Y-Achse.
Hierzu sei erwähnt das die grundlegende Bewegung sich von links nach rechts bewegt auf der X-Achse.
Die Bewegung ist auch für den Spieler in den einzelnen Frames abbrechbar, so wie man es
Beispielsweise aus Kampf-Spielen wie „Super Smash Bros. Ultimate“ oder „Street Fighter“ kennt.
Spezielle Bewegungen
Animationsbedingte Bewegungen:
Die Bewegungen, die eine Animation ausführt, muss von Collidern bestätigt
werden, das bedeutet, wenn ein Charakter sich duckt, darf er nicht auf
der normalen Höhe hängen bleiben.
Hierzu gibt es viele Möglichkeiten dieses Problem anzugehen im gezeigten
Beispiel wird der benutze Collider ausgetauscht und verkleinert.
Es wurden hier zwei angepasste Collider benutzt die jeweils auf den stehenden und
den sich duckenden Spielecharakter ausgerichtet sind.
Sie werden bei Ausführung der Animation an bzw. aus geschaltet.
Eine ähnliche Herangehensweise wurde bei
Neon Blood benutzt, nur wurde hier der Collider per Skript
angepasst je nachdem welche Form der Spieler gerade besaß.
Hierzu entstanden die Möglichkeiten neue Wege, die
der Charakter nicht gehen konnte zu benutzen.
Zudem wurde durch eine Abfrage welche Form gerade besteht, die Funktion eingebaut den Charakter durch bestimmte Bereiche per Tastendruck fallen zu lassen, hierbei entstanden neue Bewegungsmöglichkeiten.
Das Blutsystem, welches in Neon Blood existiert, beeinflusst den Spielcharakter in
der Weise, dass alle Werte und Funktionen umgestellt werden bei Formenwechsel.
Sobald der Blutdruck fällt, wie im Userinterface angezeigt wird, leer ist wird
er zu dem kleinen Blob auf diesem Bild zu sehen.
Bewegungsrelevante Elemente wie Geschwindigkeit, werden natürlich auf die Form bezogen angepasst.
Durch Blut wird die Form von Schleim auf die menschliche Form zurückgesetzt und somit wieder die Werte angepasst.
Eine Weitere Bewegungsform die hierzu entwickelt wurde,ist eine Art Ansturm.
Dieser konnte auf Punkte in der Welt gesetzt werden, sobald
diese in Reichweite waren.
Außerdem auf Blutpfützen sowie Gegner bei diesen
sprang man nach vorne und biss zu bzw. trank das Blut.
Eine Abweichung in den Formen gab es auch hier dabei wurde der Radius in den verschiedenen Formen je nachdem größer oder kleiner gehalten. Natürlich wurde diese Anpassung automatisch per Skript vorgenommen und musste nicht per Hand eingestellt werden.
Diese Mechanik ergab für das Spiel einen großen Nutzen so konnten wir nicht nur dies im Leveldesign verarbeiten, sondern wurde auch genutzt um mehr Spieltiefe zu bekommen.
Aufgrund des geringen Lebens des Schleimes wurden so Schleich-Passagen gebaut so wurde diese Funktion in mehreren Aspekten verbaut.
Weiterhin wurden standardmäßige Optionen verbaut wie Springen, Wandsprünge, Doppelsprünge, auch die Shoryuken aus Street Fighter wurde in abgewandelter Form verwendet, außerdem Dashes Slides und vieles mehr.
NPC Bewegungen
Bewegungen von nicht spielbaren Charakteren durften bei meiner Arbeit nicht fehlen. Interessante Systeme die ich dazu benutzt hatte sind Patrollier Systeme und den Nav-Mech-Agent.
Das Patrol System
Verschiedene Patrol Systeme habe ich schon in verschiedenen Projekten umgesetzt. Ein Paar werde ich hier erklären. Aufgrund der verschiedenen Funktionsweisen werde ich zwei Systeme erklären, wovon eines mit dem Nav-Mech-Agent verbunden wurde.
Das erste Patrouillensystem erstellte ich im 2D Bereich dieses wurde für Plattformen genutzt auf dem der Gegner sich hin und her bewegte. Durch einen Punkt am Gegner konnte der NPC herausfinden, ob er die Plattform schon verlassen hatte oder nicht. Sobald dieser am Rand war drehte er nach einer gewissen Zeit um, diese Variable war individuell einstellbar. Ich wollte dabei uns die Möglichkeit geben gleiche Systeme unterschiedlich zu benutzen, um Individualität dem Spieler vorzutäuschen.
Weiterhin wurden Patrol Systeme im 3D-Bereich angewandt, welche allerdings den Nachteil mit sich zogen, dass wenn Sie zufällig Punkte aus Ihren Listen anwählten, die wir Ihnen vorbereitet hatten um den angewählten Punkt zu erreichen, wollten sie den direkten Weg gehen. Das bereitete Ihnen insofern Probleme, dass die NPCs gegen feste Mauern oder Gegenstände liefen. Zum Unterstützen der Orientierung habe ich den Nav Mech Agent in das Skript integriert.
Nav-Mech-Agent
Wie funktioniert der Nav-Mech-Agent, man nimmt einen Bereich und setzt
diesen als Grundfläche.
Dieser wird später der Boden sein, welcher sich die Wände und Wege gemerkt hat.
Im Beispiel sieht man eine Plane, diese ist schon im ersten Schritt vorbereitet.
Danach werden mit primitiven Objekten die Wandstruktur nachgebaut, das hat den Vorteil das diese nachher entfernt werden können und der Programmierer im Vornherein schon diese Sachen vorbereiten kann.
Sobald alles an seinem Platz ist, kann es auf den Boden, sogenannt „Gebacken“
werden. Das bedeutet das die Struktur auf den Boden eingebrannt wird.
Nach dem dieser Schritt fertig ist sieht die Bodenplatte aus wie ein Bauplan. Mit diesem Bauplan kann der nicht spielbare Charakter und der Spieler Charakter darüber agieren, ohne wirkliche Wände mit Collidern zu haben.
Nun kann das Patrollier-System mit dem Nav-Mech-Agent agieren und dadurch wird der Npc den kürzesten Weg zum Ziel ohne Probleme weisen.
Chat- und Dialogsystem
Auch Chat- und Dialogsysteme habe ich gebaut, gerade mit meinem Abschlussprojekt habe ich eine andere Form für mich kennenlernen können. Die einfache Form von Chatroom in der komplizierteren Verbindung TCP, auf diese musste ich zurückgreifen, weil der Schul-Server besonders gesichert war und mir somit nicht die Sicherheit gegeben war, ohne eine andere Verbindung zu funktionieren.
Es war eine Abfrage von der Ip des Hostes mit einer eigenen Port-Verschlüsselung. Wenn diese beiden Dinge gegeben waren, konnte man sich mit dem Chat verbinden. Mann war auch nicht mit einem besonderen Namen angemeldet, außer man hat die Anmeldung der App genutzt.
Strings wurden verschlüsselt beim Senden und entschlüsselt beim Empfangen alles wurde sicherheitshalber vom Host kontrolliert.
Auch Dialogsysteme mit Textboxen und animiertem Bild, habe ich schon verwendet und verbaut. In dem der Charakter etwas auf der Welt auslöst und so Gespräche geführt und durch die Story erzählt werden. Jedes der Spiele mit einer Story hatte in einer gewissen Form ein Dialogsystem, entweder recht simpel mit UI und Informationen aus einer Liste zu lesen, oder auch komplizierter mit Antwortmöglichkeiten wie in dem Prototyp Adam.
Optimierungssysteme
Es gibt einige Systeme mit denen ich auch schon vertraut gearbeitet habe, jedoch möchte ich hier das Occlusion Culling hervorheben.
Occlusion Culling
Das Occlusion Culling ist ein sehr nützliches Tool gerade für Optimierungen oder Einsparungen von Leistungsintensiven Projekten nicht wegzudenken.
Occlusion Culling ist ein Prozess, der Unity daran hindert, das Rendering durchzuführen und die Berechnungen für GameObjects die von anderen GameObjects vollständig verborgen sind.
Jeder Frame der Kameras wird durch Culling Operationen durchgeführt, die die Renderer in der Szene untersuchen und schließen.
Beim Frustum-Culling wird jedoch nicht überprüft, ob ein Renderer von anderen GameObjects verdeckt wird, und so kann Unity immer noch CPU- und GPU-Zeit mit Rendervorgängen für Renderer verschwenden, die im letzten Frame nicht sichtbar sind. Occlusion Culling hindert Unity daran, diese verschwendeten Operationen auszuführen.
So wurden auch nach meiner Angabe die Räume gebaut, sodass wenn der Spieler sich in einem befindet alles andere ausgeschaltet wird, das hatte den Vorteil, dass die Performance stetig sehr gut war und die einzelnen Räume mehr Kapazitäten besitzen.
Menü und UI
Jedes Projekt hat auch Menüs und User Interfaces, logischerweise habe ich diese in Vielzahl erstellt neu verknüpft und gebaut.
Ein besonderes Beispiel ist das dynamisch interaktive Menü von Adam dieses besitzt Kamerafahrten die alles besser in Szene setzten.
Wie in dem Bild schon zusehen gibt es hier viele Funktionen und Interaktionsmöglichkeiten in diesem Menü. Kleinigkeiten der Programmierung können auch optisch sehr viel veredeln. Alleine ein Logo ein und aus faden zu lassen wirkt für den Betrachter angenehmer als ein Statisches Bild.
Auch wichtig in einem User Interface (UI) ist eine Mini-Map eine verkleinerte Karte von dem Gebiet, auf dem der Charakter bzw. Spieler sich bewegt.
Diese Funktion ist für die Orientierung in großen Gebieten sehr wichtig, gerade für Open World oder Stealth-Missionen ist diese nicht weg zu denken.
Diese auf dem Bild wurde mit einer Zweiten Kamera erstellt und verfolgt den Spieler.
Extra Systeme
Welten-Switch-System
In Adam wurde das Welten-Switch-System entwickelt, die Grundidee war es dem Spieler je nach Vorstellung des Charakters die Welt zu gestalten
So Sah die Welt in erster Linie für den Spieler normal aus, nur wenn dieser getriggert wurde, veränderte sich die Welt um Ihn herum.
Je nachdem wie sehr der Spiel Charakter Angst hatte bzw. in welchem Gebiet er sich befand, änderte sich die Welt auf eine andere Weise.
Weather-System / Day and Night
Wetter- Tag und Nacht Systeme sind wichtig, um ein immersives Spielerlebnis für den Benutzer zu schaffen.
Weather System
Das Wetter System war in einem Projekt welches ich hier nicht aufgelistet habe, weil ich bei diesem nur ausgeholfen habe.
Jedoch habe ich dennoch ein paar interessante Systeme entwickelt, wie dieses Wetter-System, es wechselt zufällig einen Enum nach einer gewissen Zeit durch, je nach dem welches Wetter ausgewählt ist ändert sich das Partikelsystem oder bleibt aus.
Day and Night
Eine Direkt-Light zu rotieren schafft man mit einer Zeile Code in Unity, die Schwierigkeit hierbei ist, den jeweiligen Stand der Zeit auszulesen, welche die Sonne bzw. Spielumgebung vorgibt.
Ich habe bei diesem gezeichneten Beispiel die Rotation der Sonne bzw. Direkt Light beobachtet und nach dem ich Y und Z bestimmen konnte, konnte ich somit auch die einzelnen Tagesabläufe wiedergeben.
Dadurch konnte ich die Skybox auf die einzelnen Tagesabläufe angepasst, und beliebig verändern dieses habe ich in Zusammenarbeit mit dem Wetter-System so angepasst das nicht nur Effekte von Bewölkung zu erkennen waren, sondern entstanden so auch Wolken je nach Tageszeit in der Skybox.
Speicher-System
Das Speicher-System wurde mithilfe der JavaScript Object Notation, kurz JSON, entwickelt. Mit JSON lassen sich Daten menschen- und maschinenlesbar speichern und übertragen.
Durch JSON können Übertragungen und zum Speichern strukturierter Daten eingesetzt werden. Es dient als Datenformat bei der Datenübertragung (Serialisierung).
Häufig findet es seinen Einsatz in Webanwendungen und mobilen Apps und wird in Verbindung mit JavaScript, Ajax oder WebSockets zum Übertragen von Daten zwischen dem Client und dem Server häufig genutzt
Analyse System für Serverlogs
Für eine Einstellungsprüfung sollte ich ein Programm schreiben welches in einem Ordner mit 64 Serverlogsgefüllt, Zeile für Zeile durchgeht und die Daten Filtert.
Welcher kunde benutzt welche Algorithmen und wie oft?
Also wurde nicht nur aufgelistet welcher Kunde, was verwendet, sonder auch mit jedem mal ein Countzähler erhöht. Diese Daten wurden in eine listen geschrieben und für jedes mal wurde es in eine zweite übertragen und nachgesehen ob dieser schon aufgenommen wurde, wenn ja wurde der Count erhört. Wenn ein Serverlogs abgeschlossen war und übertragen wurde, wurde die Liste gecleared um beim übertragen keine Altdaten bzw zeit zu sparen.