Transkripte
1. Einführung: Hallo an alle, Chris hier. Und in diesem Kurs werde ich Ihnen die Ghetto-Spiel-Engine vorstellen, indem Sie Ihnen helfen, einen funktionierenden 2D-Plattformer-Spiel-Prototyp von Grund auf neu zu erstellen. Einer der großen Schwerpunkte des Kurses ist die Schaffung einer Plattform, ein Controller, der
viele klassische Jumping-Aktionen wie Doppelspringen beim Springen und Bounce-Attacken bewältigen kann . Für Feinde können wir
einfache wiederverwendbare Muster wie Wegpunktbewegung und Angriffe des Projektils einrichten . Umgang mit Physik-Layern, Kollisionen und Bereich eingegebene oder linke Trigger ist ein weiterer wichtiger Codierungsbereich, so dass die richtigen Objekte bestimmte Ereignisse auslösen. Zum Beispiel, RB Feind feuert nur auf den Spieler dank der Verwendung physikalisch für den Aufbau Ebenen aus, dass Fliesen Kartenwerkzeuge und Godot sind sehr hilfreich für uns. Sie können die automatische Kachelung verwenden, um schnell Ebenen zum Testen aufzubauen. Alles in allem habe ich versucht, den Kurs das meiste von dem abzudecken, was DO zu bieten
hat, out of the box, einschließlich Signale, UI-Erstellung, Umgang mit Animationsbäumen, Vererbung als Codierungspatent und globale Daten durch Singleton-Skripten. Also, wenn Sie mit Game Development beginnen
möchten, wollen eine kostenlose lernen Aber derzeit entwickelnde Spiele-Engine, brauchen Hilfe beim Aufbau eines klassischen 2D-Jump'n'Run Spiel oder Sie wollen einfach nur etwas Spaß haben, dann hoffe ich, Sie im ersten Video zu sehen ist meinen Kurs, wo wir beginnen, indem wir unsere Projekteinstellungen einrichten und dann in die Erstellung von Kachelkarten springen.
2. Bildung, Godot einrichten: In diesem Video werden
wir also im Grunde die Schritte durchlaufen, um Godot einzurichten, unsere Assets zu
packen und sie in unser neues Projekt zu importieren. Also zuerst, wenn Sie nicht bereits Godot haben, können Godot bei Godot Engine.org Schrägstrich herunterladen. Und Sie können sehen, dass es Versionen für Windows, Mac und Linux gibt. Also gehen Sie einfach voran und laden und installieren Sie die Virgin, die Sie benötigen, wie Sie es jedes andere Programm tun würden. Auch, wenn Sie Dampf haben, ist
das ein anderer Ort, an dem Sie es bekommen können, als würden Sie ein Spiel auf Steam herunterladen. Sie können Godot auch von dort installieren. Um in diesem Kurs darauf hinzuweisen, werden
wir mit Godot 3.3.3 arbeiten. Und ich persönlich benutze die universelle 64-Bit-Version von Godot auf Apple Silizium. Abgesehen davon, werden
wir etwas Kunst für das Projekt brauchen. Eine großartige Option, die wir verwenden können, um
einen einfachen Jump'n'Run zu erstellen , wie wir tun werden, ist Pixel-Abenteuer. So können Sie dies auf jedem Punkt io erhalten, wenn Sie nach Pixel-Abenteuer suchen, oder wenn Sie zu einem Pixel Frosch Strich Assets Punkt,
Punkt Schrägstrich, Pixel Bindestrich, Abenteuer Strich eins gehen . Darüber hinaus gibt es auch
20 gegnerische Charaktere, die Sie mit Pixel-Abenteuer herunterladen können, das ist eine Sekunde, und Sie können beide von denen auf jedem Punkt io abholen. Also werde ich beide in das Projekt importieren. Es ist nur, damit du weißt, woher wir unser Vermögen bekommen. Aber am Ende, das ist genau das, was ich benutze, um für den Kurs zu demonstrieren. Sie können das, was Sie wollen, am Ende verwenden, vielleicht können Sie Prototypen mit uns und dann später auf Ihre eigene Kunst setzen. Wenn Sie das Fenster zum ersten Mal starten, können
Sie einige Projekte sehen, aber wir werden ein neues Projekt erstellen. Also hier drüben auf der rechten Seite haben Sie einen neuen Projekt-Button. Ich werde darauf klicken und dann werde ich navigieren , wo mein Computer ich dieses Projekt erstellen möchte. Also drücke diesen kleinen Browse-Button hier drüben und ich werde es verwenden, und ich werde diesen Pfad für mein Projekt verwenden, aber Sie können ihn im Grunde speichern, wo immer Sie wollen. Beachten Sie nun, dass ich hier mein Referenzprojekt, Pixel-Abenteuer-Projekte habe. Also werde ich es einfach dasselbe nennen und am Ende ein Strich-Tutorial werfen,
da dies die Folgeversion desselben Projekts sein wird. Gehen wir also voran und wählen Sie den aktuellen Ordner aus. Und jetzt müssen wir ihm einen Projektnamen geben und
einen Ordner innerhalb dieses Verzeichnisses für das Projekt erstellen . Also nennen wir es Pixel-Abenteuer, Projekt Dash Tutorial. Und ich werde Ordner erstellen. Du kannst es nennen, wie immer du willst. Und ich benutze OpenGL ES 3 ist der Renderer, hatte bisher keine Probleme damit. Lassen Sie uns also voran gehen und klicken Sie auf Erstellen und Bearbeiten. Und hier ist, wie Qdot aussehen wird, wenn Sie Ihr Projekt zum ersten Mal starten. Und Sie werden feststellen, dass dies offensichtlich eine 3D-Ansicht ist. Oben können wir tatsächlich zu 2D wechseln, was wir für den Rest des Projekts verwenden werden. Bevor wir also alle Kunstwerke in das Spiel importieren, sollten
wir die Standardeinstellungen für alle Kunstwerke,
die wir in das Spiel importieren, so einstellen , dass es korrekt angezeigt wird. Also, wenn ich auf dieses Symbol Punkt PNG und jedes Godel Projekt klicken, das ist durch ein Logo. Wir können auf die Registerkarte Import gehen und wir können sehen, dass dies als Textur importiert wird. Daher möchten wir die Standardwerte für Textur auf ein Pixel setzen, unsere Standardeinstellung. Also, wenn wir hier auf voreingestellt klicken, werden
Sie 2D Pixel bemerken, eine der Optionen. Also, wenn Sie dort klicken, werden Sie sehen, dass bestimmte Optionen wie Filter ausgeschaltet werden. Also würde Filter normalerweise Ihre Bilder an den Rändern unscharf machen ,
so dass Sie die Pixel nicht als
gestochen sehen würden und alles irgendwie nur zusammen verschwommen würde. Also wollen wir nicht, dass für das Spiel in Pixel, dass Sie wollen, dass jeder
der Pixel deutlich erkennbar ist als die Farbe, die es war gefärbt. Und so wollen wir 2D-Pixel als Standard für alle Bilder, die wir in das Spiel bringen. Also müssen wir nicht V wichtig für dieses bestimmte Symbol drücken. Wahrscheinlich wird es hier nicht als unser Vermögen benutzen. Aber wir wollen die Voreinstellung oben ändern und dann als Standard für Textur festlegen. Das bedeutet also, dass diese Einstellungen, die wir hier haben, gerade auf
die Standardwerte kopiert wurden , die für jedes Bild geladen werden, das wir standardmäßig in das Spiel bringen. Und beachte, dass
es selbst in einem Pixel-Art-Spiel einige Bilder geben könnte, die Sie eigentlich nicht wollen, um diese Voreinstellungen zu haben. Also würde ich einfach die Voreinstellung als was auch immer die Mehrheit Ihrer Kunst sein wird einstellen. In diesem Fall wird das 2D-Pixel für Pixelkunst,
Charaktere und Kachel-Sets und all das sein . Also lasst uns weitermachen und unsere Akten mitbringen. Und jetzt möchten wir vielleicht einen Ordner in diesem Projekt hinzufügen, um alle Kunstobjekte zu speichern. So können wir eine im unteren linken Dateisystem erstellen, indem rechten Maustaste auf diesen Ressourcenordner klicken, in dem wir im Grunde unser Projekt und einen anderen Pfad dazu erstellt haben. Also lasst uns mit der rechten Maustaste dorthin klicken und neuen Ordner machen. Und ich werde nur diese Kunst nennen und OK drücken. So können wir jetzt dorthin navigieren, wo wir unsere Vermögenswerte haben, die wir für das Spiel verwenden möchten. Ich habe bereits voran gegangen und extrahiert die Pixel-Abenteuer 1 und Pixel-Abenteuer Tupac Hinweis, dass, wenn Sie Pixel Abenteuer ein extrahieren, der Ordner könnte frei aufgerufen werden. Ich habe das in Pixel-Abenteuer 1 umbenannt. Und Pixelabenteuer zu wird dies standardmäßig genannt. Also jetzt wollen wir diese grundsätzlich in das Projekt kopieren, damit wir sie verwenden können. Eine Möglichkeit wäre nur, aus Ihrem Datei-Explorer in Godel ziehen und ablegen. Und Sie können es einfach auf diesen Ordner ziehen, aber es ist möglich, es bei Unfall an der falschen Stelle zu setzen. Und wann immer Sie Ordner und Godot verschieben, wird
es neu importieren müssen. All das sind Vermögenswerte, die eine Weile dauern können, also ist es besser, es an der richtigen Stelle und beim ersten Versuch zu bekommen, also werde ich diese auswählen und ich werde sie kopieren. Sie können einfach ein Feld ziehen und dann mit der rechten Maustaste klicken und kopieren, oder Sie können sie auswählen und Steuerelement C drücken, wenn Sie benötigen. Und gehen wir zum Godot-Projektordner. Also habe ich das gespeichert und diesen Tutorials Ordner, und dann haben wir das Projekt hier. So können wir den Kunstordner sehen, über dem wir gerade erstellt haben. Sie werden da reingehen und dann werde ich die neuen Vermögenswerte hier einfügen. Also, sobald ich wieder in Godel klicke, können
wir sehen, dass es wieder importieren wird. Dies sind Assets, die die Standardwerte dafür anwenden, wie es angezeigt werden soll und Godel zum Beispiel. Also, wenn wir öffnen Bogen und Pixel Abenteuer jetzt, können
wir in die Hauptfiguren gehen. Ich werde Ninja-Frosch als Hauptfigur für diesen Kurs verwenden. Wenn wir also eine dieser Tabellen jetzt auf den Bildschirm ziehen, sollten
wir in der Lage sein, es mit den richtigen Einstellungen für Pixar it zu sehen. Also ziehen wir diesen Leerlauf. Ich werde das mittlere Mausrad steuern und
eine ganze Menge vergrößern und sicherstellen, dass diese Pixel gestochen scharf angezeigt werden. Wenn Sie also so sehr vergrößert sind, sollten
Sie keine Unschärfe sehen. Sie sollten in der Lage sein, jede Farbe klar zu sagen, dass diese Pixel sind und wo sich die Platzierung jedes Pixels befindet. Das ist der Look, den Sie in der Regel wollen, wenn Sie Pixel-Art-Spiele machen. Also werde ich verkleinern und wir können auch bestätigen, dass die Einstellungen korrekt sind denn wenn wir auf Leerlauf klicken und wenn Sie auf die Registerkarte Import oben links gehen, können
Sie sehen, dass dieses Idol, 32 mal 32 PNG wird es mit Filter aus importiert? Wenn Sie nun das Projekt und Godel erstellen, ist
das standardmäßig aktiviert. So ist eine Möglichkeit, wie wir wissen, dass wir den Standard für 2D-Pixel für den Import von Bildern festgelegt haben. Also an dieser Stelle haben wir ein Projekt erstellt und wir haben die Pixelart mit den richtigen Importeinstellungen eingebracht . Also im nächsten Video, werden wir nur noch
ein paar weitere Setup-Anforderungen für
dieses Projekt tun ein paar weitere Setup-Anforderungen für , bevor wir mit der Erstellung unserer Spiel-Levels beginnen.
3. Einrichten von Projekt: Bevor wir also anfangen, an den Ebenen unseres Spiels zu arbeiten, müssen
wir ein paar Einstellungen über
das Spielfenster ändern , so dass
es beim Testen des Spiels ein wenig angemessener angezeigt wird. Also zuerst müssen wir
eine Szene erstellen, damit wir diese Szene als Ausgangspunkt für das Spiel laden können. Also jetzt habe ich das Sprite-Bild, das wir gerade in dieses Hauptfenster hier gebracht haben. Und Sie werden feststellen, dass in der Szene oben links, dass das Sprite enthält. Eine Szene wird also jeder Knoten und Godel plus alle darunter verschachtelten Knoten sein. Ein Charakter kann also eine Szene sein, eine Ebene kann eine Szene sein, und Szenen können Instanzen anderer Szenen enthalten. So könnten Sie eine Reihe von feindlichen Szenen in eine Reihe von Charakteren setzen, Szenen in eine Level-Szene, damit alles zusammenkommt. Und sobald Sie anfangen zu verwenden, wird
es ziemlich intuitiv. Also werden wir nur dieses Licht nehmen und es
als Szene speichern , damit wir das als Ausgangspunkt für unser Spiel laden können. Also werde ich Control S oder Befehl S drücken und wir werden das als Ebene eins setzen, und ich werde es in einem neuen Ordner erstellen. wir also Ordner in der oberen rechten Ecke erstellen. Und dieser neue Ordner wird Karten oder Ebenen sein, was auch immer Ihr Kopf ist. Okay, und speichern wir diese Szene drinnen. Also für jetzt, das macht nicht wirklich Sinn als Level-Sprichwort, mach dir keine Sorgen darüber. Das ändern wir später. Und gehen wir zum Play-Button in der oberen rechten Ecke. So können Sie, also gleich hier oben, und wir können voran gehen und das Projekt abspielen. Wenn wir jedoch keine Szene definiert
haben, können wir eine Szene als Ausgangspunkt für unser Spiel auswählen. Also lassen Sie uns den Spieler eine Szene auswählen. Das ist also im Maps-Verzeichnis und ich lade nur dieses n. Sie können auch eine Ebene nach oben gehen, wenn Sie den richtigen Ordner auswählen müssen. Also lassen Sie uns einfach darauf doppelklicken. Okay, und jetzt sollte das Spiel mit dieser Szene beginnen. Und unser Sprite Sheet zeigt sich hier ziemlich schön. Das Gefühl, dass es keine Unschärfe der Pixel gibt. Das ist also immer noch das, was wir sehen wollen. Aber es ist ziemlich klein in den Größen dieses Charakters. Also wollen wir es tatsächlich größer auf dem Bildschirm erscheinen lassen. Jetzt, wo wir es getestet haben, kennen wir das Problem. Gehen wir zum Projektmenü in der oberen linken und Projekteinstellungen. Und wir können voran gehen und die Einstellungen dafür finden. So wie Sie sehen können, bin ich schon hier und Anzeigefenster. Aber wenn Sie es nicht sofort sehen, können
Sie auf das Suchfeld hier oben links klicken und ein
Fenster eingeben, das die Kategorien nach unten filtert, so dass Sie weniger zur Auswahl haben. Alternativ, wenn Sie hier oben bei der Anwendung sind, scrollen Sie
einfach nach unten, um Fenster anzuzeigen. Und hier werden wir die Einstellungen haben, die wir ändern müssen. Also für jetzt,
gehen, um die Breite und Höhe zu nehmen und setzen, dass auf 320 Breite von 180 Pixel breit. Das mag also wirklich niedrig erscheinen, weil sie denken, dass die meisten Leute Displays haben werden, die diesen Tagen
mindestens 1920 x 1080 Pixel sind, vielleicht größer als das. Das ist also eine wirklich niedrige Auflösung. Was Sie also tun, ist, dass Sie tatsächlich die Testbreite und -höhe haben, eine höhere Auflösung. Und dann nehmen Sie diese Breite und Höhe und skalieren sie bis zur Testbreite und -höhe. Und weil wir die 2D-Pixel-Einstellungen für unsere importierten Sprites haben, obwohl wir es hochskalieren, sollte
es nicht verschwommen oder verzerrt oder so etwas sein. Nehmen wir also die Testbreite und -höhe und machen es 12, 80 und dann 720 Pixel. Dies sollte also eine anständige Testgröße sein, vier Stunden Fenster. Dann ist eine letzte Einstellung, die wir hier unten unten ändern müssen, Stretch. Aspect wird auf Ignorieren gesetzt. Es ist hier unten unter Stretch. Der Modus ist also auf deaktiviert eingestellt. Wir möchten das in 2D ändern. So wird es Standard-2D-Stretching unserer kleinen Größe bis zur großen Größe machen. Wenn wir das jetzt schließen, drücken Sie Control S, um alles zu speichern, und gehen Sie wieder zur Wiedergabe-Schaltfläche. Klicken Sie darauf. Und wenn wir das Spiel laden, werden Sie
dieses Mal sehen, dass Charaktere viel größer sind. Ich denke, wir haben das Bild im Grunde genommen genommen und viermal auf dem Bildschirm vergrößert. Dies ist also ein 1280 mal 720 Pixel-Fenster, aber es zeigt im Grunde das eigentliche Spiel in vierfacher Größe an. Auf einem großen Monitor macht
das also viel sinnvoller. So können Sie tatsächlich die Charaktere sehen. Das sollte also das letzte der grundlegenden Setup für unser Projekt sein, das wir brauchen werden. Im nächsten Video können wir anfangen, einen Hintergrund für das Level zu erstellen.
4. Einen sich wiederholenden Hintergrund machen: Also in diesem Video, Lassen Sie uns anfangen, unser Level zu erstellen indem Sie mit einer sich wiederholenden Hintergrundtextur beginnen. Wenn Sie also ein Bild als sich wiederholende Hintergrundtextur verwenden möchten, müssen Sie für dieses Bildmaterial ein Flag aktivieren. Also, wenn wir in
das Kunstverzeichnis gehen und Pixel Abenteuer ein oder wo auch immer Sie das gespeichert haben. Und dann gehen wir in den Hintergrund, Sie werden ein paar verschiedene Texturen sehen, die wir für den Hintergrund verwenden können. Ich kann eine hierher bringen und Sie können sehen, dass sich
diese Kachel immer und immer wieder wiederholen wird. Was wir also für dieses Bild und alleverschiedenen Farbversionen des Bildestun wollen verschiedenen Farbversionen des Bildes gehen Sie auf den Import-Tab. Und hier drüben können wir über Filter lesen. Es gibt ein Kontrollkästchen für die Wiederholung. Wir wollen das auf aktiviert umschalten. Und wenn wir das tun, wird dieses Flag automatisch überprüft, so dass wir diese Assets wieder importieren können. Also, jetzt werden diese als wiederholbare Texturen funktionieren. Um also eine Textur über den Bildschirm zu wiederholen, müssen
Sie auf die Textur klicken. Dann gehen Sie in die Region, und dann werden wir die Region hier aktivieren wollen. Dies wird also jetzt im Grunde genommen die Texturkachel nehmen und sie über eine Region dehnen. Und da das Wiederholungsflag für diese Texturen aktiviert ist, wird
es es binden, anstatt nur zu dehnen. Also, jetzt müssen wir nur eine Größe für den Hintergrund festlegen. Also Breite und Höhe hier rechts, W und H.
Und lassen Sie uns einfach eine Größe geben, die gut genug für unser Niveau sein sollte. Wirklich so groß, wie Sie wollen, es ist in Ordnung. Wir könnten es einfach 1000 mal 1000 Pixel machen. Und sie sind im Grunde, Sie haben eine sich wiederholende Hintergrundbasis, die Sie für Ihr Level verwenden können. Also, jetzt ziehen wir das einfach in
die Position, die wir brauchen, und wir werden ziemlich gut zu gehen sein. Eine Sache, die Sie beim Erstellen des Hintergrunds auf diese Weise beachten müssen, ist, dass Sie
die Skalierungswerkzeuge nicht verwenden möchten , wenn Sie den Hintergrund weiter erweitern müssen. Wenn Sie auf der Skala,
am Rand dieses Sprite greifen und es dehnen, wird
es immer noch das Bild strecken. Wenn Sie also eine lange Karriere benötigen, sollten
Sie hier in die Region kommen und hier einige zusätzliche Pixel hinzufügen. So 1200 mit, Sie können die erweiterte es sehen, ohne jede Dehnung. Es fügt nur mehr Fliesen hinzu und was ist, was wir wollen. Also lasst uns das Level ein wenig mehr aufräumen. Als nächstes werde ich mit der rechten Maustaste auf das anfängliche Sprite klicken, das wir in einer Minute entfernen und einen untergeordneten Knoten hinzufügen. Und dieser untergeordnete Knoten wird nur als einfacher Knoten 2D sein. Dies ist also im Grunde ein generischer Knoten und wir können diesen als Wurzel unserer Szene verwenden. Alles, was tatsächlich in die Szene geht, würde also nur darunter verschachtelt sein. Lassen Sie uns das schaffen. Und jetzt können wir diesen Knoten nehmen und ihn tatsächlich zur Wurzel dieser Level-Szene machen. Also werde ich hier mit der rechten Maustaste klicken und ich werde Szenenwurzel machen. Also jetzt ist dieses Idol Sprite-Bild unter dem Knoten
2D verschachtelt und der blaue Hintergrund ist darunter verschachtelt. Also werde ich den blauen Hintergrund nehmen. Ich werde mit der linken Maustaste halten und ziehen Sie es und legen Sie das über den Knoten 2D. Also, jetzt gibt es keine Kinder dieses Idol Sprite Sheet. Und wir können das entfernen, indem wir mit der rechten Maustaste darauf klicken und Knoten ausschneiden oder löschen. Also lasst uns einfach weitermachen und das loswerden. Und jetzt endlich können wir den Knoten 2D nehmen und ich werde dies nur in Ebene 1
umbenennen, um dem Namen der gespeicherten Datei zu entsprechen. Und vielleicht die Hintergründe. Ich werde diesen Hintergrund einfach umbenennen, so dass uns so
ziemlich so einrichten lässt, dass wir anfangen können in irgendeinem tatsächlichen Boden für
einen Charakter
hinzuzufügen , auf dem wir stehen und Plattformen und all das Zeug. Also lassen Sie uns voran und drücken Sie Kontrolle oder Befehl S, speichern Sie das Level, und das wird es für dieses Video sein. Und im nächsten wird man den Boden ausbauen, wo Charaktere stehen können.
5. Tilemaps und Tilemaps: In diesem Video werden wir mit Kachelkarten und Tail Sets
arbeiten um den Boden zu schaffen, auf dem unser Charakter stehen wird. Also in unserer Level-1-Szene oben links, werde
ich hier mit der rechten Maustaste klicken und einen neuen untergeordneten Knoten hinzufügen. Dieser wird als Kachelkarte bezeichnet. Sie können also einfach die Kachelkarte eingeben, um diese zu finden und auf Erstellen klicken. Also diese Kachel-Karte ist, können wir auf der rechten Seite sehen, wird ein Kachel-Set benötigen. Also wird das Tail Set aus Bildern in unserem Projekt erstellt werden, und das wird speziell die Kachelgröße Bilder sein. Es gibt also die Titeldatei, die hier existiert und Godel. Und dann ist es das eigentliche Bild, in dem dieser Schwanzsatz seine Kacheln abzieht. Also lassen Sie uns auf den leeren Abschnitt für Fliesen bestimmte Hit neue Tulsa klicken. So können wir auf klicken, und wenn wir tun, gibt es ein neues Fenster hier unten unten genannt Fliesenset. Also müssen wir hier ein Bild hinzufügen, um zu beginnen, die Fliesen aus diesem Schwanz auszuwählen. So Bild, so können wir die richtigen Bilder für die Erstellung der Kacheln aus der Geländekategorie innerhalb unseres Pixelabenteuer ein Pack finden. So können wir aus dem Thumbnail sehen, dass es tatsächlich eine ganze Reihe von verschiedenen Terrains gibt, die wir hier benutzen können. Und es gibt in einem einzigen Bild. Gehen wir voran und klicken Sie mit der linken Maustaste gedrückt und ziehen Sie diese in die Liste für unser Kachelset. Wenn wir das tun, und wir werden sehen, dass sich das Bild hier unten etwas weiter ausdehnt. Und Sie können die Strg-Taste gedrückt halten und auf dem mittleren Mausrad scrollen, um zu vergrößern und zu verkleinern. Natürlich kann es auch auf der rechten Seite hinein- und draußen zoomen. Wir wollen also, dass dies groß genug auf dem Bildschirm ist, dass wir die Kacheln, mit denen wir arbeiten, eindeutig identifizieren können . Es gibt also drei Arten von Fliesen, die wir für unser Fliesenset erstellen können. Es gibt die neue einzelne Kachel, die hier im Grunde eine Region definieren wird, die eine Kachel ist, die Sie hier mit
der linken Maustaste klicken können , wenn Sie
Ihre Fliesen malen und dann einfach mit der linken Maustaste klicken und auf die Karte. Das ist also die einfachste Option. Es gibt auch neue Kunst oder Fliesen werden mit, dass in diesem Video arbeiten. So die automatische Kachel, können
Sie im Grunde eine Reihe von Kacheln definieren. Und dann können Sie eine Bitmaske für diese Kacheln in
der BitMask erstellen bestimmt, welche Kacheln die anderen Kacheln umranden sollen. So in gewissem Sinne, können
Sie es so machen, dass dieser hier drüben auf der linken Seite, Sie sehen können, dass dies offensichtlich ein linkes Ende Kachel ist. So können Sie es so machen, dass dies derjenige ist, der immer am Ende ist, indem Sie Bitmasken einrichten, was im Grunde die Regeln dafür erstellt, wie diese Kacheln nebeneinander sein sollten. Und dann gibt es auch einen neuen Atlas
, den Sie eine ganze Reihe von Kacheln definieren können. Und dann bekommst du eine Liste hier auf der rechten Seite. Sie können einfach das auswählen, aus dem Sie möchten. Bevor wir jedoch damit beginnen, klicken
wir auf die Kachel-Karte. Also auf der linken Seite hier Szene. Und wir wollen gehen, um zu verkaufen und sicherzustellen, dass die Zellengröße auf 16 x 16 eingestellt ist, da das die Größe unserer Fliesen und des Spiels ist. So stellen wir die 16 mal 16 hier so ein, der entworfenen Kachelgröße des Kunstwerks entspricht, damit alles richtig übereinstimmt. So können wir auf Kachelset zurückklicken und wir können tatsächlich sehen, dass es irgendwie seinen Bezug auf das Gelände hier
verloren hat, da wir es nicht genau gespeichert haben. Eine anständige Idee könnte also tatsächlich sein, hier auf Kachel-Karte zu klicken. Und dann mit dieser Kachel auf der rechten Seite können
wir auf dieses kleine Dropdown-Menü klicken und den Kachelsatz in einer Datei speichern. Dies wird es so machen, dass Sie es in jeder Kachelkarte referenzieren können. Und die Daten werden im Grunde hart innerhalb des Projekts gespeichert. Also werde ich das hier speichern. Und ich schätze, ich werde es in die Kartenkategorie setzen. Und ich werde dieses Pixel-Abenteuer-Terrain nennen. So werden wir sehen, dass der Name dieses geändert, um den Namen
der Datei gespeichert als Punkt hier, IaaS-Erweiterung. So können wir das immer noch öffnen und bearbeiten. Und ich denke, wenn Sie in den Maps-Ordner gehen, können
Sie hier auch einfach doppelklicken, um dasselbe zu öffnen. Grundsätzlich wird die Heckseite
jetzt an einer eigenen Position gespeichert und sie ist nicht mehr direkt in die Kachelkarte eingebettet. So können wir hier das Gelände hinzufügen. Ich werde nur ziehen, dass und wieder, und dieses Mal lassen Sie uns gehen und neue Auto-Kachel treffen. Also werden wir eine Region definieren müssen, für diese sind eine
der wirklich hilfreichen Funktionen ist dies Snap hier aktivieren. So können wir sehen, dass dies uns erlauben wird, in das Raster zu schnappen. Also, wenn wir hier einmal mit der linken Maustaste klicken, wird
das eine Region definieren, und dann können wir die Einstellungen ändern, so dass wir tatsächlich die gewünschten Größen erhalten können. Also drüben rechts, wir haben hier Schnappoptionen. Dies ist also die Anzahl der Pixel, die Sie in
Bezug auf die Schritte, die Sie dieses 16 x 16 machen möchten. Ich glaube, ich werde Ihnen zeigen, mit zu
gehen, sagen wir mal vier mal vier. So können Sie sehen, dass der Schwanz im Grunde in diesem kleinen Pixelraster zerbrochen ist. Und wann immer wir Anpassungen vornehmen müssen, wie zum Beispiel spätere
Erstellen der Kollisionsformen, kann
es an jedem dieser Schnittpunkte in diesem Vier-by-Vier-Pixelraster gefangen werden. Also denke ich, das wird ziemlich gut funktionieren. Und dann haben wir Fliesen ausgewählt. Wir möchten hier die Untertitelgröße auf 16 x 16 ändern. Ich habe auch bemerkt, dass OTA- oder Bitmask-Modus, so dass ich keinen Bitmask-Modus habe, wird wichtig sein, wenn Sie bestimmen. Grundsätzlich, wenn Sie Ihre Kachel aufteilen, wie viele Ecken gibt es, dass Sie eine Bitmaske auf oder aus Wert zwei zuweisen können. Wenn Sie also zwei mal zwei haben, bedeutet
das, dass jede Kachel in vier potenzielle BitMask unterteilt ist. Und es gibt auch drei mal 33 mal drei Minimum, was Sie sich vorstellen würden, gibt Ihnen neun Bitmask-Untertitel pro tatsächlicher Kachel. Also für diese, werden wir mit einem Zwei-mal zwei arbeiten. Das sind einfachere Kacheln hier drüben. Und ich glaube, das sind auch. Aber wenn wir hier nach rechts sind, werden
diese brauchen,
ich denke, drei mal drei minimal, aber ich werde das später noch einmal überprüfen. Also, jetzt müssen wir die Region neu definieren vier, Unsere erste. Jetzt müssen wir die Region für unsere ersten automatischen Kacheln neu definieren. So können wir hier sehen, dass wir hier vier Quadrate haben, und sie haben die richtige Größe, 16 mal 16, dank der Untertitelgröße. Aber wir müssen hier oben mit der linken Maustaste klicken und dann über unsere gesamte Steinblockregion
ziehen. Also werde ich ein wenig hineinzoomen,
stellen Sie sicher, dass alle Ecken übereinstimmen, damit Sie sehen können was als die Region definiert ist, denn das ist diese grüne Linie, die alles umreißt. Ihre Fliesen sind im Grunde überall dort, wo sich diese grünen Linien schneiden. Und so sollte es jetzt aussehen. Also machen wir eine zwei-mal-zwei-bitMask. Es wird also wirklich einfach sein. Also gehe ich in den Bitmask-Modus und dies wird die automatische Kachel einrichten. Also für diese Kachel müssen
wir sie so aussehen. So können Sie einfach mit der linken Maustaste klicken und halten und ziehen Sie das rote Feld an die gewünschte Stelle. Mein Verständnis der Bitmaske in Godel ist also, dass, wo Sie eine Bitmaske mit dem roten Quadrat aktiviert
haben,
bestimmen wird, wo diese Kachel zu anderen Kacheln blockiert, um zu sehen, ob sie der Bitmaske
übereinstimmt, um festzustellen, ob es sollte die Kachel sein, die gewählt wird. In diesem Fall ist es eine obere linke Ecke, hat
es eine nach rechts unten. Es wird also sowohl nach rechts als auch nach unten schauen, um zu sehen, ob es Kacheln gibt. In diesem Fall, wenn es sowohl nach unten als auch nach rechts passt, kann
es eine Eckplatte auf diesem Stück sein. Wenn es also in diesem Fall eine Kachel nach unten und rechts findet, kann
sie als die richtige Kachel registriert werden, die automatisch ausgewählt werden soll. Aber es gibt auch die Bereiche, in denen die BitMask
deaktiviert ist , die berücksichtigt werden müssen. In diesem Fall würde
es nur ausgewählt werden, wenn unten und rechts eine halbe Kachel. Aber auch in diesem Fall, dass es nichts auf der linken Seite. Wie Sie sehen, sind die Bitmaske oben links und unten links deaktiviert und auch nichts oben. Wenn wir also zwei Bitmasken in eine Richtung für eine zwei-mal-zwei-Bitmaske aktiviert haben, dann bedeutet das, dass Sie direkt
nach unten schauen und nicht nach rechts und unten. Und wenn Sie alle vier Bit-Masken aktiviert haben, dann wird diese quadratische Welle im Grunde einen schwarzen Hintergrund nur ausgewählt werden, wenn sie in alle Richtungen von anderen Kacheln aus diesem spezifischen Auto-Titel
umgeben ist . Daher werden nur Kacheln
berücksichtigt, die aus dieser automatischen Kachel ausgewählt werden. Also, wenn Sie später setzen, sagen
wir eines dieser Stücke daneben, die eine völlig andere Auto-Kachel ist. Es wird keinen Einfluss auf die Auswahl dieser Kacheln haben. Nur diese Kacheln beeinflussten die anderen Kacheln dieser automatischen Kachel. Für diese Kacheln auf der rechten Seite können
Sie sehen, dass drei von vier der BitMask-Punkte aktiviert sind und nur einer deaktiviert ist. In diesem Fall würden Sie nach benachbarten Kacheln von diesem Auto-Schwanz auf der linken und darüber suchen. Und ich denke auch oben links, wenn du Ecken diagonal so gehst, aber es gäbe nicht eins nach unten und rechts in diesem Fall, weil diese Fliese ausgeschaltet ist. Also, um es einfach auszudrücken, wenn Sie erwachsen sind Heil zieht auf Ihre Spielkarte, es wird, um die beste Passform aus diesem Auto Kacheln Setup wählen. Idealerweise, wenn Sie mit BitMask arbeiten, so dass Sie nur eine Bitmask-Setup für jede Möglichkeit in jeder Bitmaske haben. Beachten Sie, dass, obwohl vier dieser Kacheln eine von vier der BitMask
haben , dass sie sich in alle Richtungen befinden, so dass Sie nie Überlappung mit dieser einfachen automatischen Kachel
erhalten. Also schließlich, wenn Sie in den Erwachsenen-Kind-Bit-Masken-Modus gehen, werden
Sie feststellen, dass es drei mal drei minimal und drei mal drei als eine andere Option gibt. Beide werden also neun Bitmaske-Punkte pro Kachel haben, da es drei mal drei sind, multiplizieren
wir, dass Sie neun BitMask erhalten, so dass Sie einen in der Mitte haben können. Und wir werden die später für diese Geländestücke hier drüben benutzen. Und eigentlich so gut wie diese kleinen Plattformen. Wenn wir also jetzt auf die Kachelkarte klicken, werden
wir sehen, dass unsere Geländekachel hier ist, um auf dem Skript platziert werden. Also können wir einfach voran gehen und ein paar Fliesen platzieren. Aber was Sie bemerken werden, ist, dass die zwei-mal-zwei-Bitmaske nicht funktionieren kann,
wenn Sie nicht mindestens zwei mal zwei haben . Wenn Sie also gerade nach unten gehen und sich so ausrichten, erhalten
Sie nur eine Kachel ausgewählt. Damit die zwei-mal-zwei-Bitmaske funktioniert, müssen
Sie tatsächlich mindestens ein zwei-mal-zwei-Quadrat haben. So können wir sehen, wie ich beginne, das zu bauen, es kam einfach funktioniert perfekt und das Zentrum wird gefüllt. So wird
es mit anderen Fliesen wirklich einfach, verschiedene Formen zu erstellen ohne sich Gedanken darüber machen zu müssen, welcher Schwanz wohin geht. Also, wenn Sie es schaffen, es für sich selbst einzurichten, Es ist ziemlich praktisch, mit zu arbeiten und irgendwie diese zu zeigen. Andere Fliesen, ich werde nur
ein paar von diesen inneren Punkten hier entfernen und Sie können es einfach sehen. Nur irgendwie funktioniert. Also gehen wir zurück zu der Fliese saß und erstellen einige zusätzliche Fliesen. Also müssen wir im Grunde dasselbe wiederholen für hier unten, dieses hier, dieses, dieses und dieses hier. Also können wir einfach sechsmal kopieren und einfügen. Also zurück in den Kachelsatz, gehen Sie in den Regionsmodus, um die Namen jeder dieser Auto-Kacheln zu sehen, ich werde auf diese kleine Info-Button auf der rechten Seite klicken. So können Sie sehen, dies ist Gelände 16 mal 16 Kachel. Was wir also tun müssen, ist eine neue automatische Kachel zu erstellen und wir werden die gleiche Box wie die Region
definieren. Also neu Auto, klicken Sie oben links, halten Sie es gedrückt und ziehen Sie eine Box um diesen Bereich für unsere zweite automatische Kachel. Jetzt könnten wir in den Bitmask-Modus gehen und alles definieren. Wieder einmal wäre es nicht schwer für dieses, aber noch schneller, wir können einfach hier auf diese automatische Kachel klicken und auf die Schaltfläche Kopieren für die BitMask drücken, und dann klicken Sie hier für dieses und drücken Sie einfach den Einfüge-Button, okay, aber es muss nicht zuerst 16 mal 16 Untertitel groß sein. So zu finden, dass hier auf der rechten Seite für jede der Regionen, die Sie erstellen, Lassen Sie uns eine neue automatische Kachel. Ich muss etwas verkleinern, damit wir es
hier unten sehen und einen Kasten um diesen ziehen können. Stellen Sie sicher, dass die Untertitelgröße auf 16 x 16 eingestellt ist. Jetzt können wir zu BitMask gehen und es einfügen, da wir bereits die von diesem in den Puffer kopiert haben. Also, das sind drei automatische Kacheln erstellt. Lassen Sie uns automatisch kacheln, wiederholen Sie den Prozess. Also 16 mal 16 Bit Maskenmodus, fügen Sie es in. Neue Auto-Kachel, 16-Bit, 16 Bitmaske, fügen Sie es ein und Sie bekommen so ziemlich die Idee. Also lasst uns das letzte hier unten beenden. Also werde ich es einfügen. Und ja, manchmal 16 mal 16, und das sollte gut für diese sein. Jetzt wird die gleiche Bitmaske für diese nicht funktionieren. Sie können sehen, dass diese ein wenig anders sind und diese kleinen Barplattformen als auch, ich denke, diese hat tatsächlich die gleiche ADL-Kachel. Also lasst uns dafür noch einen erstellen. Dann können wir das irgendwie testen und sicherstellen, dass es noch funktioniert. Also lassen Sie uns die BitMask einfügen, und da gehen wir. Wenn wir also jetzt auf die Kachelkarte klicken, können
wir sehen, dass wir sieben verschiedene Terrains haben. Wählen Sie also aus. Also fangen wir einfach an, einen zu zeichnen. Und Sie können sehen, dass jede von ihnen, weil sie als eigener ADL-Schwanz definiert sind, sie unabhängig voneinander funktionieren. Ein automatischer Titel neben einem anderen zu haben, wird nichts beeinflussen. haben wir. Wir können diesen Ziegelstein einfach da draußen stellen. Und so können wir hier auch einige andere Terranen zeichnen. Also lasst uns einfach zwei mal zwei machen. Und da haben wir etwas Dreck Boden. Ok. Also lasst uns weitermachen und ein paar weitere Bit-Masken aufstellen. Also zurück im Titelsatz, müssen
wir die anderen Kachelregionen für diese Bereiche definieren. Ziehen wir also einen Rahmen um ihn herum, der als Bitmask-Modus bezeichnet wird. Und dieses Mal werden wir tatsächlich eine drei mal drei Bitmaske verwenden, was Sinn ergibt, wenn Sie es tatsächlich betrachten. Ändern Sie also den Auto-Reifen-Bitmask-Modus auf drei mal drei. Und glauben, wir wollen 16 mal 16 als Untertitelseiten für die BitMask. Wenn wir also etwas vergrößern, können
wir anfangen, dies zu zeichnen. Also wird es wie für das Top-Bit aussehen. So können wir sehen, dass diese erste Fliese ein Quadrat in der Mitte und dann eins nach rechts hat. Und natürlich gibt uns das 9 Bitmaske-Quadrate insgesamt innerhalb einer einzigen Kachel. Wenn wir also das Zentrum nennen, bedeutet
man im Grunde dort, es sucht nach sich selbst, um eine Kachel und die SAT zu sein, und dann bedeutet auch die BitMask auf der rechten Seite, dass es auch nach den richtigen vier Kacheln suchen wird. Also, wenn es am Ende ist, wird
es sich für die mittlere zählen. Und dann, wenn rechts ein Schwanz ist, wird
es dem entsprechen. Und dann können Sie im Grunde eine Rolle
dieser Art von Fliesen erstellen , indem Sie diese Stücke nebeneinander haben. Und dann wäre dies das Ende, und das wird das Ende sein, und das wäre die Mitte, weil es nach links nach einer Kachel und nach rechts für einen Titel sucht. Dann haben wir diesen hier unten, nur einen einzigen Punkt. Dies wird also die Fliese sein, wenn es keine anderen Fliesen gibt, genau wie eine einzelne Kachel. Und dann können wir hier 16 Quadrate in der Mitte ziehen, so dass die Außen nichts haben werden. So können Sie diese Form im Grunde verwenden, um das zu schaffen, was Sie hier sehen. Grundsätzlich nur ein zwei-mal-zwei-Titelblock erstellen. Und dann für eine Top-Down-Plattformen, haben wir das. Also irgendwie die umgekehrte Richtung für diesen hier drüben. Gehen Sie zur Kachel-Karte. Wir können das irgendwie im Spiel sehen. Wenn ich hierher ziehe, können
wir eine kleine Plattform schaffen. Wir können auch einen Zwei-mal zwei erstellen, um diese Art von Block zu haben. Einzelne werden nur diese kleinen Quadrate sein. Und dann können wir natürlich auch von oben nach unten machen. Für diese Zwecke konnten Sie also im Grunde sehen, dass
es im Kachelset Bild dafür gut funktioniert. Aber wenn Sie Dinge wie diese erstellen, glaube
ich nicht, dass diese Fliesen tatsächlich dafür entworfen sind, aber wenn Sie anders wissen, fühlen Sie sich frei, einen Kommentar zu setzen und ich kann mich darauf korrigieren. Aber im Grunde war ich so in der Lage, es für
diesen bestimmten Teil der Kachelkarte einzurichten . Aber das ist im Grunde, wie es in der Lage war, es für diesen bestimmten Teil des Kachelsatzes einzurichten. Also gehen wir zurück in hier für das Kachelset Gelände und wir können diese Bitmaske auf die anderen Kacheln kopieren. So neue Auto-Kachel. Es ist hier unten erstellt, 16 mal 16 in drei mal drei Bitmask-Modus. Und wir gehen hier rauf, kopieren dieses und fügen es in das darunter ein und wiederholen den Vorgang für die anderen beiden. Lassen Sie uns diese Bitmaske erstellen, fügen Sie sie ein
und stellen Sie sicher, dass drei mal drei und 16 die Informationen korrekt überlagern. Neue automatische Kachel, ziehen Sie die Region, aber Maskenmodus, fügen Sie sie, änderte die drei mal drei 16 mal 16 Untertitel-Modus. Und das setzt sich im Grunde davon ab. Also jetzt gibt es diese letzten drei Plattformfliesen. Wir müssen eine Region um sie herum zeichnen. Also lasst uns weitermachen und das tun. Stellen Sie sicher, dass, obwohl die Höhe der Plattform hier nur etwa 45 Pixel beträgt, dass Sie tatsächlich die vollen 16 Pixel tun, weil es immer noch 16 Pixel mit dem Rest des Spiels gekachelt werden. Oder wenigstens so werde ich es sowieso machen. Also dann nehmen wir den Auto-Kachel-Bitmask-Modus und setzen ihn in 3 mal 3 minimal. Und der Untertitel Größe 16 von 16. Und dann wird Bitmask im Grunde so aussehen. Ich glaube. So. Lassen Sie uns voran und testen Sie es auf der Kachelkarte. Wir können auf die Plattform klicken und ihre ziehen eine Reihe. Beachten Sie also, dass die Enden an ihrer Stelle sagen, wenn ich ein weiteres Stück hinzufüge, bewegt sich
das Ende nach rechts. Das ist es, was wir wollen. Und das wird funktionieren, solange Sie keine
andere Plattform setzen , die genau darunter ist, wie diese. Solange Sie das nicht tun, sollte
es richtig funktionieren. Also denke ich, das reicht für unsere Zwecke hier. Gehen wir zurück zu dieser Kachelkarte. Ich werde darauf doppelklicken und das Kartenordner Terrain. Und lassen Sie uns diese Bitmaske einfach auf zwei weitere neue automatische Kacheln kopieren. Also neue Auto-Titel und wir wählen ein Feld um hier herum, gehen Sie zu drei mal drei minimal 16 von 16. Und dann Bitmask, wir werden es von hier in hier kopieren. Also sind sie im Grunde gleich. Und schließlich die Metallversion. Lassen Sie uns diese drei durch 31616 Bitmaske-Paste erstellen. Das wird also das automatische Kachel-Setup für alle diese Geländekacheln sein. Jetzt können Sie auf den Spaß Teil bekommen, wo, wenn Sie auf die Kachel-Karte klicken, haben
Sie alle diese Auto-Fliesen, die Sie für den Aufbau Ihrer eigenen Spiel-Level mit verwenden können. Also zum Beispiel, wenn ich einige Plattformen wollen und vielleicht könnte dies für eine Plattform verwendet werden, von der Sie irgendwie abgesprungen werden können. Wenn Sie wollten, denken Sie nur nach vorn. Wenn Sie einige lange Blöcke erstellen möchten, haben
Sie das, einige große, Sie können es so tun. Und dann können diese anderen Fliesen verwendet werden, um den Grundboden für Ihren Charakter einzurichten. Diese müssen nur mindestens zwei mal zwei Kacheln sein, um automatisch korrekt zu kacheln. Und du solltest gut gehen. So können Sie einfach aufbauen, was Sie gerade testen wollen. Und dann werden wir in den nächsten Videos anfangen,
eine einfache Plattform oder einen Charakter zu erstellen , die wir verwenden können, um dieses Level zu testen. Also werde ich sagen, für jetzt und bis zum nächsten Video, ich sehe dich dann.
6. Spielanimationen einrichten: In diesem Video werden wir anfangen, eine Spielerfigur und eine Kamera zu erstellen. Das erste, was wir hier tun müssen, ist,
eine neue Szene zu erstellen und sie mit einem kinematischen Körper 2D beginnen zu lassen. Also werde ich dies zu einem neuen Szenen-Tab hier oben hinzufügen. Und ich werde auf einen anderen Knoten klicken, weil ich möchte, dass die Wurzel ein kinematischer Körper 2D ist. Wenn Sie also noch nicht wissen, ist
ein kinematischer Körper 2D im Grunde ein Physikzeichen, das sich basierend auf den Regeln bewegt, die Sie in den Skriptcode programmieren. Mit anderen Worten, eine Menge, wie sich Ihr Charakter bewegt, wird manuell sein. Die andere Option wäre, einen starren Körper 2D zu erstellen. Und jene arbeiten, die Kräfte haben, wirken auf den Körper anstatt direkt die Bewegung des Charakters innerhalb seines Skripts zu kontrollieren. Also für Spiele und Physik-basierte Puzzle-Spiele wie, sagen
wir Angry Birds, würde
der starre Körper viel Sinn machen da Sie Kräfte auf den Charakter handeln wollen. Aber wenn Sie versuchen, einen Jump'n'Run zu erstellen, ist
kinematische Körper 2D normalerweise das, was Sie wollen. Lassen Sie uns also voran gehen und beginnen, indem Sie mit diesem kinematischen Körper 2D erstellen. Das erste, was ich tun werde, ist es in Spieler umbenennen. Und dann lassen Sie uns einen Ordner erstellen, in dem Zeichen sitzen können. Das würde also die Hauptspielerfigur beinhalten. Feinde können NSCs sein, was immer du brauchst. Also werde ich mit der rechten Maustaste hier unten im Dateisystem und einen Ordner namens Zeichen erstellen. Und jetzt werde ich Command oder Control S drücken,
um den Spieler innerhalb des Ordners dieses Charakters zu speichern. Also lasst uns weitermachen und das da drin retten. Jetzt werden Sie feststellen, dass hier ein Ausrufezeichen und eine Warnung zur
Knotenkonfiguration vorhanden ist , dass dieser Knoten
keine Formen hat , sodass er nicht kollidieren oder mit anderen Objekten interagieren kann. Also müssen wir diesem Spieler eine Kollisionsform
zu tief hinzufügen , damit er tatsächlich mit dem Boden oder anderen Feinden kollidieren kann , so weiter und so weiter innerhalb des Spiels. Also werde ich hier mit der rechten Maustaste klicken und einen untergeordneten Knoten hinzufügen. Also wollen wir eine Kollisionsform 2D. Also füge ich das in hinzu. Und er bemerkt auch hier, dass die Kollisionsform tatsächlich erfordert, dass wir einen Formtyp erstellen. Damit das funktioniert. Das machen wir in einer Minute. Das nächste, was wir wollen, ist ein Sprite. Also werde ich hier mit der rechten Maustaste klicken. Ich werde einen untergeordneten Knoten hinzufügen. Und für diesen spezifischen Charakter werden
wir mit einem animierten Sprite gehen. Und der Grund dafür ist, wie diese Packs die Sprite-Blätter aufstellen. Also zeige ich dir in einer Minute, was ich damit meine. Aber jetzt gehen wir einfach mit animiertem Sprite. Und je nachdem, wie Ihre spezifischen Sprites sind, funktioniert
der Sprite-Knoten möglicherweise besser als ein animiertes Sprite. Lassen Sie uns also beginnen, die Animationen zu diesem animierten Sprite hinzuzufügen. Und du wirst ein bisschen davon sehen, wovon ich rede. Hier auf der rechten Seite gibt es diesen Abschnitt hier Frames und leer genannt. Also wollen wir leer zu einem neuen Sprite-Frames ändern. Das ist also etwas, auf das wir klicken können. Und wenn wir auf die Sprite-Frames klicken, öffnet sich das
Fenster hier unten und wir können individuelle Animationen erstellen. Also, wenn wir uns die Kunst für den Ninja-Frosch
, der wird in der Pixel-Abenteuer ein Pack sein, und dann Hauptfigur und dann Ninja-Frosch. Wir können, sagen wir, unsere untätige Animation hier finden. Wenn Sie also eine Animation für ein animiertes Sprite erstellen, geben
Sie ihm einfach einen Namen und Sie können hier oben neue Animationen erstellen. Also werden wir tun, um Frames aus Sprite Sheet hinzufügen. Wenn wir also in Kunst gehen, Pixel-Abenteuer, eins, Hauptfigur, Ninja-Frosch, und dann im Leerlauf, können wir das packen. Und so werden Sie sehen, dass hier für horizontale oben sein wird, geben Sie
einfach die Anzahl der Spalten und dann vertikale vier Zeilen an. So 11 nach dem einen gibt uns 11 Sprite Frames. Wir können hier alle Rahmen auswählen oder löschen und 11 Frames hinzufügen. Das wird also wirklich gut für diese Art von Setup funktionieren, wo jede Ihrer verschiedenen Animationen von in ihre eigenen Sprite Blatt gebrochen. Also habe ich erwähnt, warum sollten Sie animiertes Sprite über die Sprite-Komponente verwenden möchten? Nun, lassen Sie uns einfach eine Sprite-Komponente hinzufügen und ich werde Ihnen zeigen, was ich meine. Also werden wir in die Sprites hinzufügen und für jetzt werde ich einfach das animierte Sprite verstecken, indem Sie auf diesen kleinen Augapfel klicken. Wir gehen zur Textur. Und dann können Sie sehen, dass wir hier genau eine Textur einfügen können. Das könnte also ein Sprite Sheet Pack sein. Also zum Beispiel kann ich hier im Leerlauf setzen und Sie können sehen, dass die Frames gut geladen werden. Wenn wir also den Animationsbereich erweitern, können
Sie horizontale und vertikale Frames sehen, so dass wir Zeilen und Spalten wie zuvor festlegen können. Also denke ich, wir brauchen 11 horizontale Rahmen, okay? Und das teilt die Frames individuell auf. Also können wir hier durch die Frames gehen und einfach unsere Animation abspielen. So wären wir in der Lage, mit dieser Rahmeneinstellung zu animieren. Aber das Problem ist, dass Sie nur eine Sprite-Textur haben können. Wenn wir dies in ändern, sagen
wir, dieser Sprung, Sie können sehen, dass es immer noch horizontale Rahmen verwendet, 11 nach dem anderen. Diese Animation ist völlig anders. Es hat nur einen Frame, also müsste ich diesen Wert in einen ändern. Und wenn wir dann eine Animation abspielen, müssten
wir nicht nur die Textur ändern, sondern auch die Anzahl der horizontalen Rahmen und vertikalen Rahmen. Und die Angabe einzelner Frames in der Animation anhand der Animationsbasis. Wenn wir voran gehen und einen Animationsplayer erstellen, was normalerweise in Ordnung wäre, wenn alles in einem Paket komprimiert wäre, genau wie eine einzelne Texturdatei. Und dann können Sie einfach alle Frames hier durchgehen und es wäre kein Problem. Aber weil sie getrennt sind, macht
animiertes Sprite hier einfach mehr Sinn. Beide erledigen den Job, aber wenn Sie verschiedene Animationen haben, die getrennt sind, ist es viel einfacher, einfach auf Animation hinzufügen zu klicken. Und lassen Sie uns einfach hier laufen und ziehen und ablegen. Sie möchten tatsächlich diese Schaltfläche drücken, damit Sie die Frames
aufteilen können , dann klicken Sie auf Ausführen. Ich glaube, wir haben 12 nach dem anderen hier. Wählen Sie Alle Frames löschen aus und oben rechts fügen Sie Frames hinzu, und es gibt Ihre Animation. So können wir überprüfen, ob sie spielen Box auf der rechten Seite, um zu sehen, wie unsere Animation aussieht. Das ist viel langsamer, als es sein sollte. In der Sprite-Frame-Box möchten
wir also die Geschwindigkeit auf
20 FPS ändern und es gibt die richtige Geschwindigkeit für die Wiedergabe der Animation. Wir müssen das auf unserer Animationsbasis setzen. Klicken Sie also auf Leerlauf und stellen Sie sicher, dass auch bei 20 FPS gespielt wird. Und Sie können sehen, dass dort viel glatter läuft. Also gehen Sie im Grunde einfach weiter in diese Liste, um den Rest Ihrer Animationen zu erstellen. Also schätze ich, wir können jetzt alles hinzufügen. Warum nicht? Also lassen Sie uns eine, eine Jump Animation einzelnen Frame hinzufügen. Also füge ich das einfach wie gesprungen hinzu und dann haben wir Fehler. Also der Unterschied zwischen springen und fallen so weit, wenn Ihr Charakter
nach unten geht und dann springen wird sein, wenn Ihr Charakter steigt. Sie verwenden also im Grunde die vertikale Geschwindigkeit, um das herauszufinden, aber das ist für später. So können wir auch einen Doppelsprung haben. Also werde ich eine neue Animation hinzufügen. Wir ändern das in doppelten Unterstrichsprung, schätze ich. Und fügen wir n. diese Animation hinzu. Ich kann sehen, dass das sechs Frames ist, also sechs horizontale, eine vertikale, wählen Sie Alle Frames löschen, fügen Sie sie hinzu, und dann haben wir unsere Doppelsprunganimation. Also 20 FPS, und das ist die richtige Wiedergabegeschwindigkeit. Also mal sehen, was sonst. 3.5 hier, Hit and wall jump. So getroffen, Ich glaube, wird sein, wenn Ihr Charakter nimmt Schaden, Lassen Sie uns hinzufügen, dass Ende. So neue Animation getroffen und dann neue Animation, während Unterstrich springen. Lassen Sie uns die Frames dafür aus ihren separaten Texturdateien greifen. Sieht aus wie sieben Rahmen. Also sieben nach dem anderen, wählen Sie Löschen, Alle, setzen Sie es auf 20 FPS. Und wir können es testen, indem wir zu dieser Animation wechseln. Okay, nun, dieser Doppelsprung und wir wollen getroffen. Also gibt es die Hit-Animation ziemlich glatt da. Also, während Trump der letzte ist. Also lasst uns das unwirklich schnell füllen. Fügen Sie Animation hinzu, während Sie fünf Frames springen, also 5 mal 1, wählen Sie Alle Frames löschen, fügen Sie sie hinzu und stellen Sie sicher, dass dieser FPS 20 FPS ist. So können wir alle Animationen überprüfen und einfach sicherstellen, dass sie alle 20 FPS sind. Okay, das sind im Grunde unsere Animationen für den Charakter eingerichtet schön und einfach mit einem animierten Sprite.
7. Player: So jetzt, wo wir wissen, wo unser Charakter in
Bezug auf dieses helle in Bezug auf das kinematische Charakterobjekt ist . Wir können im Grunde zur Animation gehen, sie in Leerlauf
setzen, und wir können herausfinden, wo die Killer und Form den Leerlauf als Bezugspunkt verwenden
sollten . Also in Kollisionsform 2D, werde
ich auf Form auf der rechten Seite klicken und wir können eine Kapselform machen. Also, wenn Sie eine Kapselform zu tun, gibt es die Fähigkeit für einen Charakter, irgendwie von der Kante
rutschen , wenn Sie nur nähern sich der Kante. Wenn Sie nicht möchten, dass Ihr Charakter versehentlich vom Rand rutschen kann. Sie wollen, dass es entweder rein auf
dem Boden oder leicht aus dem Boden und damit fallen, dann könnten Sie eine rechteckige Form verwenden und stattdessen werde
ich mit Kapselform für jetzt gehen. Das könnten wir später ändern, also neue Kapselform. Und wir wollen, dass das ungefähr dort passt, wo der Charakter auf dem Boden sitzt. Also werde ich das verkleinern. Und eigentlich möchte ich die Kollisionsform über den Sprites sehen. Ich werde die Bestellung neu organisieren. So wird animiertes Sprite oben sein. Sie ziehen und ablegen. Und jetzt können wir die Kollisionsform sehen. Also lasst uns die Transformation ändern. Bewegen Sie es etwas nach unten. Ich denke, ich habe eine 9,5 Pixel oder so hinzugefügt. Und jetzt müssen wir die Dinge nur noch etwas weiter anpassen. Holen Sie sich einfach die gewünschte Form für Kollisionen mit anderen Objekten wie der Decke oder dem Boden. Vielleicht wollen wir eigentlich, dass der Charakter eine relativ hohe Hitbox hat. Wenn Sie also Ihren Kopf in die Decke stoßen, sollte
das hier oben passieren, nicht ganz hier unten. Also lasst uns die Transformation nehmen und das ein wenig nach oben bewegen. Also lass uns fünf sehen, okay, und das ist wahrscheinlich ziemlich gut genau dort. Derzeit sind die Einstellungen fünf für die Pixelposition. Und wenn wir auf Kapselform klicken, haben
wir einen Radius von 7,1. Ich werde das einfach auf sieben runden und die Höhe werde ich 10 machen. Und das sollte für unsere anfänglichen Kapselformen tun. Also sollte unser Charakter in der Lage sein, kollidieren, sobald wir die Bewegung eingerichtet haben, was einige Skripte erfordern wird. Also zuerst, lasst uns das Level nehmen. Also zurück auf der Ebene Registerkarte, werde
ich die Kunst schließen und das Dateisystem gehen zu Zeichen, und ziehen wir einfach diesen Spieler Charakter auf die Szene. Ich werde sie ein bisschen hier oben setzen, damit, wenn wir tatsächlich anfangen, das Spiel zu laufen, Schwerkraft sie zu Boden fallen lassen sollte. Und dann können wir überprüfen, ob er auf dem Boden weil er sich normal nach links und rechts bewegen kann. Es ist also ziemlich einfach, das zu überprüfen und auch 0 zu bekommen. Eines der coolen Dinge über 2D kinematische Körper und Bewegung und Godel. Also lasst uns in die Spielerszene eintauchen. Wir können einen Editor öffnen, der in die ursprüngliche Szene auf Ebene 1 wechselt Dies ist eigentlich eine instanziierte Kopie der Szene, so dass Sie es einfach in eine ganze Reihe von Spielern einfügen können, wenn Sie möchten. Und diese sind alle voneinander getrennt, aber sie basieren alle auf dem, was Sie haben, die verschiedenen Knoten hier und den Code, der auf dieser ursprünglichen Spielerszene basiert. Und so müssen wir dem Player ein Skript hinzufügen. Also werde ich nur auf die Schaltfläche Neues Skript drücken, während Sie auf den Player kinematischen Körper 2D genagelt klicken, die die Wurzel ist. Sie werden sehen, dass dies automatisch den Namen Player dot Gd für GD-Skript gibt. Und es wird es in den Characters Ordner abgelegt. Also denke ich, das funktioniert gut für uns in Bezug auf die Organisation. Also werde ich auf Erstellen klicken. Also, was wir tun müssen, um sicherzustellen, dass unser Charakter sich bewegen kann. Wenn wir Tasten drücken, ist es, die Eingabe zu überprüfen, wenn das Spiel läuft. Also machen wir das in einer Funktion namens Physik-Prozess. Sie werden feststellen, dass der Funktionsprozess hier auskommentiert wird. Aber da Bewegung im Grunde Teil der Physik des Spiels ist, würden
wir das im Physikprozess ausführen wollen. Alles, was mit Bewegung,
Kollision oder Physik zu tun hat , wird im Allgemeinen
empfohlen, dass Sie das in
der Physik-Prozessfunktion anstatt in der Prozessfunktion ausführen . Einer der Unterschiede mit dem Physik-Prozess ist, dass es
eine bestimmte Anzahl von Malen jede Sekunde des realen Lebens brennen wird . Wo ist die Funktion Unterstrich Prozess Delta kann mehr oder weniger laufen als das. Also im Grunde ist der Physik-Prozess konsistent und in ihrer normalen Prozessfunktion läuft inkonsistente Anzahl von Malen pro Sekunde. Also lasst uns das alles hier für jetzt löschen. Also werde ich hier Koje für Funktion schreiben und dann den Physikprozess unterstreichen. Sie werden feststellen, dass dies uns die automatische Vervollständigung gibt. Also werde ich einfach Enter dort drücken, vervollständigt es. Es gibt hier einen Parameter namens delta, das ist die Zeit zwischen den Frames. So können wir dies als Information für unseren Physikprozess verwenden. Also, was wir in diesem tun wollen, ist die Eingabe zu bekommen. Also werde ich eigentlich nur eine Variable hier erstellen, die Input genannt wird. Und dann werden wir eine Funktion erstellen, die hier ausgeführt wird. Und ich werde anrufen, dass Spieler Port bekommt. Und dann müssen wir nur diese Funktion erstellen. Also Funktion erhalten Spielereingabe, okay? Keine Parameter. Und dann fügen wir die beiden Punkte am Ende hinzu, wir drücken Enter und jetzt können wir anfangen, mit einer Funktion zu schreiben. So können wir hier einfach eine Variable erstellen. Ich werde es var Eingang nennen. Ich werde diesen Doppelpunkt setzen und dann werde ich den Typ eingeben. Vektor, um nur jemanden zu informieren,
der den Code liest , dass dies ein Vektor zwei sein soll
, der im Grunde Zahlen schweben soll. Sie haben einen x-Wert, der in diesem Fall für horizontale Import- oder horizontale Bewegung verwendet wird. Und dann können Sie eine y-Komponente für den Vektor haben, die vertikal nach oben nach unten wäre. Wenn Sie also ein 3D-Spiel machen, haben
Sie vielleicht einen Vektor 3, der
die dritte Richtung hinzufügt, die irgendwie wie Ihre Tiefe in den Hintergrund, Ihre z-Achse, wäre. Okay, also haben wir den Import und wir müssen anfangen, die Werte für die Eingaben zu bekommen. Also haben wir extra für die horizontale Eingabe und y für die vertikale Einstellung eingestellt. Und so input.txt. Und wir müssen das so einstellen, dass es importiert wird. Jetzt ist der erste Buchstabe hier Hauptstadt. Dies ist etwas, auf das Sie zugreifen können und Godot standardmäßig, Sie müssen nichts schreiben, bevor dies angezeigt wird. Und dann gibt es Funktionen, die Sie auf dieser Eingabe ausführen können. Die Funktion, die wir ausführen möchten, ist Handlungsstärke zu erhalten. Dies nimmt also einen Parameter und der Parameter ist der Name der Aktion. So sehen Sie standardmäßig gibt es alle diese UI-Aktionen, die wir greifen können. So könnten wir einfach faul werden und UI-Unterstrich links verwenden. Eine andere Option wäre, dass Sie
eine Kundenaktion definieren und sie als links, rechts,
oben, unten oder spielen eine Bewegung nach oben, unten, links,
rechts, wie auch immer Sie es nennen wollen, das ist völlig getrennt von der Benutzeroberfläche links. Vielleicht haben Sie also verschiedene Steuerelemente für die Benutzeroberfläche, und vielleicht haben Sie verschiedene Steuerelemente für den Player, bis zu Ihnen, wie Sie es tun möchten. Letztendlich finden wir nur die Taste
heraus, die der Spieler drücken soll, um den Charakter nach links und rechts zu bewegen. Gehen wir also zum Projektmenü. Oben links gehen wir zu Projekteinstellungen Eingangskarte, und hier können wir die Aktionen für unser Spiel festlegen. Sie können die Benutzeroberfläche links sehen, UI oben und unten sind bereits festgelegt. Also, wenn wir wollten, könnten wir einfach nach diesen Werten suchen und dann nach oben,
unten, links, rechts Pfeile auf unserer Tastatur verwenden , um den Charakter für das Spiel zu entfernen. Ich bevorzuge generell WASD-Bewegung. Also werde ich tatsächlich eine neue Aktion hinzufügen. Dies wird also getrennt von der Benutzeroberfläche sein, links, rechts, oben, unten. Also werde ich es einfach hier oben links nennen. Wenn Sie ein Multiplayer-Spiel erstellen, können Sie es als P1 für Spieler einen Unterstrich links nennen. Weißt du, es liegt wirklich an dir. Also lassen Sie uns k. hinzufügen also haben wir die neue Aktion, aber es gibt keine Schlüssel dafür. Also wollen wir den Plusknopf hier drüben auf der rechten Seite drücken. Sie können sehen, dass Sie in Joystick,
Tasten-Steuerelemente, Maustasten oder Tastatur hinzufügen können . Also lasst uns Tastatur machen. Und ich werde W auf der Tastatur drücken, um die Taste einzustellen und OK zu drücken, also warte, das wäre eigentlich vorwärts. Also lasst uns das ändern. Lassen Sie uns die Bearbeitungsschaltfläche ein für links drücken. Okay, und dann fügen wir die nächste Aktion hinzu. So hoch. Und dann können wir nach unten und rechts tun. Also für jeden dieser Reset oder Schlüssel, so wird es nach oben w, unten wird S sein, und dann schreiben wird d. Okay, also WASD-Controller, vielleicht wollen wir das hier oben bewegen. Also sagt es eigentlich, dass WASD ein wenig mehr Sinn macht. Lass uns das schließen. Also jetzt, um die x-Eingabe zu erhalten, müssen
wir tatsächlich etwas Mathematik zwischen zwei Werten machen. Wenn wir also die horizontale Bewegung einstellen, gibt es zwei Tasten, die das steuern würden. Das wäre die rechte Bewegung und die linke Bewegung. Also rechts auf dem Bildschirm wird Ihnen einen positiven Wert für die x. und dann links auf dem Bildschirm wird Ihnen einen negativen Wert geben. Also, wie wir es hier berechnen, ist, dass
wir für das XML zuerst den richtigen Wert hier erhalten. Also ist es positiv. Ich setze hier kein Negativ ein. V ist nur positiv. Wenn wir nach rechts gehen. Und dann können wir die Aktionsstärke von links subtrahieren. So erhalten Aktion Stärke. Und jetzt sind wir weg. Stellen Sie sicher, dass die Anführungszeichen vorhanden sind, da es sich um eine Zeichenfolge handelt. Und das würde im Grunde mit einem Schlüsselport bedeuten. Wenn wir nach rechts drücken, dann wird das eins sein. Und wenn wir links die achy drücken, dann wird das auch eins sein. Also, wenn Sie gleichzeitig rechts und links drücken, wird
ein Minus eins sich gegenseitig absagen und Sie werden eine 0 bekommen. Wenn du nicht nach rechts drückst, aber nach links
drückst, bekommst du einen negativen. Und wenn du nach rechts drückst, aber nicht nach
links, bekommst du einen. So können wir das verwenden, um zu bestimmen, welche Richtung sich der Spieler bewegen soll. Also für die Y-Richtung kann
es sehr ähnlich sein. Also für dieses spezifische Spiel, da es diesen klassischen Jump'n'-Stil hat, werden
die Auf- und Abwärtstasten am Ende möglicherweise nicht wirklich verwendet, aber wir können immer noch die Eingabewerte dafür erhalten. Es kann später eine Art von Bewegungskomponente geben, die von der Eingabe Y abhängen würde. Also könnten wir es genauso gut bekommen, da wir bereits gestartet haben. Also lasst uns Eingabe y machen, und wir werden Actionstärke bekommen. Und dieses Mal suchen wir nach unten. Das mag ein wenig verwirrend klingen, aber nach unten ist eigentlich positiv, wenn Sie 2D-Spiele machen. Sie gehen also auf dem Bildschirm nach unten,
bedeutet, dass Ihr y-Wert zunimmt. Also wollen wir Action-Stärke nach unten bekommen minus Action-Stärke nach oben. Also gehen wir hin. Und jetzt haben wir
die Vektor-Setup richtig, also wollen wir das zurückgeben, so dass es in der Hauptphysikprozessfunktion verwendet werden kann. Also wenden wir uns an Input, und wir sind so ziemlich fertig. Vielleicht schreibe ich hier einen Kommentar. Also jetzt, um den Charakter zu bewegen, müssen
wir seine Geschwindigkeit bestimmen. Also werde ich hier nach oben gehen und hier oben eine Variable deklarieren. Ich nenne es weit Geschwindigkeit. Und ich werde nur sagen, dass das ein oder zwei ist, genau wie wir es in der Funktion hier unten getan haben. Der Vorteil, es hier zu deklarieren
, ist also , dass dies im Grunde direkt an das Player-Skript gebunden ist. Und wir können diesen Wert in jeder der Funktionen verwenden, die dieses Skript verwenden wird. Es ist also nur irgendwie öffentlich zugänglich, ob wir im
Physik-Prozess sind , Spielereingaben oder eine andere Funktion erhalten. Das bedeutet auch, dass wir den Wert einstellen können und dann kann der neue Wert auch in anderen Funktionen verwendet werden. Also wollen wir die Geschwindigkeit einstellen und wir tun das basierend auf der Richtungszeit der Spieler-Bewegungsgeschwindigkeit. Aber wir haben nicht festgelegt, wie schnell sie sind. Der Spieler sollte sich bewegen, also brauchen wir eine andere Variable. Also gehe ich zu diesem Zeitpunkt Typ n Export, und ich werde ihm einen Typ geben, entweder float oder integer. Wenn Sie also in der Lage sein möchten, Dezimalstellen zu verwenden, verwenden Sie einen Gleitkommawert. Wenn Sie möchten, dass es sich um ganze Zahlen als 1, 2, 3, 4, 5, 6, 7 handelt, kein Dezimalpunkt. Dann können Sie INT für Nt schreiben. Aber ich denke, es gibt wirklich keinen Nachteil bei der Verwendung von Floats. Und es erlaubt Ihnen, genauer mit der genauen Geschwindigkeit zu sein. Also werde ich die Variable zu einem Float machen, und wir müssen den Export float var hier setzen. Und danach geben wir ihm einen Namen. Also werde ich es Move Speed nennen, bewegen Unterstrich Geschwindigkeit genauer in religiösen, angesichts einer beliebigen Zahl wie und 200 für jetzt, können
wir es immer später ändern. Nun, der Unterschied zwischen einem Export-Float weit und einer var besteht darin, dass diese Variable nicht im Inspektor für das Zeichen angezeigt wird. Aber wenn Sie float exportieren, bestimmt
der Float den Typ,
im Grunde, wie dies im Inspector festgelegt werden sollte. Und dann wird der Export es öffentlich sichtbar machen. Wenn ich also hier auf den Spieler klicke, können
wir sehen, dass die Bewegungsgeschwindigkeit Variable hier eingestellt
ist und wir können das in alles ändern, was wir wollen. Es ist standardmäßig auf das, was wir im Code gesetzt haben, aber wir können dies auf Instanzbasis ändern. Also, wenn ich drei Spieler hier in der Hauptszene
habe, kann ich auf diese klicken. Ich kann die Werte hier ändern, also 300. Aber das können wir noch retten. Geh zurück zur Spielerszene. Und Sie können hier sehen, es sind 200. Aber dann auf der Instanzkopie sind es 300. Verschiedene Zeichen, obwohl sie auf demselben Code basieren, können
dieselben Knoten unterschiedliche Einstellungen haben. So könnten Sie das auch für Dinge wie Farbe verwenden. Wenn du einen, ich weiß nicht,
grünen Frosch nehmen willst und ihn blau machen willst oder so etwas. Also haben wir unseren Wert für Move Speed. Jetzt müssen wir das mit der Richtung multiplizieren. Also lassen Sie uns in das Skript gehen und ich werde die x-Eingabe nehmen. Ich werde das mit der Bewegungsgeschwindigkeit multiplizieren, um die x-Richtung Bewegung zu erhalten. Also Geschwindigkeit, ich werde nur das gleich dem Vektor 2 hier setzen. Vielleicht werde ich das irgendwie in mehrere Zeilen aufteilen. Das wird also unsere x-Linie sein und das wird unsere Wireline sein. Ich setze das einfach auf 0 für jetzt. Später fügen wir Schwerkraft und Springen hinzu. Aber hier oben in der zweiten Zeile für x, werden
wir das X tun und setzen,
also das ist die Richtung, die wir in Zeiten gehen, die durch die Geschwindigkeit bewegt. Also, weil rechts 1 O auf der Tastatur ist, links ist 1 O auf der Tastatur, wir werden entweder 0 oder plus 200 oder minus 200 erhalten. Und wir können diese Geschwindigkeit für Bewegung verwenden. So bewegen Sie einen kinematischen Körper in 2D selbst, sobald Sie die Geschwindigkeit und die Richtung haben, ist es ziemlich einfach. Alles, was Sie tun müssen, ist zu bewegen und zu schieben. Und dann hier werden wir in die philosophische Variable setzen, Boom, fertig. Es gibt tatsächlich eine andere Möglichkeit, zu bewegen, die bewegt wird und kollidiert. Und dort würden Sie auch n mal Delta hinzufügen. Also wirklich, das würde wie bewegliche kollide Geschwindigkeit mal Delta aussehen. Also, das ist die Zeit zwischen Frames bewegen Folie sind medizinisch Konten für das, aber Verschieben Folie nicht. Ich bin mir nicht sicher, warum, aber das ist nur unsere derzeit Werke. Der Grund, warum Sie die Zeit zwischen den Frames beachten möchten ist, wenn es irgendwelche Inkonsistenzen zwischen der Zeit zwischen Ihren Frames gibt, möchten
Sie das Zeichen basierend auf der Zeit seit dem letzten Frame die richtige Menge verschieben. So sollte sich der Charakter mit einer konstanten Geschwindigkeit bewegen. Wenn Ihre Frames jedoch nicht mit der gleichen Geschwindigkeit gerendert
werden, sollte die Bewegungsmenge bei jeder Aktualisierung unterschiedlich sein. Theoretisch und physikalischer Prozess wird
es immer dasselbe sein. Also im Allgemeinen würden Sie nicht auf dieses Problem stoßen. Aber nur für den Fall, dass das da ist, ist
das, warum Delta existiert. Und bewegen und gleiten Sie einfach automatisch Faktoren, die N. So brauchen Sie nur die Geschwindigkeitsvariable. Man multipliziert es nicht mit Delta auf den Punkt gebracht. Nun, da wir das haben, denke
ich, wir könnten einfach voran gehen und Play drücken und den Charakter nach links und rechts bewegen. Okay, zuerst sollten wir sicherstellen, dass wir auf dem Niveau sind, das wir gesehen haben. Und verkleinern wir uns hier ein bisschen. Ich schätze, wir müssen eine Kamera setzen. Und so lassen Sie uns hier eine untergeordnete Notiz hinzufügen. Und ich werde eine Kamera hinzufügen, speziell eine Kamera zu D. Und wenn Sie dann etwas verkleinern, können
Sie den blauen Rand für die Kamera sehen. Also werde ich auf die Kamera klicken, kann hier unten klicken und wir werden die Kamera 2D bewegen und es einfach grob oben auf unserem Player für jetzt. Jetzt können wir spielen. Und das andere Problem ist, dass wir es zur aktuellen Kamera machen müssen. Wenn Sie es nicht zur aktuellen Kamera machen, dann wird die Kamera es irgendwo um 000 setzen, denke ich. Also, wenn wir überprüfen Strom auf, dann ist dies jetzt die aktive Kamera und dies wird sein, wo das Spiel beginnt zu schauen. Also spielen Sie noch einmal. Und lassen Sie uns das testen. Okay, also unsere Charaktere dort, also können wir jetzt ein und D benutzen, um unseren Charakter zu bewegen. Also ein, d, okay, cool, es funktioniert irgendwie. So offensichtliche Probleme sind in der Lage, durch
die Wand zu gehen und keine Schwerkraft zu haben, um auf den Boden fallen zu lassen.
8. Schwere und globale Spieleinstellungen mit Singletons: Lassen Sie uns zuerst das Schwerkraft-Problem lösen. In Canto. Wenn Sie zu einem Projekt gehen, Projekteinstellungen, gibt es technisch vorgegebene Schwerkraftwerte, die Sie hier einstellen können, okay? Und Sie suchen in der Suchleiste, so Schwerkraft, und dann können Sie 2D sehen, haben
wir Standard-Schwerkraft und Standard-Schwerkraftfaktor. Standardgravitation wird in Pixeln gemessen, und dies sind nur willkürliche Zahlen, die Sie
mit Ihren 2D-kinematischen Körpern anwenden können . Ich denke, diese könnten, ich denke, es könnte tatsächlich mehr direkte Auswirkungen haben wenn Sie starren Körper 2D verwenden und das würde automatisch Faktor eines Cents. Aber in kinematischen Körpern muss
man alles manuell machen. So könnten Sie entweder diese Werte verwenden und sie hier oben anpassen. Oder was ich denke, ich könnte es vorziehen, ein Singleton zu erstellen, in dem wir nur Spieleinstellungen haben, die wir
entweder auf der oberen Ebene oder für das gesamte Spiel laden können . Und jedes Mal, wenn wir globale Spieleinstellungen ändern müssen, tun
wir das in einem Singleton, das einmal pro Spiel geladen wird. Also werde ich hier schließen und dann können wir eine neue Szene erstellen und ein Skript daran anhängen. Also gehen wir in das Menü in der oberen linken, schlagen neue Szene. Und hier werden wir einen anderen Knoten machen. Dies ist sozusagen kein 2D-Objekt. Es ist nur ein Knoten, der ein Skript mit
einer Reihe von Variablen enthalten wird , die wir festlegen können und referenzieren und andere Skripte. Also anderer Knoten. Und ich werde es hier notieren. So einfach wie Sie bekommen können, werde
ich Command oder Control S drücken und speichern wir das und das Root-Verzeichnis vorerst. Wir könnten tatsächlich einen einzigen Turn-Ordner erstellen, könnte genauso gut mehr Ordner haben. Also werde ich mit der rechten Maustaste klicken und einen neuen Ordner machen. Und ich lege es hier in Singleton. Schlag in Ordnung. Dieser Knoten wird also Spieleinstellungen genannt. Also während des Kamelgehäuses, Kapital G, Kapital S, und drücken Sie Speichern. Also werde ich diesen Knoten auch in Spieleinstellungen umbenennen, es konsistent machen. Und jetzt fügen wir einfach ein Skript hinzu. Also machen wir das. Es wird automatisch standardmäßig auf das Singleton-Verzeichnis, wir
das G gespeichert haben, dem wir die Szenendatei gespeichert haben. Also jetzt wird es auch die QDOT-Skriptdatei speichern. Also erschaffen Sie das. Lassen Sie uns hier alles löschen. Und jetzt können wir einfach ein paar Exportvariablen hinzufügen. Also lasst uns exportieren, float, var tun. Und ich schätze, was wir hier wollen, ist die Schwerkraft. Und wir können das auf einen beliebigen Standardwert setzen. Aber noch einmal werden wir eine Instanz dieser Spieleinstellungen speichern. So können wir einfach hier klicken und anpassen, wann immer wir brauchen. Wir müssen das Skript eigentlich nicht verwenden, da wir hier den Export-Float
haben. Das ist also wirklich praktisch. Und wir können den Exportfluss weit machen. Und ich werde diese Terminalgeschwindigkeit nennen, wie im Grunde die max fallende Geschwindigkeit, die Sie erreichen können. So wird die Schwerkraft auf jede Sekunde hinzugefügt. Der Charakter beschleunigt sich weiter und geht auf dem Bildschirm nach unten. Und was willst du, dass diese Kappengeschwindigkeit erreicht? Also, weil es ein
2D-Cartoony-Spiel ist, ist es irgendwie willkürlich. Physik aus der realen Welt ist nicht erforderlich. Nur kann mit den Zahlen herumspielen und
herausfinden , das Gefühl, dass Sie für Ihr bestimmtes Spiel wollen. Also werde ich jetzt nur Port 300 vier füllen. Und das werden wir uns ein bisschen später anlegen, bin ich mir sicher. Also haben wir diese Werte und wir wollen nur, dass es diesen Spieleinstellungen Knoten jedes Mal
laden, wenn wir das Spiel gestartet haben. Also gehe ich zum Projekt, Projekteinstellungen. Es gibt eine Registerkarte hier Auto Load genannt, und wir wollen in diesem Spiel Einstellung Szene hinzufügen. Also lassen Sie uns zu einzelnen Begriff gehen und dann das Spiel settings.js kann dort doppelklicken. Okay, jetzt
werden diese Spieleinstellungen jedes Mal geladen, wenn wir das Spiel starten, es ist ein Singleton. Ein einziger Ton bedeutet im Grunde nur, dass zu einem bestimmten Zeitpunkt nur einer existierenden sein kann. Wenn Sie also auf die Spieleinstellungen verwiesen haben, sollten
Sie relativ sicher sein, dass dies die gleichen Spieleinstellungen
sein wird , die Sie in Ihrem Spiel haben. Es sollte sich also nicht ändern. Es sollte immer die spezifische Szene sein, die wir in diesem Singleton-Ordner gespeichert haben. Gehen wir also voran und drücken Sie jetzt Schließen. Und jetzt können wir zum Player-Skript gehen und auf die Schwerkraft und die Endgeschwindigkeit verweisen. Also werden wir die Geschwindigkeit, die y-Geschwindigkeit speziell auf ihre aktuelle Wellengeschwindigkeit einstellen. Und dann werden wir subtrahieren und dann werden wir die Schwerkraft subtrahieren. Also minus Spieleinstellungen Punkt Schwerkraft. Das ist alles, was Sie tun müssen, um es zu referenzieren. Nur Spieleinstellungen zeigen, welche Variable wir Setup haben und dass Singleton, und wir können nur darauf verweisen. Ok? Und das werden wir auch begrenzen. So wie die Dinge jetzt gemacht werden, wird
der Schwerkraftwert
die Geschwindigkeit ändern und es wird immer schneller und schneller ohne Limit, im Grunde unendlich nach unten auf der Bildschirmgeschwindigkeit. So kann ich das sehr schnell zeigen. Aber lassen Sie uns hier auch ein Print-Statement abgeben. Also drucken und wir werden einfach Geschwindigkeit Punkt y tun, so dass in der Konsole, können
wir sehen, dass der Wert nur nach unten geht. Also lasst uns versuchen, das Spiel zu spielen. Also Level eins, okay, und wir können in der Ausgabe sehen, dass wir den Wert für die Geschwindigkeit bekommen. Also jetzt nähern wir uns wie negative 16 Tausend wie die Abwärtsgeschwindigkeit. Und eigentlich habe ich einen Fehler gemacht. Es sollte plus Schwerkraft sein, weil unten positiv ist, wenn wir diese 2D-Spiele machen. Also wollen wir die Geschwindigkeit hier eingrenzen. Und die Art und Weise, wie wir die vertikale Bewegungsgeschwindigkeit beibehalten haben, ist die Verwendung der Min-Funktion. Es ist eine mathematische Funktion. Es wird also den unteren der beiden Werte zurückgeben. Also haben wir unser A hier auf der linken Seite, das ist die neue Geschwindigkeit, die wir einstellen wollen. Und dann hier drüben auf der rechten Seite, wir werden Spiele settings.py haben, Terminalgeschwindigkeit. Also jetzt, wenn wir voran gehen und Play drücken, werden
wir sehen, oder wir sollten eine Obergrenze auf den Wert sehen. Und wir haben es nicht getan. Also ich denke, wir wollen eigentlich plus Spieleinstellungen doc Gravitation. Gehen wir weiter und schlagen Plus hier und sehen. Okay, ja, richtig, das ist richtig. Also unten, wieder ist ein positiver Wert auf dem Bildschirm. Das ist also positiv. Das ist negativ. Wenn wir hier drüben auf Refresh drücken , können
wir sehen, wenn das beginnt, dass unser Charakter irgendwie auf den Boden fällt, aber die Geschwindigkeit wird tatsächlich dort gehalten. Das ist also, das wollen wir sehen. Egal wie lange es geht, es geht nie schneller als diese Terminalphilosophie. Okay, jetzt müssen wir tatsächlich einige Kollisionen zwischen dem Spieler und dem Boden haben. So können wir unsere Kachel-Karte dafür überprüfen. Lassen Sie uns auf das Kachel-Map-Objekt klicken, das Pixel-Abenteuer zu main.js Datei, die wir im Projekt gespeichert haben. Und jetzt können wir unser Gelände öffnen. Wir können hineinzoomen. Und das Problem ist, dass wir keine Kollisionskacheln gesetzt haben. Es ist also nicht zu schwer, es zu tun, aber es kann ein wenig zeitaufwendig sein. Also lasst uns hier auf unsere Region klicken. Wieder einmal haben wir die BitMask bereits so eingerichtet, dass wir sie zeichnen können, aber wir haben keine Kollisionen hinzugefügt. Der schnellste, einfachste Weg, Kollisionen einfach zu machen, besteht darin, ein neues Rechteck hinzuzufügen. Sie können sehen, dass dies Hotkeys hat, also ist es Shift R auf der Tastatur. Also fand ich einen guten Weg, dies zu tun, ist auf Ihre Kachel klicken, Shift R
drücken, wieder auf die Kachel klicken, und dann haben Sie Ihr Kollisionsquadrat, das im Grunde die gleiche Form und Größe der Fliese selbst ist. So klicken wir auf das zweite Quadrat für Hit Shift R Wir klicken wieder darauf, und jetzt haben wir eine Kollisionsform. Wenn also der Charakter aus irgendeiner Richtung in diesen Fall stößt, sollte er ihn in seinen Spuren stoppen. Also lasst uns das einfach weiter machen. Klicken Sie auf Umschalttaste, R, klicken Sie auf, klicken Sie auf Umschalttaste Also gehst du einfach durch und stößt auf ein Problem. Sie können einfach manuell dort klicken, einfach sicher, dass Sie eine Kollision auf jedem erhalten. Wenn Sie sehen, dass, nachdem es gelb war, wird
es noch gelber. Das könnte bedeuten, dass Sie Kollisions-Shapes darüber haben, so dass Sie
einfach auf sie klicken und sie löschen können , wenn dies zu einem Problem wird. Also sollte alles dieselbe Überlagerung von Gelb haben. Also lasst uns das einfach weiter machen. Ich werde das Video beschleunigen. Wenn es Ihnen also aus irgendeinem Grund ein wenig Probleme gibt, können
Sie hier auch manuell klicken, um Ihr nächstes Rechteck zu erstellen. So können Sie es wie klicken Sie dort oben und dann klicken Sie hier unten. Und dann gibt Ihnen das die gleichen Ergebnisse. Aber hoffentlich sind sie Hotkeys werden auch für Sie funktionieren. Das sind im Grunde alle Kollisionsformen mit Ausnahme eines. Wenn wir also hier hineinzoomen, können
wir sehen, dass diese Plattformkacheln, die wir erstellt haben, nur eine vier Pixel hohe Plattform haben. Es macht also nicht wirklich Sinn, dass ein Charakter von unten mit ihm kollidiert. Denn das würde bedeuten, dass es
hier den Kopf stoßen würde , wo es eindeutig nichts gibt. Also, wenn wir in der Kollisionsform für diese hinzufügen, können
Sie sehen, dass ich sagte, dass das Fangen vier Pixel um vier Pixel früher sein. Dafür gibt es einen Grund, und das ist, dass wir
diese Kollisionsformen an diese Plattformen anpassen können . Wenn Sie also Kollisionsformen erstellen, können
Sie die Fangoptionen überprüfen. Stellen Sie sicher, dass Schritt vier mal vier für diese speziellen Kacheln ist. Und jetzt können Sie auf jede der Ecken klicken und sie nach oben ziehen. Also, wenn wir das für jeden dort tun, haben wir
jetzt eine Kollisionsform, die tatsächlich mit dem Kunstwerk für diesen Kachelsatz übereinstimmt. Also können wir das im Grunde einfach für jeden von ihnen wiederholen. Klicken Sie also einfach auf die vier Ecken, die Sie anpassen müssen. Und das ist im Grunde alles, was es dazu gibt. Solange Sie das Einrasten von vier Pixeln von vier Pixeln machen, wird
es mit diesem speziellen Reifenset wirklich einfach sein, okay? Und für jetzt, und das sollten alle Kollisionen sein, die wir für unsere Geländefliesen brauchen werden. So großartig. Und jetzt können wir Kontrolle S treffen und wenn wir wieder ins Spiel gehen, sollte
die Kollision tatsächlich funktionieren. Also lasst uns schlagen spielen unsere Charaktere jetzt auf dem Boden sein. So können wir links und rechts für Bewegung treffen. Und ein Charakter, es
wird einfach von der Kante fallen und dann aufhören, wenn er hier ist. Und noch einmal, wenn er hier unten ist. Jetzt können Sie ein paar Probleme sehen. Einer ist, dass es ein paar Pixel vom Boden für den Charakter ist. Wir müssen nur
die Position der Kollisionsform anpassen , damit diese korrekt aussieht. Und dann hier auf der linken Seite sieht man, dass sie y Geschwindigkeit immer sagt, es ist 300. Ich bin technisch nicht korrekt. Also lasst uns hier aufhören. Jetzt gehen wir in die Schicht. Wir werden dies öffnen und was wir tun
müssen , ist, dass, nachdem wir die Bewegung und die Gleitgeschwindigkeit haben, dies tatsächlich eine Geschwindigkeit zurückgibt, nachdem wir Kollisionen mit dem Boden gemacht haben. Also im Grunde nehme ich den y-Wert hier und setze ihn auf 0, weil es eine Bodenkollisionen gab. Also kann es sich im Grunde nicht mehr bewegen. Also, wenn wir die in
diesem Skript gespeicherten Geschwindigkeitswerte auf diesen Geschwindigkeitswert setzen , der hier zurückgegeben wird. Dann wird es die y-Geschwindigkeit auf 0 zurücksetzen. Und dann wird das hier so eingerichtet, dass das nächste Mal, wenn es hier reinkommt, wir die Schwerkraft auf 0 hinzufügen werden. Das sollte also richtig sein. Und auch, wir wollen wirklich die Geschwindigkeit nach der Bewegung sehen, nicht vorher, vorher. Wenn dies 0 ist, wird es die Schwerkraft hinzufügen, die es 50 macht. Aber wirklich, nachdem die tatsächliche Bewegung berechnet wurde, wird sie sich mit einer Geschwindigkeit von Nullen bewegen, so dass es sinnvoller ist, sie hier zu drucken. Also lasst uns weitermachen und spielen, und wir können uns das ansehen. So haben Sie vielleicht gesehen, dass bei den ersten paar Frames, es war 50 war ein 100 und dann war es eine 150, da es in Richtung Boden beschleunigte. Aber danach ist es 0, weil wir auf dem Boden sind. Behalten Sie die Ausgabe im Auge und Sie können sehen, dass sie sich wieder ändert. Genau dort für einen Sekundenbruchteil beschleunigte
es sich auf den Boden zu. Und das ist es, was wir sehen wollen. Also lasst uns in die 2D-Ansicht für unseren Player gehen. Ich kann sehen, dass die Kollisionsform hier etwas zu niedrig ist, also müssen wir das nur anpassen. Also werde ich zur Kollision 2D gehen und dann versuchen wir, die Position drei zu machen. Es hängt von der Richtung ab, mit der Sie konfrontiert sind, also kann es vier sein. Und jetzt gehen wir weiter und stellen Sie sicher, dass es pixelgenau mit dem Boden ist. also einen Blick hier werfen, können
wir sehen, dass wir die Bodenpixel haben und dann direkt darüber die umrissenen Pixel des Charakters sind. Das ist es, was wir hier sehen wollen. Und das ist, dass Sie die Umrisse hier abschneiden wollen und einfach
den Greenberg als das haben , was mit dem Boden verbunden ist. Das ist eher eine stilistische Wahl, denke ich. Also lasst uns voran gehen und Hit hier gestoppt. Und eigentlich, wenn ich es mir ansehe, haben
wir im Grunde alles für dieses Video abgedeckt. Also haben wir eine Kamera auf unserem Spieler gesetzt. Unser Charakter kann sich nach links und rechts bewegen, basierend auf unserer Eingabe, dass wir die Erstellung dieser benutzerdefinierten Aktionen einrichten. Und die Schwerkraft funktioniert ebenso wie die Endgeschwindigkeiten. Also eine anständig funktionale Plattform, ein Charakter, der noch nicht springt, aber wir werden dazu kommen. Also, wenn Sie es so weit geschafft haben, sind
Sie bereits auf dem besten Weg, eine funktionale Plattform oder Charakter zu haben. Das ist also wirklich cool.
9. Sprung, Bewegung und State: Also in diesem Video werden wir unseren Charakter nehmen und ihm die Möglichkeit geben zu springen. Ein Teil davon wird also die Gründung von Staaten sein. Also zum Beispiel, wenn die Charaktere auf dem Boden, sollte
er in der Lage sein, zu springen. Aber sobald dein Charakter springt, wird
die Bewegung ein wenig anders funktionieren. Je nachdem, wo der Charakter ist und welche Tasten in jedem
dieser verschiedenen Modi gedrückt werden , die der Charakter hat um mit der Spielwelt interagieren zu können, wird ein Zustand genannt werden. Also lasst uns weiter gehen und wieder in unsere Spielerszene eintauchen. Hier können wir also sehen, dass wir das animierte Spray, die Kollisionsform haben, aber wir haben noch keine Möglichkeit, die Animation zu ändern. Also, momentan, obwohl wir uns
nach links und rechts bewegen können , wenn wir voran gehen und spielen. Und wir versuchen, nach links und rechts zu bewegen, wir können sehen, dass die Charaktere immer noch
im Idaho bleiben und er nicht einmal den richtigen Weg nach oben sieht. So können wir das korrigieren und dann in springen uns und andere Option hinzufügen. Aber zuerst, bevor wir in das Scripting eintauchen, lassen Sie uns eine Animation Player hinzufügen. Unser Animationsplayer ist also eines der Werkzeuge, die wir verwenden können um zu
ändern,
wie die Charaktere aktuelle Animation aussehen wird Wenn wir den Status und Code ändern, können
wir auch den Animationsplayer aktualisieren. Es spielt also die richtige Animation für den richtigen Zustand ab. Lassen Sie uns also mit der rechten Maustaste auf den Player klicken und einen untergeordneten Knoten hinzufügen. Also suchen wir nach Animationsplayer, die hier unten bequem ist, und lassen Sie uns voran und erstellen, dass. Und jetzt, wenn wir auf Animation Player klicken, können
wir sehen, gibt es dieses Animationsfenster hier unten unten. Wir wollen also eine Animation für jede der animierten Sprite-Animationen hier erstellen. Und so denke ich, dass die Art, dies zu tun, ein bisschen sauberer ist, wenn Sie ein Sprite verwenden, nicht ein animiertes Sprite. Aber noch einmal, weil wir in unserem vorherigen Video entdeckt haben, dass all diese verschiedenen Animationen in verschiedene Bildtexturdateien unterteilt sind. Animiertes Sprite funktioniert besser für dieses spezielle Projekt. Also, wie es für Animationsplayer und ein Animations-Sprite funktioniert ,
ist, dass wir in diese Animationsschaltfläche gehen und neu drücken. Also müssen wir eine für jede Animation erstellen. Fangen wir mit Leerlauf an. Drücken Sie Enter, und jetzt müssen wir einen Track hinzufügen. Wenn wir also diese Animation Player-Animationsspuren haben, können
wir verschiedene Eigenschaften ändern, wenn die Animation fortschreitet. Also werde ich hier Track hinzufügen drücken, Eigentum. Und jetzt können wir jede Eigenschaft aus unserer Szene nehmen und das im Grunde animieren. Also lasst uns animiertes Sprite ändern. Und wir wollen die Animation hier ändern. Wenn wir die Leerlaufanimation auf dem Animationsplayer eingeben, möchten
wir die Leerlaufanimation auf dem animierten Sprite abspielen. Also werde ich hier mit der rechten Maustaste klicken, einen Schlüssel einfügen. Ein Schlüssel, der nur ein Moment in der Zeit ist, wenn Sie den Wert von etwas
ändern, z. B. welche Animation abgespielt wird. Und dann auf der rechten Seite mit diesem Schlüssel ausgewählt, können
wir den Wert zwei ändern. Ich weiß es nicht, wir sind jetzt nur irgendwie bequem , denn wenn es sich im Animationszustand befindet, wollen
wir nie, dass es aufhört, obwohl wir jetzt technisch nicht benötigt werden, denn wenn ein Charakter im Leerlauf ist, wollten
wir
Fortsetzung der Animation. Ich denke, es macht Sinn,
hier die Animationsschleife zu überprüfen , ist in diesem Fall möglicherweise nicht erforderlich, da dies nur dem animierten Sprite mitteilt, welche Animation gespielt werden soll. Aber die Animateure beten wahrscheinlich zu schleifen oder so. Wenn Sie jedoch ein Sprite anstelle eines animierten Sprite verwenden, müssten
Sie diese Schleife überprüfen lassen. Also denke ich, es ist einfach besser, es dort zu haben, nur für den Fall. Also lassen Sie uns auch die Animation hier oben nehmen und eine neue erstellen. Also lassen Sie uns auch wieder zum Animationsmenü gehen und Animation hinzufügen und ausführen. Und lassen Sie uns auch einen für den Sprung hinzufügen. Und wir werden später an den anderen arbeiten. Aber lasst uns das vorerst machen. So r1 und wir werden eine Track-Eigenschaft hinzufügen, verfolgen animierte Sprite-Animation. Und dann auf dem ersten Frame, wir wollen den Schlüssel einfügen, stellen sicher, dass er in der richtigen Position ist, ganz hier drüben auf der linken Seite. Und wir nehmen den Wert und wir ändern das, um zu laufen. Und natürlich wird dies die Jump Animation sein. Also in den Biss, Co-Versicherung, dass Keyframe zu springen. So können wir dieses Zeug etwas schneller machen wenn wir stattdessen unsere Animationen duplizieren. Also werde ich zu Animation Duplikat gehen, und dann können wir das in was immer wir brauchen umbenennen. Also lassen Sie uns eine weitere Animation sehen. Wir werden es wahrscheinlich einrichten. Benennen wir das einfach in den Kopf um. Und jetzt müssen wir die Looping nicht überprüfen. Wir müssen keinen Keyframe erstellen. Wir müssen nur den Wert hier ändern, um Animation zu treffen, und wir sind gut da. Das sollte also gerade genug sein. Lass uns voran gehen und in den Code eintauchen. Also werden wir eine e-num-Variable hier oben brauchen. Also werde ich Enums eingeben und wir können ihm einen optionalen Namen geben, also werde ich es Enum-Status nennen. Und dann, ich glaube, es sind die geschweiften Klammern hier, wir wollen Leerlauf setzen, rennen und springen. Also, was der enol im Grunde tut, ist, dass er eine menschenlesbare Station übersetzt, wie Leerlauf oder Sprung in einen ganzzahligen Wert, der damit assoziiert wird. Im Grunde können Sie sich das wie eine Position in einem Array vorstellen. Die EIDL ist hier die erste, so dass wird als 0 dargestellt werden. Wenn das Spiel tatsächlich läuft und R1 wird ein Eins
sein und springen wird ein zwei sein. Aber wenn wir einen Code ausgeben, müssen
wir diesen 012 nicht verwenden. Wir können nur State Dot AIDL verwenden, um diese Position innerhalb der Zustände zu referenzieren. Es macht es also einfacher zu verstehen, was versucht, wohin
zu gehen, wenn Sie zur Fehlerbehebung Ihres Codes kamen. Zusammen mit diesem, werden wir eine Variable für den aktuellen Zustand benötigen. Also werde ich var aktuellen Unterstriche Zustand setzen, und wir können dies einfach voreinstellen, um Punkt AIDL anzugeben. Also wirklich, das wird nur eine 0 sein, aber diese 0 bezieht sich speziell auf die 0 Position innerhalb dieses genug. Also bedenken Sie das im Hinterkopf. Das nächste, was wir tun wollen, ist
eine Möglichkeit zu bestimmen, was der nächste Zustand
für unseren Charakter sein wird , wenn wir Tasten drücken oder von der Kante bewegen oder so weiter und so weiter, wir wollen im Grunde herausfinden, wo die Charakter ist im Spiel und welche Aktionen zur Verfügung stehen sollten. Also werden wir eine neue Funktion nach dem Verschieben und Dias erstellen. Und wir werden es wählen nächsten Zustand nennen. So können wir einfach drücken Geben Sie ein paar Zeilen und erstellen Sie diese Funktion, Funktion wählen Sie nächsten Zustand. Und so eine der ersten Bedingungen für die
Bestimmung der Geschichte wird sein, ob die Charaktere auf dem Boden oder nicht. Einige der Charaktere in der Luft, als es in irgendeiner Art von Sprung oder fallenden Zustand
sein sollte . Sie können sogar Quittungen dafür machen, wenn Sie einen Grund dazu haben. Für diesen Charakter, glaube ich, wir werden nur einen Luftzustand haben
, der Jumps-Staat sein wird. Aber auf dem Boden kann
unser Charakter im Leerlauf sein, oder es kann auch laufen, je nachdem, ob es eine horizontale Bewegung und aus. Also lassen Sie uns zuerst die Hauptbedingung überprüfen, was sein wird, ist es auf dem Boden? Dies ist also ein kinematisches 2D-Skript, was bedeutet, dass wir Zugriff auf eine Funktion haben, die aufgerufen wird, ist auf dem Boden. Also im Grunde weiß dieses Skript bereits, wie man überprüft, ob sich direkt darunter Boden befindet. Grundsätzlich, wenn unser kinematischer Körper mit einer anderen Sache darunter kollidiert, indem
wir unsere Kollisionsform im Vergleichzu
Kollisionsformen überprüfen wir unsere Kollisionsform im Vergleich , wenn andere Dinge wie die Boden-Geländefliesen. Wenn das also der Fall ist, wenn es tatsächlich Boden direkt unter unserem Charakter gibt, wollen
wir enden, in irgendeiner Art von Sprüngen Zustand zu sein. Und das bedeutet, dass wir den Sprung zurücksetzen wollen damit unser Charakter später wieder springen kann. Also werde ich Sprünge gleich 0 setzen. Also für unseren Charakter wird die Fähigkeit haben, ein oder mehrere Mal zu springen. Und dies wird die Anzahl der Male darstellen, die der Charakter seit dem letzten Schlag auf den Boden gesprungen ist. Also lassen Sie uns tatsächlich diese Variable hier oben erstellen und so weit Sprünge voranzutreiben. Und das wird standardmäßig auf 0 gesetzt. Da vermutlich zu Beginn des Spiels, wollen
wir unserem Charakter die Möglichkeit geben, zu springen. Sprünge geht auf 0. Jedes Mal, wenn wir auf dem Boden sind, müssen
wir feststellen, ob wir in einen Sprungzustand,
einen Laufzustand oder einen Leerlauf gehen . Also wollen wir in einen Sprungzustand gehen, wenn wir den Sprungknopf drücken, während wir auf dem Boden sind. So können wir überprüfen, ob der Sprung und Port diese gedrückt. Also, wenn der Eingabepunkt Aktion gerade gedrückt wird, und dann werden wir nach Sprung suchen, was ich glaube nicht, dass wir tatsächlich als Aktion erstellt haben. Also werde ich weitermachen und das direkt nach dieser Linie tun. Und dann müssen wir auch überprüfen, ob Sprünge gleich 0 sind. Also, wenn der Sprung gedrückt wird, während der Charakter auf dem Boden ist. Also lassen Sie uns diese Sprungaktionen einrichten. Also Projekt, Projekteinstellungen, Eingabe-Map, kommen Sie hier nach unten. Lassen Sie uns die Aktion Jump hinzufügen. Denken Sie daran, Ihre Kapitalisierung. Es sollte die gleiche wie die Zeichenfolge sein, die Sie innerhalb des Skripts verwenden. Also lassen Sie uns einen Schlüssel hinzufügen. Ich werde nur die Leertaste lizenzierbar machen, drücken Sie Schließen. Und jetzt haben wir eine Sprungaktion, die mit diesem Eingabemanager überprüft werden kann. Also dann müssen wir den aktuellen Zustand einstellen, oder genauer gesagt, Zustand Punktsprung. Wenn wir also dieses Selbstbit zum aktuellen Zustand hinzufügen, können
wir sicher sein, dass wir den aktuellen Zustand dieses Objekts hier oben referenzieren. Wenn wir also dieses Selbst hier hinzufügen, können
wir sicher sein, dass sich dies auf
den aktuellen Zustand beziehen wird, der speziell an diesen kinematischen Körper hier oben angebracht ist. Das bedeutet also selbst Punkt aktuellen Zustand, der genau hier ist, was wir wollen. Also setzen wir das auf Punktsprung und wir haben andere Staaten, an denen wir arbeiten müssen. So können wir auch ein anderes setzen, wenn als wenn die erste Bedingung nicht erfüllt ist, dann ist dies unsere Alternative. Und wir wollen sehen, ob sich der Charakter horizontal bewegt. Das kann also entweder positiv oder ein negatives x im Grunde sein, solange es nicht 0 ist, könnten
wir absolute Geschwindigkeit größer als 0 setzen. Eine andere Möglichkeit, dass Sie so ziemlich das Gleiche schreiben können wäre die Geschwindigkeit nicht gleich 0. Wie auch immer Sie wollen es irgendwie das Gleiche schreiben. Und lassen Sie uns selbst Punkt aktuellen Zustand hinzufügen ist gleich Zustand Punkt auf. Also, wenn der Charakter nicht springt, aber er bewegt sich, dann sollte er im Laufzustand sein. Die letzte, für die wir jetzt haben werden, es wird nur Zustand DOT I auch sein, wenn diese anderen Bedingungen nicht erfüllt sind, aber die Charaktere auf dem Boden, dann wird es im Leerlauf sein. Also, wenn du dich nicht umziehst, bist du im Leerlauf. Und wir werden das noch nicht tun. Aber ich werde eine kleine Nachricht hinzufügen, um dies später zu schreiben. Also, wenn es nicht auf dem Boden ist, dann wollen wir vielleicht einen doppelten Sprung hier runter haben. Also in der Luft im Grunde können wir auch eine Double Jump Cannon Bewegung machen. Also werde ich sagen, Doppelsprung zu tun. Und ich werde nur hier Pässe passieren und im Grunde einfach mit dem Programm fortfahren. Und hier gibt es keinen Code, also überspringen wir ihn einfach. Als nächstes möchte ich eine Set-Funktion für unseren aktuellen Zustand erstellen. Wenn wir also den Zustand von ändern, sagen
wir Leerlauf, um zu springen, wollen
wir bestimmte Aktionen stattfinden. Nämlich, wir wollen
einige Aufwärtsbewegungen für unseren Charakter hinzufügen , wenn er in den Sprungzustand eintritt. Um das Springen im Spiel darzustellen, sollte
der Charakter nach oben bewegen. So können wir eine festgelegte Funktion bedeuten, dass, wenn wir den aktuellen Zustand ändern, können
wir bestimmte staatliche Interessen Aktionen auftreten. Also hier oben im aktuellen Zustand werde
ich dem Endsatz GET hinzufügen. Und dann nennen wir es aktuellen Zustand, nur Standard-Namenskonvention. Eine andere Idee, die ich im Sinn hatte, ich werde es nicht tun, aber du könntest es auch Interstate nennen. Ich denke, das könnte auch Sinn ergeben. Aber wir gehen hier runter und schreiben unsere Setter-Funktion hier unten unten. Ich werde eigentlich nur einen Hashtag setzen, Setter können hier einen Header für den Fall, dass wir später andere Variablen mit Settern haben, sie
einfach im gleichen Bereich enthalten halten. Also lassen Sie uns Funktion setzen aktuellen Zustand, und dies wird einen Wert haben,
im Grunde den neuen Zustand, in dem die Eingabe. Also werde ich einen neuen Unterstrich-Status schreiben ihn so unkompliziert wie möglich halten. Wenn wir also den aktuellen Zustand einstellen, der neue Zustand ein Sprungzustand ist, dann wollen wir, dass der Charakter springt nach oben auf dem Bildschirm. Also werde ich die Match-Funktion für
den neuen Zustandswert verwenden und überprüfen, ob dieser Zustand der Sprungzustand ist. Also können wir hier unten als zweiten Zeilenzustands-Punkt-Sprung verwenden. Das ist also der Wert, den wir abstimmen. Also, wenn der übergebene Wert Zustandspunkt-Sprung ist, dann wollen wir springen. Dies ist also eine Funktion, die wir hier nicht auch geschrieben haben. Und schließlich wollen wir den aktuellen Zustand auf den neuen Wert setzen, der übergeben wird. Wenn Sie also keinen benutzerdefinierten Satz von Funktionen erstellt haben, wäre
es
im Grunde, wenn Sie den Wert ändern, genau so, als wäre dieser aktuelle Zustand gleich einem neuen Zustand und nichts anderes, als der Setter ermöglicht es Ihnen, einen zusätzlicher Code, der auftritt, wenn dieser Wert geändert wird. Jetzt brauchen wir also eine Sprungfunktion. Das wird also wirklich einfach und unkompliziert sein. Gehen Sie hier zu gehen, schreiben Sie eine andere
Funktion, Funktionssprung und Semikolon. Nun, was wir tun müssen, ist
die y-Geschwindigkeit dieses Charakters zu ändern und einen Sprungimpulswert hinzuzufügen. Grundsätzlich die Menge an Bewegung die
wir nach oben auf dem Bildschirm hinzufügen möchten, damit sich der Charakter bewegt. Und das sollte ein sofortiger Schub sein. So viel Beschleunigung im Laufe der Zeit, oder zumindest wird es so für diesen Charakter sein. Wenn es eine Beschleunigung wäre, wäre
das eher ein Jetpack. Also lassen Sie uns einen Geschwindigkeitspunkt y machen. Und dies bezieht sich auf die gleiche Geschwindigkeit hier oben, da es keine Geschwindigkeitsvariable in dieser Funktion angegeben ist, wird
es standardmäßig auf die eines dieses Skripts. Also die Geschwindigkeit y. Und wir werden das sofort auf einen neuen Wert setzen, den wir schaffen werden. Und ich werde es nur Sprungimpuls nennen und das auf einen negativen Wert neu starten , weil wir wollen,
dass es auf dem Bildschirm nach oben geht. Das wird also nur die Menge sein, und das wird die Richtung sein. Negativ. Wert bedeutet, auf dem Bildschirm nach oben zu bewegen und wir springen. Wir werden auch den Sprungzähler erhöhen wollen. Also springen plus gleich 1. Dies ist also wichtig für den Fall, dass wir Doppelsprünge hinzufügen möchten, was wir später tun werden. Also lassen Sie uns diese Sprungimpulsvariable erstellen. Und ich werde es hier oben stellen, weil das etwas ist, das wir vielleicht ändern wollen. Es wird also ein Export-,
Float-, Var und Sprungimpuls sein . So verschiedene Charaktere gehen, um verschiedene Mengen zu springen. So können wir dies auf einen schönen und hohen Wert wie 600 setzen. Denken Sie also nach der Anfangsgeschwindigkeit daran, dass
dies bei jedem Frame um
diese Schwerkraft abnimmt , bis es die Endgeschwindigkeit erreicht oder der Charakter auf den Boden trifft. Es wird sich nur so schnell bewegen, und dann wird es langsamer werden und dann schließlich wieder auf die Erde zurückgehen. Okay, das sollten Sprünge hier runter sein, nicht springen. Und jetzt, wenn wir Play drücken, sollten
unsere Charaktere in der Lage sein, auf den Bildschirm zu springen. Die Animationen werden sich noch nicht ändern. Also, wenn wir ins Spiel gehen und wir versuchten, den Raum zu treffen, passiert nichts tatsächlich. Selbst wenn wir vom Rand fallen, können
wir deutlich sehen, dass der Charakter auf dem Boden ist, aber es ist eigentlich nicht die Registrierung der Charaktere auf dem Boden. Und der Grund dafür ist, dass es ein zusätzliches Argument gibt, das wir auf diese Bewegungsrutsche übergehen können, die die Richtung nach oben ist. Also in einem 2D-Spiel können
wir das einfach tun, indem wir Komma und dann einen Vektor zwei tun. Das bedeutet also, dass nach oben auf diesem Bildschirm unsere AP-Richtung sein wird. Und jetzt, da das eingestellt ist, können Sie die Werte für ist auf dem Boden,
ist an der Decke und ist an den Wänden, weil es weiß, in welche Richtung die Wände, die Decke und der Boden jetzt sind. Also lasst uns voran gehen und das Spiel erneut betreten. Und jetzt können wir den Weltraum treffen. Der Haltepunkt trifft für den Zustandssprung. Also lassen Sie uns das fortsetzen. Und wenn wir wieder da reingehen, können
wir sehen, dass der Sprung gut funktioniert. Wir können auch sehen, dass die Charaktere springen ist schnell anfangs, aber wie es zu diesem höchsten Punkt
kommt, verlangsamt sich und dann beschleunigen wir wieder nach unten. Und das ist, was Sie von einer Standard-Plattform wollen oder springen.
10. Animation und Switching Animationen: Okay, das nächste, worum wir uns kümmern werden, ist das
Setzen von Parametern in einem Animationsbaum, so dass wir diesen Animationsplayer tatsächlich zu
den richtigen Animationen wechseln können, abhängig von den Werten, die wir für diese Animationsbäume festgelegt haben . Im Grunde müssen wir dem Baum sagen, ob sich der Charakter nach links und rechts
bewegt oder in die Luft springt. Und dann lassen Sie diesen Baum herausfinden, welchen Animationszustand der Animationsplayer n setzen soll.
So haben wir den tatsächlichen Code, um zu steuern, wie sich der Charakter bewegen kann. Aber wir müssen auch den Animationsplayer und den Animationsbaum Seite der Dinge um zu steuern und wie es diese Grafiken
für den Player darstellt, aber im Grunde die Animation ändern. Also lassen Sie uns einen Animationsbaum hinzufügen. Ich werde mit der rechten Maustaste auf den Stammknoten in einem untergeordneten Animationsbaum klicken. Und diese Animation Baum muss Animation Player. Lassen Sie uns also unseren Animationsplayer dem Animationsbaum zuweisen. Und jetzt brauchen wir auch eine Baumwurzel. Es gibt also verschiedene Möglichkeiten, dies einzurichten. Aber ich denke für unser Projekt, das
einen Animationsknoten-Blendbaum verwendet , da der Wurzelbaum-Knoten funktionieren wird. Okay, das ist es, was ich vorerst mitmachen werde. So können wir im Mischbaum sehen, dass wir eine Ausgabe haben. Wir müssen also bestimmen, wie wir zu dieser Ausgabe kommen und welche
der Animationen die aktuelle Ausgabe für unseren Animationsplayer sein wird. In unserem Mischbaum wird
der erste Knoten, den ich n hinzufügen werde, übrigens jeder Rechtsklick sein, um Knoten hinzuzufügen, ich gehe nach unten, um Raum 1D zu mischen. Mit diesem Blendraum 1D arbeiten
wir im Grunde mit einem Parameter als Eingabe. Und wir werden den Animationsbaum
über den Parameterwert und das Player-Skript erzählen . Aber wir können diese Parameter sehen, wenn wir wieder auf den Animationsbaum klicken. Und Sie kommen hier runter und der Inspektor, Sie können sehen, wie Perimeter Raum 1D vermischen. Das ist eigentlich der Name unseres Parameters hier. Und der Wert. Das ist also die Überblendposition. Und Sie können das mit Parametern Schrägstrich Name
des Parameters und dann Schrägstrich Mischung Besitz setzen . Also in unserem Fall werden wir es auf negativ 101 setzen. Es Pixel-Kunst-Spiel. Sie werden keine Animationen wie bei einem 3D-Modell miteinander verschmelzen. Wir wollen also nur diese drei Werte. Und wir können ihm auch einen besseren Namen dafür geben. Also könnte ich diesen Wert x move oder x sinus nennen,
Sinus , der die Richtung entweder eine oder 0
oder eine negative für die Bewegung unseres Charakters darstellt . Und indem wir das hier in den Editor nehmen, können
wir feststellen, ob es Leerlauf oder Vaughn zeigen soll. Also lassen Sie uns den Editor hier öffnen und dann werden wir hier in Punkte hinzufügen. Also werde ich hier auf
der linken Seite Punkte erstellen und dann mit der linken Maustaste in der Mitte klicken, Animation im Leerlauf hinzufügen. Wenn also der Wert von x move auf 0 gesetzt ist
, wird es inaktiv machen. Also lassen Sie uns hier auf der rechten Anzeigenanimationslauf klicken. So können wir sehen, wenn wir das Diagramm betrachten, dass dies
mit einem Wert von eins hier auf der rechten Seite gesetzt ist . Die EIDL ist 0 und dann negativ 1. Wir wollen auch Run Animation machen. Also wird es immer noch laufen. Es wird es nur in umgekehrter Richtung tun. Wir wollen also, dass es die Laufanimation abspielt. Damit wir hier zur Wurzel kommen können. Und ich werde das mit dem Ausgang verbinden. Jetzt müssen wir nur diesen Parameter im Code setzen. Und der Animationsbaum wird in der Lage sein, dem Animationsplayer mitzuteilen , ob er ausgeführt werden soll oder ob er für die Animation im Leerlauf ist. Klicken wir also auf den Animationsbaum. Der Parameter, den wir noch einmal setzen müssen, ist dieses x bewegt. Also, wenn wir den Mauszeiger über Verrundungsposition zeigen, können
wir den vollständigen Pfad sehen, um es ist Umfang Schrägstrich x Unterstrich bewegen Schrägstrich Verrundung Unterstrich Position. Also, wenn wir jetzt zum Player-Skript gehen,
dann, nachdem die Geschwindigkeit eingestellt ist, entfernen Sie Folie, werden wir einige Animationsparameter setzen wollen. Also werde ich einen entsprechend benannten Funktionssatz n m Parameter erstellen. Und wir können hier runterkommen. Ich werde nur ein paar Zeilen eingeben und wir werden
es direkt unter diesem Physik-Prozess schreiben . So Funktionssatz und m-Parameter. Dafür müssen wir die Geschwindigkeit referenzieren. Aber wieder einmal können wir sehen, dass die Geschwindigkeit immer hier oben aufgestellt wird. Also müssen wir es nicht wirklich zu einem Parameter innerhalb dieser Funktion machen, wir können das einfach direkt referenzieren. Aber was wir jetzt brauchen, ist immer noch ein Verweis auf den Animationsbaum. Wenn Sie also einen der Knoten in
Ihrer Szenenhierarchie nehmen und ihn wirklich leicht innerhalb Ihres Skripts referenzieren möchten. Dann können Sie hier rauf kommen. Gehen wir über die Geschwindigkeit. Also jetzt hier oben müssen wir unbereit schreiben. Und was das bedeutet, ist, dass
wir, wenn das Skript startet, etwas tun müssen. Aber wir setzen das auf bereit mit einer Variablen. Wenn das Skript beginnt, machen
wir etwas mit dieser Variablen. Und die Variable wird Animation Unterstrich Baum sein. Das ist also der Variablenname. Aber was wir eigentlich hier wollen, ist ein Verweis auf den Animationsbaumknoten. Und die Art und Weise, wie wir das tun, ist, wir treffen gleich und dann setzen wir Dollarzeichen Animationsbaum. Dies wird also in
unserer Szenenhierarchie suchen und dann versuchen, den Knoten zu finden, der als Animationsbaum bezeichnet wird. Und wenn das Skript startet, wird
es diesen Knoten nehmen und ihn hier zuweisen. Und wenn das nicht bereit ist, wird
dies zugewiesen, sobald das Skript gestartet wird. Nun, da wir den Animationsbaum haben, können
wir Parameter auf dem Animationsbaum in unserer Set- und m-Parameterfunktion einstellen. Also werde ich Animationsunterstrichen behandeln Punkt-Set tun, weil wir einen Parameter setzen. Und jetzt brauchen wir den Pfad zum Parameter innerhalb dieses Knotens. Also wollen wir Parameter Schrägstrich den Namen des Parameters
, der meiner Meinung nach X move genannt wurde, und dann Schrägstrich Verschmelzungsposition. Und was wir dort setzen wollen, wird das Zeichen der Geschwindigkeit sein. Also wird es entweder 10 oder negativ sein und keine anderen Werte. Da wir nicht versuchen, tatsächlich zu mischen, das sind die Werte, die wir verwenden wollen. Also ist es 100%, entweder im Leerlauf oder 100% laufen und nicht versuchen, etwas Seltsames zu tun. Also lasst uns das Vorzeichen der x-Geschwindigkeit bekommen und das ist im Grunde dieser Wert. Und später werden wir mehr Anime-Parameter haben, aber das ist alles, was wir brauchen, da wir nur die x-Bewegung machen. Also lasst uns voran gehen und spielen und wir können uns nach links und rechts bewegen. Es funktioniert noch nicht ganz. Und ich denke, das liegt daran, dass der Animationsbaum nicht wirklich aktiviert ist. Also frei überprüfen aktiv den Animationsbaum. Jetzt wird es die Leerlaufanimation zeigen. Okay, wir können auch sehen, dass es in die Bewegungsanimation wechselt, aber erst, nachdem eine Sekunde aufgetreten ist. Also, was da los ist, ist, dass, wenn wir in den Animations-Player
springen und diese Animationen betrachten, dass sie nur einmal pro Sekunde aktualisiert werden. Daher muss die Foie Animation
derzeit stattfinden , damit sie zwischen Animationen wechseln kann. Also für uns ist das eine ziemlich einfache Lösung. Wir können uns einfach die Zeit jeder der Animationen nehmen und sie auf ¢0.05 setzen. All dies tut eigentlich, ist sicherzustellen, dass es in der richtigen Animation ist auf dem Animations-Sprite
abgespielt wird. Die Dauer spielt hier also keine Rolle, 0,05 für die Leerlaufanimation, die Sprunganimation. So drucken Sie 05 und stellen Sie sicher, dass R1 gibt es zwei. Also 0.05, lasst uns voran gehen und spielen. Jetzt können wir uns in unserem Spiel bewegen. Und wenn wir uns bewegen, wechselt sofort in diesen Stimmungszustand. Und wenn wir uns bewegen, bewegt es sich sofort fast sofort in den Leerlauf
zurück, nehmen höchstens 0,05 Sekunden, so dass so ziemlich gut funktioniert. Jetzt haben wir auch gesehen, dass sich der Charakter nach links und rechts bewegen kann, aber er passt nicht die Richtung an, nach der er gerichtet ist, wenn er sich nach links und rechts bewegt. Also brauchen wir eine weitere Funktion hier oben genannt Flip-Richtung anpassen. Und in diesem gehen, um die Eingabevariablen zu nehmen. Das ist also der Import von hier unten. Okay, wir können das Spiel tatsächlich stoppen, damit es keine Haltepunkte trifft. Also müssen wir den Code für nur Flip-Richtung schreiben. Ich werde hier unten eine weitere Funktion hinzufügen. So Funktion Flip-Richtung anpassen. Es wird einen Parameter nehmen und ich werde angeben, dass das ein Faktor zwei sein sollte. Also ein Semikolon Vektor 2 und dann beenden Sie diese Zeile mit einem anderen Semikolon. Was wir hier einchecken werden, ist im Grunde das Vorzeichen der Eingabe. Jetzt könnten wir auch das Vorzeichen der Zeichen aktuelle Geschwindigkeit überprüfen. Aber ich möchte, dass der Charakter die Richtung zeigt, in die der Spieler versucht, sich zu bewegen,
nicht unbedingt in die Richtung, in die die Charaktere aktuelle Geschwindigkeit geleitet wird. Nun, für diesen Charakter, wenn wir nur sofort 200 nach links oder 100 nach rechts bewegen,
die Bewegungsgeschwindigkeit, und es gibt nichts anderes, was darauf einwirkt. Es wird keinen funktionellen Unterschied geben, aber einige Charaktere haben vielleicht Beschleunigung, ob es nach rechts beschleunigt, weil Sie die Rate nach unten halten. Aber es hat nicht wirklich
die Geschwindigkeitsrichtung von links nach rechts geändert , weil es eine
beschleunigte lange genug hat oder es tatsächlich Richtung
ändern und wie es auf dem Bildschirm geht. Wie auch immer, wir werden verwenden, wenn Sinus des Eingangs X gleich 1 ist, was
im Grunde bedeutet, dass der Wert positiv in die richtige Richtung ist, dann wird das animierte Sprite seine Richtung nicht umkehren. So animierte Sprite Dot Flip H für Horizontal ist falsch. Unsere Standardrichtung wird falsch sein und Sie können dies immer ändern. Sie könnten auch eine
Standardvariable haben , wenn Sie etwas flexibler sein möchten. Aber wir gehen nur davon aus, dass wir das Gesicht unseres Charakters standardmäßig richtig
machen. Das sieht also richtig aus. Und unsere Alternative ist, wenn dieses Zeichen importiert
wird, dass x gleich negativem ist, da das Zeichen nach links drückt, dann sollte das animierte Sprite nach links schauen. Nein, nein, ich habe kein anderes. Wenn der Sinus hier 0 ist, weil, wenn es 0 gibt, gibt es keine Eingabe. Und wenn es keine Eingabe gibt, möchte
ich nicht ändern, in welche Richtung es geht. Es sollte nur stehen, wo es zugewandt war. Vor dem letzten Mal lassen wir die Tastatur los. Und wir werden tatsächlich diese animierten Sprite-Variablen vermissen. Also brauchen wir noch einen auf ready var hier oben. Genau wie beim Animationsbaum
ist das animierte Sprite in unserer Hierarchie für die Szene verschachtelt. So unready var, animierte Unterstrich, Spray gleich Dollarzeichen, animierte Sprite. Und das ist alles, was wir tun müssen, um darauf hinzuweisen. Beachten Sie, dass Sie, wenn Sie Dinge auf diese Weise tun, den Namen gleich halten sollten, sonst denke ich, dass Sie dort Probleme haben können. Aber wenn dies der Name des Knotens ist, wird
es darauf verweisen, dass genau so lange ,
wie dieser Knoten in dieser Hierarchie enthalten ist. Also, das sollte jetzt dieses Problem lösen. Gehen wir weiter und drücken Sie „Spielen“ und unser Charakter wird nun in die richtige Richtung gehen. Wir können auch springen. Und während wir springen, kann sich
der Charakter in die richtige Richtung stellen. Aber dafür spielt es noch nicht die Animation. Das wird also etwas sein, das wir im nächsten Video einrichten während wir auf unserem Animationsbaum gehen und sich anpassen, unser Zustand ist ein bisschen mehr.
11. Jump und Fall Animationen Setup: Als nächstes müssen wir den Animationsbaum so einrichten , dass wir das Wechseln in die Sprunganimation unterstützen können. Also lasst uns wieder in den Spieler eintauchen singen. Ich klicke hier oben. Und lasst uns auf den Spielerbaum klicken. So können wir derzeit sehen, dass wir nur eine linspace one-dimension haben, die diesen x move Parameter nimmt, um zwischen Leerlauf und Lauf zu gehen. Aber wir wollen einen Fall haben, in dem der Charakter in der Luft ist. Und dann, wenn es in der Luft ist, sollten
wir zwischen
steigenden und fallenden Zuständen wechseln , abhängig von der Richtung der y-Geschwindigkeit. So können wir die Ausgabe von dieser eindimensionalen nehmen, und dann können wir hier mit der rechten Maustaste klicken und eine Mischung drei erstellen. Also die Mischung drei ermöglicht es Ihnen, drei Eingänge zu haben. So können wir einen negativen Verschmelzungswert haben. Wir können den Standardeingabe-Standard haben
, der in diesem Fall unsere x Bewegung sein wird. Also werde ich mich dort einfach trennen und es direkt hier verbinden. Und dann haben wir den positiven Verschmelzungswert Fall. Also werde ich voran gehen und das so etwas wie y Unterstrichzeichen nennen. Sie könnten es auch y Unterstrichgeschwindigkeit nennen. Aber wir werden hier drei Werte bei negativem 101 haben. Wenn wir also den negativen Verrundungswert haben, bedeutet das, dass das Zeichen auf dem Bildschirm nach oben geht da negativ auf der Y-Achse ist. Und das bedeutet, dass wir die Jump Animation wollen. Also kann ich hier bei einer Animation mit der rechten Maustaste klicken. Und wir können einfach springen aus der Liste auswählen und diese in die negative Mischung einspeisen. Dann das Gleiche. Wenn wir eine positive Mischung Zeichen nach unten auf dem Bildschirm. Also wollen wir die fallende Animation verwenden. Klicken Sie also mit der rechten Maustaste auf die Animation, wechseln Sie zu fallen, die anscheinend noch nicht erstellt wurde. Also lassen Sie uns voran und wechseln Sie hier in Animationsplayer und erstellen Sie eine weitere Animation. Also nehme ich einfach dieses Idol und dupliziere es. Also, jetzt haben wir Leerlaufkopie. Ich werde dies umbenennen, um fallen als die Animation. Und wir nehmen einfach diese Animationssache, ändern den Wert von Leerlauf in die Herbstanimation. Da wir also die Animation dupliziert haben, haben
wir die Zeit der Animation bereits auf 0,05 Sekunden und beim Wiederholen eingestellt. Das könnte alles sein, was wir dort brauchen. Also zurück in Animationsbaum, können
wir die Blumenanimation auswählen. Vielleicht müssen wir tatsächlich die Animationsbox neu erstellen. Also werde ich mit der rechten Maustaste Animation hinzufügen. Und hoffentlich dieses Mal taucht es hier auf. Also haben wir die Herbstanimation und wir wollen dies mit einem positiven Verschmelzungswert verbinden. Also, jetzt habe ich drei Möglichkeiten sind ein Sprung, so dass der Verschmelzungsraum unsere Animation
basierend auf der x-Bewegung auswählen oder fallen als die andere Animation. Also lassen Sie uns dies verbinden, um hier auszugeben. Und lassen Sie uns diesen Schiebereglerwert bewegen. So können wir bei plus eins sehen, es ist eine fallende Animation, negative, wir haben die Sprunganimation. Und bei 0 wird es standardmäßig auf was auch immer die Ausgabe von Linspace 1D hier drüben ist. Also, jetzt müssen wir noch eine Sache tun, die ist, diesen y Sinus-Wert und Code zu setzen. Wenn wir also auf Animationsbaum klicken, können
wir den Umfang erweitern und wir können den Pfad zu diesem y Sinus sehen. Es wird also so ziemlich wie die x-Bewegung sein und nur Parameter schrägen den Namen der Variablen, wie er es hier eingegeben hat. Also y Unterstrich Zeichen und dann schließlich Schrägstrich Mischung Betrag. Beachten Sie, dass für den Verschmelzungsraum 1D der letzte Teil dieses Parameters die Verschmelzungsposition war. Aber für diese Mischung drei, es ist tatsächlich Mischung Menge. Also musst du dort vorsichtig sein. Okay, also gehen wir zurück in den Code und wir haben unsere Animationsparameter-Funktion hier. Fügen wir hier einfach noch ein bisschen hinzu. Also Animation Baum Punkt setzen Parameter und wir wollen y Sinus Schrägstrich Mischung unterstrichen Betrag. Und der Wert, den wir dafür tun werden, ist nur Sinusgeschwindigkeit Punkt y. Ich werde voran gehen und speichern. Aus Gründen der Konsistenz nehme
ich wohl den x-Zug und benenne das auch in x sinus um. Und dann stellen
wir im Animationsbaum sicher, dass dieser Parameter x sinus genannt wird. Also, wenn Sie es an einem Ort ändern, stellen Sie sicher, dass Sie es ändern und die andere als auch. Und jetzt können wir weitermachen und das Spiel neu starten und sehen, ob die Animationen korrekt abgespielt werden. Also lasst uns voran gehen und spielen. Okay, und das war's. Springen. Ok. So wechselt es zur Sprunganimation und wenn es fällt, hat
es die Herbstanimation. Also bewegt sich unser Charakter nach links und rechts und springt und fällt gut.
12. Signals: Okay, das nächste, was ich einrichten möchte, ist ein Label, das wir über unserem Charakter für
Debugging-Zwecke anzeigen können , um zu
wissen , welcher Zustand oder welche Animation der Charakter zu einem bestimmten Zeitpunkt ist. Also auf unserem Charakterobjekt werde
ich mit der rechten Maustaste klicken und einen untergeordneten Knoten hinzufügen. Und dann wird dies ein Beschriftungsknoten sein
, der technisch ein Kontrollknoten ist, aber Sie können ihn Kontrollknoten auf einem 2D-Knoten wie ein kinematischer Körper 2D setzen, wenn Sie möchten. Andernfalls würden Controller-Knoten im Allgemeinen auf dem Canvas gehen, was eine Art von Ihrer Benutzeroberfläche ist. Also werde ich hier auf Label klicken, und ich werde dieses Label irgendwo über unserem Spieler positionieren. Also lasst uns das hier raufschieben. Und weil es ein Kind des Spielers ist, sollte zusammen mit dem Spieler zu bewegen. Also vielleicht für den Label-Standard, kann
ich einfach keines hier oder so schreiben. Und dann nehmen wir die Ausrichtung für den Text und zentrieren ihn, nur damit er dort etwas schöner aussieht. Also, was wir mit diesem Label tun können, damit es
den aktuellen Zustand zeigt , dass der Spieler ist und ist ein Signal zu erzeugen. So in Sichtweite des Player-Skripts wird hier ein Signal erzeugen. Also unter festgelegtem aktuellen Status, wenn ein neuer Status gesetzt wird, werden
wir eine Möglichkeit erstellen, ihm das Label mitzuteilen, dass der neue Status festgelegt wurde. Eine Möglichkeit wäre also, einfach direkt auf das Label hier oben zuzugreifen, wie er es damit getan hat, und dann einfach den Beschriftungstext gleich dem, was auch immer der neue Wert ist. Aber ein anderer Weg ist, ein Signal zu erzeugen. Als Signal sendet grundsätzlich eine Nachricht und alles, was an dieses Signal
angeschlossen ist , wird in der Lage sein, darauf in irgendeiner Weise zu reagieren. Also, anstatt das Label oder der kinematische Body Player, der direkt über einander wissen muss. Das Label muss nur haben, das Label muss nur
eine Antwortfunktion auf das Signal haben , das vom Player ausgegeben wird, aber es muss nichts über den Player direkt wissen. In gewisser Weise entkoppelt das Ihren Code zwischen Ihren Objekten. Und dann ist der Verbindungspunkt das Signal selbst, das Sie verbinden können, um Code zu kaufen. Und Sie können auch eine Verbindung zu ziemlich einfach herstellen, indem Sie auf das Objekt klicken, das zu Knoten geht. Und dann können Sie hier eine Reihe von Signalen sehen, auf die Sie reagieren können. Wenn wir also ein Signal und das Player-Skript erstellen, erscheint
es hier drüben. Und dann können wir doppelklicken und die Notizen Abschnitt und nur
jedem anderen Objekt sagen , dass wir auf die Signale Emission reagieren wollen, um eine Funktion
zu haben, etwas mit den Daten zu tun, wenn dieses Signal emittiert wird. Also lass mich weitermachen und es einrichten und hoffentlich ergibt es Sinn danach. Also lassen Sie mich hier in den Code eintauchen. Also hier oben, werden wir ein Signal für
diese Spielerklasse erzeugen , wenn wir es innerhalb des Skripts emittieren wollen. Also füge ich hier ein paar Leerzeichen hinzu. Ich gebe Signal ein und ich schätze, ich nenne es geänderten Zustand. Und dann wird dies einen Wert für alle anderen
Skripte wie das Label-Skript haben , auf das reagiert werden soll. Also werde ich es einen neuen Staat nennen. Und das ist so ziemlich es, um dieses Signal einzurichten. Jetzt müssen wir nur dieses Signal aussenden. Also hier unten, und wir werden ein neues Signal aussenden, wenn sich der Zustand ändert. Also geben Sie Signal aus. Und dann setzen wir den Namen des Signals. So änderte sich der Zustand. Das können wir hier oben sehen. Und dann gibt es einige andere Standardsignale, denke
ich für diese Klasse. Aber wir werden die benutzerdefinierte verwenden, die wir gerade erstellt haben. Und dann brauchen wir die Parameter. Also werde ich in den neuen Zustand versetzen. Und dann können wir unser Skript speichern. Das ist so ziemlich es. Nun, wenn wir auf unseren Spieler klicken und wir gehen zu den Notizen Abschnitt in der oberen rechten und zusätzlichen Inspektor, können
wir sehen, dass dieser Spieler Punkt G, D hat ein neues Signal. Und dann können wir darauf doppelklicken, um sich mit dem Signal zu verbinden. also auf den Player klicken, können
wir nun auf den Knoten gehen und doppelklicken, wo es den geänderten Zustand hier sagt, das neue Signal, das wir gerade erstellt haben. Jetzt wählen wir ein Skript aus, mit dem Sie es verbinden können. Und es wird eine Empfänger-Methoden zu erstellen. Der Spieler gibt also das Signal mit einigen Parameterwerten aus, und dann hat das State-Label eine Empfängermethode, um darauf zu reagieren. Also lassen Sie uns auf Zustand Label verbunden klicken. Und jetzt haben wir diese Funktion auf Spieler geänderten Zustand. Also, wenn der Spieler seinen Status ändert, wollen
wir den Text dieses Labels setzen. Also könnte ich einfach Selbstpunkt-Text machen. Und so können
wir mit dem Text des Labels den neuen Zustand dort setzen. Also werde ich eine Zeichenfolge des neuen Zustands machen. Also, was auch immer Wert hier übergeben wird, wir wollen es nur in eine Zeichenfolge konvertieren, wenn es nicht bereits eine Zeichenfolge ist, und setzen Sie dies als Text. Also gehen wir zurück zu unserem Spiel und gehen Sie voran und drücken Sie spielen und sehen, ob das Signal funktioniert. Okay, wir müssen das S bekommen, also versuchen wir es nochmal. Wenn wir also voran gehen und Play drücken, können
wir sehen, dass die Enums als ganzzahliger Wert dargestellt werden. Also 0 für Leerlauf 14 herumlaufen und dann zwei zum Springen. Technisch gesehen funktioniert es einwandfrei. Aber hier könnte es nützlicher sein, den Namen der Enums anzuzeigen. Anstatt also 0 für Leerlauf zu sagen, haben
wir nur Leerlauf oben dargestellt. Wenn wir also zurück zur Player-Klasse gehen, wenn wir das Signal ausgeben, anstatt diesen neuen Zustand als Ganzzahl auszugeben, können
wir den String-Wert auch schieben lassen. Also, um das zu tun, werden
wir hier oben gehen. Und für diesen geänderten Zustand werde
ich tatsächlich zwei Parameter übergeben haben. Der erste ist also neue Zustände während und dann der zweite, der aktuelle ist
, könnte einfach eine neue Zustands-ID oder eine neue Zustands-Ganzzahl sein, etwas in diesen Zeilen. Also, jetzt hier unten unten, werden
wir immer noch den neuen Zustand übergeben, der der Integer-Wert ist. Aber wir werden auch auf den String-Namen des Staates zugreifen und das auch übergeben. So können wir das tun, indem wir auf den Namen dieses Zustands zugreifen. Das ist also ein Wörterbuch und wir können einfach Zustandspunktschlüssel machen. Und jetzt müssen wir die Array-Position übergeben, die dort sein wird, wo wir neuen Zustand finden. Also, wenn wir das tun und wir speichern, sollte
dies jetzt mit zwei Argumenten an das Statuslabel übergeben. Also, das geht dorthin. Und wir könnten diese Funktion wieder verbinden, wenn wir wollten. Ich denke, wir könnten einfach mit der Neutippung der Parameter davonkommen. Also neue Zustands-ID und dann neue Zustandszeichenfolge. Und wir werden diesen Wert einfach nehmen und das als neuen Text festlegen. Also jetzt wird unser Signal uns zwei Parameter geben, mit denen wir arbeiten können. Und wir kümmern uns nur um die Zeichenfolge, weil das ist, was wir über dem Player für Debugging-Zwecke
zeigen möchten . Lassen Sie uns also voran gehen und sehen, ob das tatsächlich funktioniert. Ich werde spielen. Und jetzt kommen wir ins Spiel. Okay, wir haben Leerlauf, Leerlauf und Springen. Das sollte also viel hilfreicher sein, als nur eine 0 oder eins oder zwei über dem Spiel erscheinen zu lassen.
13. Kamera folgen: Jetzt, da unser Charakter sich größtenteils bewegen kann, wird
eines der Dinge, die wir hinzufügen wollen, eine folgende Kamera sein. Derzeit ist die Kamera, die wir eingerichtet haben, nur auf diesen einen Bereich ausgerichtet und es ist statisch. Wenn wir also spielen, wird
es unserem Charakter überhaupt nicht folgen. So kann ein Charakter vom Bildschirm laufen. Und das könnte ein Problem sein, wenn wir zu diesem Teil kommen, wo wir unseren Spieler nicht mehr sehen können. In einigen Fällen möchten
Sie möglicherweise eine statische Kamera haben, abhängig vom Stil Ihres Spiels oder dieser bestimmten Szene. So können Sie tatsächlich zwischen verschiedenen statischen Kameras wechseln wenn Sie nur von Bildschirm zu Bildschirm bewegen
wollten, wie als einzelne Stufen. Aber wenn Sie eine Folge-Kamera haben wollen, lassen Sie mich Ihnen zeigen, wie es geht. Also haben wir unser Level und dann den Spieler hier unten. Und wir müssen dem Player eine Remote-Transformation hinzufügen, damit die Kamera 2D verfolgen kann. Wenn ich also mit der rechten Maustaste auf den Player klicke und einen untergeordneten Knoten hinzufüge, können
wir nach diesem entfernten Transformationsknoten suchen, tippen Sie einfach REM ein. Und hier haben wir Remote Transformation 2D. Also werde ich hinzufügen, dass in. Und jetzt hat diese entfernte Transformationsnotiz 2D eine Eigenschaft namens Remotepfad. Im Grunde weist der entfernte Pfad einem anderen Objekt an, diese Transformation zu betrachten, um sie zu verfolgen. In diesem Fall werden das die Kameras sein. Also lassen Sie uns die Kamera 2D zuweisen. Und das wird im Grunde alles sein, was wir tun müssen, um sicherzustellen, dass die Kamera dieser ferngesteuerten Transformation folgt. Und standardmäßig ist die Glättung ein Ein. Ich schalte das sofort aus und klicke auf „Play“. Also, wenn Sie nicht über Smoothing, dann wird die Kamera im Grunde perfekt folgen Ihre Charaktermenge. Und es wird keine Verzögerung zwischen der Bewegung der Charaktere und der Kamera geben. In manchen Fällen könnte es ein bisschen eine nachfolgende Verzögerung geben. So können Sie hier aktiviert überprüfen. Und je weniger Verzögerung du willst, desto mehr Geschwindigkeit wirst du erhöhen. Wenn Sie also möchten, dass es sehr langsam ist, wenn Sie dem Spieler folgen, dann würden Sie eine niedrigere Geschwindigkeit wollen. Der Standardwert beträgt fünf. Also lassen Sie uns voran und testen Sie es mit 10. Also lasst uns Play drücken und bewegen uns herum. Und du kannst eine Menge Jenkins sehen, ja, richtig? Also eine Einstellung, die wir verwenden können, die hilft, zu korrigieren , dass viel ist das GPU-Pixel-Fangen. Also, wenn wir in das Projektmenü oben links und dann Projekteinstellungen gehen, können
wir nach Pixelfang suchen und ich glaube, es ist unter Rendering 2D. Also können wir das einfach nachsehen. Und das wird viele unserer Anzeigeprobleme beheben. Also schließe ich das und lass uns weitermachen und wieder spielen. Und dieses Mal, wenn wir uns auf dem Bildschirm bewegen, sieht
es viel, viel besser aus. Also noch einmal, wenn das Folgende zu schnell ist, können
Sie versuchen, die Geschwindigkeit zu senken. Also fünf ist die Standardeinstellung. Lassen Sie uns zeigen, wie das aussieht. Und hier ist er im Grunde aus dem. Also, wenn ich aufhöre, mich zu bewegen, können Sie definitiv die Verzögerung dort sehen. Es liegt also an Ihnen, was Ihre persönlichen Vorlieben für Ihren Spielstil sein werden. Gehen wir weiter und schließen das da draußen. Und ich schätze, im Moment werde ich es einfach wieder auf 10 setzen. Also, das ist im Grunde alles, was Sie brauchen, nur eine Remote-Transformation und sagen Sie der Kamera, sie zu betrachten. Und du bist im Grunde gut, für unsere Folge-Kamera zu gehen und o zu bekommen.
14. Double: Hey, also momentan kann sich unser Charakter auf dem Bildschirm bewegen, es kann springen. Aber was wir vielleicht tun möchten, ist ein wenig zusätzliche Funktionalität zu unserem Charakter hinzuzufügen. Also, um sie bewegen sich um die Ebene ein wenig einfacher, Lassen Sie uns voran und fügen Sie in Doppelspringen. Also werde ich den Spielmodus verlassen und lassen Sie uns in das Skript für unseren Charakter gehen. Also innerhalb dieses Skripts können
wir einen neuen Zustand einrichten und ihn mit Pick next state wie zuvor darauf
umschalten lassen. Also, was wir im Grunde tun werden, ist, wenn die Eingabe gedrückt wird, werden
wir springen. Aber in diesem Fall wird es
ein Doppelsprung sein , weil der Charakter bereits in der Luft ist. Also, das wird, so für unsere Auswahl nächsten Zustand, es wird ähnlich sein wie hier,
wo, wenn Sprung gedrückt wird, wir springen eingegeben, aber wir werden überprüfen, wenn die Zeichen und die Luft, und Wenn der Charakter in der Luft und unterdrückten Sprung ist, dann werden wir einen Doppelsprung nur machen solange der Charakter seine maximalen Sprünge nicht getroffen hat. Also ist es auf dem Boden auf falsch gesetzt bedeutet, dass es hier runter kommen wird. So können wir einfach einrichten, wenn Eingabe Aktion gerade gedrückt wird. Und dann suchen wir nach einem Sprung. Und jetzt wechseln wir in den Double-Jump-Status, den wir noch nicht erstellt haben. Also Zustand Punkt-Punkt-Punkt-Sprung, doppelter Unterstrich Sprung. Und ich scrollen hier nach oben und wir fügen das einfach zu unserer Liste der Staaten hinzu. So doppelter Sprung. Was wollen wir also passieren, wenn der Sprung gedrückt wird? Nun, wir wollen, dass es springt, genau wie wir es mit dem regulären Jumps-Staat gemacht haben. Wir wollen auch, dass es springt, wenn wir einen Doppelsprung machen. Das könnte genau wie der erste Sprung sein, bei dem wir nur den negativen Sprungimpuls machen. Oder Sie können eine separate Funktion für einen Doppelsprung haben. Und vielleicht hat das einen anderen Sprungimpulswert. Im Moment werde ich es einfach hier unten einrichten, um nur
einen normalen Sprung in Bezug auf seine Bewegung zu machen . Also, wie wir Doppelsprung zu dieser kleinen Match-Anweisung hier hinzufügen können ist, dass wir nur ein Komma setzen und dann tun wir State Dot Double Jump. Und ich denke, wir können dort auch einen Platz haben. Klicken Sie auf Speichern. Also jetzt, wenn der Zustand Sprung oder Doppelsprung ist, werden
wir die Sprungfunktion ausführen. So können Sie einfach eine Liste von verschiedenen Zuständen haben, die bestimmte Aktionen zuordnen möchten. Das stimmt natürlich nur mit der Bewegung davon überein. Wir müssen immer noch den Animationsbaum für
den Wechsel zur Doppelsprunganimation einrichten . Aber eine andere Bedingung, die ich hinzufügen möchte, ist die
gerade gedrückte Aktion ist zu sehen, ob die Sprünge über der maximalen Anzahl von Sprüngen liegen. Weil unser Charakter wahrscheinlich zwei Mal springen kann, aber in der Regel nicht mehr als das. So können wir eine Max Sprünge Variable haben, könnte es auf zwei oder drei setzen, wie viele Sie wollen. Aber wenn wir dieses Set nicht haben, wird
der Charakter nur in der Lage sein, für immer zu springen. So können wir das eigentlich im Spiel zeigen. Ich gehe voran und drücke den Play-Button. Und fangen wir an zu springen. Also kann ich einfach weiter spammen den Sprungknopf und einfach weit über dem Level gehen. Generell wäre das bahnbrechend. Also lasst uns voran gehen und das schließen und eine Max Sprünge Variable hier oben haben. Also werde ich Integer var max Sprünge exportieren, und ich werde das standardmäßig auf zwei setzen. Dann, wenn wir in diese Situation laufen, wo wir es tun könnten springen, stellen
wir sicher, dass es nicht bereits diese Menge an maximalen Sprüngen erreicht hat. Also, das wird hier unten sein. Wenn wir erwägen, einen Doppelsprung zu machen. Wir wollen die Endbedingung, dass Sprünge kleiner oder gleich max Sprünge ist. Und wie wir wissen, wann immer wir die Sprungfunktion ausführen, die inkrementiert wird. Also drücken wir einmal auf Jump, um in die Luft zu kommen, und es sollte zu einem gehen. Wir machen den Doppelsprung und es sollte zu zwei kommen. Und Sie sollten nicht in der Lage sein, keine Sprünge mehr zu machen bis wir den Boden getroffen haben und dann auf dem Boden ist wahr, und Sprünge wird auf 0 gesetzt. Also lassen Sie uns voran gehen und spielen und während auf dem Boden, so kann ich einmal
springen und ich kann die Leertaste zweimal drücken, um zu doppelten Sprung. Okay, sieht so aus, als könnten wir immer noch für immer springen. Also schauen wir uns das an. Also denke ich, ich werde es einfach debuggen, indem ich die Anzahl der Sprünge auf die Konsole ausdrucke. Melden Sie sich hier an, die Ausgabe. Und mal sehen, was passiert, wenn wir spielen und dann halten wir auf den Sprungknopf drücken. Also 23. Okay, sieht so aus, als könnten wir zu drei gehen, aber nicht höher als das. Also, ja, das sollte eigentlich kleiner sein als die Anzahl der maximalen Sprünge. Und jetzt sollte der Charakter nur zweimal springen können. Also lassen Sie uns das Spiel wiederholen 12, okay, 123, nein, funktioniert nicht. Okay, also können wir nur zwei Sprünge machen. Wir haben Doppelspringen, aber es geht nicht mehr als das.
15. Double Jump Oneshot in Animation und Code: Das nächste, was wir tun müssen, ist,
die Doppelsprunganimation einzurichten , um mit dem Animationstrick zu arbeiten. Wenn wir also einen Blick auf das animierte Sprite in der Spielerszene werfen, können
wir sehen, wenn wir einen Blick auf diese Animationen , dass die Doppelsprunganimation hier ein Salto ist. Also werde ich sagen, dass der Charakter nur
einen Salto machen sollte , wenn wir die Leertaste drücken, um einen Doppelsprung zu machen. Daher wird dies etwas mehr sein, was wir eine One-Shot-Animation nennen würden. Und das können wir ganz einfach im Animationsbaum einrichten. Also bei einem Schuss wird einmal zu spielen und dann wird es
andere Animationen in Abhängigkeit von anderen Parametern, die wir gesetzt haben, fortsetzen . Diese eine Aufnahme wird also Vorrang vor den Standard-Sprung-, Fall-, Leerlauf- und Laufanimationen haben. Wenn wir also hier mit der rechten Maustaste auf das Knotendiagramm klicken, können
wir einen One-Shot hinzufügen. So werden Sie sehen, dass es zwei Ports hat. Einer für den einen Schuss in einem vierjährigen Standardeingang. Also werde ich diesen Verbinder zwischen der Mischung drei und unserem Ausgang nehmen. Dann werde ich das in die Eingabe umleiten. Und dann wird der eine Schuss mit dem Ausgang verbinden. Das bedeutet also, dass sie ein Schuss sind,
hat Vorrang vor allem anderen hier drüben. Wenn der One-Shot aktiv ist und wir wissen, dass er aufgrund
dieses kleinen Booleschen Parameters aktiv ist, den wir einstellen können, wenn dieser aktiviert ist, wollen
wir, dass er die Doppelsprunganimation abspielt. Also werde ich mit der rechten Maustaste auf das Knotendiagramm klicken, zur Animation gehen. Und dann hier, Lassen Sie uns die Doppelsprunganimation auswählen, verbinden Sie das in die eine Aufnahme, und lassen Sie uns einfach den Parameter umbenennen, den dieser eine Schuss verwenden wird. Wenn Sie also auf Animationsbaum klicken, können
wir den One-Shot Umfang hier sehen. Und lassen Sie uns einen Namen geben, der spezifischer ist. Also nenne ich es einfach Doppel-Unterstrich-Sprung. Ich denke, das ist ungefähr so klar, wie es möglich ist. Und wenn wir mit dem Mauszeiger über aktiv, können
wir sehen, dass der vollständige Pfad zu diesem Parameter ist Umfang Schrägstrich doppelten Unterstrich Sprung Schrägstrich aktiv. Also müssen wir diese Codierung in einer Minute einstellen. Aber bevor wir das tun, wenn wir einen One-Shot-Knoten haben, gibt es zwei Eigenschaften, die wir ändern sollten. Also, das ist Baden Zeit und verblassen Zeit. Für unsere Pixelart-Animation wollen
wir also keine Zeitverzögerung zwischen dem Eingeben einer Animation und dem eigentlichen Starten der Wiedergabe geben. Also wollen wir diese nehmen und es für beide auf 0 setzen. Wenn also der One-Shot aktiv ist, sollte das
Umschalten sofort erfolgen. Okay, jetzt können wir zum Code springen. Werfen wir einen Blick auf das. Wir werden mögen, bevor wir den Animationsbaum verwenden und einen Parameter setzen müssen. Aber diese Set- und m-Parameterfunktion wird jedes Physik-Prozess-Update ausgeführt. Das wäre also eine festgelegte Anzahl von Malen pro Sekunde. Aber die Sache ist, wir müssen diesen Animationsparameter nur auf true setzen, insbesondere wenn wir Doppelsprünge machen. Es wäre also sehr redundant, es hier einzufügen und eine Art von Überprüfung durchzuführen und es dann in jeder Sekunde auf aktiv oder falsch zu setzen. Also lasst uns hier runter auf den Grund kommen. Und ein viel besserer Ort wäre, es in die Mitte zu stellen. Wenn wir also einen neuen Zustand mit festgelegtem aktuellen Zustand eingeben, können
wir diesen Parameter B sitzen lassen, wenn wir den Doppelsprungzustand betreten. Also, wenn Sie
Ihren Zustand Dot Jump und State Dot Double Jump Matching noch nicht getrennt haben. kannst du jetzt tun. Also werde ich hier einen Doppelpunkt setzen. Und wir werden Staats-Doppelsprung machen. Und ich werde das unten bewegen. Das wird also jetzt seine eigene, separate Sache sein. Staatliche Punkt-Punkt-Punkt-Sprünge Doppelpunkt. Und natürlich werden wir immer noch wollen, dass es diesen Sprung macht, die Funktion des Sprungs. Aber wir wollen auch den Animationsbaum nehmen und den Parameter einstellen. Also der Umfang Name war Parameter Schrägstrich Doppelunterstrich Schrägstrich Schrägstrich aktiv. Und weil wir nur Doppelsprung betreten, wollen das auf wahr setzen. Das sagt also im Grunde dem Animationsbaum K. Spielen Sie den einen Schuss ab. Wir werden den Double Jump Salto machen, weil wir jetzt im Double Jump Zustand sind. Das letzte, was wir tun müssen, ist herauszufinden, wie wir diesen einen Schuss verlassen können. Also wird das Skript dies auf true setzen, aber wir müssen es auch auf ausschalten, damit es die anderen Animationen spielen kann, nachdem es fertig ist. So können wir das im Animationsplayer tun. Und wenn Sie die Doppelsprunganimation finden, sollte
sie auf 0,3 Sekunden eingestellt werden. Es spielt also sechs Frames bei 20 Frames pro Sekunde ab. Also machen wir die Animation 0,3 Sekunden lang. Und wir wollen auch die Animationsschleife deaktivieren, wenn das hier auf der rechten Seite ist,
denn das soll nur einmal abgespielt werden und dann Fertig stellen. Jetzt können wir hier ein wenig hineinzoomen und wir werden eine weitere Spur hinzufügen wollen. Wir werden den Parameter im Animationsbaum für
den One-Shot auf false setzen, wenn diese Animation beendet ist. Und natürlich das mehrere Möglichkeiten, wie Sie das tun könnten. Sie könnten das auch im Code hier tun. Aber das scheint mir bequemer zu sein. Also werde ich Spur, Eigenschaft,
Spur, Animationsbaum hinzufügen , wählen Sie den Umfang. Perimeter ist Doppelsprung aktiv. Und jetzt müssen wir dafür einen Keyframe festlegen. Also hier drüben bei 0,3 Sekunden, wenn diese Animation fertig ist, klicken Sie mit der rechten Maustaste auf Einfüge-Taste, und es wird bereits standardmäßig deaktiviert. Im Grunde genommen nimmt
es zu diesem Zeitpunkt den Umfang, den Doppelsprung aktiv
und setzt ihn auf false, was darauf hinweist, dass die Animation erledigt ist. Also danach gibt es einen Schuss wird falsch sein und es wird wieder zu der Mischung drei gehen, um auszuwählen, was die Ausgabe sein sollte. Also, wenn alles gut geht, sollte das alles sein, was wir tun müssen, um diesen einen Schuss einzurichten. Lassen Sie uns auf Play drücken und sehen, wo wir sind. Okay, Animationen zur Arbeit mit Jump und da ist unser Doppelsprung funktioniert wirklich gut. Eine Sache zu beachten, dass die Art und Weise, wie der aktuelle Code geschrieben wird, kann
ein Spieler bis zu zwei Mal springen, bevor er den Boden berührt. Also, wenn du hier abfällst, zählt
das nicht als Sprung. Wenn ich also abfalle und einen Doppelsprung mache, können
wir tatsächlich doppelte Sprünge in der Luft tun. Natürlich wird es nur einmal spielen, wenn der erste Doppelsprung noch läuft. Mal sehen. Okay, aber ja, wenn die Animation fertig ist und du diesen zweiten Pfeilsprung machst, dann wird es die zweite Animation dort machen. Also nur etwas, worüber man nachdenken kann. Vielleicht möchten Sie, dass Ihr Charakter in der Lage sein, das zu tun wo unabhängig davon, wie es in der Luft kam, Sie zweimal gesprungen oder Sie möchten
, dass es begrenzt ist, dass ein Charakter nur einen Doppelsprung in der Luft, Periode unabhängig davon, ob es von der Kante fiel oder in die Luft sprang. In diesem Fall könnten Sie eine Variable einrichten, wie Doppelsprung aufgetreten ist. Und wenn das falsch ist, dann lassen Sie den Doppelsprung. Und sobald Sie Doppelsprung eingeben, setzen Sie es auf true und nur zurücksetzen, wenn die, wenn der Charakter trifft den Boden. Andernfalls könnten Sie es tatsächlich mögen, wenn Sie Charakter zweimal springen können, unabhängig davon, es könnte Sinn für einige Spiele machen. Also nur etwas zu denken, aber so ziemlich für dieses Video, die Animation als One-Shot zu spielen scheint zu funktionieren. Also schätze ich, wir sind hier gut.
16. Waypoint für den verrückten Schwein: Als nächstes lass uns einen Feind für unser Jump'n'Run erschaffen. Also werden wir die Kunst für wütendes Schwein dafür benutzen. Und ich werde Kunst,
Pixelabenteuer für Feinde öffnen . Und da haben wir unsere unterschiedlichen Charaktersprites. So können wir auf jede von ihnen klicken und sehen im Grunde eine Vorschau der verschiedenen Animationen oben rechts. Um unseren neuen Feind zu erschaffen, wird
es ähnlich sein wie die Erstellung unserer Spielerobjekte. Also müssen wir eine neue Szene erstellen. Und die Wurzel dieser Szene wird natürlich ein kinematischer Körper 2D sein. Das bedeutet, dass, wie es sich bewegt,
etwas sein wird , das wir in Setup für uns selbst in einem Skript schreiben müssen. Also lasst uns zur Szene und zu einer neuen Szene gehen. Und dann für hier, Lassen Sie uns anderen Knoten und dann kinematischen Körper 2D. Also für diesen kinematischen Körper, Lassen Sie uns doppelklicken. Und wir können sehen, dass es im Grunde auf der Szenenansicht an Position 0,
x und 0 y zentriert ist. Und lassen Sie uns ein animiertes Sprite hinzufügen. Fügen Sie also untergeordneten Knoten und dann animiertes Sprite hinzu. Und wieder einmal, der Grund, warum wir animierte Sprites verwenden, ist, dass für das SART-Paket
alle Animationen in ihre eigenen, individuellen, geraden Texturen zerbrochen sind. Animierte Sprites erlauben uns, separate Texturen für verschiedene Animationen zu verwenden. Viel einfacher als es mit einem Sprite-Knoten wäre. Nehmen wir das animierte Sprite und ich werde einige Animationen dafür erstellen. Gehen wir auf die rechte Seite. So Frames oder drücken Sie auf die leere Schaltfläche und klicken Sie auf Neue Sprite-Frames. Lass uns das aufmachen. Und dann haben wir unser Animationsfenster hier unten,
das alles auf 20 FPS vorgibt. Und lassen Sie uns die erste Animation in Leerlauf umbenennen. Also werden wir auf diese Schaltfläche klicken, die wie
ein Gitter aussieht, um ich Bilder aus Sprite-Blatt hinzufügen und wir werden in Kunst gehen, Pixel-Abenteuer zu Feinden, wütendes Schwein, und ein Leerlauf. So können wir einfach schnell zählen, wie viele Frames hier drin sind. Ich habe neun. Also neun für horizontal, vertikal, und dann auf der rechten Seite, wählen Sie Alle Rahmen löschen, fügen Sie Frames hinzu. Und wenn wir spielen, sollten
wir in der Lage sein, unsere kleine Leerlaufanimation dort zu sehen. Jetzt müssen wir das nur noch für die anderen Animationen wiederholen. Also lassen Sie uns eine Laufanimation hinzufügen. Und Run wird
natürlich die Run-Frames nehmen . Also lassen Sie uns 3, 6, 9, 12 sehen. Also 12 horizontale, eine vertikale. Wählen Sie alle hinzufügen und machen Sie diese Perle 20 FPS. Also lassen Sie uns das aus dem Zeichen hinzufügen. Dies sieht aus wie etwa 16 nach dem anderen, oder wählen Sie alle hinzufügen. Und wir können einfach testen, dass es funktioniert, indem wir eine Autoplay für diese Animation haben. Nur sicherstellen, dass alles richtig zentriert scheint. Es sollte also ziemlich offensichtlich sein. Okay, als nächstes fügen wir einen Treffer hinzu und treffen 2, wenn der Feind Schaden erleidet. Und das sieht aus wie fünf Rahmen. Wählen Sie Alle löschen aus. Und dann müssen wir 20 FPS machen. Okay, es sieht so aus, als hätte ich es versaut. Lassen Sie uns also alle Frames löschen und stellen Sie sicher, dass sie eins durch eine horizontale,
eine vertikale getroffen werden, und fügen Sie diese hinzu. Okay, das sollten wir sehen. Jetzt fügen wir zwei hinzu. Also werde ich das Gleiche nach Frames hinzufügen. Also fünf horizontale, eine vertikale, fügen Sie sie hinzu und es stellt sicher, dass FPS 20 ist. So können wir zwischen unseren verschiedenen Animationen gehen und alles sollte reibungslos abgespielt werden. Das nächste, was wir tun müssen, ist zu bestimmen, wie sich dieser Charakter bewegen wird. Also meine Idee für dieses wütende Schwein und was eigentlich umbenennt es dort und speichert es als neue Szene. So wütend Schwein, oder speichern Sie es in Charaktere, weil wir hier einen Feind-Ordner erstellen können, nur für den Fall, dass wir am Ende mit viel. Und dann wütende Schwein mehr gesehen, speichern Sie es dort drin. Mein Konzept für dieses Schwein Charakter wird also sein , dass es standardmäßig zwischen zwei verschiedenen Wegpunkten Forschung laufen wird, so dass es sich nur links und rechts bewegen kann. Keine vertikale Bewegung, zumindest ohne Schwerkraft. Und wenn ein Spieler erkannt wird, dann statt zu gehen, wird
es zu einem wütenden Lauf wechseln. Also setzen wir das später auf Lauf erhöhen die Bewegungsgeschwindigkeit des Charakters. Und wenn der Feind hier auf den Spieler stößt, dann wird der Spieler etwas Schaden erleiden. Und das sind im Grunde die Gewohnheiten für die wütenden Schweine. Also ein wirklich einfacher Feind hier. Also werde ich den Standardzustand wieder in den Leerlauf stellen. Und wir können diesem Charakter ein Skript hinzufügen. Also werde ich einfach mit der rechten Maustaste Attached Skript, und das wird Angry pig dot h gd genannt werden. Also für jetzt, wird
dies nur kinematischen Körper 2D erweitern. In der Zukunft möchten wir vielleicht die Vererbung verwenden, um ein basisfeindliches Skript zu haben, und dann können andere Feinde
davon erben und im Grunde einige der grundlegenden Funktionen erhalten. Also müssen wir es nicht auf jeden Feind schreiben. Aber jetzt legen wir alles in das wütende Schwein. Und dann, wenn wir es später in eine höhere feindliche Klasse nehmen müssen, dann machen wir das separat in einem anderen Video. Also jetzt für die Bewegung, über die ich gesprochen habe, werden
wir eine Art Wegpunkt für unseren Charakter aufstellen müssen. Also, wenn Sie nicht bereits, Lassen Sie uns voran und speichern Sie die Szene als Senior und Enemies Ordner. Also werde ich hier rauf gehen, Szene speichern unter. Und ich setze es in Charaktere, Feinde, wie Sie hier sehen können. Stellen Sie außerdem sicher, dass Ihr Skript aus organisatorischen Gründen im selben Ordner
gespeichert ist. Und jetzt gehen wir zu Level 1. Und ich werde hier nur eine Kopie des Feindes fallen lassen. Um also unseren Charakter bewegen zu können, müssen
wir ihm einige Wegpunkte geben, um sich zu bewegen. Es gibt also ein paar Möglichkeiten, wie wir das tun können. Ich denke, was Sinn ergeben könnte, ist, einige Wegpunkte innerhalb dieses Levels zu , die unsere Feinde als einen Punkt nutzen können, um sich zu bewegen und sie dann als Liste zuzuweisen. Immer wenn wir eine Instanz unseres Objekts erstellen, können
wir sie nur hier in
einem Array zuweisen , für welche Position hätte sich bewegen sollen. Also in der Ebene werde ich mit der rechten Maustaste hier oben klicken und ich werde einen neuen Knoten hinzufügen. Also beginnen wir mit dem Knoten 2D wie offensichtlich, weil wir wollen, dass diese Liste der Wegpunkte zusammen mit der Ebene
bewegen, wenn wir jemals auf die Level-Position aus irgendeinem Grund zu bewegen. Also werde ich das Wegpunkte nennen. Und dann im Gange Punkte, werden
wir einige Position zwei d hinzufügen. Also für diese, ich denke, ich kann sie einfach Wegpunkt
eins umbenennen und dann ein paar Mal duplizieren und wir werden einfach Wegpunkt 1, 2, 3, so weiter und so weiter. Und er hatte nur dafür gesorgt, dass du sie herumschleppst, aber sie sind keine Kinder voneinander, also sollten sie ihr eigenes Ding sein. Und dann können wir die Position für diese Wegpunkte einrichten, wenn wir uns diesen Stapel von Objekten
ansehen und wir wollen
sicherstellen , dass wir den von uns ausgewählten verschieben. Sie können Alt gedrückt halten. Und dann sorgt das dafür, dass der Wegpunkt
gewählt und bewegt wird , weil wir hier oben einen Wegpunkt haben. Wenn wir also Alt gedrückt halten, greifen
wir das Richtige. Fügen wir einen Wegpunkt hinzu. Sagen wir einfach genau dort. Und dann gehen wir Wegpunkt 2. Und wir werden das einfach aus dem Stapel zwei ziehen. So wird unser Charakter in der Lage sein, zwischen dort und da hin und her zu schlagen. Und dann bekommen wir 0,3. Noch keine Notwendigkeit dafür, aber vielleicht wird es für die Zukunft relevanter sein und ich werde es einfach dort drüben ablegen. Also, jetzt wird unser wütendes Schwein eine Liste von Positionen brauchen, die heute seine Wegpunkte waren. Öffnen wir also das Skript und lassen Sie uns einen Export weit erstellen. Dies wird also ein Array von Position 2D sein und wir werden es var Wegpunkte nennen. Versuchen wir, das zu retten. Okay, also sieht es nicht wirklich so aus, als würde die Verwendung eines Arrays
des Positions-2D-Knotentyps für uns funktionieren. Also eine andere Alternative und mein Kopf ist, hier Knotenpfad zu verwenden. Also keine Pfade wird der relative Pfad ein Knoten sein. Und dann, wenn das Spiel tatsächlich läuft, können
wir den Knoten von diesem Knotenpfad abrufen und dann die Position dieser Knoten in der Spielwelt erhalten, während das Spiel läuft. Also zu diesem Zeitpunkt sollten wir in der Lage sein, die Größe
unseres Arrays hier auf der rechten Seite zu erhöhen und dann die verschiedenen Knoten zuzuweisen. Also wollen wir Wegpunkt 1 und dann Wegpunkt 2. Und dann wird es für diesen Charakter sein. Also jetzt in dem wütenden Schwein Skript, müssen wir sicherstellen, dass, wenn das Spiel läuft, dass unser Charakter zwischen diesen beiden Punkten hin und her bewegt. Und es wird mit dem ersten Wegpunkt beginnen. Also sollten wir hier eine Variable haben, um zu verfolgen, an welchem Wegpunkt es ist. Also lassen Sie uns var Wegpunkt-Index tun. Und das wird bei 0 beginnen, was den ersten Wegpunkt in der Liste bedeuten wird. Und so können
wir zusätzlich eine Wegpunktposition haben. Dies sind also die XY-Koordinaten für den Ort, an dem sich dieser Wegpunkt befindet. Also brauchen wir es nur einmal zu bekommen. Und jedes Mal, wenn die Physik-Prozessfunktion läuft, kann
sie sich einfach in diese Position bewegen, bis sie an diese Position gelangt. Apropos, wir werden nicht Prozess dot-dot-dot verwenden mehr Funktion Physik-Prozess dot delta wollen. Also lassen Sie uns das für jetzt passieren. Also, wenn das Spiel beginnt, Lassen Sie uns tatsächlich voran und erhalten die Position des ersten Wegpunktes. Also werden wir auf bereit zu spezifizieren, dass, wenn das Spiel beginnt, etwas hier passieren wird, oder genauer gesagt, wenn das Skript beginnt, was vermutlich ist, wenn dieser Charakter in das Level geladen wird. Also die Wegpunktposition, wir werden einen get Knoten machen und wir werden das Wegpunkte-Array haben. Also da oben. Und wir müssen in den Index setzen, den wir zu bekommen versuchen. Also Wegpunkt-Index zu Beginn dieses Spiels,
Angenommen, dieser Wegpunkt-Index ist 0, dies erhalten Sie den Knoten an dieser Stelle. Also, nachdem wir den Knoten bekommen
haben, brauchen wir nur die Position dieses Knotens. Also lasst uns das hier rein und wir könnten
das testen , indem wir einen Druck auf der Wegpunktposition machen, dann können wir dieses Level mit dem wütenden Schwein darin starten. So hat das wütende Schwein derzeit keine Kollisionsformen, aber das sollte für jetzt gut sein. Also lasst uns voran gehen und spielen, okay, und wir können sehen, dass wir tatsächlich die Position dieses Wegpunktes bekommen, was gut ist. Und wir können dies tatsächlich in eine Funktion verwandeln, die wir
jedes Mal verwenden können , wenn wir die neue Wegpunktposition bekommen und festlegen müssen, könnten
wir es tatsächlich zu einer Reihe von Funktionen machen. Also lassen Sie uns setzen Wellenpunkt, ich denke, ich werde Index sagen. Und dann machen wir die Funktion hier unten. Also Funktion gesetzt, Wegpunkt-Index. Und natürlich würden wir den Wert des neuen Index übergeben. So Wegpunkt-Index wird gleich diesem Wert sein. Aber dann werden wir auch sagen, dass Wegpunkt-Position. Nun, im Grunde nur diese Reihe hier oben. Also lasst uns das da drinnen und dann den Wert
durch den Wegpunkt-Index an dieser Stelle ersetzen und
sagen, dass dies oder das hier gleich wäre. Aber jetzt verwenden wir nur den Wert, der in diese Funktion übergeben wurde, nur für den Fall. Also, wenn wir jetzt den Wegpunkt-Index sagten, setzen
wir auch die Wegpunkt-Position. Also, ich denke, wir könnten das wirklich löschen, machen dies zu einem ehrenamtlichen Var. Also, wenn das Spiel geladen wird, wird
es den Wert auf 0 setzen. Und wir können dieses Bit loswerden, da das schon zugewiesen wird. Theoretisch sollte dies ein Vektor sein, glaube
ich, und lass uns voran gehen und sehen, ob das funktioniert. Also werden wir sehen, ob wir zu diesem Punkt kommen, wenn das Spiel startet. Nun, da diese Funktion da ist, können
wir tatsächlich nur dieses Bit
entfernen lassen und wir brauchen dies nicht, um ein Ion bereit zu sein. Aber was wir tatsächlich tun können und das auch nicht entfernen. Wir werden nur haben, wenn das Spiel hier beginnt, und wir werden einfach den Wegpunkt-Index auf den Startwert setzen. Sagen wir also Startwegpunkt. Und wir könnten dies tatsächlich zu einem Export weit machen. Also werde ich diesen Export und var Ausgangspunkt machen. Und wir werden das standardmäßig auf 0 setzen. Also, jetzt in dem Skript beginnt, wird
es den Wegpunkt-Index an dem Startwegpunkt starten. Und als Ergebnis des Verkaufs, Es wird auch die Wegpunktposition setzen. Okay, also müssen wir tatsächlich Selbstpunkt-Wegpunkt-Index
hier setzen , um sicherzustellen, dass das korrekt läuft. Okay, und jetzt kommt es hier runter. Es sagt also, dass ungültiger Get-Index natürlich ist, weil ich dies auf fünf zum Testen setze. Und jetzt können wir es mit dem Startwegpunkt steuern. Und dieser Wert kann hier festgelegt werden. Wenn Sie also möchten, dass sich das wütende Schwein nicht zum ersten Wegpunkt,
sondern zum zweiten Wegpunkt bewegt , könnten Sie hier einfach
die Array-Position angeben und von diesem entscheiden. Grundsätzlich jedes Mal, wenn wir den Wegpunkt-Index ändern, werden
wir auch die Wegpunkt-Position ändern. Also jetzt müssen wir nur die Geschwindigkeit einrichten und bewegen und sicherstellen, dass sich der Charakter zwischen diesen beiden Punkten bewegt. Also lasst uns hier nach oben gehen und eine Bewegungsgeschwindigkeit Variable erstellen. Also werde ich Exportfluss, Balkenbewegungen Geschwindigkeit machen, und ich werde dies einfach willkürlich auf 200 für jetzt für die Zukunft setzen. Lassen Sie uns auch, während wir dabei sind, eine Laufgeschwindigkeit
hinzufügen. Das wäre also die schnelle Geschwindigkeit, wenn das wütende Schwein
tatsächlich wütend ist , um Geschwindigkeit und 300 laufen zu lassen. Und jetzt machen Physik-Prozess, wollen
wir, dass der Charakter zwischen diesen beiden Punkten bewegt. Wir müssen also die Richtung zwischen dem Charakter und
dem aktuellen Wegpunkt betrachten . Also natürlich, wie bei vielen Dingen, gibt es ein paar verschiedene Möglichkeiten, wie wir dies tun können. Also lassen Sie uns beginnen, indem Sie die Richtung zwischen dem aktuellen Charakter, sie wütend Schwein, und dem Wegpunkt. Also werde ich eine Bardenrichtung machen. Und dann lasst uns die Selbstposition machen. Und dann für diesen Vektor machen
wir Richtung zwei. Und dann müssen wir ihm einen anderen Vektor geben. Also, natürlich brauchen wir die Wegpunktposition, okay? Und jetzt, wo wir eine Richtung haben, können
wir auch die Entfernung bekommen. Also machen wir es tatsächlich Entfernung x, weil wir uns nur wirklich um den horizontalen Abstand kümmern, nicht einschließlich, wie weit er vertikal ist, weil unser Charakter nie aufspringen wird. Verwenden wir also den absoluten Wert der Selbstposition x und dann minus den absoluten Wert der Nicht-Selbstposition x, aber unsere Wegpunktposition dot x also sollte dies der Abstand zwischen den beiden Punkten sein, nicht für Richtung, und dann wäre dies die Richtung. Was wir also tun werden, ist, wenn die Entfernung zum Wegpunkt über einer bestimmten Schwelle liegt, dann werden wir uns weiter zu diesem Wegpunkt bewegen. Und wenn es unter dieser Schwelle liegt, wechseln
wir zum nächsten Wegpunkt und etwas, auf das wir uns bewegen können. Also, wenn der Abstand x größer ist, und wir könnten sagen, größer oder gleich dann. Und wir könnten dies so etwas wie Wegpunkt nennen, Schwelle sind eigentlich Wegpunkt angekommen Entfernung. Ich denke, es macht ein bisschen mehr Sinn in meinem Kopf. Also, wenn die Entfernung größer ist als der Wegpunkt angekommen Entfernung, dann werden wir in Richtung Wegpunkt zu bewegen. Sonst. Wir werden Wegpunkte wechseln. Also lasst uns den Wegpunkt hier oben auf Distanz setzen. Also Exportfluss, unser Wegpunkt kam Entfernung. Und ich werde das nur als 10 für jetzt erstellen. Also, um auf den Wegpunkt zu gehen, müssen wir eine Geschwindigkeit bekommen. Und wir könnten dies tatsächlich zu einer Variablen machen,
ist es notwendig, sie in anderen Funktionen zu referenzieren. Die Geschwindigkeit wird also gleich einem Vektor zwei sein. Und der x-Wert wird die Bewegungsgeschwindigkeit mal den Sinus der Richtung Punkt x sein. Unabhängig davon, was genau dieser Richtungswert ist, kümmern
wir uns nur darum, ob er positiv, negativ oder 0 ist. Also im Grunde Zeichen oder irgendwie konvertieren Sie das in entweder positive. Negativ eins oder 0, was bedeutet, dass die Bewegungsgeschwindigkeit konsistent entweder positiv 200,
negativ 200 oder 0 sein wird . Und dann fügen wir ein Komma hinzu. Der zweite Wert wird also eine Schwerkraft sein. Aber ich denke, im Moment werden
wir nur tatsächlich, wir können einfach im Grunde in die Player-Skripte schauen. Also werden wir die gleiche Art von Sache verwenden. Mal sehen. Ich werde diese ganze Zeile hier kopieren. Also die aktuelle Geschwindigkeit und wir fügen die Schwerkraft hinzu, aber wir schließen es an der Endgeschwindigkeit. Und das wird nur konsistent zwischen dem Spieler und den anderen Feinden im Spiel sein. Also stoppen wir das im Grunde genau da drin. Und jetzt hat unser Charakter Schwerkraft basierend auf den Spieleinstellungen. Okay, also lassen Sie uns unseren kinematischen Körper bewegen und schieben. Und wir werden es mit der Geschwindigkeit bewegen. Und wir wollen sagen, Vektor zwei Punkt nach oben. Ich werde wahrscheinlich nicht allzu relevant für einen Feind wie diesen sein. Aber wenn wir jemals überprüfen müssen, ob sich der kinematische Körper auf dem Boden befindet, dann ist es wichtig, die Aufwärtsrichtung eingestellt zu haben. Also besser, das zu haben, als es nicht zu haben, denke ich. Sonst wollen wir Wegpunkte wechseln. Also müssen wir herausfinden, auf welchen Punkt wir umsteigen. Und zu wissen, dass wir die Größe des Arrays kennen müssen,
im Grunde, wie viele Wegpunkte gerade darin sind. Also nur für den Fall, dass dies etwas ist, das während des Spiels ändern würde, ich denke, wir werden es einmal bekommen jedes Mal, wenn es zu diesem Punkt kommt. Lassen Sie uns also die Größe dieses Arrays finden. Also taube Wegpunkte, Wegpunkte, Punktgröße. Und, und dann werden wir den aktuellen Index überprüfen. Also, wenn Wegpunkt-Index kleiner ist als die Anzahl der Wegpunkte, dann werden wir es erhöhen. Also Wegpunkt-Index gleich eher plus gleich 1. Andernfalls, wenn der Wegpunktindex tatsächlich gleich oder über der Anzahl der Wegpunkte ist, dann müssen wir ihn auf 0 zurücksetzen. Also Wegpunkt-Index gleich 0. Und dann wird dieses Bit uns erlauben, durch die Wegpunkte zu schleifen. Eine Sache, die wir brauchen, um diese Geschwindigkeitsvariable zu einem Vektor auf 0 zu initialisieren. Okay, das bedeutet also, dass dies mit den Werten beginnen wird, die 0 sind. Und auch unser Charakter wird eigentlich brauchen, um eine Kollisionsform zu haben ,
damit jede dieser physikalischen Funktionen wie Bewegungen daran arbeiten kann. Also lassen Sie uns voran und fügen Sie dem wütenden Pick eine Kollisionsform hinzu. So Kollision geformt 2D. Ok, und lassen Sie uns eine Rettung geben. Lassen Sie uns eine rechteckige Form machen. Halten Sie es schön und einfach. Und dann erhöhen wir die Größe dieser Kollisionsform
, so dass sie mit dem Boden interagieren kann. Und ich werde es aushalten, etwas
ausstrecken. Und ich werde in die Transformation gehen und ihre Position ein paar Pixel nach unten anpassen. Ich werde ziemlich wichtig sein, dass diese Kollisionsform Position der Bodenfüße
entspricht. Also lasst uns hier spielen. Und wir können sehen, sind wütend Schwein war in der Lage, diese linke Position zu bewegen. Es bewegt sich also richtig und gleitet entlang des Bodens. Der Kollisionsschlaf scheint ungefähr gut zu sein. Es hat das richtige Pixel, direkt über dem Boden. Also, das ist alles gut. Und jetzt müssen wir nur herausfinden, warum ist es nicht auf die zweite Position gewechselt? Dieses wütende Schwein hat hier zwei Positionen. Also werde ich ein paar Haltepunkte setzen. Immer wenn sich der Wegpunkt-Index ändert. Lass uns Play drücken und mal sehen, was passiert ist. Okay, also kommen wir hierher, wo der Wegpunkt-Index um eins steigt. Also lasst uns in diese nächste Funktion eintauchen. Okay, wir verwenden keinen self.age Wegpunkt-Index. Also müssen wir das oder die Setter-Funktion tun, um dort tatsächlich auszulösen. So können wir jetzt spielen und sehen, ob das funktioniert. Okay, ungültiger Erhalte Index 2 auf Array. Also hätte nicht mit
zwei kommen sollen, wenn der Wegpunkt-Index kleiner als die Anzahl der Wegpunkte ist. Ok? Also sollte es Anzahl der Wegpunkte minus 1 sein, okay? Weil dies eine Zählung ist und dann eine Array-Position ist. Und denken Sie daran, dass unheimliche beginnen bei 0 und das Zählen beginnt von eins. Also müssen wir ein Minus eins dort setzen, um sich darauf einzustellen. Also, wenn wir jetzt fließend treffen, sollte
unser Charakter okay sein. Also, wenn man sich den Code anschaut, bleibt Schwein hier stecken. Und dann, wie wir sehen können, wechselt
es ständig zwischen dem ersten und dem zweiten Wegpunkt. Okay, hier können wir im Code sehen, dass dieses Bit hier nicht funktioniert. So können wir hier unten sehen, dass, wenn der erste Wegpunkt erreicht
ist, er zum zweiten Wegpunkt wechselt. Und dann ist dieser Abstand x ein negatives 173. Also wollen wir nicht, dass dies jemals negativ ist, also geht es ein bisschen weg davon, dies zu tun, wäre eigentlich, zwei Vektoren zu erhalten und sie mit der Entfernung zu vergleichen, um zu funktionieren. Also lassen Sie uns einen Vektor zwei der self.position Punkt x machen und wir werden 0 für das y sagen. Wir werden das für beide Vektoren tun, eine Entfernung zwei und dann Umkreisvektor zu Wegpunkt Position x und dann 0. Okay, also brauchen wir tatsächlich Wegpunkt-Unterstrichposition Punkt x. Wenn wir es
so machen, erstellen wir
im Grunde zwei neue Vektoren und der y-Wert ist derselbe. Das einzige, was zu vergleichen ist, ist die x-Positionen dieser beiden Vektoren. Und eine Distanz zwei wird richtungsunspezifisch sein. Also, wenn wir es auf diese Weise tun, sollten
wir einen plus 173 Wert anstelle eines negativen erhalten. Und wir könnten eigentlich, naja, müssen
wir nicht wirklich, wir können einfach spielen. Und sehen Sie, ob es funktioniert. Also lassen Sie uns spielen, okay, und jetzt können wir sehen, dass unser Charakter tatsächlich zwischen den beiden Punkten bewegt. Das ist also im Grunde das, was wir wollen. Ich meine, das bewegt sich ziemlich schnell. Also möchte ich das vielleicht ganz deutlich ablehnen. Also gehen wir zur Bewegungsgeschwindigkeit, machen es 100, die Laufgeschwindigkeit 200. Und auch, äh, wir wollen die Richtung dieses wütenden Schwein umkehren. Wenn es sich also nach links bewegt, drehen
wir nach links und einer bewegt sich nach rechts, wir drehen nach rechts, so dass wir
das im Code ziemlich leicht tun können , wie wir es vorher getan haben. Also, ich schätze, wir könnten hier unten sagen, wenn wir einen Schritt machen wollen, dann können wir die Richtung umkehren. Also lasst uns hier oben Zugriff auf das Sprite bekommen, und wir werden unser animiertes Sprite gleich Dollarzeichen animierte Sprite machen. Also, das bezieht sich auf das hier. Es braucht nicht das Unbereite davor. So wird animierter Sprite Dot h in einer Bedingung wahr sein. Und diese Bedingung wird sein, wenn das Zeichen der Richtung x also sollten wir eine Variable dafür machen. Also var direction x Sinus gleich Zeichen Richtung Punkt x. Jetzt können wir, dass hier und direkt hier unten Pop. Wenn dies der Fall ist, wenn dies negativ ist, dann werden wir es umdrehen. Also, wenn es negativ ist, dann bedeutet das, dass wir nach links gehen, was bedeutet, dass wir diese helle Horizontale umdrehen wollen. Wenn der Sinus eins ist,
dann bedeutet das, dass wir nach rechts gehen,
was bedeutet, wir wollen, dass er das Spiegeln ausgeschaltet hat. Und wir gehen derzeit davon aus, dass das Sprite standardmäßig rechts steht. Sonst wäre dies umgekehrt. Wenn sich der Charakter nach links bewegt
, dreht er sich nach links. Und wenn es sich nach rechts bewegt, dann geht es zurück zum Standard, kein Umdrehen. Und wenn es sich überhaupt nicht bewegt, wo die Richtung x Sinus 0 sein würde, dann kontrollieren wir das Flipping nicht, denn wenn es sich nicht bewegt, dann sollten wir nicht wirklich die Richtung ändern. Jetzt können wir weitermachen und das Spiel neu starten. Aber C, Okay, also funktioniert das Flipping, außer es ist umgekehrt. Also lassen Sie mich einen Blick dort werfen. Ich denke, dies ist ein standardmäßig linksgerichtetes Zeichen. Was wir also tatsächlich tun könnten, ist
unseren Export Boolean nur für den Fall, dass wir einen neuen Charakter erstellen oder die Sprites geändert
haben, würden wir in der Lage sein, die Standard-Flip-Richtung zu setzen. Also hier unten können wir Gesichter sagen, richtig? Und die Rückseite der Gesichter hier unten. Und lasst uns wieder aufhören, um Geld zu verdienen. Also, wenn das Sprite standardmäßig rechts zeigt, dann möchten wir das Spiegeln ausschalten, während es nach rechts gerichtet ist. Und wenn es standardmäßig nicht mit dem Recht konfrontiert ist, also wenn dies auf false gesetzt ist, so dass Gesichter standardmäßig geliebt werden, dann wird das falsch sein und wir wollen es nicht umkehren. Also im Grunde, solange wir diesen booleschen Wert auf den richtigen Wert setzen, sollte
das Zeichen in die richtige Richtung zeigen, wenn es sich bewegt. Also schalten wir Gesichter aus, richtig? Lasst uns Play drücken. Wir können sehen, dass unsere Instanz des Schweins in der Lage ist, zwischen den beiden Wegpunkten zu gehen. Es ist eine Art von Arbeit im Allgemeinen. Es gibt offensichtlich einige Probleme, wie in den Spieler zu laufen und dort stecken zu bleiben. Wir wollen wahrscheinlich nicht wirklich, dass es eine harte Kollision mit dem Spieler gibt, sondern nur vielleicht Schaden an den Spieler zu verursachen und dann direkt durch ihn zu gehen. Und auch müssen wir hinzufügen und den wütenden Run-Status und auch sicherstellen, dass es richtig animiert wird. All das werden wir wahrscheinlich im nächsten Video oder zwei tun.
17. Verrückte Animation, Physics und räumte eingetretene Detektion: An dieser Stelle gibt es ein paar Anpassungen, die ich am wütenden Schwein machen möchte. Zunächst einmal muss es eine Art von
Erkennungszone haben, so dass, wenn das wütende Schwein tatsächlich den Spieler sieht, dass es in seinen wütenden Run-Modus wechseln und sich schneller bewegen kann. Zweitens, wie Sie sehen können, wird derzeit keine dieser Animationen abgespielt. Also müssen wir einen Animationsbaum für das wütende Schwein aufstellen. Und wir müssen es auch speichern, Physik-Schichten
einrichten, so dass, wenn das wütende Schwein in den Spieler läuft, es nicht wirklich den Physik-Körper davon abhält, so weiter dieses Spiel zu bewegen, wir werden es so machen, dass der Spieler und Feinde können durch einander zu bewegen, natürlich, immer noch in der Lage, einander Schaden zu tun, aber wir müssen, dass einrichten, indem wir beginnen, Physik-Schichten zu verwenden. Wir können also nicht zulassen, dass das Schwein mit der Spielerschicht kollidiert, aber es könnte eine beschädigte Schachtel auf dem Schwein sein, die erkennt, ob es Schaden an dem Spieler anrichten kann und dann Schaden an dem Spieler anrichtet, wenn der Spieler diese bestimmte Zone betritt. Und so, sobald wir das wütende Schwein Setup mit dem Animationsbaum haben, müssen auch die Zustände und den Code dafür
ausschreiben, mit dem übereinstimmen. Und das ist ziemlich genau das, worum wir in diesem Video kümmern werden. Also lasst uns in die Szene für unser wütendes Schwein springen. Und ich werde ein neues Gebiet hinzufügen. Also werde ich einen untergeordneten Knoten hinzufügen und wir suchen nach einem Bereich zu d. So können wir das einfach in die Suchbearbeitung eingeben. Und dieser Bereich 2D wird eine eigene Kollisionsform benötigen. Also werde ich mit der rechten Maustaste darauf klicken, fügen Sie eine Koalition geformt 2D. Das kann also sein, was du willst. Und diese Zone wird im Grunde erkennen, wenn der Spieler in der Nähe ist, so dass das wütende Schwein in seinen wütenden, wütenden Zustand gehen kann. Also werde ich den Bereich
2D wütend Erkennungszone umbenennen , weil ich denke, das macht hier nur ein bisschen mehr Sinn. Es wird es so machen, dass der Charakter wird in diesen Zustand, auch wenn der Spieler direkt über dem Kopf ist. Also werde ich eigentlich eine ovale Form verwenden. Also auf der rechten Seite, wo wir Inspector haben, ändern
wir die Form in Kapselform. Und dann werde ich es um 90 Grad drehen, weil ich will, dass es breiter als groß ist. Gehen wir also zur Transformation 90 für die Rotationsgrade. Okay, und dann lassen Sie uns das auf
eine vernünftige Menge erweitern , damit es im Grunde so groß oder so klein sein kann, wie Sie es wollen. Und wenn du Test spielst , wirst du das natürlich anpassen wollen. Sie können sogar eine benutzerdefinierte Zone Größen für verschiedene Variationen des Feindes, okay? Und für diese wütenden Erkennungen auf dem Bereich von zwei D, werde
ich zu Ich werde überwachen Probleme ausschalten, weil ich nicht wirklich brauchen, dass diese Zone von irgendetwas anderes im Spiel erkannt werden. Wir müssen nur überwachen, weil diese Zone wird für den Spieler zu überprüfen, aber nichts muss ihre Sorge über diese Zone überprüfen. Es scheint also sinnlos, es tatsächlich zu haben. Und in der Tat, warum verwenden Sie zusätzliche Ressourcen, wenn wir nicht müssen. Deswegen lasse ich das aus. Und jetzt können wir ein Knotendiagramm für einen Animationsbaum auf diesem wütenden Schwein einrichten. So wie der Player, müssen
wir mit der rechten Maustaste klicken und einige Notizen hinzufügen. Also lassen Sie uns einen Animationsbaum hinzufügen. Und dann lassen Sie uns auch einen Animations-Layer hinzufügen. Dieser Animationsplayer wird also alle
Animations-Setup haben , die unseren Animationen auf dem animierten Sprite entsprechen. Also lassen Sie uns einen Treffer erstellen. Also lassen Sie uns einen Treffer erstellen, in Leerlauf schlagen, laufen und gehen. Also in der Animations-Setup, Lassen Sie uns neu tun. Schlag eins. Und dann können wir eine Eigenschaft Trek hinzufügen. So wird die Eigenschaft animiert werden, Sprite-Animation. Und auf Frame 0 wollen
wir, dass es spielt. Hit eins ist die Animation. Und wir werden diese Animationen standardmäßig auf 0,05 Sekunden lang und bei Wiederholung. Jetzt können wir das duplizieren. Und natürlich als nächstes wird zwei getroffen werden. Also lassen Sie uns diese Animation in den Hit zur Animation ändern. Duplizieren Sie es erneut, benennen Sie es um. So tun Leerlauf, laufen und laufen Animation. Okay, das ist also das Animations-Setup. Jetzt müssen wir uns mit der Logik und einem Baum verbinden. für den Animationsbaum also Lassen Sie unsfür den Animationsbaum alsoeinen Animationsknoten-Verrundungsbaum erstellen, genau wie der Player. Damit die wütende Erkennungszone funktioniert, können
wir einen Blendraum eins D einrichten, der uns eine Variable gibt, die wir einstellen können, um zu steuern, ob der Charakter laufen oder laufen soll. Also lassen Sie uns die Variable hier zu spielen ändern werden erkannt, und das wird irgendwie wie ein Boolean sein, entweder setzen Sie es auf eins oder 0. Und wenn wir den Editor öffnen, können
wir die Punkte hinzufügen. Bei 0 möchten wir also, dass es sich um eine Wanderanimation handelt,
was bedeutet, dass der Player nicht erkannt wird. Und dann an einem wollen wir, dass es ausgeführt wird. Und nur für den Fall lassen Sie uns auch negative einen Lauf machen, der auch. Aber ich denke, wir werden nur zwei Werte haben, entweder 0 oder eins. Nun, da wir die einfache Blend Space Setup haben, können
wir das mit der Ausgabe verbinden. Wenn wir es 1 machen, erhalten wir die Laufanimation, und wenn wir mehrere haben, erhalten
wir die Wanderanimation. Jetzt müssen wir nur überprüfen, ob der Player im
Code erkannt wird und dann den Parameter zu den richtigen Zeiten einstellen. Eine Möglichkeit, dass wir die wütende Erkennungszone dem wütenden Schwein sagen lassen können, wenn sich der Spieler innerhalb der Zone befindet, ist die Verwendung von Signalen. So können wir eine Empfängermethode einrichten, indem wir hier auf der rechten Seite notieren. Und dann können wir Körperform eingegeben und Körperform verwenden. Ausgezeichnet. Also werde ich auf jeden von ihnen doppelklicken und wir werden
eine wütende Erkennungszone Körperform hinzufügen , die in das wütende Schwein-Skript eingegeben wurde. Und lassen Sie uns das für beide tun. Doppelklicken Sie also mit dem Skript verbunden. Okay, und das ist im Grunde alles, was wir von der Zone brauchen werden. Damit die Dinge hier drin funktionieren. Also, wenn eine Körperform eingegeben ist, sollte
es ein Spieler sein. Und wir werden das mit Schichten und einer Minute einrichten. Und als Einzelspieler-Spiel sollte
es zu jeder Zeit nur einen Charakter in dieser Ebene geben, einen oder eine 0. So können wir einfach Animationsparameter auf
dem Animationsbaum setzen , um sich darum zu kümmern. Also, wenn Sie nicht bereits den On bereit für Animationsbaum gleich hier oben haben. Du kannst voran gehen und das aufstellen. Und dann hier unten können wir tun Animation Baum Punkt setzen Sie den Parameter. Also werden wir Parameter Schrägstrich tun, Spieler erkannt Schrägstrich Mischposition. Ok? Und wir werden das auf eins setzen wollen. Und dann, wenn der Spieler diesen Bereich verlässt, wollen
wir den Parameter auf 0 setzen. Wählen Sie also all dies aus und fügen Sie es hier ein. Und wir setzen das auf 0. Wenn wir nun ein Multiplayer-Spiel machen, brauchen
wir vielleicht ein wenig aufwendigerer Code, weil es mehrere Spieler geben könnte. Aber in diesem Fall wird es perfekt funktionieren, weil es zu jeder Zeit nur einen Spieler im Spiel gibt. Das vereinfacht es uns also einfach. Wenn wir nun in die wütende Erkennungszone und den Inspektor gehen, können
wir ihre Kollisionsschichten einrichten. Aber bevor wir die Kollisionsschichten einrichten, sollten
wir eigentlich definieren, was das sind. Also in Projekt, Projekteinstellungen, zu denen wir gehen können, ich denke, es ist unter Physik. Also 2D-Physik hier unten unter Ebenennamen. Lassen Sie uns einige Layer-Namen schreiben. Also Schicht eins, Ricanerin macht Welt. Und dann für jetzt gehen wir hier runter, sagen
wir Schicht 4 und Schicht und Feind. Also haben wir ein paar Ebenen Setup. Und für jede dieser Ebenen können wir ein Objekt auf einer bestimmten Ebene kollidieren, und wir können auch zulassen, dass es von anderen Objekten gefunden wird, die auf diese Ebene schauen. Also lassen Sie uns die Schichten hier schließen. Also haben wir die Layer-Option unter Kollision. Auf der Ebene können andere Objekte dieses Objekt
erkennen und damit kollidieren oder tun, was immer sie brauchen. Also für die wütende Erkennungszone wollen
wir eigentlich nicht eine Schicht hier, weil es nichts wirklich damit kollidieren muss. Wir verwenden das nur, um Ereignisse auszulösen, was im Grunde das Schwein zum Laufen bringt. Aber die Maske wird dort sein, wo wir prüfen, ob diese Ereignisse passieren. Also für uns, das wird nicht die Welt-Ebene sein, die nur als eine eingerichtet würde, aber es wird tatsächlich Schicht war in Fort, das wird die Schicht Schicht sein. Wenn wir wegklicken und zurück klicken, sollte
es hier unten aktualisiert werden. So haben Sie Arbeit für ist die Spielerschicht. Mit dieser wütenden Erkennungszone schauen
wir nur auf die Spielerebene und dies sollte nur ein Spieler im Spiel sein. Daher wird dies das einzige Objekt sein, das die Empfängermethoden hier unten
auslösen kann , um die Animation zu behandeln 21 oder 0
festzulegen,
je nachdem , ob wir es laufen müssen oder ob wir es brauchen, um zu laufen. Wenn wir das speichern, müssen wir
jetzt nur den Player als Player-Layer-Objekt definieren. Und wir sollten den Feind auch einfach aktualisieren, um ein feindliches Objekt zu sein, während wir dabei sind. Also unter wütendem Schwein, der kinematische Körper geht zu Kollision, Physik-Körper Kollision. Und dann werden wir die Schicht hier in Feind ändern. Wir werden immer noch Schweißnaht als Maske verwenden. Also denke ich, was wir die Weltschicht definieren werden, wie der ganze Boden, die Plattformen, die Kacheln,
Dinge, die die normalen physikalischen Interaktionen auftreten sollten. Und so werden die kinematischen Körper weiter auf
die Welt schauen , damit diese Kollisionen immer noch als Feind auftreten können, Spieler nicht in der Lage sein, direkt mit diesem kinematischen Körper zu kollidieren. Und dieser kinematische Körper wird nicht in der Lage sein, direkt mit
dem Spieler zu kollidieren , weil wir die Spielermaske nicht gut überprüfen, und sie überprüfen die Weltmaske. Also lasst uns wieder in den Spieler eintauchen. Also die Spieler-Szene, klicken
wir auf den Spieler kinematischen Körper, Physik, Körper 2D. Und wir ändern dies von einem Weltobjekt zu einem Spielerobjekt. Und es wird auf die Weltebene schauen, um Kollisionen passieren zu können. Also, wenn wir das Spiel laufen, wenn ich alles richtig eingerichtet habe, sollte
das Schwein nicht mit
dem Spieler kollidieren und der Spieler sollte nicht mit dem Schwein kollidieren. Aber die 2D-Erkennungszone sollte in der Lage sein, den Player zu erkennen, so dass er das wütende Schwein-Skript sagen
kann, ob es laufen soll oder ob es laufen soll. Also lassen Sie uns voran gehen und spielen und sehen, ob all das funktioniert. So derzeit die Spieler in Endosomen, so ist es nur zu Fuß. So zumindest unsere Animation dort richtig abgespielt wird. Lassen Sie uns etwas darüber bewegen. Und wir können sehen, dass sich die Animation verändert. Also, das ist eigentlich gut für uns. Das letzte, was wir tun müssen, ist,
die Bewegungsgeschwindigkeit im Grunde zu steuern , so dass es ein wenig mehr tut, als nur Farben hier zu ändern. Also lassen Sie uns das Spiel davon abhalten, dort zu laufen. Und öffnen wir das wütende Schwein Skript. Also in diesen Eigenschaften für den Animationsbaum eingerichtet. Wir können auch etwas für das wütende Schwein einrichten. So wie der Spieler, Lassen Sie uns eine Aufzählung erstellen, die den Zustand darstellt, dass das Schwein nicht ist. Also hier oben, werde
ich Enums-Zustand machen, und derzeit werden wir einfach laufen und laufen lassen. Also hier oben können wir eine weitere Aufzählung für unser wütendes Schwein erstellen, genau wie wir es für den Spieler getan haben. Also werden unsere Staaten sein, ich werde gehen und für den Laufzustand könnten
wir es einfach rennen nennen. Und das wäre konsistenter mit allem im Spiel. Ich schätze, wir können das tun. Ich meine, ich dachte auch, wir könnten es wie verrückt oder wütend nennen, aber vielleicht, wenn wir es einfach R1 nennen, macht
das mehr Sinn, wenn wir
den Animationsplayer auch im Animationsbaum betrachten . Also lasst uns diesen Zustand hier unten festlegen. Und natürlich brauchen wir eine Variable, um den aktuellen Zustand zu speichern. So variabler Zustand oder ein anderer variabler aktueller Zustand. Und wir werden das vorgeben, um Dot Walk anzugeben. Da der Charakter wird zu Fuß, sobald das Spiel beginnt. Und das macht auch diese Staaten Hauptstadt, da sie während des Spiels konstant sind. Und State Dot ging da runter. Okay, jetzt können wir den aktuellen Zustand nehmen und diesen
auf Status ausführen setzen, wenn es diesen einen Wert Parameter erhält. Also wird es da unten laufen und der Animationsbaum. Und dann ist der aktuelle Zustand gleich Zustand Zweifel gehen, wenn er auf 0 gesetzt ist. Also, jetzt werden diese konsequent sein. Und jetzt müssen wir nur die Bewegungsgeschwindigkeit kontrollieren, basierend auf dem, was dieser Zustand ist. Wir können die Bewegungsgeschwindigkeit hier oben auf eine Gehgeschwindigkeit ändern, okay? Und dann wird dies immer noch Geschwindigkeit bewegt werden. Aber die tatsächliche Bewegungsgeschwindigkeit, die wir auf jedem Frame aktualisieren werden. Es wird eine neue Variable sein, die wir hier erstellen. Das wird also ein Faktor zwei sein. Und dann können wir eine Übereinstimmung mit dem aktuellen Zustand ausführen. Wenn wir also den aktuellen Zustand für den Zustandspunktlauf übereinstimmen, dann wird die Bewegungsgeschwindigkeit gleich der Gehgeschwindigkeit sein. Und eigentlich sollte dies ein Flow sein, denn wir
kümmern uns nur um die x-Bewegung und das sollte ein Unterstrich sein. Dann brauchen wir hier unten nur den State Dot Ruin. Und natürlich werden wir die Bewegungsgeschwindigkeit gleich der Laufgeschwindigkeit einstellen. Also sollte jetzt viel offensichtlicher sein, wenn der Charakter in läuft, weißt
du, irgendwie lässig über Dinge oder rennen und versuchen, den Spieler nach unten zu jagen. Also lassen Sie uns voran gehen und spielen und sehen, ob das alles bis zu diesem Punkt funktioniert. So, wie wir näher an den Feind und wir können sehen, bewegt sich lächerlich schnell. Und wenn wir wegtreten, dann geht er einfach zurück in seine grünen Staaten. Es gibt also diese Art von willkürlicher Zone, die, sobald der Spieler eintritt, das Schwein auslöst, sich wirklich schnell zu bewegen. Wir möchten also vielleicht die Zahlen auf der Bewegung abdrehen, aber was die Erkennung angeht, funktioniert
das korrekt. Also werde ich hierher gehen und den Charakter etwas langsamer bewegen. Es ist also ein bisschen fairer gegenüber dem Spieler.
18. Jump: Also in diesem Teil werden wir schaffen die Fähigkeit für den Spieler, den Feind anzugreifen, in diesem Fall das wütende Schwein. Aber wirklich, ich denke, wir werden es so einrichten, dass wir
ein feindliches Skript haben , auf dem Charaktere wie das wütende Schwein und andere Feinde basieren können, so dass wir nicht immer wieder denselben Code
neu eingeben müssen , im Grunde Vererbung. So wird der Angreifer nur diesen Charakter zu geben, ist die Fähigkeit, auf der Oberseite von Feinden hüpfen, ihnen
Schaden zufügen, und dann am originellsten abprallen. Aber es wird vorerst funktionieren. Also lasst uns tauchen in den wütenden Schwein Charakter wieder, und wir werden eine neue Fläche zu
d schaffen . Dieser Bereich 2D wird im Grunde eine Verletzungsbox sein. Ein Bereich, in dem der Charakter auf der Oberseite landet, wenn
er in diese Zone eintritt , kann er überprüfen, ob der Spieler oben ist und ob das der Fall ist, Schaden verursachen und eine kleine Bounce-Animation durchführen. So in den Prozess der Einrichtung, da wir sehen können, dass es bereits ein paar Kollisionsformen auf unserem Charakter, die in die Quere kommen könnten. Es könnte eine gute Idee sein, sie einzusperren. Wenn wir also auf eine Ebene klicken, können
wir auf dieses kleine Schlosssymbol klicken um es so zu machen, dass wir sie nicht versehentlich verschieben können. Und ich werde das nur mit allen drei tun. Der Bereich zu D, die Kollisionsform zu D und die wütenden Schweine, kinematische Körper Kollision geformt 2D. Also, jetzt lassen Sie uns in einem anderen Bereich 2D hinzufügen. Also werde ich mit der rechten Maustaste auf das wütende Schwein auf einem untergeordneten Knotenbereich 2D klicken. Und dann lassen Sie uns auch eine Form geben. So Kollision geformt 2D. Und um dies zu vereinfachen, werden
wir eine rechteckige Form verwenden. Also wird diese rechteckige Form sehr klein sein und es wird genau hier an der Spitze der Schweine positioniert werden. Also könnte ich das Gebiet nach D bringen und das nach oben bewegen. Und das wird auch die Position der Kollisionsformen verschieben. Oder Sie können einfach die Kollisionsform
direkt verschieben , wie Sie es dort oben bekommen möchten, ist in Ordnung. Mal sehen, ob wir die 12 machen. Vielleicht wollen wir negative 12 dort. Und lassen Sie uns nur, dass negative 10 gut scheint. Nehmen wir nun die Kollisionsform an und passen ihre Grenzen so an, dass die Y-Grenzen und einfach nur wollen, dass es eins ist. So können wir sehen, dass dies eine sehr,
sehr kleine Kollisionsform ist. Und dieser Bereich zu D, werde ich eine Sprungbox nennen. Und es könnte diese Kollisionsform umbenennen, Sprungkollisionsform. Genau wie wenn wir darüber schweben, können
wir tatsächlich einen Namen sehen, der ein bisschen mehr Sinn macht. Also denke ich, das könnte ein bisschen hilfreich sein. Okay, jetzt, damit diese verletzte Box funktioniert, brauchen
wir eine Kollisionsschicht für die Hotbox und glauben nicht, dass ich sie eingerichtet habe. Gehen wir also in die Projekteinstellungen. Und wir werden hinuntergehen, wo es 2D-Physik sagt. Also haben wir Schichten für Weltspieler Feind, und um spezifischer über Feind und Spieler zu sein, dies sind die kinematischen Körperschichten. Aber wir wollen vielleicht auch auf Ebene vier Bereiche, in denen bestimmte Ereignisse ausgelöst werden können, aber nicht unbedingt für Move und Slide Kollision Typ Mechanik. Also vielleicht können wir sagen, über und über Schicht 11 wird feindliche Box haben, die wir verwenden können oder nicht, was die Feinde sein, die versuchen, den Spieler oder einen anderen Charakter zu treffen. Und dann darüber hinaus könnte
ich eine Jump verletzt Box-Schicht erstellen. So könntest du auch einfach einen generischen Feind HIPAA erstellen. So könntest du auch einfach eine generische gegnerische Verletzungsbox-Layer erstellen, die derzeit gut funktionieren würde. Die Sache ist, wenn Ihr Charakter endet mit mehreren Angriffen, Sie wollen vielleicht nur Chirurgen und Taps wie ein Sprung, Bounce tatsächlich in der Lage sein, sehr spezifische Bereiche und
nicht alle potenziellen Angriffsbereiche auf der Pflege treffen . Also für jetzt werde ich nur ihre Box gesprungen haben und diese Schicht wird ausschließlich für diese Sprungangriffe verwendet werden. Also hier oben, ich bin mir nicht sicher, ob wir es verwenden oder nicht, aber nur um ein wenig konsistent mit unten zu sein, sie erstellen auch eine Layer-Hit-Box für den Fall, dass wir es später brauchen. Also lassen Sie uns das schließen. Und diese Jump verletzt Box wird natürlich in
der Jump Box-Schicht sein . Natürlich werden die richtigen Namen nicht angezeigt, bis wir zu einem anderen Tab und zurück wechseln. Und jetzt, wenn wir hier rüber gehen, okay, ich schätze, es ist in der zweiten Reihe, sollten
wir in der Lage sein, und mich Hit Box zu finden und dann springen verletzt Box. Nehmen wir es also alle anderen Schichten ab. Und dann wird dieser Bereich 2D nicht nach irgendetwas suchen. Es wird nur Informationen erhalten, also müssen wir sie nur auf dem Sprung ihrer Box-Schicht haben. Wir brauchen keine Maske für verwenden,
um für jede Eingabe oder Verlassen von anderen Ebenen zu überprüfen, zumindest für jetzt. Okay, jetzt gehen wir in die Ebenenfigur und lassen Sie uns diese Sprungschlagbox erstellen. Also werde ich mit der rechten Maustaste auf den Player und fügen Sie einen Bereich 2D, okay, und wir werden diese Sprunggrube Box umbenennen. Und natürlich brauchen wir eine Kollisionsform. Also die Kollisionsform, werden
wir das zu einem Rechteck machen. Und ich werde sicherstellen, dass die Höhe davon eins ist. Und dann ziehen wir es hier runter auf den Grund des Charakters. Und wir können die Transformation auf dem Sprungschlagfeld-Bereich anpassen, nehme ich an. Also lassen Sie uns das mit Transformationsposition nach unten stoßen. Und ich schätze, 15 geht es darum, was wir dort suchen. Wir wollen wahrscheinlich auch die Breite davon verkleinern,
weil die Füße des Charakters hier nur etwa gehen. Also lasst uns das H2 ändern, vielleicht eine Sechs, okay, ich schätze, ich kann jetzt suchen. Und dieser Sprung Hit Box Bereich 2D wird für die Sprung
verletzt Box-Schicht suchen , um zu sehen, ob es den Feind an diesem Punkt in Schaden zu treffen. Und momentan brauche ich nichts, um nach der Hüftbox zu suchen, also nehme ich sie einfach von Schicht 1 ab. So wird es nicht in Kollisionen verwendet werden, nur um nach Dingen zu
suchen , die es auf dieser Ebene eingeben, die Sprungverletz-Box. Okay, was wir jetzt tun müssen, ist diese Sprungschlagbox innerhalb des Player-Skripts zu verbinden. So können wir das mit Signalen ziemlich einfach tun. Wenn Sie auf die Sprunggrube Box klicken, können wir gehen, um zu notieren. Und dann werden wir Flächenform
eingegeben verwenden wollen , weil wir nach dem Verletzungsfeld suchen, das ist ein Bereich 2D. Wenn wir nach einem kinematischen Körper suchen, würde
er die Körperform verwenden, die in Körperform Unfall eingegeben wurde. Also lassen Sie uns Bereich Form eingegeben tun. Und ich denke, das ist das Einzige, das wir wissen müssen. So funktioniert der Standardname der Empfänger-Methode beim Springen, Hüftbox-Bereichsform eingegeben perfekt. Lassen Sie uns das mit dem Player-Skript verbinden. Und jetzt werden wir das unten unten haben. Ich schiebe es hier nach oben, damit es nicht in der Mitte ist.
19. Jump: Wenn etwas in die Hit-Box, theoretisch sollte es nur der Feind springen verletzt Boxen sein. Aber ich möchte sicherstellen, dass das Gebiet, das betreten wird, tatsächlich an einen Feind gebunden ist. Also, was wir tun können, ist, dass wir dieses Gebiet überprüfen können und dann
können wir sehen, ob es Besitzer tatsächlich der feindliche Typ ist. Also werde ich var Feind tun und dann Area dot Besitzer und fremde instanziiert gesehen, die uns den Wurzelknoten geben sollte. Also, wenn ich überprüfen würde, was der Besitzer wäre vier wie diese Sprungschlagbox. Wenn ich hier ein Skript angehängt hätte, würde
es an den Besitzer gehen
, der in diesem Fall der Spieler ist. Also in dem wütenden Schwein, der Besitzer dieser Sprunghotbox ist das wütende Schwein, das vom Typ Feind sein wird. Eigentlich, mal sehen, habe ich den feindlichen Typ schon erschaffen? Nein, das habe ich nicht. Also machen wir das in einer Minute. Also zurück im Spieler-Skript, müssen wir überprüfen, ist der Feind tatsächlich ein Feind. Also werde ich sagen, ist Feind, Feind, und das haben wir noch nicht erschaffen. Das wird also nicht funktionieren und wir müssen nur im Grunde das Skript dafür erstellen. So beenden Sie die Charaktere Ordner, Feinde. Ich werde hier nur ein neues Skript erstellen. Also werde ich hier mit der rechten Maustaste klicken, ein neues Skript
machen und wir werden es nur Feind nennen. Und innerhalb der feindlichen Punkt GD, wird
dies kinematischen Körper 2D erweitern. Also der Basistyp davon ist die gleiche wie wütende Schwein, was bedeutet, dass wütende Schwein kann nur von feindlichen Punkt g erben, die von kinematischen Körper 2D erben wird. So erhält es die gesamte Funktionalität sowohl des kinematischen Körpers als auch des Feindes. Also für GD-Skript, um dies als einen Typ zu deklarieren, auf den wir ohne einen Pfad verweisen können. Ich denke, wir brauchen Klassennamen hier und dann Feind. Es gibt also nur im Grunde eine, wenn Sie C plus plus eine Art Namespace zu diesem Skript machen. Und jetzt in wütend Schwein Punkt h gd, können
wir einfach schreiben Feind, so dass es erweitert Feind. Und dieser Feind liegt daran, dass wir ihn für unser Projekt mit diesem Klassennamen definiert haben. Alles, was wir wollen, dass alle Feinde haben, kann hier rein gehen. Also zum Beispiel, wütendes Schwein, ich denke, wir haben keine gesundheitliche Variable gesetzt, aber das wäre ein perfekter Ort, um das tatsächlich auszudrücken. Also lassen Sie uns exportieren, weil wir es zu einem Float var Gesundheit machen und dies standardmäßig auf drei setzen. Also, jetzt, wenn wir auf Angry Schwein klicken, gehen Sie zum Inspektor, wir können sehen, die Gesundheit Variable ist hier. Aber diese Gesundheitsvariable, sie kommt nicht von wütendem Schwein, sie kommt aus dem verschachtelten feindlichen Skript. Also jetzt malloc und die Empfängermethode für die Sprungschlagbox, wenn wir zu dem Punkt gekommen sind, wo wir herausgefunden haben, dass der Feind tatsächlich ein Feind ist. Dann wollen wir auch sicherstellen, dass es momentan getroffen werden kann, weil wir aus irgendeinem Grund nicht versehentlich den Feind verdoppeln wollen. Es könnte also eine Unverwundbarkeitszeit geben,
wie zum Beispiel, wenn die Hit-Animation gerade abgespielt wird, vielleicht sollte der Feind für eine Minute verwundbar sein. So können wir dem Feind eine weitere Variable hinzufügen, die so etwas sein könnte, wie geschlossen werden kann. So kann feindlicher Punkt getroffen werden und dies wird ein Boolean sein. Und das können wir einfach in unserem feindlichen Drehbuch erklären. Wir könnten also sagen, dass der Export Bool Bar getroffen werden kann. Und vermutlich wäre dies in der Regel Standard auf true,
da
Sie zu Beginn des Spiels in der Lage sein wollen, den Feind zu treffen, aber Sie können dies
natürlich für jeden Feind anpassen , da diese Eigenschaft würde nur hier in jedem der Charaktere erscheinen. Also jetzt an dieser Stelle wollen wir überprüfen, ob der Charakter tatsächlich über dem Feind ist. Wenn wir von unten springen und dann überlappen sich die Bereiche, das ist nicht wirklich das gleiche wie fallen oben drauf Feind. So können wir überprüfen, wann das Gebiet eintritt, ob es von oben eintritt, wo auch immer der Feind ist. Also im Grunde können
wir dafür die Sprungschlagbox packen. Und ich könnte tatsächlich mehr Sinn machen, dies als
eine Variable oben zu haben , um konsistenter zu sein. Also werden wir auf bereit var haben, gesprungen Hüftbox gleich Dollarzeichen. Passt nicht in Box. Also stellen wir sicher, dass es zu Beginn dieses Skripts läuft. Also überprüfen wir den Jump Hip Box Punkt. Lassen Sie uns globale Position Punkt Y tun. Also in der Spielwelt, das wird sein, es ist wie absolute Position, nicht relativ zu irgendetwas. Wenn wir das also mit einer anderen globalen Position vergleichen, dann können wir ziemlich sicher sein, dass es tatsächlich über der anderen Position oder nicht über der anderen Position liegt. Also Bereich Punkt globale Position Punkt y. Also dies wird, dass verletzt Box Bereich und Theorie, da die Sprungkasten kann nur auf der Jumper-Box-Schicht erkennen. So können wir vernünftigerweise sicher sein, dass dieser Bereich in der Tat der Sprung verletzt Box ist. Also, wenn wir hier runter kommen, dann machen wir den Jumpangriff. Also für das, werden wir nehmen, dieser Charakter ist Geschwindigkeit, und wir werden es mit ein wenig Feind Bounce erhöhen. Also werde ich eine variable, feindliche Sprungkraft,
Impuls haben , und dann werden wir dem Feind Schaden zufügen. Also werden wir diese Funktion mit einer Menge an Schaden getroffen. Also müssen wir zwei Variablen dort oben erstellen. Also zuerst, Export, Var, Feind springen. Und ich werde das weniger machen als der Hauptsprung, so
etwas wie 400 klingt ein bisschen besser, als wir
auch eine andere Loop-Variable haben können . Das wird also Dama-Schaden sein, und ich werde das nur auf einen verwerfen. Schön und einfach. Okay, also fangen wir in der Luft an, um ihren feindlichen Bounce Impuls, Feind springen. Ich schätze, Feind Bounce funktioniert besser. Okay, so nannte ich es in den Original-Skripten. Das sollte also das Problem dort klären. Wir müssen nur sicherstellen, dass das feindliche Skript wir haben, die Hit-Methode bekommen. Also werde getroffen. Lassen Sie uns diese Funktion treffen. Und das wird eine Menge Schaden nehmen, vermutlich ein Schwimmer. Und wenn der Feind getroffen wird, wollen
wir es schaffen, damit er nicht wieder getroffen werden kann, bis wir etwas anderes haben. Sagen Sie, dass es kann. In unserem Fall wird es das Ende des Treffers sein oder 20 Animation getroffen werden. Also, während es die Hit-Animation spielt, im Grunde in gewissem Sinne verwundbar. Also werden wir die Gesundheit nehmen und wir werden minus gleich dem Schaden. Und dann werden wir setzen kann gleich falsch getroffen werden.
20. Erbe die Umsetzung und Animationen: Jetzt im wütenden Schwein-Skript wollen
wir eine Funktion erstellen, die wir ausführen können, wenn unsere Trefferanimationen fertig sind. Lassen Sie uns also eine Funktion erstellen, die Animation beendet hat. Okay, wenn es fertig ist, wollen
wir den Treffer gleich „wahr“ setzen. Und ich werde auch den Zustand des Charakters zurückgeben wollen, um zu laufen oder zu gehen. Da sobald es fertig ist, getroffen zu werden, sollte
es im Grunde seine normale Funktionalität wieder aufnehmen. Also werden wir sagen, dass der aktuelle Zustand gleich Schiefer Punkt läuft für jetzt. Ok? Und das ist auch, dass diese Funktionen hier oben verschoben werden, okay? Und eine Sache darüber Wenn wir uns im HIT-Zustand befinden, wollen
wir nicht, dass der Charakter in der Lage ist, seinen Zustand zu rennen oder zu laufen. Der einzige Weg, um den Charakter zurück in den
städtischen Zustand zu lassen , ist, wenn diese Funktion beendet ist. Also im Wesentlichen wollen wir das irgendwie einsperren. Also werde ich hier reinbringen,
wenn der aktuelle Zustand State Dot Walk ist,
dann kann es in wenn der aktuelle Zustand State Dot Walk ist, einen Run-Zustand gehen oder hier unten. Wenn es läuft, kann es in einen Gehzustand gehen. Wenn dieser Parameter gesetzt wird und der Spieler nicht mehr da ist, sollte
er anfangen zu laufen und wenn der Spieler eintritt, sollte
er anfangen zu laufen. Aber nur, wenn es nicht in einem anderen Zustand wie Hit ist. Und das muss gleich Zeichen. Also nun lasst uns in unseren Animationsplayer gehen, wütend Schwein 2D. Klicken wir auf den Animationsplayer. Und lassen Sie uns in einer anderen Spur für HIT 1 hinzufügen. Also wird unser Track Methode genannt werden, und wir wollen Methoden von dem wütenden Schwein aufrufen, okay, und wir müssen das auch am Ende der Animation auftreten. Also müssen wir das erweitern. Ich werde es vorerst auf 0,5 Sekunden verlängern. Und wenn wir zum animierten Sprite gehen, werde
ich die FPS und VZ um die Hälfte verlangsamen, so dass es nur 0,25 Sekunden dauert,
aber 0,5 Sekunden, bis die gesamte Animation abgespielt wird. Wir werden sehen, ob das für uns funktioniert. Und jetzt können wir zum Spieler zurückkehren. Es sollte also bis hier dauern, bis die 10 FPS-Animation beendet ist. Das ist also, wo wir in die setzen wollen, vergessen ein weiteres Gleichheitszeichen dort als auch. Okay, jetzt für unsere Funktionen verfolgen, können
wir den Schlüssel einfügen. Trefferanimation beendet. Okay, jetzt sollte die Animation dort laufen. Jetzt müssen wir auch dasselbe mit HIT 2 tun. Also lassen Sie uns dies 0,5 machen, aber die Dauer, und schalten Sie uns die Schleife auch aus, weil es nicht Schleife machen sollte. Es sollte nur einmal spielen und dann wieder zum Laufen gehen. Also eine Anruf-Methode auf Angry Schwein, und dann klicken wir mit der rechten Maustaste hier bei 0,5 Sekunden, fügen Sie den Schlüssel, Hit Animation beendet. Und jetzt wird unsere Funktion hier laufen. Dies sollte es also in den Zustand zurückbringen und es erneut treffen lassen. Das sollte also sein, was wir wollen. Also lassen Sie uns jetzt einfach überprüfen, drücken Sie eins und schalten Sie Looping aus. Und eine weitere Sache, die wir im Animationsbaum brauchen, ist, tatsächlich
eine One-Shot-Variable einzurichten , so dass wir in diese Trefferzustände eindringen können. Lassen Sie uns also mit der rechten Maustaste auf das Knotendiagramm klicken und einen One-Shot machen. Also dieser eine Schuss wird sein, nennen wir es einfach getroffen. Aber warum halten Sie es nicht einfach? Diese eine Aufnahme ist also, wenn die Hit-Animation abgespielt wird. Wenn dieser Animationsparameter-Hit also auf aktiv gesetzt wird, sollte
er entweder einen Treffer oder auch Treffer anzeigen. Und wir können das zu einer zufälligen Variablen machen. Aber damit das tatsächlich funktioniert, müssen
wir die Ausgänge wieder verbinden. Also nehmen wir diese Zeile hier für die Ausgabe und gespielt erkannt. Und jetzt sollte dieser Mischraum 1D direkt in die n als Standardfunktion einspeisen. Und dann geht das an die Ausgabe. Und jetzt müssen wir diese nur erschaffen. Hit eins, traf zwei Animationen hier unten. Klicken Sie mit der rechten Maustaste auf Animation, klicken Sie mit Okay, also auf der ersten traf eins, auf der zweiten traf zwei. Und jetzt können wir hier rüber gehen, mit der rechten Maustaste klicken und ich denke, wir wollen zwei mischen, okay? Also, äh, im Grunde zwei Werte haben, 01, wenn es 0 ist, dann spielen wir Treffer eins. Und wenn es eins ist, dann spielen wir Hit zwei. So können wir die Immobilie hier anrufen, Variation treffen. Wenn es kommt Beckenschlag sehr asiatisch. Und lassen Sie uns das mit dem Schuss verbinden. Okay, jetzt haben wir zwei Variablen zu treffen. Dies wird bestimmen, ob wir spielen Hit ein oder Hit zu, nur für einige Abwechslung. Und dann wird dies bestimmen, ob wir die Hit-Animation überhaupt abspielen. Also für die Feinde in unserem Spiel, nachdem wir darüber nachgedacht haben, könnten
wir tatsächlich wollen, dass jeder Feind seine eigene Umsetzung von get hit hat. So können wir immer noch die gleiche Menge an Schaden in die Funktion für jeden Charakter übergeben. Aber vielleicht erleiden einige Charaktere keinen Schaden, wenn sie getroffen werden. Vielleicht bewegen sie sich ein wenig oder vielleicht sind einige Charaktere nicht unverwundbar, nachdem sie getroffen wurden. Auf jeden Fall könnte ich also sinnvoll sein,
dem Spieler zu erlauben , dem Feind über die Ausführung dieser Funktion zu erzählen, aber für jeden Charakter eine andere Implementierung zu haben. Also werde ich hier einen Unterstrich setzen, um dies zu einer virtuellen Funktion zu machen. Und dann werden wir das jetzt gerade schneiden. Also, was wir tun werden, ist, das zu wütenden Schwein zu übernehmen. Und wir werden das hier als eine Implementierung dafür setzen. Also kommen wir in einer Sekunde darauf zurück. Also für jetzt, wenn die Funktion ausgeführt wird und es keine benutzerdefinierte Implementierung ist, werde
ich nur einen Fehler schieben. Sagen Sie einfach, dass get hit wurde nicht implementiert. Also, wenn in wütenden Schwein oder einem anderen Feind, sie getroffen wurde erstellt, sollte
es diese Version des Get-Hit verwenden. Aber falls dies nicht der Fall ist, werden
wir nur diese Fehlermeldung haben, so dass wir im Grunde jetzt, wo wir voran gehen und sie implementieren müssen. Also für diese Version von get hit oder das wütende Schwein, werde
ich es so machen, dass, wenn es getroffen wird, wir in den Hits Zustand eintreten. Und als Teil davon können wir tatsächlich diese Variablen hier unten im Animationsbaum setzen. Also werde ich den Animationsbaum bekommen und wir werden die Parameter einstellen. Also der erste wird Perimeter Schrägstrich Hit Schrägstrich sein,
aktiv, und dann die andere, Lassen Sie uns voran und überprüfen, dass. Also Spieler erkannt, so dass wird Parameter Schrägstrich Spieler Unterstrich erkannt Schrägstrich 08, nicht, dass ein. Hit Variation tatsächlich. Perimeter Schrägstrich Treffer Variation Schrägstrich Mischung Betrag. Ok? Also, so Animationsbaumsatz oder ihre Amateure Schrägstrich Hit Unterstrich Variation Schrägstrich Mischung Betrag. Das wird also entweder 0 oder eins sein. Und das müssen wir in einer Sekunde herausfinden. Und dann wird das wahr sein. So können wir hier eine Zufallszahl generieren. Und um eine Zufallszahl zu erstellen, müssen
Sie ein Zufallszahlengeneratorobjekt erstellen, das einen eigenen Konstruktor hat. So könnten wir eine innerhalb dieser Klasse erstellen oder wir können jedes Mal eine erstellen, wenn wir diese Funktion ausführen. Oder was wir tun könnten, ist, dass wir es auf unser globales Singleton-Skript setzen könnten. Und dann, wann immer wir eine zufällige Funktion ausführen müssen, verweisen
wir nur auf diese Spieleinstellungen global. Also gefällt mir diese Idee besser. In unserem Spiel settings.js können
wir also eine Variable erstellen, die zu Beginn des Spiels geladen wird. Das wird also unser Zufallszahlengenerator sein. Und was wir nur tun müssen, ist Zufallszahlengenerator und erstellen Sie eine neue Instanz davon. Also zu Beginn des Spiels, wenn es geladen wird, werden
wir diesen neuen Zufallszahlengenerator bekommen und wir brauchen nur einen, und wir können ihn überall benutzen. Also in wütend Schwein jetzt können wir eine neue Zeile hinzufügen. Also lasst uns das machen. Weite Anime Auswahl. Und das wird gleich den Spieleinstellungen sein. Unsere Singleton-Referenz Hubble irgendwo Punkt, Mal sehen, wir nennen es Rant Jen. Und dann müssen wir eine neue Zahl generieren, so dass wir
zufällige int i für int Unterstrich Bereich zwischen 01 tun können . Ganzzahlen können also nur Nicht-Dezimalzahlen sein. Das wird uns also entweder eine 0 oder eine Eins geben. Und wir können das in den Animationsbaum Wert setzen. Also lassen Sie uns diese Enum-Auswahl hier einfügen. Das wird uns also unsere zufällig ausgewählten entweder eine Animation treffen oder auf Animation treffen. Also eine weitere Sache in Spielen, settings.js, wenn wir den Zufallszahlengenerator verwenden, um Zufallswerte zu generieren , wird es
standardmäßig den gleichen Samen verwenden, wenn das Spiel geladen wird. Es wird also die gleiche Reihenfolge von,
sozusagen, Zufallszahlen haben. Wenn also der Zufallszahlengenerator nur einmal verwendet wurde, um festzustellen, dass der Charakter getroffen wurde und welche Animation gespielt
werden soll, dann würde dieser Charakter in der Theorie die gleiche Animation abspielen, dann würde dieser Charakter in der Theorie die gleiche Animation abspielen,wenn das Spiel geladen wird und das gleiche Ereignis passiert. Um also eine wirklich zufällig zu
machen, könnten wir hier eine fertige Funktion implementieren. Und dann, wenn ein Boolean randomisieren sollte, dann werden wir es zufällig. Also Ran Gen, neu zufällig. Okay, wenn wir also diese R1 haben, dann wird dies einen neuen Samen für den Zufallszahlengenerator erstellen. Und es sollte uns jedes Mal verschiedene Variationen geben, wenn wir das Spiel laufen. Lassen Sie uns also eine Variable machen, die wir in den Spieleinstellungen einstellen können. Gesehen, dass TSC und Datei so randomisieren sollten. Und es wird dies standardmäßig auf true. Wenn wir also jemals die Randomisierung ausschalten müssen, weil wir auf den gleichen Seed für den Zufallszahlengenerator
testen wollen , dann können wir einfach in diese Szene gehen und es auf dem Inspektor oder zur Seite ausschalten. Also lasst uns das jetzt einfach da drin haben. Okay, also lass uns voran gehen und hier spielen und sehen, wo wir tatsächlich sind. Also lasst uns voran gehen und hier spielen und sehen, wo wir sind. Ich werde in den Charakter springen. Also zuerst, es hätte nicht hier sein sollen, weil es unter dem Gebiet für den Anfang war. Aber wir können auch sehen, dass nicht existierende Funktion getroffen wird. Das liegt daran, dass wir dort den Unterstrich haben. So können wir das wegnehmen, da dies die endgültige Implementierung von get hit this character ist. Also lasst uns voran gehen und Play drücken. Und jetzt können wir sehen, dass der Charakter getroffen wird, aber wir haben nicht wirklich den Hit-Status erstellt. Also hier oben, wir diesen Zustand hinzu,
Zustandshit , Okay, und lassen Sie uns noch einen Schuss geben. Okay, also hatten wir tatsächlich die Sprungkraft auf dem Charakter. Und Sie können sehen, dass
es nach dem ersten Bounce-Hit tatsächlich nicht möglich ist, ihn erneut zu treffen, oder zumindest vorübergehend. War es nicht. Ein weiteres Problem scheint zu sein, dass der Charakter nicht wirklich stirbt, wenn die Gesundheit unter 0 ist. Also lasst uns das schnell lösen. Wenn Gesundheit kleiner oder gleich 0 ist, können
wir einfach Q free verwenden, um das Zeichen zu entfernen. Also natürlich, wenn du wie eine Tod-Animation hattest, kannst
du diese unbesagte zuerst und dann Q kostenlos spielen. Dies entfernt jedoch die Szene aus der Hierarchie. Mit anderen Worten, den Feind aus dem Spiel zu entfernen. Also lassen Sie uns spielen und sehen, dass wieder. Das ist also ein Treffer, zwei Treffer, drei Köpfe. Ok? Das fügt dem Feind tatsächlich Schaden zu. Okay, es scheint, als ob wir tatsächlich brauchten, dass die globale Position auf der Hüftbox höher sein sollte als die globale Position auf dem Gebiet. Und Sie können das irgendwie debuggen, indem Sie
die globale Position für jeden ausdrucken , wenn Sie eine Kollision haben und sehen, ob die Zahlen tatsächlich aufgestellt sind. Also jetzt, wenn wir auf den Charakter springen, sollte
es tatsächlich hüpfen, aber nur, wenn es oben ist. Also mal sehen, dass von unten kommt, passiert
nichts, aber wenn wir von oben sprangen, bekommen
wir diese Sprungkraft . Ok. Und dann ist da noch der dritte Treffer. Okay, das scheint also mehr oder weniger zu funktionieren. Lassen Sie uns das noch einmal testen. Scheint, als hätte ich die Hitbox verpasst. Ok. Da ist das. Ok. Springen von unten tut nichts, aber wir können springen und ihn wieder schlagen. Okay, damit wir schnell das Kästchen für den Charakter ankreuzen können. Mal sehen. Also haben wir diese kleine Aufstellung hier oben. Vielleicht wollen wir die Sprungkollisionsschlagbox etwas breiter machen. Ich denke, das ist nicht das einzige Problem dort, also werden wir irgendwie großzügig damit sein, dass , wenn der Charakter irgendwie den Rand von ihnen trifft, wir ein wenig weiter gehen können, sogar vielleicht machen wir es 13, 14, auch wenn nicht. Ok. Also lasst uns spielen. Testen Sie es noch einmal. Oh, okay. Ich schätze und scheint insgesamt zu arbeiten. Ein weiteres Werkzeug, mit dem Sie Kollisionen überprüfen können. Wenn Sie zum Menü „Debuggen“ wechseln, können
Sie sichtbare Kollisionsformen aktivieren. Wenn wir jetzt auf Play klicken, können
wir direkt sehen, wo seine Kollisionsformen sind. Also, wo wir schlagen sollten, damit der Sprung stattfindet. Ok. Und lasst uns wieder auf ihn springen. Ok. In Ordnung. Und noch einmal. Okay, das scheint ziemlich richtig für unser wütendes Schwein zu funktionieren. Also im nächsten Video, werden
wir daran arbeiten, einen Weg zu machen, so dass das wütende Schwein
tatsächlich den Spieler beschädigen kann , wenn das wütende Schwein darauf läuft. Also sollte dieser Teil hoffentlich ein bisschen einfacher sein, als diese Hitboxen zum Springen und Springen aufzustellen. Und die verschiedenen Zustände.
21. Hit Zustand für Player hinzufügen: Jetzt, da wir in der Lage sind, auf einen Gegner zu prallen, um ihm Schaden zuzufügen. Oder zumindest mit wütenden Schweine-Bereich, sollten
wir einen Weg für die Feinde
wie das wütende Schwein in in der Lage sein, Schaden an den Spieler zu tun. So können wir voran gehen und das jetzt einrichten. So zuvor haben wir eine feindliche Klasse, die ein Basisskript, dass das wütende Schwein und haarig ist. Also bin ich in dieser Klasse, wir schaffen die Fähigkeit für Feinde getroffen zu werden. Und auch jeder Feind hat Gesundheit und die Variable kann getroffen werden. Um es so zu machen, dass unser Spieler von Feinden getroffen werden kann, müssen
wir ein paar Variablen einrichten ähnlich wie wir es mit dem feindlichen Skript gemacht haben. Das wütende Schwein erbt vom Feind, was bedeutet, dass das wütende Schwein Gesundheit hat und die Get-Hit-Funktion implementieren sollte. Was wir tun können, ist ziehen Sie alles eine andere Ebene, wo jeder Charakter und das Spiel Gesundheit haben und sollte eine get hit Funktion implementieren. So können wir dafür ein Skript erstellen. Wenn wir zu Zeichen gehen und dann mit der rechten Maustaste auf den Ordner klicken, machen Sie ein neues Skript. Also werde ich diesen Charakter Punkt G, D. nennen und in diesem Skript werden wir nur diese Informationen vom Feind abrufen, wie die Gesundheitsvariable. Und lassen Sie uns alles aufgeben, legen Sie es hier, und stellen Sie sicher, dass dies ein kinematischer Körper 2D ist, da jedes Zeichen ein kinematischer Körper 2D Typ Zeichen sein wird. Also jetzt, wenn wir Feind davon erben, wird
es wieder den Gesundheitswert bekommen. Nun, was ich manchmal bemerkte, ist, dass, wenn Sie zu viele Klassennamen
im Spiel haben und Sie eine Reihe von Vererbung haben, dass es manchmal Fehler bekommt. Anstatt also ClassName Zeichen hier zu setzen und dann Zeichen zu erweitern, was wir tun können, ist einfach diesen Text wegschneiden und dann den Pfad zum Zeichenskript ziehen und ablegen. Also, wenn sie das hier nach oben ziehen, wird
es im Grunde genauso funktionieren, als hätten wir Klassennamen und -zeichen verwendet. Obwohl wir es auf diese Weise tun, können wir einige Fehler vermeiden, die bei der Verwendung von Klassennamen und Godot auftreten. Ein Problem ist, dass, wenn Sie Ihre Skriptdateien in das Verzeichnis verschieben, es offensichtlich viele Fehler verursachen wird da dies ein Pfad zu dem Ort ist, wo es gespeichert ist. Wenn also das Zeichen dot h gd Skript nicht mehr ein im Characters Folder ist, dann wird es offensichtlich, wenn es versucht,
es zu laden , es wird Ihnen einige Fehler geben. So können Sie ein wenig damit herumspielen und herausfinden, welche Methode für Sie besser funktioniert. Also wird unser Feind von Charakterpunkt GD erben. Und das bedeutet, dass es diese Gesundheit haben wird, aber das ist auch nehmen Sie diese Funktion und setzen Sie sie in Charakter als auch. Also, das ist Zeichen wird
unser basisspezifisches Skript sein , das auf kinematischen Körper 2D geschrieben wird. Das ist also, wovon das erbt. Und dann ist der Feind eine Art Charakter. Und dann ist wütendes Schwein eine Art Feind. Also wird die wütende Schweineklasse von allem, was darunter liegt, erben. Haben Sie alles im Feind, und wir haben auch alles im Charakter. So können wir den Feind jedoch als separates Skript behalten, denn da das Spiel ein wenig komplexer wird, kann
es bestimmte Dinge geben, die wir wollen, dass alle Feinde haben, aber nicht unbedingt Charaktere wie der Spieler. Also lasst uns jetzt unseren Spieler zu einem Charakter machen. Also klicke ich auf Spieler und lass uns
den Extensor wegschneiden und einfach Drag & Drop den Charakter Punkt GD Skript. So erweitert den Pfad zu dem Skript, das für uns funktioniert hat. Also, jetzt wird der Spieler
eine Gesundheit haben und wir müssen diese Funktion schreiben. Also lasst uns hier runter gehen und schreiben, dass sie Hit Funktion bekommen. So Funktion wird getroffen und wir werden einen beschädigten Wert nehmen, der ein Float sein kann. Und die Dinge, die wir mit Hit zu tun haben müssen, ist offensichtlich, den Schaden zu nehmen. Also Selbstpunktgesundheit, es wird minus gleich dem Wertschaden sein. Und wir sollten auch den Zustand des Charakters ändern. So können wir selbst Punkt tun, aktuellen Zustand gleich Zustand Punkt Hit, die wir noch nicht erstellt haben. Also nehmen wir das einfach und knallen es hier oben, einen fünften Zustand zu
schaffen. Und dann haben wir natürlich eine Setter-Methode für diesen aktuellen Zustandswert. Also, wenn das läuft, wird
der eingestellte aktuelle Zustand hier unten passieren. Also denke ich, das wäre ein guter Ort, um die Parameter im Animationsbaum festzulegen. Natürlich haben wir den Parameter für den neuen Schuss nicht gesetzt, bei dem der Charakter Schaden erleidet und ein wenig gestaffeltes Zurückschlagen hat. Aber wir können einfach voran gehen und das im Voraus eingeben. Also der Zustand, für den wir passen, ist natürlich Zustands-Punkt-Hit. Und wenn dies geschieht, werden
wir Animationsbaum Parameter tun, Schrägstrich, Hit, Schrägstrich aktiv. Genau wie beim Doppelsprung wird
dies ein Einschuss sein. Deshalb steht hier aktiv. Es wird ein Boolean sein und wir machen es aktiv oder wahr. Lasst uns nun in die Spielerszene eintauchen. Gehen wir zum Animationsbaum, und lassen Sie uns dies für HIT einrichten. Also in unserem Spiel, wenn der Spieler Schaden erleidet, wird
das Vorrang vor jeder anderen Animation haben. Also sollte dieser eine Schuss vor Doppelsprung und der Hierarchie sein. Also werde ich hier mit der rechten Maustaste klicken, einen One-Shot machen. Der Variablenname, genau wie wir im Skript abstimmen, ist etwas gut darüber getroffen. Und jetzt können wir diese Ausgabe hier umleiten. Und der One-Shot wird hier gehen. Und wenn diese Variablen aktiv sind, werden
wir den One-Shot abspielen, also wollen wir diese Hit-Animation bekommen. Also lasst uns das hier reinlegen und das mit dem Schuss verbinden. Nun müssen wir auch sicherstellen, dass unser Animationsplayer
die Hit-Animation korrekt eingerichtet hat und dass die Hit-Animation im animierten Sprite ebenfalls eingerichtet ist. Wenn wir also auf animierte Sprite klicken, können wir den Treffer überprüfen. Und wir können das als acht Frame Animation sehen. Wir führen es mit 20 Bildern pro Sekunde aus. Das ist also wichtig. Wir können herausfinden, wie lange die Hit-Animation abgespielt werden soll, 4,05 Sekunden pro Frame. Das wird also insgesamt 0,4 Sekunden dauern, bevor wir in den Animationsplayer springen. Eine weitere Sache auf dem One-Shot, wie mit dem Doppelsprung ein Schuss, wollen
wir die Fade in der Zeit und Fade-Out Zeit 0 machen. Das müssen wir vor einer Sekunde tun. Und das wird ziemlich wichtig sein, damit die Animation tatsächlich richtig aussieht. Nun gehen wir zum Animationsplayer. Schauen wir uns unsere Hit-Animation an. Wir können sehen, dass es Schleifen ist und es ist nur 0,05 Sekunden. Also müssen wir Looping deaktivieren und es 0,4 Sekunden machen, denn so lange dauert es, bis alle Frames der Animation durchlaufen werden. Und jetzt, wenn der Charakter mit der Hit-Animation fertig ist, werden
wir eine Art Rückruf innerhalb
unseres Skripts wollen , wo im Grunde die Animation abgeschlossen ist. Also sollte sich etwas in der Spielerklasse ändern. Nämlich sollte es einen normalen Zustand wie
Leerlauf fortsetzen oder gehen wird wahrscheinlich State Dot AIDL verwenden. Also lasst uns voran gehen und diesen Teil des Skripts schreiben. Und in der Tat, was wir wahrscheinlich tun könnten, ist, dass einfach in Charakter zu setzen, da ich mir jeden Charakter im Spiel vorstellen kann, solange du keine NPCs irgendeiner Art hast, die völlig immun gegen alles sind. Ich werde eine Hit-Animation von irgendeiner Art haben. So können Sie dies in Spieler setzen, oder wir könnten es einfach hier als etwas schreiben, das für jeden Charakter im Spiel
implementiert werden sollte . Also machen wir weiter, traf fertig. Und wir können einfach einen Fehler schieben, wenn er nicht implementiert ist, da wir unsere eigene benutzerdefinierte Implementierung davon haben sollten. Also im Spieler, lasst uns das eigentlich schreiben. Also hier unten, können wir Funktion bei Treffer fertig machen. Und was wir tun werden, ist den aktuellen Zustand
des Selbstpunkts zu nehmen und wir werden diesen auf den Punkt im Leerlauf setzen. Und wenn Sie sich erinnern, unser Skript ist bereits so eingerichtet zwischen Leerlauf und Laufstatus
geht,
je nachdem, ob die Spieler eingeben. Also, ich lege es in Leerlauf sollte für genau hier gut sein. Und jetzt müssen wir nur sicherstellen, dass dies
aufgerufen wird , damit wir den Leerlauf fortsetzen können. also in der Animationsspur für den Animationsplayer
sicher, dass Sie Animationsplayer ausgewählt haben. Führen Sie Spur hinzufügen, Methode aufrufen, wählen Sie das Player-Skript aus, und gehen Sie zum Ende der Animation, das 0,4 Sekunden beträgt. Und lassen Sie uns mit der rechten Maustaste klicken und einen Schlüssel einfügen, wählen Sie die Methode, die Sie ausführen möchten. Und in diesem Fall wird es ungültig sein, wenn der Treffer beendet ist. Also lassen Sie uns einfach darauf doppelklicken. Jetzt, wenn es zu diesem Punkt kommt, wird
diese Funktion einfach automatisch ausgeführt. So wird der Zustand in Leerlauf umgeschaltet.
22. Gegnerische Collision: Nun, da unsere Charaktere im Grunde für den Eintritt in den Animationszustand der Hit eingerichtet sind, brauchen
wir einen Weg für den Feind, um tatsächlich Schaden an den Spielern zu verursachen, ähnlich wie wir die Sprungschlagbox für diesen Spieler haben, können
wir eine Trefferbox für der Feind, der nach dem Spieler suchen wird. Und wenn es findet, dass der Spieler überhaupt verschwunden ist, wird diese Hit-Funktion. Damit wir in unsere wütende Schweineszene springen können. Also jetzt mit dem wütenden Pick, können
wir eine Hitbox einrichten. Das wird sehr ähnlich sein wie das Einrichten der Verletzungsbox hier unten. Also werde ich mit der rechten Maustaste auf das wütende Schwein,
gehen, um eine Kindernotiz hinzuzufügen, und wir werden es zu einem Bereich von 2D machen. Ich werde diese feindliche Kollisions-Hit-Box umbenennen, da dies seine Fähigkeit ist,
Schaden zu tun , wenn es nur in den Spieler stößt oder ein mit dem Spieler kollidiert. Und jetzt brauchen wir eine geformte 2D für die hippen Dollar. Also werde ich mit der rechten Maustaste darauf klicken, einen untergeordneten Knoten hinzufügen und uns Kollisionsform 2D machen. In Ordnung? Genau wie bei einem Haufen anderer Sachen können
wir es einfach mit einer rechteckigen Form halten. Derzeit möchte ich nicht versehentlich angepasst springen verletzt Box,
so wäre es gut, das an Ort und Stelle zu sperren. Stellen Sie sicher, dass wir es in keiner Weise hinzufügen. Und jetzt können wir die Form für unsere Hüftbox annehmen und sie anpassen. Also werde ich sagen, dass dieser Charakter kann nur wirklich mit dem Spieler
passen Unebenheiten in sie richtig kollidieren , wenn es sich um hier schaut. Okay, also nehmen wir unsere Kollisionsform an und schrumpfen sie ein wenig nach unten. Also die große Kollisionsform, die für dieses Schwein sein wird, das mit anderen Dingen kollidiert, aber wir werden irgendwie großzügig mit dem Spieler sein und nur sagen, dass der Charakter irgendwie muss hier mit dem Spieler
überlappend sein, um tatsächlich Schaden zufügen. Also nehme ich die Rechteck-Form und lass es uns so etwas wie 77 machen, drücken Sie Enter. Und vielleicht können wir 78 sagen, aber dann nehmen wir die Kollisionsschlagbox und schieben sie ein wenig nach unten. Also lasst uns das da runter bewegen und wir können vorübergehend
die anderen Hüftboxen verstecken , damit wir alles klar sehen können, wenn wir es brauchen. Ich denke, das könnte okay sein. Vielleicht schiebe ich es nur noch ein Pixel nach unten und wir nennen es gut für dort. Wir können es später jederzeit anpassen. Also, jetzt für diese gegnerische Kollisions-Kollisions-Kollisions-Box , müssen
wir die Ebenen einstellen, wo sie suchen wird,
um dem Spieler Schaden zuzufügen. Also, wenn wir wollen, könnten wir einen Spieler verletzen Box-Ebene erstellen, wenn wir eine benutzerdefinierte Form
definieren wollen , wo der Spieler getroffen werden kann. Aber ich denke, dass die Hauptkörper-Kollisionsform gut funktionieren wird. Wir können das hier sehen. Art von passt die Größe des Charakters ziemlich gut. Also benutzen wir einfach diese Kollisionsform, die wir suchen werden. Dies ist beispielsweise die Kollisionsform für den kinematischen Körper. Dann werden wir im Skript die Körperprüfung verwenden, nicht die Bereichsprüfung. Also brauchen wir nicht, um einen Spieler ihre Dollar zu erstellen, aber wenn Sie das tun wollen, können
Sie zum Projektmenü gehen, gehen Sie nach unten zu 2D-Physik, und dann in Layer 8, kann Spieler verletzt Box sagen, Vielleicht brauchen wir das später. Also schreibe ich das jetzt einfach als Schicht ein. Aber stattdessen werde ich die Maske ändern, was der Bereich To-Dos sucht. Und ändern Sie das einfach in die Spielermaske. Und ich werde die Schicht für Kollision ausschalten, da dies nur nach dem Spieler suchen wird, um ihm Schaden zuzufügen. Und in der Tat können wir einfach ein Tupel überwachen und das einfach vollständig ausschalten. Möglicherweise möchten Sie auch die Kollisionsform 2D auf der linken Seite umbenennen. Nur damit wir wissen, welcher ist. Also werde ich diese feindliche Kollisionsform nennen. Und ich werde das dort speichern. Jetzt müssen wir die Signale der Hüftfalken nehmen und das dem wütenden Schwein Skript hinzufügen. Mit der gegnerischen Kollisions-Kollisions-Kiste kann
ich hier reingehen, um dir die Körperform zu geben, und ich werde das mit dem wütenden Schwein verbinden. Also, feindliche Kollision Hit Box Körperform eingegeben, wir werden versuchen, etwas Schaden an den Spieler zu verursachen. Aber die Sache ist eine Menge von Feinden werden in der Lage, Schaden auf diese Weise, wenn nicht alle von ihnen im Spiel. Also könnte ich tatsächlich wollen, um dies aus
dem wütenden Schwein Skript nehmen und wir können es in Feind GD und Stat setzen. So Feinde werden die Fähigkeit, Schaden an den Spieler zu tun wenn der Spieler in diesem Bereich betritt, wenn der Spieler nicht in einem anfälliger Zustand. Damit ein Feind Schaden zufügen kann, brauchen
wir eine andere Variable. Also werde ich exportieren, sagen
wir Float-Kollision, eine Kollisionsform, Kollisionsschaden. Und ich werde das auf eins verwerfen. Also werden wir überprüfen, ob dieser Körper ein Spielertyp ist. Also für unsere Kollisions-Hit-Box, sollte
der Körper an einem Spieler befestigt werden. Und wir können ziemlich sicher sein, dass das passieren wird, denn in unserer Hüftbox ist
die Kollisionsschicht nur so eingerichtet, dass sie die Spielermaske hat und die Spieler eine Art Charakter sein werden. Also, was wir tun können und unser feindliches Skript hier, es ist nur den Schaden zu diesem Körper zugewiesen,
vorausgesetzt, dass es ein Spielertyp ist. So Körperpunkt getroffen werden, Kollisionsschäden sollten theoretisch in
der Lage sein, da die einzigen Körper
, die auf dieser Schicht im Spiel sein werden , der Spieler sein werden. Und wenn es kein Spieler ist, dann haben wir wahrscheinlich etwas vermasselt und wir wollen eine Fehlermeldung bekommen. Also denke ich, es wird in Ordnung sein, diese Annahme hier zu machen. Warum sie einen Fehler bekommen oder überhaupt erfolgreich waren, wurde es
vielleicht nicht in diesem spezifischen Charaktertyp implementiert. Aber lassen Sie uns eine Chance geben. Okay, also jetzt werden Hits laufen. Spieler Umsetzung davon ist, dass es
Schaden nehmen wird und dass es wird, um den aktuellen Zustand zu treffen. Lassen Sie uns hier eine zusätzliche Änderung vornehmen, die darin besteht, dass
wir in der Zeichenklasse hier eine Menge GET-Methode hinzufügen. Also „Gesundheit“ einstellen. Und dann können wir sagen, Funktion eingestellt Gesundheit, und wir werden sagen, Gesundheit ist gleich Wert. Aber wenn die Gesundheit kleiner oder gleich 0 ist, dann können wir für mich auf dieses Objekt sprechen. Im Grunde bedeutet dies nur, dass jeder Charakter, der
auf 0 Gesundheit fällt , sofort aus dem Spiel entfernt wird. Vielleicht ändern wir das später, wenn wir einige Animationen hatten, um es aus dem Spiel zu entfernen, wenn wir es hier schreiben, dann ist es im Grunde für alle Charaktere eingerichtet. Also, wenn wir zum Beispiel zu wütenden Schwein gehen, brauchen
wir nicht wirklich dieses Q hier frei zu haben. Wir können einfach Selbstpunktgesundheit minus gleich Schaden machen. Und dann sollte das die Zeichensatz-Integritäts-Setter-Methode ausführen. Ich werde das hier hochziehen, damit es in der Nähe dieser Variablen ist. Also lasst uns voran gehen und spielen und sehen, wo wir sind. Wenn wir auf den Feind stoßen, wird die Animation für 0,4 Sekunden abgespielt. Und ich glaube, wir würden Schaden erleiden, das sind zwei Köpfe. Und dann nach drei Treffern sinkt die Gesundheit auf 0. So ist der Spieler Q aus dem Spiel befreit.
23. Timer und Schaden hinzufügen: Also das ist alles technisch funktioniert, aber ein paar Dinge, die wir wahrscheinlich dem Charakter hinzufügen wollen. Erstens, wenn alle unsere Feinde auf diese Weise mit unserem Charakter kollidieren, indem sie die Hit Box Studio Schaden zu ihm. Jeder Feind kann es einfach immer und immer wieder tun jedes Mal, wenn die Form in die Körperform gelangt. Wir wollen also sicherstellen, dass der Charakter nicht einfach überwältigt werden kann. Es sollte also eine Art Unverwundbarkeits-Timer für den Spieler geben, um sich selbst zu schützen. Grundsätzlich kann es nur einmal pro Sekunde getroffen werden. Und das wird das Spiel ein wenig fairer für
den Spieler machen , da wir zusätzliche Feinde hinzufügen. Wenn wir also zum Player gehen, können
wir hier oben auf einem untergeordneten Knoten mit der rechten Maustaste klicken. Und lass uns einen Timer machen. Also dieser Timer, wir können einfach haben, es ist 1 Sekunde Wartezeit standardmäßig. Das wird also die Dauer der Unverwundbarkeit sein. Und lassen Sie uns einen Schuss überprüfen, so dass, wenn dieser Timer auf 0 fällt, er nicht neu startet, er stoppt einfach. Also könnten wir das den unbesiegbaren Timer oder Unverwundbarkeits-Timer nennen, was auch immer Sie bevorzugen. Öffnen wir das Skript und wir werden es mit Fieber referenzieren. Also bin ich bereit, wenn unser unbesiegbares Dollarzeichen und Vince Vollzeit ist. Mit diesem Timer werden
wir es starten wollen, wenn wir getroffen werden. Also, wenn Sie feststellen, dass Get-Hit-Methode, dann können wir den Timer starten, wenn wir den Schaden nehmen. So unbesiegbarer Timer, Punktstart. Ich werde das hier reinlegen. Jetzt wollen wir verhindern, dass der Charakter Schaden erleidet, während der Timer läuft. Damit wir es hier aufstellen können. Also, wenn unbesiegbar Timer, und es gibt einen Weg zu bekommen, wenn es derzeit läuft oder nicht, aber ich habe es für eine Sekunde vergessen. Also lasst uns tatsächlich die Hilfe durchsucht. Und Sie können dies oben rechts verwenden. Wenn Sie Details über einen der Knoten und das Spiel suchen müssen. Also, wenn wir nur Timer hier eingeben, können
wir Timer finden und wir können alle Eigenschaften und Methoden darüber sehen. Also wollen wir überprüfen, ob es gestoppt ist. Wenn es aufgehört hat, sollte es in der Lage sein, Schaden zu nehmen, aber sonst nicht so. Und Spieler Dot GD und wir wollen, wird gestoppt. Dies ist eine Methode, also brauchen wir die Klammer und nur wenn sie aufgehört wird, werden wir all diese Sachen machen. Ansonsten bedeutet der Unbesiegbarkeit Timer, dass es egal ist, dass der Charakter technisch vom Feind bekommen hat, diesen Zustand nicht betreten wird. Dieser Charakter wird einfach wie gewohnt funktionieren. Okay, wenn wir jetzt spielen, sollten
wir in der Lage sein, die Anzahl der Male, die wir Schaden erleiden, zu begrenzen. Also werde ich einen Haufen darauf treffen und sehen, wie lange es dauert, bis der Spieler tatsächlich stirbt. Wie Sie sehen können, bin ich oft durch den Feind gegangen, aber der Spieler starb dort mindestens drei Sekunden lang nicht. Ich kann spielen und das noch einmal zeigen. Okay, Also gehen hin und her durch den Feind, und es dauert eine Weile zu sterben, weil die Unbesiegbarkeit Timer Begrenzung der Menge an Schaden für den Spieler. Nun eine letzte Sache ist, dass der Charakter kann sich einfach bewegen, aber will, wenn es Schaden nimmt. Also glaube ich nicht, dass das fühlt sich so gut an in Bezug auf die
Betonung, dass der Charakter sollte Schaden nehmen und irgendwie ein wenig zurückgeschlagen werden. Also sollten wir
eine benutzerdefinierte Bewegung einrichten , wenn der Charakter Schaden erleidet, so dass er ein wenig taumelt. Also, wie wir das tun können, ist hier oben in unserem Physik-Prozess, das ist unsere normale Art zu bewegen, aber wir wollen eine andere Art zu bewegen, wenn der Charakter im versteckten Zustand ist. So können wir diesen Code nehmen, ihn in seine eigene separate Funktion
verschieben. Hier unten nenne ich diese Funktion normale Bewegung. Es wird eine Eingabe erfordern. Wie Sie sehen können, benötigt diese Umkehrrichtung die Eingabe. Und dabei werden wir diesen Code ausführen. Und eigentlich werden wir hier nicht die Geschwindigkeit einstellen. Lass es uns einfach zurückgeben. Lass uns hier oben ein Spiel machen. Also im Grunde in jedem anderen Zustand, dann in dem Zustand, den wir gehen, um normal zu bewegen. Also lassen Sie uns den aktuellen Zustand vergleichen, und lassen Sie uns alle diese anderen Zustandsnamen erhalten. Also Zustand Punkt AIDL, Komma, Zustand Punkt, Zustand Punkt springen, Komma Zustand Punkt Punkt Doppel Sprung. Und in all diesen Fällen wird
die Geschwindigkeit gleich sein, was wir von normalem Move zurückbekommen, was die Spielereingabe hier oben nimmt. Und jetzt, im letzten Fall, oder zumindest der letzte aktuelle Fall, der Zustand Punkt Hit ist. Wir wollen eine spezielle Move-Funktion, so Geschwindigkeit gleich Hit Move. Und das wird keine Eingabe benötigen, weil der Spieler keine Kontrolle darüber
haben wird , wie sich der Charakter in diesem Fall bewegt. Also lassen Sie uns diese Funktion hier unten erstellen, Funktion passen, bewegen Sie sich, um hier einen kleinen Kommentar zu schreiben. Okay, also in Trefferbewegung, werden
wir einen Vektor zurückgeben. Natürlich, die Geschwindigkeit. Also brauchen wir einen Betrag und eine Richtung. Also für die Richtung möchte
ich überprüfen, auf welche Weise das Sprite gerade umgedreht wird. Und dann möchte ich in die umgekehrte Richtung gehen. Also, wenn der Charakter nach rechts gerichtet ist, möchte
ich, dass der Klopf zurück in die linke Richtung ist. Lassen Sie uns also eine Variable für diese Variable machen, die Richtung zurückschlagen. Und das wäre eine Ameise, entweder positiv oder negativ. Und wenn animierte Sprite Punkt Flip h. So wird dies bedeuten, dass der Charakter nach links gerichtet ist. In diesem Fall wollen wir, dass der Rückschlag nach rechts ist. Also die Rückstoßrichtung, es wird nur eine sein. Und in den anderen Fällen ist der Charakter nach rechts gerichtet, also wird das nicht Flip h sein ,
und das bedeutet, dass wir nach links klopfen wollen. Also klopfen Sie die Richtung zurück. Es wird gleich negativem sein. Und jetzt können wir diesen Wert von einem und negativen nehmen und ihn mit seiner Geschwindigkeit multiplizieren. Also wird unsere Geschwindigkeit für die NAACP zurück Geschwindigkeit zurückgeschlagen werden, nicht die Kollision skilisiert. Ich weiß nicht, wie du es nennen willst, manchmal schlagen die Richtung zurück. Und dann für das y, könnten
wir die Schwerkraft noch während der Kollision arbeiten. Das wäre eine Option. Oder wir könnten es einfach auf 0 setzen, was bedeutet, dass, wenn der Charakter in der Luft getroffen wird, es aufhören wird, die Schwerkraft zu haben. Also für den y-Teil dieses Geschwindigkeitsvektors könnten
wir hier nur die Standardgravitation anwenden lassen. Oder was wir tun könnten, ist die y-Geschwindigkeit einzustellen. Oder was wir tun könnten, ist die y-Geschwindigkeit auf 0 zu setzen, was bedeutet, dass für diese 0,4 Sekunden für den Charakter die Trefferbewegung macht, es wird nur eine Art von Fluss in der Luft und bewegt sich ein wenig nach hinten. So will ich es vorerst machen. Es liegt ganz an Ihnen, wie Sie die Bewegung des Charakters einrichten möchten. Aber ja, wenn Sie nicht möchten, dass sich der Charakter während dieser Hüftbewegung
vertikal bewegt , dann können Sie ihn einfach auf 0 setzen. Lassen Sie uns nun die Variable oben für die Knock-back-Kollisionsgeschwindigkeit erstellen. So Exportneigung weit dies und könnte es auf etwas wie 50 setzen. Ich will nicht, dass es zu schnell geht. möchte nicht, dass der Charakter einfach leicht fallen Kanten, die es passiert, in der Nähe zu sein, das wäre ziemlich ärgerlich. Also halten wir es gerade etwas klein für jetzt. Okay, lass uns weitermachen und spielen und sehen, wo wir sind. Okay, also gehen wir hier runter zum Feind, werden getroffen. Also, bevor wir den Spieler testen , werde ich
zuerst auf Level 1 gehen, auf den Spieler
klicken und ich werde ihm geben, sagen
wir, wie 20 Gesundheit, damit wir testen können, ohne das Spiel neu starten zu müssen. Also lasst uns voran gehen und spielen und sehen, wo wir sind. Okay, hier ist der Feind. Du wirst angegriffen. Hat wirklich keine Bewegung. Aber wenn wir dem Feind gegenüberstehen, dann kriegen wir diesen Rückschlag zurück und es ist in die entgegengesetzte Richtung, vor der wir standen. Das ist also im Grunde das, was ich will. Okay, also sehe ich einen Fehler im Moment, der ist, dass die Charaktere und reißen den Leerlauf Zustand und ein wenig zu schnell. Lassen Sie uns also den Player und den Animationsbaum überprüfen. Okay, und stellen wir sicher, dass hier alles funktioniert. Also scheint der eine Schuss zu funktionieren, richtig? Der Animationshit geht hier. Also vielleicht im Animationsplayer, können
wir diesen Nullpunkt vier Sekunden und Animation und Looping überprüfen. Okay, also hier ist, was es ist. Die Picknick-Statusfunktion läuft, obwohl sie im Zustand Punkt Hit ist. Ich glaube, dass die Schwein nächste Zustandsfunktion nach allem anderen läuft. Also könnten wir das hier abschneiden und dann einfach
den nächsten Zustand einnehmen und diesen auch hier laufen lassen. Mal sehen, ob das funktioniert. Also pick next state wird nur normal laufen wenn es im Grunde diese Art normalen Bewegungen macht. Also lassen Sie uns spielen und sehen, ob das funktioniert. In Ordnung? Okay, also kann sich ein Charakter immer noch bewegen. Und wenn wir getroffen werden, wird
es richtig zurückgeschlagen. Das ist es, wonach wir suchen. Wir möchten nicht, dass der Spieler versehentlich
den Trefferstatus verlassen kann , außer dass die Animation vollständig ausgeführt wird. So sieht es dort ziemlich schön aus. Es kann einfach den Druckdebug hier loswerden, nur um nach der Geschwindigkeit zu suchen. Eine letzte Sache, die wir vielleicht tun möchten, ist,
den Rückstoßrichtungsvektor 2 anstelle einer Ganzzahl zu machen . Technisch gesehen funktioniert das gut, aber was wir tun können, um es ein wenig klarer zu machen, ist gleich Vektor nach rechts. Und dann können
wir anstelle von negativem auf der x-Richtung Vektor zwei Punkt links sagen. Es kann Fälle geben, in denen Sie möchten, dass der Spieler umgeschlagen wird und ein wenig. Und in diesem Fall würden Vektor zwei hier besser funktionieren, da Sie auch eine y-Komponente für die Richtung definieren können. Also, was wir stattdessen tun können, ist das hier
raus zu nehmen und dann einfach mit der Rückstoßrichtung zu multiplizieren. Das wird also unsere Größe sein und dann wird dies die Richtung sein. Theoretisch würden wir das normalisieren wollen. Also denke ich, dass dieser hier technisch etwas tut, aber wir würden sicherstellen wollen, dass die Richtungen nicht über eins gehen weil es dann eine Art Größenordnung hier drüben haben würde. Also lasst es uns normalisieren. Und dann werden wir die Rückstoßrichtung darauf einstellen. So der normalisierte Vektor nur Richtung multipliziert mit der Geschwindigkeit. Und es sollte effektiv genauso funktionieren wie zuvor. Aber ich denke, das macht es ein bisschen einfacher,
genau zu verstehen , was los ist, damit sich unser Charakter immer noch bewegen kann und alles. Lassen Sie uns vom Feind getroffen werden, wird in die richtige Richtung zurückgeschlagen. Und ja, es funktioniert genau wie zuvor in Bezug auf die endgültige Funktionalität. So können wir Feinde wie das wütende Schwein unserem Spieler beschädigen. Und das ist ziemlich viel wird es für diesen Abschnitt über die Einrichtung der wütenden Pick sein.
24. Codierender Zustand: In diesem nächsten Teil werden wir den Wandgleitzustand für unseren Charakter hinzufügen. Wenn wir also an die Wand grenzen, sollten
wir in der Lage sein, sie nach oben und unten zu rutschen. Und es wird auch ein anderes Feld für die Bewegung geben. Also eine Sache, die ich hinzufügen werde, ist, die Rate zu reduzieren, die Sie durch die Wand
rutschen , im Gegensatz zu wenn er nur wegen der Schwerkraft fallen. Und wir werden auch die Möglichkeit hinzufügen, einen kleinen Sprung von der Wand zu machen, was sich von einem normalen Sprung unterscheidet, weil es uns irgendwie automatisch von der Wand
wegtreiben wird. Also lasst uns voran gehen und in unsere Spielerszene eintauchen. Und ich schätze, ein Ort, mit dem wir anfangen könnten, wäre der Animationsbaum. Also, wenn wir dies erweitern, können
wir sehen, dass es hier für eine Weile nichts gibt gleitende Animation. Und ich denke, was wir sagen werden, ist zwischen dem Einspritzschlag und dem Doppelsprung. Wir wollen, dass die gut töten eine hohe Priorität Animation für sie zu bekommen und Schaden zu nehmen ist im Grunde Token und alles vorgehen. Also haben wir es gleich hier drin. Und anstelle eines One-Shot wird dies zu einer Mischung machen , weil an der Wand kann ein- und ausgeschaltet werden. Also lassen Sie uns mit der rechten Maustaste hier und ich werde eine Mischung hinzufügen T2. Und diese Mischung zwei wird sein, ist an der Wand. Also, wie wir den Ausgang von unserem einen Schuss Doppelsprung verbinden um der Eingang auf ist an der Wand und trennen ist auf was? Der One-Shot, um den Trend zu beenden. Und bevor wir die Animation hinzufügen, müssen
wir sie tatsächlich korrigieren. So können
wir im animierten Sprite sehen, dass wir hier eine Wandsprunganimation haben. Aber eigentlich ist das nicht genau. Dies ist wirklich eine Wand Schiebe-Animation. Der Sprung wird nur wie eine Standard-Jump Animation aussehen. Also lassen Sie uns diese Animation umbenennen, um eine Wandfolie zu sein. Und nun gehen wir in unseren Animationsbaum damit ich mit der rechten Maustaste auf eine Animation klicken und wählen wir diese Wandfolie aus. Nun, wir haben diese Animation auch nicht im Animationsplayer erstellt. Also in der Animation Player, Lassen Sie uns gehen, um Leerlauf Animation und duplizieren Sie es. Okay, damit wir das umbenennen können, ich denke, ich muss hier ändern, wird der Wert oder die Animation sein. Und wir werden das natürlich ändern, während wir gleiten. So können wir jetzt in den Animationsbaum gehen, löschen Sie diesen Animationsknoten, und fügen Sie einen neuen hinzu, so dass es mit der Wand leichte Animation aktualisiert wird. Und jetzt verbinden wir das mit der Mischung. Wenn also unser Mischwert auf eins gesetzt ist, werden wir gut schlafen. Und wenn es auf 0 gesetzt ist, werden wir eine dieser anderen Animationen spielen. Also lasst uns jetzt in den Code eintauchen. Also mit dem kinematischen Körper 2D, gibt es eine Funktion, die
heißt, ist an der Wand mit Klammern. So können Sie das auf jedem kinematischen Körper 2D ausführen um zu überprüfen, ob sich die Figur an der Wand befindet oder nicht. Aber in meiner Praxis bin
ich nicht 100 Prozent sicher warum,
aber ich finde, dass Sie konsistentere Ergebnisse erhalten, wenn Sie überprüfen, ob es eine angrenzende Wand gibt, wenn Sie nur einen Re-Cast machen. Anstatt die Verwendung an der Wand zu verwenden und dies zu verwenden, um zu überprüfen, ob wir in den gleitenden Zustand gehen sollten, werden
wir Array-Cast verwenden, um zu sehen, ob wir gleich vor einer Wand sind. Und dann
werden diese Wandobjekte angeblich auch dafür passen müssen, dass sie auf der Weltschicht weil wir nur wollen, dass Dinge wie die Ziegel und die Plattformen tatsächlich als Frau zählen können, wir stießen in eine Feind, der nicht zählen sollte. Zum Glück, wenn Sie sich erinnern, hat
unser Spieler die Kollisionsmaske, wo wir nur nach der Welt suchen. Also im Grunde alles, was wir mit
schlechten einer 2D-Physik-Operationkollidieren können schlechten einer 2D-Physik-Operation ist das, was wir für die Masken verwenden oder wir werden einfach diese Maske verwenden. Also lasst uns weitermachen und unsere Funktion erstellen zu testen, ob wir als nächstes an die Wand angrenzen. Also werde ich diesen Funk auf Wand-Re-Cast-Test nennen. Ich möchte sicherstellen, dass es klar ist , dass wir nicht nur die Standard ist unwell Funktion verwenden, sondern unser eigenes Ding hier machen. Und dann brauchen wir eine Variable. Das wird also der Raumzustand sein. In einem Ghetto-Spiel können wir dieses Raumzustandsobjekt erhalten, das die Möglichkeit hat, Re-Cast-Tests durchzuführen, indem wir
Git World 2D verwenden und dann diese direkte Raumzustandseigenschaft überprüfen. Damit können wir also eine Strahlenbesetzung machen, die im Grunde einen Ausgangspunkt nimmt, zu einem anderen Punkt in unserer 2D-Welt
hinausgehen und sehen, ob es irgendwelche Kollisionen zwischen dem Start- und Endpunkt gibt. Wir werden also eine Ergebnisvariable haben, die ein Wörterbuch der auftretenden Kollisionen sein wird. Und das wird gleich
unserem Raumzustandsobjekt sein , das die Re-Cast macht und wir werden es als Schnittstrahl tun. Wir beginnen von der Position unserer Spielerobjekte. Das ist also die globale Position. Und wir werden die Endposition auf diesen Strahl setzen. Grundsätzlich unsere Ausgangsposition plus eine bestimmte Anzahl von Pixeln in die Richtung, in die unser Charakter steht. Wo unser Charakter zugewandt ist, wird die Wand sein, die uns wichtig ist. So können wir hier mit unserer globalen Position beginnen. Und eine beliebige Anzahl von Pixeln. Ich fand, dass 10 wirklich gut funktioniert. Und Sie können eine Eigenschaft an der Spitze setzen, wenn Sie es dort und so setzen wollen. Und wir gehen zu Zeiten, diese phi und u Funktion wird die Richtung zu schreiben. Also lasst uns voran gehen und diese Funktion jetzt schreiben. So Funktion in Richtung zugewandt. Das wird also ziemlich unkompliziert sein. Wir werden uns nur einen Blick werfen. Äh, in welche Richtung das Sprite des Charakters zugewandt ist. Und dann wird das unsere Richtung sein. So können wir einfach überprüfen, ob das animierte Sprite blip H falsch ist. Also, wenn das falsch ist, dann ist unser Charakter nach rechts gerichtet. Also wollen wir einen Vektor zwei Punkt zurückgeben, richtig? In Bezug auf Werte wäre
dies nur ein Komma 0,
0 für y, eins für x,
was bedeutet, dass wir dem Recht gegenüberstehen. Ansonsten ist es im Grunde nach links gerichtet. So können wir einfach Vektor zwei Punkt links zurückgeben. So super einfach. Okay, jetzt können wir zu unseren Re-Cast-Testfunktionen zurückkehren. Es gibt also noch ein paar weitere Parameter hier. So können Sie den dritten Parameter rechts sehen, dort ist ausschließen und es braucht ein Array, also möchten wir das aktuelle Objekt davon ausschließen. Es ist hier nicht wirklich erforderlich, aber nur für den Fall, dass aus irgendeinem Grund, wir wollen nicht, dass der Spieler als Wand für die Ergebnisse erscheint. Also könnte genauso gut selbst hier tun wie das Array. Also beachten Sie die eckigen Klammern. So hat er es als Array definiert. Und das muss ein Array sein, denn das ist der Typ für den Umfang. Als nächstes können wir hier eine Kollisionsmaske setzen um sie so zu machen, dass intersektorale Sie sind, wenn es ausgeht und auf Kollisionen überprüft, es macht es nur auf der Weltebene. Der einfachste Weg, dies zu tun, ist nur, die Kollisionsmaske hier zu nehmen. Und wir können einfach ziehen, dass direkt aus dem kinematischen Körper 2D durch Selbstpunkt-Kollisionsmaske. Das wird also den Re-Cast-Check für die Wand für uns machen. Und jetzt können wir einfach ein paar sehr einfache Kontrollen machen. Wenn es also ein Ergebnis und das Wörterbuch gibt, bedeutet
das, dass es eine Kollision gab. Und vermutlich geschieht diese Kollision in der Weltebene,
was bedeutet, dass es sich um einen Block oder ein anderes Objekt handelt, das als Wand zählen würde. Und wir wollen nur sehen, ob es irgendwas gibt. So können wir das ganz einfach tun, wenn die Ergebnispunktgröße größer als 0 ist, dann ist offensichtlich etwas da. Also kehren wir wahr zurück. Sonst gibt es keine Kollisionen. Es sollte also keine Mauer direkt vor uns sein, also können wir falsch zurückkehren. Je nachdem, wie wir codieren, würde
es wahrscheinlich das Ergebnis davon
mehrmals für jede Schleife unseres Physik-Prozesses benötigen , wird
dies eine nützliche Variable sein, um zu bestimmen welcher Status in und welche Handlungen und Bewegungen wir ergreifen sollten. Also, wenn wir das hier oben ausführen und unsere Physik-Prozessfunktion könnte es einfach hier neben Animationsparameter setzen. Also werden wir diese Funktion ausführen und dann werden wir das Ergebnis davon in eine boolesche Variable speichern. Also können wir einfach hier rauf kommen und tun var ist an der Wand angrenzend. Wieder einmal, nur ändern Sie den Namen ein wenig, so dass es unterscheidet von der kinematischen Körper ist auf Wolf-Funktion. So ist die angrenzende Wand. Das ist nur das Ergebnis davon, ist auf Wand Re-Cast-Tests. Und jetzt können wir das benutzen, wann immer wir sehen müssen, ob es die Mauer verlassen hat oder wir vom Krieg gesprungen sind, was auch immer. Das wird also sehr nützlich sein. Okay, also nehmen wir diesen Wert und gehen runter, um den nächsten Zustand auszuwählen. Also danach, sonst wird ein weiteres hinzufügen. Also hier werden wir etwas damit machen und eine Sekunde hier. Aber im Moment werden wir noch eine andere haben, wenn hier unten. Also müssen wir das anders ändern und zu einem anderen, wenn, da es hier sowieso nur diese eine Bedingung gibt, wir könnten das hier genauso gut hochziehen. Und ich füge es so ein. Und jetzt in diesem Fall würden wir
den Double-Jump-Status eingeben sollte genau wie vorher funktionieren. Und jetzt brauchen wir noch eine andere. Wenn wir weiter nach unten gehen, wenn all diese anderen Bedingungen nicht erfüllt wurden, dann werden wir hier verwenden. Das grenzt an die Wand. Also, wenn wir im Grunde an der Wand sind, dann wollen wir den Wandschiebezustand betreten. Also lassen Sie uns selbst Punkt aktuellen Status gleich Zustand Punkt Wand Folie tun. Und dann gehen
wir natürlich nach oben und fügen das in die Liste unseres Staates. Wir können dies auch ein wenig ändern. Wenn also der Charakter in der Luft ist und den Sprungknopf ausführt, dann wollen wir normalerweise, dass der Doppelsprung stattfindet, aber wenn wir an der Wand sind, wollen
wir, dass die Sprünge zurückgesetzt werden. Also im Grunde wird es von Sprüngen springen werden sollten auch eine normale Sprünge zu tun. Also, was wir hier tun können, ist setzen, dass IF an der Grenze Wand, und dann, wenn das der Fall ist, dann statt Eingabe doppelten Sprung wird nur eingegeben Sprung. Also selbst dunkel aktuellen Zustand gleich Zustand Punkt sprang. Und dann das andere hier unten, Doppelsprung. Also, während wir auf der Wandrutsche sind, werden
wir wollen, dass die Bewegung ein bisschen anders ist,
aber wir werden immer noch die PEC nächste Zustandsfunktion ausführen. Also richten wir eine weitere Übereinstimmung für den aktuellen Zustand ein. Wenn wir also die Wandrutsche bekommen, werden
wir immer noch den nächsten Zustand auswählen. Da wir grundsätzlich bereits die anderen Bedingungen einrichten, die wir
dafür in der Picknick-Zustandsfunktion benötigen . Aber für die Bewegung selbst werden
wir ändern, wie das funktioniert, wenn wir an der Wand sind. Also werde ich eine neue Funktion für Gesetz Schiebedach erstellen. Und das wird keine Eingabe vom Spieler nehmen weil wir im Grunde nicht x-Eingang verwenden werden, um x-Bewegung zu bestimmen. Es wird an der Wand geklebt werden, bis der Charakter von der Wand weg springt. Also lassen Sie uns voran und erstellen Sie diese Funktion hier unten. Hüfte So Funktion, während leichte Bewegung. Ok? Und genau wie die anderen Funktionen zum Bewegen, werden
wir einen Vektor zurückgeben. Und für das X nehmen wir
die aktuelle Geschwindigkeit und wir werden das einfach so halten, wie es ist. Wenn es also keine x-Bewegung gibt, ändern
wir die x-Bewegung nicht. Und dann werden
wir noch Männer tun, die den niedrigeren der beiden Werte nehmen. So Geschwindigkeit, warum die aktuelle y Geschwindigkeit und irgendwie ähnlich wie vorher, werden
wir die Spieleinstellungen Schwerkraft hinzufügen, aber wir werden dies mit einem Reibungswert multiplizieren. Also werde ich diese Wandrutsche Reibung nennen. Und dann wollen
wir, genau wie die normale Funktion, immer noch, dass diese Endgeschwindigkeit unsere absolute schnellste Geschwindigkeit ist. Wir werden ihnen folgen. Also natürlich brauchen wir diesen Wandschieber Reibungswert. Also gehe ich einfach hier nach oben und mache eine weitere Fließvariable. Und ich werde wollen, dass dies unter eins weil der Charakter langsamer gleiten sollte, wenn er an der Wand ist, irgendwie die Wand packt, dann würde es normalerweise einfach frei fallen. So kann ich das mit 0,5 multiplizieren und dann wird es ziemlich langsam an der Wand rutschen. Und das wird uns im Grunde unsere Wandschieberbewegung geben, während wir in den Wandschieberzuständen sind, so dass wir unsere x-Geschwindigkeit nicht ändern können. Und das Abrutschen der Wand wird langsamer sein, als es fallen würde. In unserem Code, wenn wir uns im Wandschiebezustand befinden, können wir
in den meisten Staaten springen drücken, um zu springen. Also, wenn wir an die Wand grenzen, werden
wir diesen state.com bekommen, ansonsten, Staat dot-dot-dot. Und wenn wir uns erinnern, wegen der Satyr-Funktion für diesen aktuellen Zustand, wenn wir hier runterkommen, bedeutet
das, dass es die Sprungfunktion ausführen wird, die einen Upwards Jump Impuls hinzufügen und den Sprungwert erhöhen wird. Das ist im Allgemeinen in Ordnung, aber wir wollen, dass es ein bisschen anders funktioniert, wenn wir es tun. Von der Wand.
25. Wall: Also, wenn wir diesen Jumps Zustand von der Wand betreten, und wir können darauf überprüfen, indem wir den aktuellen Zustand überprüfen, bevor wir ihn tatsächlich ändern. So der aktuelle Zustand Double gleich Zustand Punkt Verlust Folie. Und dann nur für den Fall, dass wir in irgendeiner Weise in den Jumps Zustand wechseln, ohne den Sprung zu drücken, dass wir nicht von der Wand springen. Zum Beispiel, wenn die Figur irgendwie von der Wand gleitet, aber nicht unter der Erde, und wir geben den Sprungzustand für die Animation. Wir wollen nicht, dass es sofort springt. Also Eingabepunkt ist Aktion, nur Wappen. Und wir suchen nach Springen. Okay, das ist eine zusätzliche Klammer. Ok? Und wenn das der Fall ist, dann können wir einen Wandsprung machen. Das wäre also ähnlich wie beim Springen, aber nicht genau das Gleiche. Sonst. Wir können tun, der normale Sprung und andere Umstände. Also gehen wir hier zum Grundsprung und lassen Sie uns einen Wandsprung erstellen. So Dinge, die über die Wand gleich sein werden springen. Also für den Wandsprung, werden wir dasselbe tun. Die y-Geschwindigkeit wird die gleiche sein, wenn wir diesen Wandsprung betreten. Und weil wir von der Wand betreten, sollten
die Sprünge immer bei einem beginnen. Da wir die Wand in Betracht ziehen, wie
der Boden, in dem Sinne, dass sie unsere Sprünge zurücksetzt. Die andere Sache, die wir hier haben wollen, im Grunde sperren unsere Basisbewegung, so dass wir mit etwas x Geschwindigkeit neben
der y-Geschwindigkeit von der Wand weg springen können . Aber wir wollen nicht, dass dies etwas ist, das der Spieler für eine Sekunde kontrollieren kann. Also hier oben, für unseren normalen normalen Zug, können
wir hier überprüfen, ob der Wassersprung-Timer
, den wir im Begriff sind zu erstellen, begonnen hat, und wenn er nicht begonnen hat, dann machen wir einen normalen Schritt. Aber wenn es läuft, dann werden wir auf diese normale Bewegung verzichten. Auch wenn wir uns im Jumps Zustand befinden, um vorübergehend einen speziellen Wandsprung zu machen. Also lassen Sie uns einen Wandsprung-Timer und unseren Spieler erstellen. Also werde ich den Timer erstellen hier einen Wandsprung-Timer machen. Und wir werden die normale Bewegung vom Spieler für Ast nehmen, sagen
wir 0,15 Sekunden. Wenn Sie also die Wartezeit auf 0,15 ändern, stellen Sie sicher, dass ein Schuss überprüft wird, denn sobald der Timer fertig ist, möchten
wir nicht, dass er wieder läuft, bis wir einen neuen Wandsprung irgendwann im Spiel neu starten. Jetzt müssen wir diesen Timer im Skript referenzieren, genau wie der unbesiegbare Timer. So unready var Log-Jump Timer gleich Dollar-Zeichen Wand Jump Timer. So können wir hier nachsehen, ob der Wandsprung-Timer gestoppt wird. Und das ist eine Funktion. Also, wenn es gestoppt wird, dann machen wir den normalen Umzug hier. Sonst machen wir einen weiteren Spezialzug. So dass spezielle Bewegung, Lassen Sie uns eine andere Funktion machen, für die wir es nennen können, während Sprungbewegung. Und wieder einmal brauchen wir die Eingabe nicht, weil dies eine Art Zwangskontrolle für die X-Achse ist. Und komm runter. So Funktion beim Springen Bewegung. Und der Grund, warum wir diese Funktion brauchen, ist, weil im Gegensatz zu
dem Sprung, der irgendwie nur ein normaler schneller Impuls ist, dies tatsächlich über ein paar Frames gehen wird. Also wollen wir, dass es so lange tut, bis der Timer an der Wand Sprung fertig ist. Deshalb müssen wir das jedes Bild ausführen, bis der Timer abgelaufen ist. So können wir einfach einen Vektor hier zurückgeben. Und das wird Bewegungsgeschwindigkeit machen. Und andere Variable muss eingestellt werden, welche während gesprungen Richtung ist, die in dieser Wandsprungfunktion sein wird. Also im Grunde die Richtung, in der der Charakter von der Wand
weg springt wird die Richtung sein und bewegt sich in, bis der Timer fertig ist. Und dann hier unten wird
die Bewegung die gleiche wie eine Standardbewegung sein. Ziehen Sie einfach die Wand weg, leichte Reibung. Es ist also nur Geschwindigkeit y plus Schwerkraft. Und jetzt müssen wir die Wandsprungrichtung erstellen. Also gehen wir runter zur Wandsprungfunktion. Wieder. Eine Sache, die wir tun müssen, ist, den Timer zu starten, während Jam Timer startet. Und wir müssen auch die Wandsprungrichtung bekommen. Und das wird gleich der entgegengesetzten aktuellen Richtung des Rahmens sein, wo wir den Wandsprung beginnen. So negative Gate-Richtung. Und das ist eine Funktion. Das ist also auch diese Variable hier oben deklarieren. In diesem sollte ein Vektor zwei sein. Das war also eine Menge Code. Lassen Sie uns gehen, um den aktuellen Zustand zu setzen. Und wir müssen hier ein wenig aufstellen, wenn wir den Wandzustand betreten. Also lassen Sie uns Zustand Punkt Wand schieben 11 an der Wand tun. Eine Sache, die wir definitiv setzen wollen, sind die Sprünge gleich 0. Da wir die Sprünge für den Spieler zurücksetzen. Und wir wollen auch, dass der Animationsbaum wird
der Parameter gesetzt ist dieser ON Wand Schrägstrich Mischung Betrag. Und das wird auf eins gesetzt werden. Und so muss das eine Eins sein, damit die Wandfolien-Animation abgespielt werden kann. Okay, und es sieht so aus, als hätte ich den Namen für diese Variable hier oben falsch geschrieben. Also lassen Sie uns das einfach einfügen, während Jam Richtung ist, was wir wollen. Nun schließlich wollen wir auch, dass die unerwünschte Aktualisierung auf jedem Frame. Also überprüfen wir nur, ob der Charakter noch an
der Wand ist oder nicht und aktualisieren das dann. Vielleicht brauchen wir das
hier nicht einmal , weil wir nur an jedem Frame setzen werden. Also schneide ich das einfach ab. Und wir gehen hier hoch, um Anime-Parameter festzulegen. Und das werden wir es stattdessen tun. Also werden wir nehmen, dass die angrenzende Wand ist und es in eine eins oder 0 umwandeln, je nachdem, ob es wahr oder falsch ist. Also lasst uns schreiben ist auf Gesetz und ich denke, ich kann erklären, dass das offensichtlich eine HNO sein wird. Und wir können tun, wenn Wand
angrenzt und wenn sie an die Wand grenzt, sagen wir, es ist an der Wand. Die Variable sollte also eine Eins sein. So ist auf, während nT gleich 1 ist, sonst ist an der Wand, wird gleich 0 sein. Und jetzt, da es eine ganze Zahl ist, können
wir den Parameter einstellen. Also Animationsbaumpunkt-Set-Parameter sind auf der Wand Schrägstrich Mischung Betrag. Und das wird zu welcher Stunde auch immer auf Gesetz Integer gesetzt ist. Also jetzt sollte unser Animationsbaum
jeden Frame aktualisiert werden , um zu wissen, ob wir die Wand gleitende Animation spielen sollten oder nicht. wir einfach sicher, dass wir im Animationsbaum diesen Parameter hier haben. So können wir sehen, dass Parameter an der Wand ist, sie ausblenden. Und wir können das Setup mit der Wandrutsche sehen.
26. Wandsprung und Fertigstellung: Okay, also nach all dem Code, lass uns voran gehen und tatsächlich sehen, wo wir sind. Lasst uns spielen. Ok. Mal sehen. Wir haben die Wand gleiten, okay, und Sie können sehen, wenn wir von der Wand springen, die Animationsparameter richtig eingestellt. Dies ist einer der Gründe, warum ich nicht mit seinem eigenen Wandcheck, denn wenn Sie den Webcast verwenden, bekomme
ich einfach viel bessere Ergebnisse. Sobald wir hier oben sind, überprüft
es hier drüben nach der Re-Cast. Es findet keine Mauer. Also wechseln wir sofort zur Jumper-Herbstanimation, die einfach viel besser aussieht. Also eine Sache, die wir hier beachten können, ist, dass unser Charakter bewegt sich ziemlich schnell derzeit, mit der Fähigkeit, doppelt springen und machen Wandrutschen. Das ist ganz oben, also müssen wir das wahrscheinlich abschwächen. Eine andere Sache, die ich bemerkte, ist, dass es nicht immer gut anfühlt, an
den Rand eines dieser Blöcke zu gehen und dann mit dieser Kapsel 2D-Formen abgleiten. Also tatsächlich änderte die Form des Charakters in ein Rechteck als auch. Ich glaube, ich sagte zu Beginn dieses Kurses, es ist irgendwie an Ihnen, was Sie bevorzugen. Und ich denke an diesen Punkt, ich bevorzuge es, ein Rechteck zu sein. Eine Sache, die momentan nicht super gut funktioniert, ist, wenn wir diesen Wandsprung machen, stecken
wir darin fest. Also bin ich mir nicht sicher, ob wir richtig überprüfen, ob der Timer gestoppt hat. Denn sobald der Timer gestoppt ist, solltest
du in der Lage sein, die Kontrolle über deinen Charakter wiederzuerlangen. Okay, also lasst uns zuerst die tief hängenden Früchte im Spieler machen, wir können die Kollisionsform ändern. Also ändern wir dies in eine Rechteck-Form. Und ich glaube, die Größen, die ich für diese Arbeit setzen wollte, 10707 und 10, denke ich, es war. So grob die Form unseres Charakters,
aber jetzt wird unsere Kollisionsform es so machen, dass wir kein
Gleiten von der Kante haben sollten und warum das B klar an ist klar aus. Ich denke, eine andere Möglichkeit, um möglicherweise zu umgehen, die die
Verwendung von Moving collide Funktion anstelle von Verschieben und Schieben sein könnte . Da die Bewegungen wie Funktion werden Sie irgendwie auf dem Boden bewegen. Aber die bewegende Kollisionsfunktion, wenn etwas im Weg ist, wird
es einfach Ihre Bewegung vollständig stoppen, grob gesagt. Aber ich denke, das wird jetzt ziemlich gut funktionieren. Als nächstes möchte ich etwas von der Bewegung im Spiel begrenzen , damit wir
den Sprungimpuls herunterdrehen können. Ich werde das standardmäßig auf 500 herunterziehen. Und dann in den Spieleinstellungen werde
ich die Schwerkraft auf 40 senken. Lassen Sie uns auf Play drücken und sehen, wie sich das auf die Dinge auswirkt. Vielleicht wollen wir sogar die Geschwindigkeit der Charaktere um ein bisschen senken. Also lass uns im Spieler sehen, okay, es benutzt immer noch 200. Also schätze ich, wir könnten es auf 180 setzen. Okay, also ist es immer noch ziemlich schnell. Aber ich denke, mit dieser Menge an Schwerkraft ist
es ein bisschen weniger lächerlich. Destill wäre eine ziemlich schnelllebige Plattform ein bisschen, vielleicht für einen Ninja-Frosch, das macht irgendwie Sinn. So können wir es bei den Einstellungen für jetzt belassen. Okay, also haben wir das Problem, dass eine Wandsprungbewegung viel zu lange andauert. Also werde ich tatsächlich den Wandsprung Timer nehmen und die verbleibende Zeit drucken. Lassen Sie uns also die verbleibende Zeit im Konsolenprotokoll ausdrucken und sehen, wie lange dies tatsächlich dauert, sollte 0,15 Sekunden betragen, was ziemlich schnell ist. Ok? Es dauerte also einen Rahmen, sie sind im Wesentlichen und danach geht es immer noch. Ok. Siehst du also, was hier los ist? Wenn wir die Wand verlassen, ist es immer noch an der Wand. Schiebezustände, deshalb können wir die Bewegung nicht kontrollieren. Was wir hier unten tun könnten, ist einfach einen anderen Weg hinzuzufügen, um in den Jumps Zustand zu gelangen, aber machen Sie es so, dass wir das tun, ohne tatsächlich zu springen. So wissen wir bereits an diesem Punkt, dass die angrenzende Wand falsch ist. Also müssen wir nicht wirklich nachsehen. So können wir einfach selbst Punkt aktuellen Zustand hier ist gleich Zustand dot-dot-dot. Also, wenn wir den Zustand so betreten, da dies im Grunde sein wird, wenn etwas bewirkt dass
der Charakter die Wand verlässt, die nicht den Sprungknopf drückt. Dann wollen wir hier unten sicherstellen, dass wir es betreten, ohne zu springen. Und deshalb habe ich das hier geschrieben. Ok? Dies ist also im Grunde nur, um zu unterscheiden, dass es verschiedene Möglichkeiten gibt, in den Jumps-Zustand zu gelangen. Und wir versuchen nicht immer, tatsächlich eine Sprungfunktion zu machen, auch wenn wir diese Jump Animation spielen. Also lasst uns voran gehen und jetzt spielen. Und hoffentlich sollte der Charakter in der Lage sein, oh Gott. Okay, also gehen wir weiter und schauen uns mal an. Und klar, das ist nicht das, was wir beabsichtigten. Also denke ich, dass wir hier tatsächlich einen Zustand brauchen. Also machen wir noch etwas anderes, wenn nicht an der Wand angrenzend, schätze ich. Also lassen Sie uns in die else-if setzen und wir werden überprüfen, ob der aktuelle Zustand gleich dem Zustand Punkt wa Folie ist. So sollten wir nur willkürlich und in
den Sprungzustand aus dem Wandschiebezustand so können. Und nur so ist es ein bisschen lesbarer, auch verständlich wichtig. Und nicht ist die angrenzende Mauer. Also, wenn dieses Bit bereits gelaufen ist, dann sollte dies bereits wahr sein. Es wird also nicht wirklich notwendig sein. Aber ich schätze, es gibt einen Hinweis darauf, was hier vor sich geht. Also lasst uns voran gehen und spielen. Und wir sollten nicht in der Lage sein
, diesen Sprung von Anfang an zu betreten , weil wir nicht an der Wand waren, aber jetzt sind wir auf der Wandrutsche. Lass uns von der Wand springen. Und Sie können sehen, es gibt einen Weg für uns, den Sprung zu betreten, aber ohne tatsächlich eine weitere Jump Animation hinzuzufügen. Also haben wir nur den einen Sprung weg von der Wand. Und das ist es, wonach wir gesucht haben. So können wir sehen, obwohl der Wandsprung gezwungen ist, können
wir auf die Wand drücken und es geht ziemlich schnell zurück. Technisch gesehen funktioniert das wie beabsichtigt. Vielleicht bewegt es sich ein wenig zu schnell und die Luft, so konnten wir die Zeichen Standard verlangsamen, Luftbewegung oder Luft horizontale Beschleunigung, wenn wir wollten. Aber wenn Sie das Gefühl des Charakters jetzt mögen, dann sollte es ziemlich gut sein, für alle Animationen Aufnahme zu gehen, setzen Sie diesen Charakter mit vielleicht ein wenig zu gleiten um die Karte. Aber vieles davon wird nur die Variablen optimieren. Also lassen Sie uns das kleine Bit ausschneiden, das auf die Konsole gedruckt wird, protokolliert ein Haufen. Ich werde nur Control F drücken und Footprints überprüfen. Ich schätze, das hier ist okay. Aber lassen Sie uns diesen Wandsprung Timer Text loswerden. Nun, noch eine Sache zu zeigen. Früher habe ich gesagt, dass, wenn wir unseren Webcast machen, wir wollen sicherstellen, dass dies nur geschieht, wenn unsere Charaktere an der Wand so. Und vielleicht wollen wir nicht einmal die Mauer umarmt haben wenn wir auf dem Boden und der Wand so sind. Das ist eine andere Sache, die wir ausschalten können. Vielleicht mögen wir es, ich weiß es nicht. Aber wir wollten sicherstellen, dass das Schwein nicht als Wand zählt. Und Sie können sehen, dass das Schwein eindeutig nicht als die Wand
zählt, weil es sich auf einer separaten Schicht befindet, es ist auf seiner feindlichen Schicht, was Physikschichten wirklich hilfreich macht. Damit wir immer noch auf sie prallen können. Wir können immer noch sehen, ob wir einen Angriff bekommen und dann einen doppelten John. Ok, Nett. Und danach können wir für ein paar schöne Wandrutschen
in einen Sprung gehen oder während gleitet in ein Double, Dumps, was auch immer wir tun wollen. So funktioniert unser Charakter hier ziemlich voll. So wird es ein paar weitere Dinge, die wir in das Spiel noch
wie ein zweiter Feind hinzufügen wollen und tatsächlich einige Ebenen aufzubauen. Es ist eine Weile her, seit wir den Kachelsatz berührt haben, aber es könnte Spaß machen, zwischen ein paar Ebenen zu wechseln. Wenn Sie Level eins schlagen, können
Sie auf Stufe 2 gehen, so weiter und so weiter. Das wird also irgendwie das sein, was wir uns in den letzten Videos ansehen.
27. Bereinigung und Bug Fixes: Okay alle, Also, wie wir nah am Ende dieses Kurses kommen, möchte
ich ein kurzes Video hier haben, um einige
der Dinge zu bereinigen , die früher ein bisschen chaotisch waren. Damit beginnt also die Doppelsprunganimation auf 0,35 Sekunden zu erhöhen. Also, wenn wir einen kurzen Blick auf den Doppelsprung werfen, ich denke, es endet ein wenig abrupt dort. Und ich habe festgestellt, dass, wenn wir die Animationsdauer ein wenig erhöhen, dass sie wieder in ihren Sturz übergeht oder Animationen ein wenig glatter springt. Gehen wir also in den Player, den Animationsplayer. Und wenn wir die Doppelsprunganimation finden, können
wir die Dauer hier auf 0,35 Sekunden erhöhen. Ändern Sie diesen Objektfang auf 0,05 Sekunden. Und lassen Sie uns hineinzoomen und verschieben Sie diese Animation auf die 0,352-Markierung. Also jetzt, wenn wir wieder ins Spiel gehen, denke
ich, die Animation geht einfach ein bisschen besser dort. Das nächste, was ich tun will, ist ein zweites Schwein zum Spiel hinzuzufügen. Also bauen wir noch nicht wirklich unsere Levels auf. Aber ich denke, dieser dritte Wegpunkt sitzt schon lange hier. Und da unser wütendes Schwein komplett gemacht ist, ist
es eine Schande, wenn wir einen Teil des Codes nicht wiederverwenden, lassen Sie uns einfach unser Schwein in der Hierarchie auswählen und einen Befehl oder Control D ausführen, um es zu duplizieren. Wenn Sie die Alt-Taste gedrückt halten, wo Sie den Mauszeiger über die Schweine bewegen, wählen und verschieben
wir die aktuell ausgewählte. Also lasst uns dieses wütende Schwein hier nach rechts bewegen. Und jetzt duplizieren wir den Wegpunkt 3. Also gehe ich nach Alt. Also gehe ich zum Befehl D auf Mac. Und dann werde ich hier rüber gehen, wo es in der Spielwelt ist. Halten Sie Alt D gedrückt, um diesen bestimmten Wegpunkt zu bewegen und hier zu gießen. Da wir also den Code ziemlich schön eingerichtet haben, haben
wir bereits den Pfad für die wütende Auswahl erstellt. Jetzt müssen wir nur definieren, dass das wütende Schwein Wegpunkte 3 und 4 verwenden wird. Also lasst uns auf Angry gepflückt klicken, um zum Wegpunkte-Array zu gehen. Und wählen wir Wegpunkt drei statt eins in Wegpunkt vier statt drei. Ein weiteres kleines Problem ist, dass, wenn wir uns
die Kollisionsform für unser wütendes Schwein ansehen und die Spielwelt treffen, wir sehen, dass es tatsächlich ein wenig über dem Boden springt. Das sieht also nicht ganz richtig aus. Also, wenn wir in das wütende Schwein gehen, können
wir einfach unsere Kollisionsform annehmen, die wichtigste für die tatsächlichen Weltkollisionen. Und dann nehmen wir einfach die Position hier ein und ändern sie eine Zwei von drei für die y-Position. Das bewegt es also nur ein bisschen nach oben. Und jetzt wird es viel besser mit dem Boden kollidieren und es wird richtiger aussehen. Also lassen Sie uns einfach voran und schauen, wo wir so weit sind. Also sind unsere Schweine etwas mehr oben gegen den Boden und wir haben dieses zweite wütende Schwein. Wissen Sie, wie es Paddeln Distanzen viel weiter, aber ich arbeite immer noch genauso wie das erste wütende Schwein. Und das ist wirklich cool. Es war so viel einfacher, den zweiten Feind zu erschaffen. Und dann, wenn wir eigentlich alles von Grund auf neu programmieren müssen, Wiederverwendbarkeit, ja. Also ein weiteres Problem, und das ist eine Art große Sache ist, dass wir mit unserer Sprungmechanik
manchmal, wenn wir in einem Winkel wie diesem springen, tatsächlich das Schwein beschädigen, obwohl wir aufsteigen, was nicht wirklich macht Sinn. Also, was wir tun können, ist hinzufügen, nicht nur ein, war die Spieler springen Hit Box kollidieren von oben, aber war die Geschwindigkeit als aufsteigend oder absteigend. Wir sollten also nur die Schweine beschädigen. Wir fallen drauf. Nicht, wenn wir so einen Winkel aussenden. Es ist irgendwie seltsam. Es ist also eine schnelle Lösung. Lassen Sie uns in das Spielerskript gehen und dann suchen wir, wo wir überprüfen, um einem Feind Schaden zuzufügen. Also ich denke, das könnte auf Jump Box eingegeben worden sein. Und hier können wir die Linie sehen, wenn wir dem Feind Schaden zufügen. Okay, diese Linie ist nur um zu überprüfen, ob wir den Feind auf die richtige Weise treffen. Also sollte die Position über sein. Also gehen wir hier runter und fügen eine zusätzliche Bedingung hinzu,
die ist, dass der Geschwindigkeitspunkt y. Ich denke, wir wollen, dass das kleiner als 0 ist. Wir wollen sicherstellen, dass es auf dem Bildschirm nach unten geht. Also lassen Sie uns einfach spielen und werfen Sie einen Blick. Es wird sofort offensichtlich sein. Also, wenn wir auf den Feind springen, okay ,
was ist, ist es eigentlich umgekehrt. Und so ist es ein wenig verwirrend, da die Y-Richtung irgendwie invertiert ist. Also, wenn wir nach unten gehen, das ist eigentlich positiv und negativ würde auf dem Bildschirm nach oben
gehen und unser Charakter wird auf dem Feind landen. Also lassen Sie uns spielen, testen, dass wieder zu welcher Zeit, nur stellen Sie sicher, dass wir hüpfen können. Das ist es, was wir wollen. Aber jetzt können wir diesen seltsamen geneigten Schaden nicht machen. In der Tat, was passiert, ist, dass wir beschädigt werden, was irgendwie so sein sollte. Ich denke. Die andere Sache mit dem wütenden Schwein, und wenn wir gehen in es gesehen und werfen Sie einen Blick auf, dass, Lassen Sie uns deaktivieren die Haupt Kollision geformt 2D. Wir können sehen, dass, wenn ich die feindliche Kollisionsform wirklich klein ist. Und das zahlt, dass der Spieler eine Menge. Aber ich denke bis zu dem Punkt, wo es keinen Sinn ergibt. So kann der Spieler hier sein und trotzdem keinen Schaden vom Feind nehmen. Also werde ich das nur ein bisschen aufstoßen. Nehmen wir also die feindliche Kollisionsform unter der gegnerischen Kollisions-Kollisions-Kollisionsbox, und lassen Sie uns die Grenzen nehmen und das 10 machen. Jetzt können Sie sehen, dass dies immer noch nicht wirklich mit dem Sprite-Frame übereinstimmt. So können Sie sehen, dass dies immer noch kleiner ist als das Sprite selbst. Und wenn wir die Haupt-Kollisionsform einschalten, die für wenn das Schwein mit der Welt kollidiert, können
Sie sehen, dass noch größer. Also gibt es immer noch Flug. Das begünstigt also immer noch den Spieler, aber vielleicht macht es jetzt ein bisschen mehr Sinn. Okay, also mit diesen Fixes, komm mit den wütenden Schweinen raus, sollte etwas sauberer sein. Also lasst uns spielen und einfach alles testen. Also zuerst, um sicherzustellen, dass wir immer noch einen Bounce-Angriff auf den Feind machen können. Das ist alles gut. Und lasst uns einfach versuchen, irgendwie hinterhältig zu sein und versuchen, Schäden zu vermeiden. Nun, offensichtlich können wir sehen, dass die Kollisionsformen uns begünstigen werden, aber
28. Spiel: Eines der nächsten Dinge, die ich hinzufügen möchte, ist für die Fähigkeit für den Charakter, vom Rand zu fallen und das Spiel zu verlieren. Aber im Moment haben wir eine Folge-Kamera ohne Grenzen. Also kann ich irgendwie zeigen, was jetzt passieren wird, wenn wir von der Kante gehen, können
Sie sehen, egal wohin der Spieler geht, es wird nur folgen. Also wäre irgendwie seltsam, nur ein Spiel hier drüben zu haben. Das nächste, was wir tun wollen, ist,
diese Kamera zu nehmen und ihr einige Grenzen zu setzen. So können Sie mit jeder Kamera Limits manuell festlegen, indem Sie hier unten die Limitkategorie verwenden. So können Sie links, oben, rechts und unten sehen. Aber ich denke, ein besserer Weg, dies zu tun, ist die Verwendung von 2D-Knoten, um festzulegen, wo die obere linke Grenze ist und die untere rechte Grenze genau so ist, wie wir Wegpunktziele setzen. Und dann, um das auf die Kamera 2D und ein Skript anzuwenden, wenn das Skript geladen wird. Also gehen wir voran und nehmen Sie diese Kamera 2D. Ich werde es so etwas wie folgt Kamera umbenennen, um ein bisschen spezifischer zu sein. Wenn wir das tun, gibt es uns eine Warnung über unsere Remote-Transformation. Also musst du den Pfad zur Folge-Kamera auf dieser entfernten Pfad-Sache hier zurücksetzen. Nehmen wir nun diese Folge-Kamera, klicken Sie mit der rechten Maustaste darauf und verwandeln sie in eine wiederverwendbare Szene. Ich könnte etwas übertrieben sein, aber ich schätze, ich werde hier eine Kategorie erstellen, eher ein Foto. Wenn ich also auf Neuer Ordner klicke, rufe ich einfach diese Kamera an. Also, wenn Sie irgendwelche anderen Kameras haben, so könnte ein bisschen redundant sein. Aber ich habe hier einen Ordner namens Kamera erstellt. Klicken Sie einfach mit der rechten Maustaste auf neuen Und wir gehen hier rein und wir können diese Szene als wiederverwendbare Objekte speichern, aber sie sind so jetzt lasst uns in die Kameraszene eintauchen. Und diese Szene. Zunächst möchten wir die Transformation standardmäßig auf 000 zurücksetzen. Und zweitens müssen wir dienstags in einer Position hinzufügen, aber wir wollen nicht, dass die Position zu diesen mit der Kamera
bewegt, wenn die Kamera ihre Position ändert. Vielmehr wollten wir, dass sie in unserem Spiel eher eine globale Position einnehmen. So können wir sicherstellen,, auch wenn es ein Kind ist, dass es nicht geht, um die Position durch Rechtsklick zu erben, Fügen Sie einen untergeordneten Knoten und dann mit Knoten als Basis. Also könnte ich diese Grenzen nennen. Und dann innerhalb dieses Begrenzungsknotens wird die Position dienstags erstellen. Was Sie jetzt eine völlig separate Position von der Folge-Kamera haben. Also mit der Position 2D hier, werde
ich diese oben links nennen. Ich gehe zu Kommando D, dupliziere es, und wir nennen das unten. Richtig. Nun lassen Sie uns einfach eine Standardposition festlegen, so dass wir wissen, dass sie nicht dort am Ursprung sitzt. Ich werde oben links auswählen, ausgehend halten und oben links nach rechts bewegen. Und ich werde dasselbe mit unten rechts machen. Wählen Sie sie aus, halten Sie die Alt-Taste gedrückt, und verschieben Sie sie hier nach rechts. Jetzt im Skript, wenn das Skript geladen wird, setzen
Sie den linken und oberen Arzt hier drüben, und die untere und rechte Position für die Kamera, indem Sie diese Position verwenden. Nehmen wir also die Fotokamera, klicken Sie mit der rechten Maustaste darauf, fügen Sie ein Skript hinzu. Natürlich nennen wir diese Folge-Kamera und speichern sie im Kamera-Ordner. Jetzt werden wir auf bereits var oder oben links,
gebunden, oder einfach oben links oder andere brauchen . Und lassen Sie uns das gleich Dollarzeichen oben links setzen. Beachten Sie nun, dass Sie, wenn Sie untergeordnete Elemente verschachtelt haben, den vollständigen Pfad benötigen. Also werden wir Grenzschrägstrich oben links brauchen, aber Godot weiß schon, was wir da machen. Es ist also ziemlich einfach, eine automatische Vervollständigung zu haben. Also lassen Sie uns var unten rechts gleich Dollarzeichen Grenzen, unten rechts. Also, jetzt in Funk bereit, können wir die Grenzen nehmen. Lassen Sie uns Self.view-Grenzen machen. Okay, ich schätze, du musst jeden einzeln einstellen, nicht als ganze Kategorie. Also machen wir Selbstgrenzen. Fangen wir mit Top an. Und das wird ein Wert sein. So erhalten Sie die Position, die absolute globale Weltposition von oben links. Das wird also eine globale Position oben links,
oben unterstrichen linken Punkt sein . Und da wir es mit Top zu tun
haben, schauen wir uns den Y-Wert an. So globale Position Punkt y. Jetzt brauchen wir limit links gleich oben links, globale Position Punkt x k. Und speichern sollte es derzeit keine Fehler haben. Und jetzt machen wir dasselbe mit der rechten unteren Seite. Das wird also gleich unten sein, oder? Punkt globale Position Punkt x, weil rechts links und rechts geht, was x ist. Also selbst unten Punkt rechts gleich unten rechts, lokale Position Punkt y, und das ist nicht unten rechts hier, das ist Limits unten. Und hier oben sollte es begrenzt sein, oder? Also, jetzt, da wir das Set nur tun müssen, ist sicherzustellen, dass die Kamera auf Ebene eins
ist und dann können wir die Grenzen setzen. Also im Moment gibt es Folge-Kamera ist nicht richtig bekommen die Szene, also werde ich einfach eine neue Folge-Kamera hinzufügen und ich habe es einfach hier herum. Lassen Sie uns das alte löschen, das nicht den Bounce hat. Und dann diese, können
wir folgen Kamera umbenennen, da es den gleichen Pfad hat wie die Fernbedienung transformiert Pfad, die Art von behebt sich selbst. Und jetzt haben wir eine Kamera mit diesen Grenzen. Also, was wir tun müssen, ist mit der rechten Maustaste auf Folge-Kamera, wählen Sie bearbeitbare Kinder. Und jetzt können wir die oberen linken und unteren rechten Grenzen bearbeiten. Also die obere linke Grenze, das heißt es. Ich weiß jetzt nicht irgendwo hier drüben. Das wird also die oberste und ganz linke Grenze für unsere Kamera sein. Und dann hier unten, zuerst, lassen Sie uns das Spiel über dem Bildschirm verstecken. Aber wir nehmen die untere rechte Seite und lassen es uns
verschieben oder lassen es einfach auf genau da herum. Es könnte hilfreich sein, ein Pixelraster für jetzt zu aktivieren, wenn wir möchten. Nun, um zu zeigen, dass diese Grenzen von der Kamera in Bezug auf ihre Position getrennt sind, Lassen Sie uns die Fotokamera auswählen, halten Sie Alt gedrückt und bewegen Sie sie. So sehen Sie, obwohl wir bewegen, dass die Kamera folgen, die Grenzen nicht ihre Position bewegen, das heißt, wir richten, dass Grenzen Knoten. Um unsere Grenzen perfekt zu gestalten, möchten
wir vielleicht ein Pixelraster einrichten. Vielleicht wollen wir, dass der untere Cutoff des Bildschirms
genau hier ist, damit wir nichts darunter sehen können. Lassen Sie uns also Grid Snap und Smart Snap Ligase einschalten. Und jetzt ziehen wir das dorthin, wo es hier auf dem Gitter steht. Also werde ich das direkt da herumziehen. Und wir können die Transformation hier überprüfen. Wir können sehen, dass dies ein Vielfaches von Zweien ist. Also denke ich, das wird nicht so gut funktionieren. Wir können es später jederzeit anpassen. Also jetzt stellen wir sicher, dass ich folge Kamera tatsächlich funktioniert oder Hüftflugzeug. Okay, jetzt beachte, egal wie weit sich der Charakter nach links bewegt, wir können nicht wirklich weiter als diese linke Grenze und die obere Grenze als auch. So können Sie sehen, dass wir an den oberen Rand des Bildschirms kommen. wir solche Einschränkungen haben, müssen wir sie nicht einfach identifizieren. Wenn wir Einschränkungen wie diese haben, müssen wir keine endlose Ebene entwerfen. Mal sehen, wenn wir hier vom Rand fallen, nun, unser Charakter ist weg. Technisch gesehen ist er immer noch in der Lage, sich zu bewegen. Sie können sehen, dass wir nicht darüber spielen oder so. Das wird der Nächste sein. Wir müssen eine Art tote Zone schaffen, in der wir das Spiel für unseren Charakter beenden. Aktivieren Sie auch die Sichtbarkeit
des Spiels über den Bildschirm, wenn Sie möchten, dass es weiterhin funktionieren kann.
29. Todeszone und mehr über Signale: Also als nächstes müssen wir eine Zone erstellen, die im Grunde, wenn der Spieler betritt, erhalten
wir ein Spiel über den Spieler sterben ist Zitat unquote, was auch immer Sie es nennen wollen. Das Gebiet wird also direkt unterhalb unserer Grenzen liegen. So geht der Charakter aus dem Bildschirm fällt unter den Bildschirm. Und während Sie das GameOver, ziemlich Standard-Plattform von Sachen bekommen. Beginnen wir also mit der Schaffung eines solchen Bereichs. Ich werde mit der rechten Maustaste auf unsere Ebene klicken. Lassen Sie uns eine untergeordnete Notiz hinzufügen. Es wird einen Bereich 2D geben. Und wir können unseren Bereich 2D nennen, was immer wir wollen. Und vielleicht tote Zone. Ich denke, ich nehme es einfach und nenne es unten auf dem Bildschirm. Und jetzt müssen wir den Bereich dafür definieren. Also werde ich mit der rechten Maustaste einen untergeordneten Knoten hinzufügen, und fügen wir eine Rechteck-Form hinzu, ich denke, würde perfekt dafür funktionieren. Also brauchen wir Kollisionsform 2D. Und dann werde ich Gestalt annehmen, eine rechteckige Form
machen, und lasst uns einfach die Größe davon gestreckt, damit wir so etwas sagen können. Jetzt müssen wir es irgendwie in eine Position bringen, wo es am rechten Bildschirmrand ist. Also ziehen wir es direkt dorthin. Ich denke, es geht darum, was wir brauchen. Wir sind nur etwas Präzision. Es spielt keine Rolle, wo es links und rechts ist, denn wir werden nur haben, dass es mindestens so groß wie die Level-Größe ist. Also, wenn wir es so haben, okay, es muss nur genau da sein, unter dem Grund, was wir sichtbar sehen können. Jetzt kann ich ein Skript hinzufügen. Also machen wir es tatsächlich zu einer separaten Szene für jetzt. Also werde ich mit der rechten Maustaste darauf klicken und lassen Sie uns Zweige speichern ist gesehen. Also könnten wir dies in Karten oder vielleicht einen anderen Ordner für so etwas wie
Zonen setzen sind spezielle Bereiche, die wir über das Spiel verwenden könnten in Ordnung sein. Also lassen Sie es speichern und sie werden mit der rechten Maustaste darauf klicken und ein Skript anhängen. So können wir das als Ende des Screenshots, GED, belassen. Oder Sie möchten es Spiel über Bereiche nennen, weil es
andere Bereiche im Spiel sein könnte , außer am unteren Rand
des Bildschirms, wo Sie möchten, um ein sofortiges Spiel über auslösen. Im Moment können wir es einfach so nennen, nur damit es unserem Szenennamen entspricht. Ich denke, das ist am einfachsten. Also lasst uns das schaffen. Und jetzt lasst uns einfach diesen zusätzlichen Code loswerden, den wir nicht brauchen. Also, wie wir es ein paar Mal zuvor getan haben, wenn wir einen Bereich nach D gehen zum Inspektor, dann haben wir die Möglichkeit zu wählen, ob es überwacht
und schrecklich überwacht und festgelegt, welche Schichten wir kollidieren oder überprüfen werden. So können wir einfach die Monitorschale ausschalten, weil nichts wirklich brauchen wird, um dies zu überprüfen. Also, es sei denn, du willst es anders herum machen, wenn der Spieler nach der Zone sucht. Aber ich denke, es mit den Zonen zu trennen, sagen Sie dem Spieler, wenn es eintritt und etwas passieren sollte, aber der Spieler findet heraus, dass statt der Spieler ständig nach verschiedenen Zonen sucht. Ich denke, es so aufzulösen, macht es für mich etwas sinnvoller. Also werde ich Überwachungsprobleme ausschalten. Und als solche brauchen wir hier unten keine Schicht für die Kollision, aber wir müssen nach der Player-Schicht suchen. Nehmen wir also die Maske und setzen Sie das auf das vierte Bit für Player oder wo immer Sie es eingerichtet haben und Ihre Physik 2D-Einstellungen. Also am unteren Rand des Bildschirms können wir abholen
, wenn ein Spieler den unteren Rand des Bildschirms betritt. So können wir zur Notiz gehen, wir können Körperform eingegeben tun, und wir können einfach eine Empfänger-Methode für das innerhalb der unteren Bildschirm-Skript erstellen. Also lassen Sie uns das in hinzufügen. Lassen Sie uns also unten auf dem Bildschirm auswählen Verbindung vom Objekt zu sich selbst herstellen. Also für unseren Körper, wenn er eintritt, sollte es ein Spieler sein. Es sollte also alle Funktionen haben, die ein Spieler hat. Und wenn nicht, würden wir wollen einen Fehler werfen, so dass wir
herausfinden können , wie etwas es eingegeben und aufgenommen wurde, ohne tatsächlich ein Spieler zu sein. Also können wir einfach unseren Körper nehmen und im Grunde die Funktion
ausführen , die wir erwarten, dass der Körper an diesem Objekt hat. Einige. Vielleicht können wir es einfach Body Dot sterben oder so etwas nennen. Und jetzt gehen wir in den Spieler und wir müssen nur diese Funktion erstellen. Also lasst uns hier runter gehen in Richtung unten. Ich würde es tun, ich werde es hier setzen, Funktion dy. Und dafür werden wir auf jeden Fall die Spiel-Overstate auslösen wollen. Also wollen wir das Signal aussenden, genau wie wir, wenn unsere Gesundheit auf 0 sinken würde. Also lassen Sie uns das Signal aussenden, Ihren Tod legen und uns selbst als Spielerobjekt an diesen Spielmanager weitergeben. Oder vielmehr geben wir es nicht direkt an den Game-Manager weiter. Aber wenn Sie sich erinnern, im Spielmanager hatten
wir
im Spielmanagerdie Verbindung zwischen
dem Spielmanager hergestellt , wenn ein Spieler im Spiel zu diesem Spielersignal lädt. Es sagt also nicht direkt dem Spielmanager, sondern sendet das Signal aus, so dass alles, was mit diesem Signal verbunden ist, auf den Tod des Spielers reagieren kann. Was bedeutet, dass das definitiv andere Objekte sein könnte. Oder je nachdem, wie unsere Codes bedrohen, reagiert
der Spiele-Manager möglicherweise nicht unbedingt tatsächlich auf diese Verbindung, aber es tut so rot. Also die andere Sache natürlich, ist Q3. Wenn Sie nun eine Animation für den Charakter hätten, der stirbt, wäre
dies ein großartiger Ort, um in diesen Zustand zu wechseln einen völlig separaten Zustand dafür zu
schaffen. Führen Sie die Animation aus. Wenn die Animation fertig ist, dann q3. Und so, um sofort für Sie in die Warteschlange zu stellen. Aber wir haben diese Animation nicht, also werden wir nur mit einfachem Q3 zu tun und Dinge mitzubewegen. Also denke ich, das werden eigentlich nur die zwei Dinge
sein, die wir dort wirklich brauchen. Solange wir also keine Fehler haben, könnten
wir jetzt tatsächlich alles Gute haben. Also lasst uns das Spiel testen und sehen, ob das funktioniert. So können wir immer noch folgen, können sich an den Rand bewegen, aber wir können nicht mehr nach unten am unteren Rand des Bildschirms sehen. Also lasst uns einfach runter springen und sehen, was passiert. Sieht aus, als hätten wir sofort ein Spiel vorbei. Offensichtlich macht es ein bisschen mehr Spaß, wenn man eine Animation
macht, eine große Sache aus, äh, vielleicht etwas Musik, so etwas. Aber das ist mindestens so einfach wie möglich. Nun, bemerken Sie eine andere Sache, die ist, dass mit unserem Spiel über dem Bildschirm hier, es ist nicht 0% transparent. Man kann dort tatsächlich ein wenig vom Hintergrund sehen, was eigentlich gar nicht schlecht ist. Ich meine, ich möchte vielleicht eigentlich nicht, dass dieser Hintergrund zu 100% transparent ist, aber als Netzhaut soll es das nicht tun. Also lassen Sie uns einfach schnell einen Blick auf das Spiel über den Bildschirm werfen. Und du weißt, was der Grund dafür ist. Es ist der in diesem letzten Frame, wo der Timer gestoppt wird, dann denke ich, der Grund dafür liegt in diesem letzten Frame, ob die Zeit tatsächlich gestoppt wurde. Es wird nicht das letzte Update hier machen. Mal sehen, ob es einen Weg gibt, dass wir das tatsächlich aktualisieren können. Wenn wir also über den Bildschirm ins Spiel springen, können
wir wahrscheinlich eine Empfängermethode mit dem Timer erstellen. Also lasst uns in den Knoten gehen. Mal sehen, dass Timeout ausgegeben wird, wenn der Timer 0 erreicht. Ja, perfekt. Okay, also lass uns das mit dem Spiel über Skript verbinden. Und jetzt haben wir dieses kleine Stück hier. Also alles, was wir tun müssen, ist Bildschirm modulieren Farbe und drehen Sie diesen endgültigen Wert auf eins. Also, da gehst du hin. Mehr freie Übung mit Signalverbindungen und Sie können sehen, wie
sie ziemlich nützlich und ziemlich einfach zu bedienen, wenn sie irgendwie intuitiv werden.
30. Drop Down und der Player: Also eines der Dinge, die seit dem Start rund um das Spiel sitzen, aber wir haben nicht wirklich etwas mit gemacht sind diese Plattformen. Also ich wirklich Standard-Plattform und Mechaniker ist die Fähigkeit, herunterzufallen. Eine wirklich Standard-Plattform und Mechaniker ist also über einer Plattform
zu sein, die dann so ist. Und in der Lage, darunter fallen zu können, um durch sie von unten springen überarbeiten zu können. So wie die Dinge jetzt sind, wenn wir von unten auf dieser Plattform springen, werden
wir einfach unseren Hut auf die Plattform stoßen, so
ziemlich wie Zelle. Das ist also nicht das, wonach wir suchen. Außerdem sahen wir, dass wir wirklich schnell überspielen konnten. Lassen Sie uns diese Gesundheit zurück zu drei ändern, nur damit wir nicht versehentlich ein Spiel von wirklich einfachen Tests wie diesem bekommen. Und jetzt müssen wir die Kachelkarte so einrichten, dass, wenn wir diese Kacheln erstellen, dass sie eine Einweg-Kollision haben, so dass wir durch den Boden gehen können. Also, wenn wir auf Kachelkarte klicken und wir gehen zu unserem Fliesenset hier drüben, können
wir auf unsere Geländefliesen klicken. Vergrößern wir uns ein wenig. Und schauen wir nach den Fliesen, die die Einweg-Kollision haben sollten, die hier auf der rechten Seite sind. Also, wenn wir uns den Inspektor jetzt anschauen, können wir ausgewählte Kollision auf eine Weise sehen. Also müssen wir das nur für all diese neun Kacheln und
alle anderen Kacheln überprüfen , die wir gerne von unten durchlaufen könnten. Also lasst uns das alles machen. Jetzt gehen wir voran und spielen. Und wir können versuchen, durch das zu springen. Wir können sehen, dass wir in der Lage sind, durch den Boden zu springen, aber wenn wir auf der Oberseite sind, gehen
wir nicht durch ihn zurück. Also lassen Sie uns das einfach ein bisschen mehr testen und scheint im Grunde durchzuarbeiten. Damit unser Charakter wieder nach unten durchläuft, müssen
wir eine Art Drop-Funktion einrichten. Also in diesem Spiel, wie ich es einrichten werde, ist, dass, wenn Sie zweimal nach unten drücken, was auch immer Sie unten Schlüssel für uns jetzt ist, das ist S. Dann wird es den Charakter nach unten unter der Plattform fallen. Wir würden nicht einfach automatisch durch
die Plattform fallen wollen , weil es dann im Grunde wie eine Kollisionskachel wäre. Aber wir wollen in der Lage sein, oben drauf zu sitzen und durch sie fallen zu lassen. So, wie wir eine Drop-Funktion einrichten können, wäre mit einem Drop Timer. Also lasst uns in den Player gehen und einen anderen Timer erstellen. Der Grund für diesen Timer ist, dass wir überprüfen wollen, ob nach unten zweimal in kurzer Zeit gedrückt wurde. Und wenn ja, dann haben Sie unter Drop-Funktion. Also werde ich mit der rechten Maustaste auf den Spieler an einem Kind-Knoten und wir werden in den Timer hinzufügen. Also rufen wir diesen Timer an, Interrupt Timer. Und ich werde die Wartezeit auf 0,2 Sekunden einstellen. Dies sollte mindestens die Dauer von einem oder zwei Animationsbildern sein. Also denke ich, Punkt zu funktioniert ziemlich gut für mich früher. Gehen wir jetzt in das Player-Skript. So können Sie irgendwie wählen, wo Sie es setzen wollen. Ich habe darüber nachgedacht, es in Spielereingaben zu setzen, aber das ist genauer gesagt nur, um die Links-Rechts-Up-Down-Bewegung zu erhalten. Also schätze ich, ich werde es direkt darunter legen. Was wir also tun werden, ist zu überprüfen, ob der Abwärtstaste gedrückt wird. Also input.txt, und dann werden wir sehen Aktion gerade gedrückt. Das ist also das, was wir wollen. Dann müssen wir die Aktion nach unten wählen. Und wenn das gerade gedrückt wurde, müssen wir sehen, ob der Timer läuft oder nicht. Also, wenn der Timer bereits läuft, bedeutet
das, dass wir gerade vorher gedrückt haben, also sollten wir fallen. Andernfalls sollten wir den Timer starten. Also, wenn, sagen wir Drop Timer wird gestoppt. So wie im Grunde wie jeder andere Timer, aber wir müssen es hier oben auf
bereit var Schwab Timer gleich Dollarzeichen Drop Timer deklarieren . Also, wenn es gestoppt
wird, dann wollen wir den Timer starten. Also Drop Timer. Andernfalls läuft der Timer. Also wollen wir eine Drop-Funktion auf dem Player ausführen, die hier eine Sekunde erstellen wird. Beachten Sie nun, dass wir nicht möchten, dass dieser Timer eine Schleife durchläuft. Wir wollen nur, dass es läuft, wenn wir
es speziell starten , bis zu der Dauer dieser heruntergekommenen Periode. Klicken Sie auf den Drop Timer und stellen Sie sicher, dass ein Schuss aktiviert ist. Das ist wichtig. Also, jetzt müssen wir nur eine Drop-Funktion erstellen. Also werde ich es irgendwie hier unten mit den anderen Bewegungsfunktionen setzen, springen, ball, springen. Und dann als nächstes werden wir Funktion Drop tun. Okay, damit unser Charakter durch die Plattform
fällt , wenn es einen Collider gibt, gibt es einfach die Position
unseres Charakters anzupassen und wir können das nur ein einzelnes Pixel machen. Also, wenn wir Arzt dot y nehmen und einen hinzufügen,
dann wird das durch den Collider
auf diesen Plattformen bewegen und unser Charakter wird durch die Plattform fallen. Also ist es wirklich so einfach wie das. Also lasst uns voran gehen und spielen und testen, wo wir gerade sind. Wir kommen hierher, wir können zweimal S drücken. Wir fallen durch die Plattform und auch da drüben, sollten durch diese fallen. Und dieser hier drüben. Jede Plattform, die wir mit dieser Einweg-Kollision eingerichtet haben, sollte für uns funktionieren. Und wir sollten auch in der Lage sein, direkt durch sie zu springen. Wenn Sie es ein wenig schwer finden, durchzugehen, könnten Sie
manchmal in Erwägung ziehen, die Wartezeit oder 2s oder 0,25 Sekunden zu erhöhen. Und wenn Sie aus irgendeinem Grund feststellen, dass Sie nicht in der Lage sind, eine der Plattformen zu passieren. Überprüfen Sie einfach den Kachelsatz und stellen Sie sicher, dass diese Einweg-Kollision überprüft wird. Das ist also nur für eine Fehlerbehebung. Aber eine Sache, die ich bemerkt habe, ist, dass für unseren Charakter, der versucht, einem Feind einen Sprüngschaden zu verursachen, manchmal diese globale Position nicht immer konsistent ist. Also denke ich, wir könnten die Kollisionsprüfung tatsächlich loswerden und dann einfach überprüfen, ob die Geschwindigkeit sinkt und es so belassen. Also lassen Sie uns voran gehen und spielen und sehen, ob das für uns funktioniert, damit unser Charakter hüpfen kann. Lassen Sie uns von einer höheren Position testen. Wir können folgendes tun, während Sie springen. Okay, und dann auch da. Und dann lassen Sie uns einfach erneut testen, sollte nicht in der Lage sein, Schaden von unten zu verursachen. Und ja, das ist immer noch der Fall. Also denke ich, in diesem Fall ist einfacher besser. Also werde ich nur diese Position verlassen, überprüfen Sie es. Da manchmal die Position der Trefferbox etwas unterhalb der Verletzungsbox liegen kann. Sie könnten auch eine größere Anpassung zugunsten des Spielers haben. Aber selbst wenn Sie das tun, kann
es immer noch extreme Beispiele geben, in denen die Charaktere Boxen treffen. Aus irgendeinem Grund, zehn Pixel unterhalb der Feinde verletzt Box. Dies scheint also nur eine viel einfachere Lösung zu sein. Ok? Und jetzt können wir einfach einen letzten Test
machen, um sicherzustellen, dass alle unsere Plattformen funktionieren und dass wir die Feinde richtig beschädigen können. Das scheint also viel,
viel flüssiger und im Allgemeinen einfach besser zu sein . Das ist also ziemlich viel wird es für dieses schnelle Video sein.
31. Niveaus und Ebenen erstellen: In diesem nächsten Video möchte ich tatsächlich ein Level 1 erstellen, ein Level 2
erstellen und dann einen Weg für uns schaffen, zwischen den beiden zu gehen. So, wie Sie Ihr Level entwerfen, ist ziemlich viel von Ihnen überlassen. Wir haben bereits alle Werkzeuge dafür erstellt. Wenn Sie also einige zusätzliche Kacheln und Plattformen hinzufügen möchten, können
wir in die Kachelkarte gehen. Und natürlich ist das Erstellen zusätzlicher wütender Schweine nur eine Frage der Duplizierung oder ein Ziehen der Szene aus unserem Dateisystem und Erstellen neuer Wegpunkte für sie dazwischen. Also zuerst, als Trick, den Sie verwenden können, können
Sie die Auswahlfunktion verwenden, wenn Sie die Kachelkarte ausgewählt haben. Und wir können einfach aus diesen Fliesen auswählen. Ich kontrolliere X sie weg oder Command X auf dem Mac. Und Sie können sehen, dass Sie es einfügen können. Aber ich werde das alles loswerden. Also wechseln wir zurück zum Bleistiftwerkzeug. Ich werde nur weitermachen und zeichnen, was ich brauche. Okay, jetzt werde ich voran gehen und Level 2 erstellen. Ich denke, der schnellste Weg, um es anzufangen, wird
es sein, Level eins zu duplizieren. Also gehe ich in meinen Maps-Ordner, klicke mit der rechten Maustaste auf Ebene eins, dupliziere das, und nenne es irgendwie Ebene 2. Jetzt können wir es öffnen und natürlich werde ich den Wurzelknoten in Level 2 umbenennen. Also, um es offensichtlich zu machen, dass es eine andere Ebene ist, das erste, was ich ändern werde, wird
es der Hintergrund sein. Also lassen Sie uns das ändern in, ich nehme an, lassen Sie uns den lila farbigen Hintergrund sehen. Also jetzt Ebene eins und Ebene zwei unterscheiden sich voneinander. Lassen Sie mich voran und erstellen Sie eine Ebene 2 Szenarien, im Grunde gehen,
um ein Labor hinzuzufügen und erstellt , ein, eine Ebene 2, und wir haben eine Ebene 3, aber das ist wirklich nur gesagt, dass Ebene auch, können
Sie in Stufe 3. Lasst uns jetzt voran gehen und unseren Weg schaffen, damit der Charakter von Level 1 zu Level 2 wechselt. Also werde ich den Bereich verwenden, um D für den Schalter wird das Ereignis
auslösen, wo wir Levels gesprungen. Also werde ich mit der rechten Maustaste auf Ebene 1 klicken und einen untergeordneten Knoten
hinzufügen. Wir wollen 2D an der Unterseite. Ich werde das umbenennen und wir können es bewegen nennen. Wir nennen sie vielleicht nicht unbedingt Ebenen, also wollen wir hier ein wenig generisch sein, plus der Ordner heißt Maps. Also mit Matt bewegen, werde
ich das als neue Szene speichern. Klicken Sie mit der rechten Maustaste Zweige speichern Und lasst es uns in Zonen setzen. Da dies ein Bereich ist, der eine Art von Ereignis auslöst, irgendwie wie die Unterseite des Bildschirms GameOver Ofen. Also lasst uns das hier speichern und dann tauchen wir in die Szene ein. Also für unsere Karte bewegen Bereich, wir werden eine Auslösung einer Kollisionsform brauchen. Also lassen Sie uns eine Kollisionsform 2D machen. Ich werde den Standard dafür zu einer Rechteck-Form machen. Und dann können wir es in unserer Ebene eins sehen. Also wähle ich die Matte Bewegung aus und lass uns Alt halten und es hier nach oben bewegen. So eindeutig wird dies nicht eine groß genug Kollisionsform sein, um wirklich das Ende des Levels zu rechtfertigen. Also werden wir das wahrscheinlich größer machen. Aber eine andere Sache, die wir tun wollen, ist tatsächlich geben den Spielern einen Weg, um anzuzeigen, dass es das Ende
des Levels ist , so dass sie wissen, für welches Ziel sie schießen. Also im Inneren der Kunst für dieses Spiel, können
wir unsere Pixel-Abenteuer eins überprüfen und gehen Sie nach unten zu Artikeln und Checkpoint. Und wir können eine ziemlich coole Flagge finden, die wir für das Ende dieses Levels verwenden können. Also werde ich in die Kartenbewegungsszene gehen, und fügen wir hier ein Sprite hinzu. Und wenn ich diesen Checkpoint auf den Bildschirm ziehe, können
wir sehen, dass es eine Reihe von Animationsbildern dafür gibt. Also werde ich Control Z drücken, um das Hinzufügen dieses Sprays rückgängig zu machen. Und ein perfekter Knoten für uns wäre ein animierter Sprite-Knoten. Also werde ich danach suchen. Und dann werden wir diese Flagge im Leerlauf nehmen und sie in Rahmen stecken. Nun, zuerst müssen wir ein neues Sprite Frames erstellen. Klicken Sie also auf Frames, leeren Sie neue Sprite-Frames. Und jetzt lassen Sie uns in dieser Flag Leerlaufanimation hinzufügen. Also werde ich die Animationsanzeige umbenennen und ich werde hier klicken, Frames aus Sprite-Blatt
hinzufügen. Also geht es zu Artikeln, Checkpoints, Checkpoint schwarz, Leerlauf. Okay, und lasst uns all diese Frames holen. Sieht aus, als wären es zehn davon. Also wollen wir zehn horizontale, eine vertikale. Wählen Sie dann Alle Frames löschen aus, fügen Sie sie hinzu. Und dann stellen Sie sicher, dass diese Animation abgespielt wird, und setzen Sie die FPS auf 20. Jetzt wollen wir auch dieses animierte Sprite-Objekt nach oben verschieben. Also werde ich Alt gedrückt halten und es nach oben bewegen. Das Einrasten kann hier helfen. Dann nehmen wir auch die Kollisionsform und bewegen sie auch nach oben. Und wenn Sie es zu einem beliebigen Zeitpunkt benötigen, können Sie das Fangen auch deaktivieren. Es ist keine Voraussetzung. Und wir wollen die Größe der Kollisionsform so ändern, dass sie etwas größer ist als unsere Flagge. Das wird also ein gutes Ende des Levelpunkts für unseren Charakter sein. Jetzt können wir auf Ebene 1 schauen und wir können dieses Map Move-Ziel positionieren. Ich schätze, ich lege es gleich da hin. Wenn wir nun wieder in unsere Karten-Bewegung gehen, können
wir die Kollisions-Layer definieren, die wir brauchen, was im Grunde genommen sein wird, um aufzuheben, wenn der Spieler es betritt. Also offene Kollision auf der rechten Seite, wie wir es für jeden anderen Bereich getan haben. Schalten Sie Weltmaske und Weltebene aus und setzen Sie dann Spieler als Maske. Und Sie können auch mono schrecklich deaktivieren, weil dies sein wird, weil dies ein Einwegereignis sein wird. Also werden wir nur nach dem Spieler suchen. Okay, jetzt müssen wir nur ein einfaches Skript zu unserer Kartenbewegung hinzufügen. Also werde ich ein Skript anhängen, das erstellt wurde. Und in diesem Skript werden wir eine brauchen, erhalten eine Methode, die aus dem Bereich 2D kommen wird. Sie wissen wahrscheinlich, wohin ich gehe mit dieser Körperform, die auf dem Knotenabschnitt auf der rechten Seite eingegeben wurde. eingegebene Körperform wird mit dem Skript zum Verschieben der Matte verbunden. Und hier sollte es nur Spieler sein, die eintreten. Wenn der Spieler in diesen Bereich betritt, wollen
wir Ebenen wechseln. So können wir sehen, Punktwechsel Szene 2. Und wir brauchen hier eine gepackte Szene. So wie wir unsere gepackte Szene für das Skript definieren können, ist, dass wir eine Exportvariable erstellen. Also werden wir eine Packung gesehen Variable exportieren. Und wir können sagen, Zielszene. Und jetzt müssen wir natürlich diese Variable als unseren Parameter verwenden. Also kleben Sie das da unten. Wenn wir nun auf unsere Karte bewegen klicken, sollten
wir in der Lage sein zu sehen, dass wir ein Ziel hier gesehen setzen können. Also, auf Ebene eins, werde
ich unsere Matte bewegen und wir werden das Ziel als Ebene zwei festlegen. So können Sie hier klicken ein Lotus sehen. Und natürlich gehen wir in Maps-Ebene zwei. Sie können eine kleine Vorschau für unsere Szene dort sehen. Gehen wir in Ebene 2 und lassen Sie uns eine Karte verschieben Szene hinzufügen. Wir legen es hier drüben für das Ende dieses Levels. Stellen Sie sicher, dass es sich nicht auf der Kachelkarte befindet. Aber in Bezug auf die Hierarchie, können
Sie es über dem Spieler wollen, so dass es hinter dem Spiel und nicht vor ihm
angezeigt wird. Also lasst uns das bewegen. Okay, ich werde das Schnappen hier abschalten, damit wir es richtig machen können. Das sieht gut aus. Nehmen wir das Ziel, das hier gesehen wird, und machen es Ebene drei, Karten Ebene 3. Okay, jetzt können wir unser Spiel hier ein bisschen testen. Ich werde spielen. Dann werde ich dieses Level schnell durchlaufen. Okay, ich muss an diesem Schwein vorbei kommen, ohne zu viel Schaden zu nehmen. Ignoriere ihn irgendwie und mache die Dropdown-Funktion, um hier runter zu kommen, ich habe das absichtlich und nur ein bisschen einen präzisen Sprung dort benötigt. Gehen wir auf die zweite Ebene. Okay, und es ist vorhin auf dieses Problem gestoßen. Es stellt sich also heraus, dass die Überprüfung, ob ein Objekt nicht null ist, hier nicht gut genug ist. Also, was Sie eigentlich hier verwenden wollen, und das ist wieder in diesem Game-Manager-Skript, das wir eingerichtet haben. Ist, ist Instanz gültig? Und natürlich wird dies aktiver Spieler sein. Wenn Sie also ein Objekt in Ihrem Spiel erstellt haben und
sicherstellen möchten , dass es noch vorhanden ist, bevor Sie etwas ausführen. Das ist der richtige Code. Wenn Sie überprüfen, ob es nicht gleich null ist, dann kann dies stattdessen enden, was offensichtlich nicht funktioniert, wenn die aktiven Spieler bereits aus der Szene entfernt wurden. So können wir jetzt voran gehen und das Level erneut ausführen und es sollte dieses Mal laufen. Also lass uns auf den Kerl hüpfen. Beachten Sie den Schadensangriff. Dies ist ein wenig knifflig hier in Bezug auf das Spieldesign. Das könnte ein wenig unfair sein, aber wir testen immer noch nur die Menge. Also lasst uns zu dieser zweiten Ebene kommen und dann boom, wir betreten Ebene 2. Natürlich wollen wir vielleicht einen Übergang von irgendeiner Art, wie wir es mit dem Spiel über dem Bildschirm getan haben. Hier müssen wir runter springen, okay, wir müssen wütend Schwein damit umgehen, hier hoch zu springen. Und hier ist es ein bisschen knifflig, weil wir
uns vom unteren Bildschirmrand fernhalten müssen. Das wird also einen Doppelsprung erfordern. Und dann müssen wir weiter herumspringen. Es scheint ein bisschen ein Bug zu sein, mit dieser Einweg-Kollision. Ich denke, es ist in die falsche Richtung eingestellt. Also muss ich das überprüfen, denn wie Sie sehen können, kann es da durchfallen, aber ich kann nicht wieder hoch gehen. Und dann für den Rest der Ebene 0, warum muss ich die Kamera Bounce reparieren? Aber Sie können sehen, dass ich dort auf Ebene drei gegangen bin und wieder einmal, die Einwegkollision ist die falsche Richtung dort. Also lasst uns die Kamerabänder und Level 2 reparieren, ich werde die Kachelkarte sperren, so dass ich versehentlich nicht damit herumwirren. Lasst uns oben links greifen und es hier bewegen. Eigentlich sollte es mit der linken Seite aufgereiht sein. Das ist also unsere Bindung. Und dann hier unten. Und dann hier unten rechts würde das so einrichten, dass es genau da ist, denke ich. Okay, hier ist also ein Problem, wenn Sie Ihre Kachelkarten erstellen. Sie müssen sicherstellen, dass Sie Ihre Fliesen nicht versehentlich drehen. So können Sie hier sehen, dass diese Plattformen offensichtlich unten gehen. Wenn Sie also ein S und möglicherweise einige andere Tasten wie Z und X auf Ihrer Tastatur drücken, können
Sie tatsächlich die Kacheln drehen, die Sie platzieren. Also, wenn Sie eine Einweg-Kachel wollen, die im Grunde von unten gehen wird, können
Sie nach oben springen, dann möchten Sie sicherstellen, dass das nach oben gerichtet ist. Aber wenn Sie versehentlich die Z-Taste drücken, werden
Sie das Warum nach unten drehen. Und dann wird das die Richtung für Ihre Einweg-Kollisionen umkehren. Ebenso werden sie hierher kommen und dieses reparieren, weil es nicht oben sein sollte, sondern mit z nach unten gekippt, aber es sollte eher nur nach oben ausgerichtet sein. Dies sollte also verhindern, dass der Charakter hier versehentlich durch
den Boden fällt , ohne tatsächlich die Drop-Bewegung zu tun. Das wäre ziemlich nervig. Also lassen Sie uns diese Flagge ein wenig nach unten bewegen. Und jetzt sollte diese Plattform wie erwartet funktionieren. Und ebenso, auf Ebene drei, ist
es irgendwie albern, wenn wir den Spieler hier direkt in den Ozean fallen lassen. Also lasst uns das auch reparieren. Also lassen Sie uns Auto-Titel sehen. Setzen wir diese Plattform und entfernen Sie die, die oben ist. Also gehen wir hin. Das sollte dieses Problem beheben, und wir lernen sogar etwas dabei. So können wir jetzt einfach voran gehen und das Spiel noch einmal testen. Nun, da wir die Kameragrenzen fixiert haben und wir auf die Plattformrichtungen fixiert haben. Ok. Also haben wir unsere da oben bekommen,
haben keinen Schaden auf diese Weise bekommen. Und wir kommen zu unserem Level 2. Okay, hat etwas Schaden genommen, sie werden den kniffligen Sprung machen. Und okay, da gehen wir. Jetzt funktioniert das richtig. Und es ist nur beenden das Spiel und Knochen. Ok. Alles funktioniert gut.
32. Health: Okay, als nächstes lassen Sie uns eine einfache Gesundheits-UI erstellen, damit wir die Gesundheit des Spielers jederzeit zeigen können. Also gehe ich auf die Canvas-Layer. Wenn wir also die Dinge einfach halten wollen, können
wir einfach ein einfaches Steuerelement hinzufügen und dann wird dieses Steuerelement die Health Bar sein. Dann unter der Health Bar müssen
wir einen Texturrekt hinzufügen. Also werde ich mit der rechten Maustaste hier auf der Gesundheitsleiste bei einem untergeordneten Knoten klicken und dann Textur wählen, korrigieren. Und dann für die Textur innerhalb dieser Textur werde
ich den Kiwi-Gesundheitsindikator verwenden. Und so habe ich im Grunde dieses Bild
direkt aus dieser Kiwifrucht aus dem Pixel-Abenteuer genommen . Sie können dieses Bild hier sehen. Gerade extrahiert den ersten Frame und es ist 18 mal 18 Pixel jetzt. Also bringe ich das in die Textur und es wird dort erscheinen. Und wenn wir den Stretch-Modus in Kachel ändern, können
wir dies so oft wiederholen, wie wir brauchen. Also, wenn wir die Größe unseres Texturvekts kontrollieren, irgendwie so. Aber im Code können wir dann zeigen, wie viele Gesundheitspunkte der Spieler an einem bestimmten Punkt hinterlassen hat. Lassen Sie uns diese Textur loswerden und dann
drücken wir Play und stellen Sie sicher, dass sie dort oben links erscheint. Vielleicht wollen wir auch eine gewisse Marge. Also kann ich die Health Bar nehmen und wir können ihr einen oberen und linken Rand von fünf geben. Okay, das scheint jetzt etwas besser positioniert zu sein. Jetzt muss die Health Bar wissen,
wie viele Gesundheitspunkte der Spieler zu einem bestimmten Zeitpunkt hat. Es weiß also, wie viele Keywords angezeigt werden sollen. Eins entspricht einer Kiwi. Also werde ich ein Skript zu unserer Health Bar hinzufügen. der rechten Maustaste auf das angehängte Skript der Und mal sehen, Es wird nicht auf den Karten sein. Dies sollte unter den UI-Ordner gehen. Also Health Bar, das ist offen und kreativ. In unserer Health Bar, wenn das Skript geladen wird, können
wir versuchen, den Spieler zu finden, der im Spiele-Manager sein sollte. Also werde ich es in eine Funk-Lesung setzen. Und wir werden im Grunde den aktiven Spieler
gleich dem aktiven Spieler aus dem Spielmanager einstellen . Also lassen Sie uns einen var aktiven Spieler erstellen. Und es ist aufgrund Flare gleich Spiel Manager dot aktiven Spieler. Und das ist nicht, lassen Sie uns ein Signal für unseren Spieler erstellen, aber anstatt es in den Spieler zu setzen, lassen Sie es tatsächlich in den Charakter Punkt g, d so dass jeder Charakter dieses Signal ausgeben kann, aber wir müssen nicht unbedingt eine Verbindung zu es für jedes Objekt wie die wütenden Schweine. Also lassen Sie uns ein Zeichen in Charakter erstellen. Und das wird sich ändern. Und wir werden hier neue Gesundheit geben. Bevor wir also den Wert,
die neue Gesundheit der Gesundheitsvariablen zuweisen , können
wir sehen, ob sie gleich sind. Und wenn nicht, dann emittieren wir Gesundheit geändert, weil die Zahl ist jetzt anders. Also, wenn sonst nicht gleich Wert ist, dann werden wir den Signalzustand geändert und übergeben den Wert als die neue Integritätssumme, die wir an alles senden, was mit diesem Skript verbunden ist. Jetzt können
wir mit unserer Health Bar eine Verbindung zu diesem aktiven Layer doc und enact herstellen. Und wir wollen, um die Gesundheit verändert verbinden. Das empfangende Objekt ist uns selbst, dass Gesundheit bellt. Und wir werden eine auf Gesundheit veränderte Nachricht erstellen. Auf diese Weise, indem Sie ein Signal verwenden, anstatt die Gesundheit auf jedem einzelnen Frame zu überprüfen, Es ist nur ein wenig effizienter. Also werden wir Func über Gesundheit hier geändert schreiben. Und das wird tatsächlich die neue Gesundheit nehmen. Und so lassen Sie uns Verweis auf unsere Textur rekt bekommen. Also hier oben werde ich auf bereit machen unsere extra zerstört gleich Dollar Zeichen Textur aufrecht. Und wir multiplizieren die Breite dieser Textur Rackierung gleich der neuen Gesundheit mal 18 Pixel, da dies die Breite des Sprite-Bildes ist. Stellen Sie also sicher, dass Sie ein Texturvektor gleich der Anzahl der gesunden, die ich mit der Breite Ihrer Bildgröße multipliziert habe. Also lasst uns Textur zerstören. Punkte. Mal sehen, wäre mit, oder wir können tatsächlich darauf klicken und einfach überprüfen. Also, so denke ich, das ist zerstörte Punktgröße Punkt x. Also lassen Sie uns finden, dass zerstörte Punktgröße Punkt x. Und wir werden das gleich Sprite Breite mal die neue Gesundheit machen. Und wir können hier eine Variable erstellen, damit wir das Sprite mit im Inspektor einstellen können. Also mal sehen, Exploit ENT sind richtig, Breite gleich 18, da das nur der Standard ist, den ich verwende. Und wir können sehen, ob das wirklich funktioniert. Also werde ich voran gehen und spielen. Okay. haben wir dort gesehen. Mal sehen, was passiert, wenn er Schaden erlitten hat. Noch nichts, weil ich den Unterstrich hier oben vergessen habe. Das ist also eine Methode, die nicht existiert. Jetzt haben sie den gleichen Namen. Also lasst uns gehen und spielen und sehen, ob wir das zum Laufen bringen können. Okay, wir nehmen den Schaden an. Lasst uns weitermachen. Ungültig, Index für Textur zerstört. So sieht es so aus, als ob Sie tatsächlich Größe unterstreichen möchten. Und dann können wir den x-Wert davon einstellen. Also Vektorgröße ist ein Vektor zwei und wir kümmern uns nur um das X. Also setzen wir das dort ein. Lass uns voran gehen und spielen und sehen, ob das behebt. Und ja. Okay. Das schien im Grunde zu funktionieren. Ja. Okay. Wir haben noch eine Gesundheit und dann verlieren wir natürlich
danach das Spiel, aber es wird nicht mit dieser letzten Gesundheit aktualisiert. Es scheint also, als ob
es mit den Standardeinstellungen nicht kleiner als das eine Texturbild sein kann. Es gibt also wahrscheinlich eine Handvoll Möglichkeiten, wie wir das lösen könnten. Aber ich denke, der schnellste Weg, der mir in den Sinn kommt,
wäre nur , die Textur zu deaktivieren, wenn die Gesundheit 0 ist. Also, wenn neue Gesundheit ist, sagen
wir weniger als oder gleich 0, dann nehmen wir einfach die Textur aufrecht, sichtbar und wir werden das auf false setzen. Sonst. Ich denke, wenn wir jemals 0, aber dann aus irgendeinem Grund oder einem höheren, oder einfach sagen, dass es Sichtbarkeit gleich wahr ist. Also, jetzt können wir Play drücken. Und mal sehen, was passiert. Okay, gut zuerst, wir setzen die Gesundheit auf 2, also erweitert,
es geht nach unten, und dann wird es vollständig deaktiviert, weil die Gesundheit auf 0 gesetzt ist. Und jetzt sieht man, dass
es zu Beginn des Spiels tatsächlich nur einen gezeigt hat. Wir brauchen ein bisschen mehr Code. Wenn dies eingerichtet ist, sollten
wir die Health Bar tatsächlich so einstellen, dass sie gleich dem Startzustand des Spielers ist. Also werden wir das auch einmal ausführen. Wir wollen die Gesundheit des Spielers,
so tun aktive Spieler Punktgesundheit. Und theoretisch brauchen wir nicht mehr
einen Verweis darauf zu behalten , da wir das Signal wirklich nutzen, um darauf zu reagieren. So x2 Bar aktiven Player, der Spieler verbinden. Eigentlich nur ein var aktiver Spieler verbunden. So bekommen wir den aktiven Spieler, wir verbinden uns mit der aktiven Ebene. Wir setzen die Messlatte für die Gesundheit des aktuellen Spielers und immer wenn der Spieler Schaden erleidet, reagieren
wir darauf. Okay, jetzt sollte alles gut funktionieren. Also zu Beginn des Spiels, wir haben drei Gesundheit, also nein, es erweitert, dass und wir nehmen einen Schaden. Lasst uns noch einen Schaden anrichten. Und dann, nun, wenn wir unsere dritte Gesundheit verlieren und es ist das Ende. So haben wir im Grunde die Health Bar eingerichtet. Stellen Sie einfach sicher, dass Sie es als Szene speichern, damit Sie es im Spiel wiederverwenden können. Also werde ich aufschlagen, ich werde es in
UI Gesundheit Bardot Szene setzen und wir können sicherstellen, dass es auf den zukünftigen Ebenen ist. Aber um einen Schritt darüber hinaus zu gehen, denke
ich, ein guter Weg, dies zu tun, wäre,
eine Basis-Canvas-Layer einzurichten , die wir für jedes Spiel verwenden. Also werde ich dieses Spiel UI nennen. Und lassen Sie uns eine Szene aus diesem so sicheren Zweig erstellen, wie es gesehen wird, und dies wird unser übergeordnetes Objekt der Spiel-UI sein. So können wir jetzt auf Level 2 gehen. Und ich werde das wegschneiden. Und wir werden es auch von Level 3 abschneiden. Und dann werden wir nur in das Spiel UI gesehen setzen. Wenn wir jetzt etwas zu jedem Level unseres Spiels hinzufügen müssen, wird
es alles in einer einzigen Benutzeroberfläche sein. Und wenn Sie eines der Kinder zu einem beliebigen Zeitpunkt sehen müssen, können
Sie mit der rechten Maustaste auf Ihre Spiel-UI und UX editierbare Kinder klicken, und Sie können weiterhin die Health Bar und das Spiel über dem Bildschirm sehen. Stellen Sie also sicher, dass Ihre Levels gespeichert sind. Und wenn Sie spielen, hoffentlich funktioniert es immer noch und alles. Also lasst uns schlagen. Okay, und lasst uns eigentlich nur zum nächsten Level springen. Level VSA, unsere Gesundheit zurückgesetzt, weil es ein neuer Spieler ist. Und nun, das ist es im Grunde dort. Jetzt, wenn das Level endet und wir keinen Schaden nehmen, um tatsächlich die Niederlage zu verursachen. Wir möchten vielleicht auch hinzufügen, dass nur diese Gesundheitsleiste entfernt wird. Also denke ich, was wir mit unserer Health Bar tun können, ist, nur auf
das Spiel über Ereignis von unserem Game-Manager zu reagieren . Da müssen wir den Spiele-Manager in der unready unserer Health Bar referenzieren. Wie auch immer, wir könnten genauso gut nur auf
dieses Signal verweisen und haben einen auf Spieler gestorben oder auf GameOver. Also gehen wir zu unserem Helfer. Und wenn wir den Game Manager bekommen, können
wir uns auch damit verbinden. Also lassen Sie uns sehen, ein Spiel Manager Punkt verbinden Spiel über, selbst auf Spiel über. Und setzen Sie den Unterstrich dort für eine Empfängermethode und wir werden diese Empfängermethoden erstellen. So Funktion Unterstrich auf Spiel über. Und wir müssen nur die Sichtbarkeit des Texturvektors nehmen und diesen auf false setzen. Also lassen Sie uns diesen Code kopieren, fügen Sie ihn dort ein. Und jetzt, wenn wir aus irgendeinem anderen Grund ein Spiel bekommen, dann fällt der Spieler, der Schaden erleidet,
wie zum Beispiel, hier vom Rand. Dann wird es unsichtbar zeigen, was wir erwarten würden.
33. Erstelle die Enemy: Also in diesem Teil
, der vielleicht der letzte für den Kurs sein kann, wir einen zweiten Feind aufbauen, irgendwie eine lustige Aktivität. Und der Feind, den wir erschaffen werden, ist ein B, das mit einem Projektil herumfliegt, in der Lage sein
wird, einige des gleichen Codes von wütenden Schwein wiederzuverwenden, womöglich etwas davon in das feindliche Skript zu bewegen, so dass es wiederverwendbar ist. Und dann fügen wir zusätzliche Sachen hinzu. Offensichtlich Projektile oder etwas, das wir noch nicht für dieses Spiel Prototypen getan haben, also müssen wir das hinzufügen. Und so wie das wütende Schwein, werden auch
die Bienen zwischen Wegpunkten bewegen, aber es wird auch in der Lage sein, sich vertikal zu bewegen. Sie werden nicht nur nach links und rechts gehen, und sie werden auch nicht auf die Position des Spielers reagieren auf die gleiche Weise, wie
das wütende Schwein würde, wo der Spieler in diesen Bereich eintritt und dann der wütende Stift bewegt sich schneller. So können wir den Wegpunktcode in
die feindliche Klasse für Feinde verschieben , die den Wegpunkt benutzen werden. Und dann können wir sie beide haben ihre eigene Bewegungsmethode, bei der sie herausfinden, wie schnell sie sich bewegen und in welche Richtung. Also lasst uns weitermachen und das wütende Schwein Skript öffnen. Also im Grunde nehmen wir alles hier und bringen es in das feindliche Skript als Funktion namens Wegpunkt blau. Also gehen wir weiter und schreiben das hier und wir übergeben Delta hinein. Also, jetzt in unserem feindlichen Skript, gehen
wir hier hoch und wir können Funktion Wegpunkt Bewegung schreiben, die Delta nehmen und einfügen wird, dass dort. Wenn wir das tun, können wir sehen, dass wir nicht die Wegpunktposition haben, also müssen wir das auch aus wütendem Schwein nehmen. Also werden die b oder andere Feinde all das Zeug hier haben. Wegpunkt erreichte die Entfernung für das Wechseln von Wegpunkten, ein Array von Wegpunkten, die zwischen der Start-Wegpunktposition, dem
Index davon und wahrscheinlich auch Flächen rechts verlaufen . Lassen Sie uns das einfach in das feindliche Skript schneiden. Und das können wir hier oben positionieren. Solange der Feind es hat, wird
das alle Probleme klären, die wir auch für das wütende Schwein haben. Also offensichtlich haben wir einen Fehler, bei dem wir diese Set-Wegpunkt-Indexmethode nicht haben, also müssen wir das auch aus wütendem Schwein nehmen. Also lassen Sie uns das einfach ausschneiden und in das feindliche Skript einfügen. Ein weiterer Fehler, den wir haben, ist für unsere Schweine spezifische Bewegung. Anstatt all dies und das feindliche Skript, werden
wir eine Funktion erstellen, die wir jeden spezifischen Feind für seinen eigenen Kunden implementieren
können. Und dann können wir es als Bewegungsgeschwindigkeit bezeichnen. Und das wird das Delta nehmen und auch die Richtung, in die wir uns bewegen. Also berechnen wir das, indem wir herausfinden, wohin der Wegpunkt geht. Wenn wir also einen Wegpunktzug machen, bewegen wir uns zu denen, die sich zu diesen Wegpunkten bewegen. Jetzt müssen wir nur sicherstellen, dass wir hier unten eine virtuelle Funktion haben. Erhalten Sie also Bewegungsgeschwindigkeit. Das wird also Delta n Richtung nehmen. Und wenn wir das ausführen, werden
wir einen Fehler drucken wollen, weil er nicht implementiert wurde. So können Sie einfach eine Fehlermeldung schreiben. Die Idee ist also, wenn das Skript tatsächlich läuft, es diese feindliche Version der Methode ausführt, erhalten wir einen Fehler. Wir sollten es in den Top-Level-Charakter implementieren, das wütende Schwein oder das B. Also das sagt uns nur, Hey, wir müssen mehr Code schreiben, damit diese Funktion richtig auf dem Endfeind laufen kann. Und das hier drüben wird
die Geschwindigkeit zurückgeben , damit wir sie für unsere Bewegung und Rutsche verwenden können. Also lassen Sie uns einfach sagen, dass unsere Geschwindigkeit gleich bewegt wird Geschwindigkeit. Okay, also jetzt für alles, was wir ausgeschnitten haben, das hier gehen sollte. Wir nehmen das einfach in wütendes Schwein. Also lasst uns in das wütende Schwein gehen und diese Funktion implementieren. So unterstrichen, gut. Verschieben für Geschwindigkeit, Delta-Richtung. Und dann fügen Sie einfach das n. und anstatt die Geschwindigkeit einzustellen, werden
wir das zurückgeben. Vielleicht wollen wir auch die var-Geschwindigkeit hier rausnehmen weil wir sie im Moment nicht mehr wirklich im Skript brauchen. Und stellen Sie sicher, dass diese eine Registerkarte auf der linken Seite sind. Also für das andere Stück Code benutzten
wir dies vorher, um festzustellen, ob es sich nach links und rechts bewegen sollte. Da wir in die Vorwärtsrichtung in diese Funktion übergehen, werden
wir dies an zwei verschiedenen Stellen stellen. Also zurück und lehnen Sie sich zurück und das feindliche Skript, ich werde das einfügen, damit wir es
verwenden können, um überprüfen, ob es nach rechts oder nach links gerichtet sein soll. Dann müssen wir nur endlich die zurückgegebene Geschwindigkeit erhalten, sie hier in einer Variablen
speichern. So werden versperrte Geschwindigkeit gleich bewegt. Wir geben das hier unten weiter. Animiertes Sprite. Wir werden das vom wütenden Schwein in unsere feindliche Klasse bringen, ebenso wie den Animationsbaum. So ziemlich jeder Feind wird beides brauchen. Also lassen Sie uns die einfach dort einfügen. Okay, als nächstes sollten wir wieder in das wütende Schwein gehen und sicherstellen, dass die Fehler hier erledigt werden. Hier können wir sehen, eine der Geschwindigkeit y wird dem Spiel Schwerkraft hinzugefügt. So hat der Charakter grundsätzlich noch seine Schwerkraft. Aus diesem Grund sollten
wir hier wirklich die neue Geschwindigkeit gleich dieser MOOC-Geschwindigkeit setzen. Und dann haben Sie eine Variable hier oben, auf die alle feindlichen Typen zugreifen können. Also, wenn unsere Geschwindigkeit und dies wird ein Vektor zu sein, könnten
wir es sogar zu einem Vektor auf 0 standardmäßig initialisieren. Und dann die Bewegungen gleiten, glaube
ich, dass die Geschwindigkeit zurückgibt. Also, wenn wir irgendwelche Kollisionen haben. Sollte die Geschwindigkeit auch für uns aktualisieren. Also jetzt wird hier die Geschwindigkeit deklariert. Und wenn wir das wütende Schwein überprüfen und hier, dann wird diese Geschwindigkeit y wird die Geschwindigkeit y vom Feind verwenden. Eine andere Möglichkeit, wie wir es tun könnten, wenn Sie denken, dass es etwas weniger chaotisch
ist, ist, dass wir die aktuelle Geschwindigkeit und
als Variable übergeben und dann im Skript verwenden und sie nach außen zurückgeben können. Das sollte vorerst funktionieren, also bin ich nicht allzu besorgt. Also, jetzt, was wir wirklich tun sollten, ist sicherzustellen, dass der wütende Stift funktioniert wie zuvor. Obwohl alles, was wir getan haben, ist, Sachen aus dem wütenden Schwein in das feindliche Drehbuch zu bringen. Also lasst uns voran gehen und spielen und das testen. Ja, es sieht so aus, als würde sich unser Feind noch bewegen. Also, was wir jetzt tun können, ist unsere wütende Schweineszene zu nehmen und sie und das Dateisystem zu
duplizieren und das als Basis für unser B zu verwenden also werde ich hier runterkommen, wo wir wütende Schweineszene haben. Ich mache ein Alt D und dupliziere das und wir nennen diesen B-Punkt-SCN. Das ist also unser gesehen werden. Jetzt können wir die Szene öffnen. Und zuerst werde ich den Charakter umbenennen, um hier oben zu sein. Als nächstes können wir jedes von ihnen hinuntergehen und entfernen und hinzufügen, was wir brauchen. Also zuerst brauchen wir keine wütende Erkennungszone im Skript. Also werde ich das einfach komplett loswerden. Und wenn Sie sehen, dass Fehler hier unten auftauchen, Es ist nicht zulassen, dass Sie sehen, dass der Inspektor einfach zu einer anderen Szene wechseln und zurückkommen. Und jetzt sollte das so hoch sein, damit wir die wütende Detektionsszene entfernen können. Für das animierte Sprite. Wir werden das auf die Sprites für unseren B-Charakter umdefinieren wollen. Also ich weiß, dass das Baby hat eine Hit-Animation und Leerlaufanimation in einem Angriff es und löschen Sie diejenigen, die nicht relevant für uns hier sind. Also lasst uns das einfach machen. Und jetzt können wir N hinzufügen und angreifen. Und sicherzugehen, dass das 20 FPS ist. Die Hit-Animation wird bei 10 FPS bei
den Männern halten und das Gleiche für einen Treffer und Angriff tun. Also lassen Sie uns alle aktuellen Frames löschen, gehen Sie zu treffen fünf horizontale, eine vertikale, wählen Sie alle, fügen Sie Angriffsanimation jedes Frame. Also acht horizontale, eine vertikale, wählen Sie alle bei, Okay, und es gibt unsere kleine Angriffsanimation, die ihre nächste im Animationsbaum abspielt. Wir können das auch für unseren neuen Charakter einrichten. Also zuerst, es gibt keine Treffervariationen. Es wird nur eine Hit-Animation für diesen Charakter geben, damit wir das alles loswerden können. Als nächstes wird keine Spieler-Erkennungszone sein. Es gibt nur eine untätige Animation, die wir für die Biene benutzen werden, die herumfliegen. Also brauchen wir das auch nicht. Aber wir brauchen noch einen einzigen Schuss für einen Angriff. Dies wird also vor dem Treffer ein Schuss gehen, wobei der Schaden, der getroffen wird, Vorrang vor einem Angriff hat. Also ein Schuss, und dann ist dies der Angriff, dank der Ausgabe Feeds in den Eingang dafür. Und wir brauchen die Hit-Animation, um hier hineinzugehen. Ich werde das für eine Sekunde löschen. Wir müssen unseren Animationsplayer aktualisieren. Also in der Animationsplayer, gehen zu umbenennen Treffer ein, um nur zu treffen. Und dann für die Animation, stellen Sie sicher, dass diese als HIT ausgewählt ist. Wir können Hit Animation fertig lassen, weil wir auch eine Version davon für unser B
erstellen werden . Hit zwei, wir werden das nur löschen. Und dann Idol, ich denke, wir können das so lassen, wie es ist. Stellen Sie einfach sicher, dass ich immer die richtige Animation auf dem Animations-Sprite
spielen und dann laufen würde, löschen
wir das und gehen dann. Wir können das entweder löschen oder Sie können es einfach in Angriff umbenennen. Also werde ich das umbenennen, um anzugreifen. Und ich weiß, dass das später ein One-Shot wird. Also werde ich die Dauer auf 0,4 ändern
und nicht 0,4 schleifen, weil es acht Frames bei 20 Frames pro Sekunde hat. Und dann hier unten können
wir eine Spur namens Methodenspur auf dem B hinzufügen. Aber wir haben die Methode nicht erstellt, also können wir sie noch nicht wirklich hinzufügen. Also sieht unser Leerlauf so aus. Unser HIT wird die Animation fertig machen, und dann ist der Angriff hier drüben. Okay, also jetzt wieder im Animationsbaum für die einen Schüsse, stellen Sie sicher, dass sie Fade in und Fade Out Zeit ist 0. Wir möchten, dass sie sofort nach der Eingabe dieser Animationen wiedergegeben werden. Das ist wichtig. Und dann für das Erste aus, werde
ich die Standard-Animation in Leerlauf-Kinder ändern. Taschenlampe auf dem Bildschirm die ganze Zeit ist ziemlich ärgerlich. Also hier unten, Lassen Sie uns mit der rechten Maustaste, fügen Sie eine Animation und lassen Sie uns tun treffen, verbinden Sie das mit dem einen Schuss. Und dann für den einen Schuss hier drüben, den Angriff, wollen wir die Angriffsanimation. Also Animation Angriff, verbinden Sie das mit dem einen Schuss. Und dann für alle anderen Fälle wollen wir nur, dass es die Leerlaufanimation macht. Also verbinde das hier drin. Das ist also im Grunde unsere einfachste Animationsmischung Baum noch. Stellen Sie einfach sicher, dass Sie 21 Schüsse haben. Hit geht vor dem Angriff und dass beide haben die Fade in, Fade Out Zeit auf 0 eingestellt. Ich verbinde dann die Animationen, wie Sie brauchen. Okay, Also dieser Charakter wird immer noch eine
Sprungschastbox haben, da wir nicht mehr nach der Position auf den verletzten Boxen suchen, ich denke, nur eine größere Form
zu machen könnte tatsächlich ein wenig für den Spieler, der den Charakter trifft . Ich weiß nicht, ich werde es nur ein bisschen größer machen,
damit es mehr Bereich für den Spieler gibt, um zu schlagen. Also nehme ich nur den y-Wert und setze ihn auf drei. Es ist nicht wirklich notwendig, aber ich glaube auch nicht, dass es weh tut. Die gegnerische Kollisions-Kollisions-Kollisions-Box wird immer noch für unseren Alle Feinde werden in der Lage sein, in den Spieler zu laufen, um ihm Schaden zuzufügen. Dieser Charakter wird auch in der Lage sein, ein Projektil zu starten. Okay, also jetzt müssen wir das wütende Schwein-Skript von diesem b lösen. Also, wenn ich auf Trennen klicke und ich werde mit der rechten Maustaste ein Skript anhängen. Also erstellen wir ein neues Skript im Charaktere Feinde Ordner. Es wird BDD heißen. Und das wird tatsächlich vom Feind erben. Also lasst uns einfach hier oben ändern und wir geben Feind ein, drücken auf Erstellen. Also, jetzt, wenn wir das Skript an der Spitze erstellen, es erweitert Feind. Genau das wollen wir sehen. Lass uns das wegschneiden. Und jetzt können wir anfangen, an diesem B-Skript zu arbeiten. Also, wie andere Charaktere im Spiel, werden
wir immer noch Staaten in gewissem Sinne haben. Also werde ich
Enum-Status setzen und die drei Zustände für diesen Charakter werden inaktiv sein. Wenn er Schaden erleidet und angreift, wenn er die Angriffsanimation abspielt, werden
wir sicherstellen, dass sich der Feind nicht bewegen kann, während er angreift. Für dieses Skript, denke ich, wird es so schaffen, dass der Feind nicht bewegt, während er nur Wilds und den Leerlauf angreift, obwohl Sie es gleichzeitig angreifen können. Es hängt davon ab, was du willst. Wir werden auch eine Geschwindigkeit brauchen, damit der Charakter sich bewegt. Also exportieren, float, var, Lightspeed, und ich setze das standardmäßig auf 50. Also später werden wir natürlich ein Projektil aufstellen. So können wir das als etwas einschließen, das wir eine Instanz von
für unser B erzeugen können , indem wir eine exportierte Szenenvariable haben. Exportieren Sie also gepackte Szene. Und dann sagen wir dem B einfach mit dieser Variablen, was aus unserem Projekt gesehen wurde. Das ist ein TSC und eine Datei, von der wir eine Kopie erstellen möchten, und das wäre nur ein var Projektil. Wir werden auch eine aktuelle Zustandsvariable und dann eine festgelegte aktuelle Zustandsfunktion benötigen. Also denke ich, dass wir das auch in Feind setzen können. Also, dieses Zeichen wird auch
eine aktuelle Statusvariable und eine Menge get für den festgelegten aktuellen Zustand benötigen . Also wird dieses Zeichen auch
eine aktuelle Zustandsvariable und eine festgelegte aktuelle Status-Setter-Funktion benötigen . Wir könnten also in Erwägung ziehen, diese Codezeile von wütendem
Schwein in den Feind zu ziehen, so dass im Grunde jeder Charakter einen aktuellen Zustand zu setzen hat. Und dann können wir einen benutzerdefinierten Satz aktuellen Zustandsmethode für jeden definieren. Also ein wütendes Schwein, ich werde das hier rausziehen. So wie die Player-Wände werden einen aktuellen Zustand benötigen, Ihre Variable. Also ein variabler aktueller Zustand, und wir werden das gleich dem Zustandspunkt AIDL setzen. Standardmäßig werden wir eine Reihe von Funktionen für den festgelegten aktuellen Zustand schreiben. Wenn wir also einen Staat betreten, wollen
wir, dass bestimmte Dinge für diesen Charakter geschehen. Und wir brauchen auch eine Angriffsrichtung und
ein Angriffsziel, um Projektile zu starten. Also die, also die Richtung wird die Richtung sein, um das
Projektil n zu starten und dann hier unten werden wir das Angriffsziel haben. Und dann hier unten haben wir das Angriffsziel. Wenn ein Spieler den Radius des B betritt, um
ihn anzugreifen, wird er auf diesen Spieler gesperrt. Und es wird weiterhin Projektile auf
diesen Spieler starten , bis der Spieler die Angriffszone verlässt. Und wir werden wollen, dass das Projektil regelmäßig startet, nicht auf jedem einzelnen Frame, sondern eher einmal pro Sekunde, oder Sie könnten sogar weiter langsamer werden. Wir wollen also einen Timer, also werde ich mit der rechten Maustaste auf unseren Feind bei einem Kinderschein klicken, lass uns einen Timer erstellen. Und das kann Timer angegriffen werden. Stellen Sie sicher, dass es sich um einen One-Shot auf der rechten Seite handelt. Und Sie können die Wartezeit so lange zwischen Projektilstarts machen, wie lange Sie wollen. Eine Wartezeit von 1 Sekunde bedeutet also, dass es einen Angriff pro Sekunde startet. Jetzt können wir einen Hinweis auf diesen Angriffs-Timer bekommen. So unready var, Angriff Timer gleich Dollar Zeichen Angriff Timer. Und es gibt noch ein paar andere Knoten und unsere Hierarchie, auf die wir zugreifen müssen, wie die gegnerische Kollisions-Kollisions-Box, damit wir sie je nach Zustand ein- und
ausschalten können . So unbereit var, feindliche Kollision, Hit Box gleich Dollarzeichen, feindliche Kollision getroffen Dollar. Okay, als nächstes können wir unsere Physik-Prozessfunktionen schreiben. Also unterstreichen Physik-Prozess, wir wollen nur die Figur in einem Zustand bewegen, also lassen Sie uns den aktuellen Zustand entsprechen. Und wenn der Zustand im Leerlauf ist, dann werden wir uns bewegen, also geben Sie Punkt Leerlauf an, und dann werden wir Wegpunkt-Verschiebung Delta tun. Also denken Sie daran, dass erfordert, dass wir einrichten, wie der Charakter bewegt, wenn wir zurück zu Feind und wir können sehen Wegpunkt bewegen hat diese Funktion, müssen
wir implementieren. Was macht das in einer Sekunde, aber alles andere über das Verschieben zwischen Wegpunkten wird für uns gesorgt. Hälfte davon ist also schon geschrieben. Und es ist nur eine Art Zeitersparnis, da die Frames laufen. Wenn wir uns im Leerlauf befinden, können
wir den Spieler angreifen, wenn er da ist. Also werde ich einfach einen Kommentar hier schreiben, um uns wissen zu lassen, um es später hinzuzufügen. Also richten wir das in einer Minute ein. Jetzt lasst uns an der Bewegung unseres Charakters arbeiten. Es wird super zentral für die b sein also implementieren wir get move speed,
die Delta und, und Richtung nimmt. Alles, was wir tun müssen, ist die neue Geschwindigkeit zurückzugeben, die Fluggeschwindigkeit mal Richtung sein wird. Die Richtung ist also im Grunde die gleiche, aber die Richtung wird auf den Wegpunkt zeigen. Also trat ich es bewegt sich nur in Richtung des Wegpunktes 1 sein Ende der Leerlaufzustand mit der Geschwindigkeit der Fluggeschwindigkeit. Und das ist wirklich alles, was wir dafür brauchen. Wir sollten auch eine Funktion implementieren, die getroffen wird. Dies wird Schaden nehmen und schweben. Jeder Feind muss also eine Version davon haben. Also self.age minus entspricht Schaden und ändert den aktuellen Zustand in den Zustand Punkt Treffer. Wir müssen setzen aktuellen Zustand, neuen Zustand implementieren. Jetzt müssen wir diese Funktion hier aufschreiben. So Funktion aktuellen Status gesetzt und dies wäre neuer Zustand 3 kann sicherstellen, dass der aktuelle Zustand gleich dem neuen Zustand ist. Und natürlich werden wir hier noch mehr hinzufügen, denn wenn unsere Charaktere in einen bestimmten Zustand gelangen, wollen
wir, dass etwas passiert. Aber mal sehen, wo wir sind. Aber mal sehen, wo wir gerade sind. Gehen wir also zu Level 1, und fügen wir hier eine Kopie des B hinzu. Also unser B, wir brauchen neue Wegpunkte für, also duplizieren Sie die Wegpunkte mit Befehl oder Kontrolle D. Und lassen Sie uns einfach diese Wegpunkte verschieben. Ich weiß es nicht. Wir werden es für Testzwecke hier rüber stellen, schätze ich. Ok. Und dann Wegpunkte sechs, B wird sich hier bewegen, und dann wird es übergehen, um sich auf diese Weise zu bewegen. Aber das ist nur, wenn wir tatsächlich für diese als Wegpunkte einrichten. Klicken Sie also auf B und erstellen Sie ein. Setzen Sie das Wegpunkte-Array auf die Größe von zwei und Wissen wählen Sie Wegpunkte fünf und Wegpunkte sechs. Okay, jetzt können wir spielen und sehen, wie es bisher funktioniert. Ok? Es sieht so aus, als hätten wir den Fehler erhalten, bei dem die Wegpunktposition noch nicht festgelegt wurde. Also lassen Sie uns das schließen. Gehen wir zu dem wütenden Schwein, wo ich glaube, wir brauchen diesen Teil und den Feind. Der Wegpunkt-Index muss also am Anfang
des Skripts auf den Startwegpunkt gesetzt werden. Oder eher als das zu haben, könnten
wir es einfach zu einem Rowdy Bar machen. Der Wegpunkt-Index wird also der Startwegpunkt sein. Lassen Sie uns das löschen. Geh zum Feind. Wegpunkt-Index wird standardmäßig auf den Start-Wegpunkt. Und wir müssen das auf ready var machen. Auf diese Weise können wir dieses Setup haben, ohne eine fertige Funktion zu haben und möglicherweise eine alte zu überschreiben. Auf diese Weise können wir dieses Problem lösen, ohne
dafür eine fertige Funktion innerhalb von hier erstellen zu müssen . Also lasst uns voran gehen und spielen und sehen, wo wir wieder sind. Okay, hier oben müssen
wir auch die Wegpunktposition standardmäßig festlegen. Also ich denke, wir können das mit einer, mit einer Wegpunktposition machen und wir werden die Wegpunkte am Startwegpunkt bekommen. Und dann, um dies auf bereits bar zu bekommen, Lassen Sie uns den Knoten an der bekommen, Lassen Sie uns den Knoten an der 0 Position dieses Knotenpfads erhalten, dieser Startwegpunkt. Also wollen wir Wegpunkte an der Array-Position Startwegpunkt, der 0 ist. Und dann können wir die Position davon bekommen. Und das. Und dann können wir die Position davon bekommen,
die ein Vektor 2D sein sollte. Lass uns voran gehen und spielen und sehen, ob das hilft. Okay, ja, das scheint zu funktionieren. Also IB geht zwischen den Wegpunkten, sind wütend Schwein geht zwischen den Wegpunkten. Mal sehen, ob wir den Schnabel beschädigen können. Ja. Ok. Derzeit können Sie, aber die Hit-Animation wird nicht wiedergegeben. Also alles so weit, so gut.
34. Bee Enemy Staaten und Projectile: Okay, als nächstes in unserem festgelegten aktuellen Zustand für das B, lassen Sie uns den neuen Zustand abgleichen. Und lassen Sie uns einige Dinge einrichten, die passieren, je nachdem, welcher Zustand eingegeben wird. Wenn wir also einen Zustands-Punkt AIDL betreten, wollen
wir die Kollisions-Hitbox des Feindes nehmen und das einschalten,
was bedeutet, dass dieser Feind in den Spieler laufen kann und dem Spieler
Schaden zufügen kann, wenn er sich im Leerlauf befindet. Das wird also feindliche Kollision sein, Boxkasten, Punkt, Punktsatz verschoben. Seitdem, wenn Sie diese Eigenschaften auf
der Fläche 2D festlegen , muss es mit einer festgelegten verzögerten Methode durchgeführt werden. Und was schaltet sich aus? Und wir schalten die Überwachung ein. Und wir schalten die Überwachung ein. Was bedeutet, dass wir das wahr machen. Okay, das bedeutet also, dass unser Charakter den Spielern wieder Schaden zufügen kann. Und wir wollen auch die Variable kann getroffen werden und setzen, dass auch wahr. Das ist also, was der Spieler derzeit nach einem Feind sucht um zu sehen, ob er einen Sprungangriff darauf anrichten und ihm Schaden zufügen kann. Als nächstes wollen wir Staats-Punkt-Angriff. Also richten wir das einfach im Voraus ein. Also im staatlichen Angriff, nur für den Fall, aus irgendeinem Grund ist es nicht. Wir wollen, dass die Überwachung hier wahr ist, so dass es immer noch mit dem Spieler kollidieren kann, wenn es einen Projektilangriff macht. Und wir wollen auch, dass es in der Lage sein, den Player-Stil zu treffen. Also werde ich sagen, ich werde das kopieren einfügen. Der einzige Unterschied hier, dass wir
den Animationsbaum Umfang für Angriff aktiv aktivieren möchten . Nehmen Sie also den Animationsbaum und lassen Sie uns die Parameter Angriff aktiv einstellen. Und wir setzen das auf wahr. Solange die Hit-Animation momentan nicht wiedergegeben wird, wird die Angriffsanimation als Priorität vor dem Leerlauf abgespielt, was wir wollen und den Angriffszustand. Und dann schließlich, oder State Dot Head, wollen
wir die Überwachung nehmen und das ausschalten. Also, was deaktiviert die Fähigkeit des Feindes, Schaden an den Spieler zu verursachen. Wir können auch ausschalten, können getroffen werden, damit der Feind nicht verletzt werden kann. Watt und der Trefferzustand. Andernfalls kann der Charakter einfach weiter oben drauf prallen und töten es sehr schnell. Und dann wollen wir auch den Animationsbaum-Parameter hier setzen. Ich werde nur einfügen kopieren. Außer jetzt ändern wir es in den Trefferparameter anstelle des Angriffsparameters. Wenn der Feind getroffen wird, wollen
wir nicht, dass er plötzlich ein Geschoss auf den Spieler wirft. Ich denke, das wäre ein bisschen unfair. So können wir auch hier unseren Angriffstimer starten. Also werde ich den Timer-Punktstart angreifen. Unser Timer ist auf 1 Sekunde eingestellt. Während dieser Timer läuft, werden
keine Angriffe gemacht. Das bedeutet, dass
es, wenn der Feind getroffen wird, mindestens eine Sekunde Verzögerung geben wird, bevor er wieder angreift. Jetzt, damit wir die Animationen aufräumen können. Aber lassen Sie uns auch ein paar Funktionen erstellen. Wenn unsere einen Schüsse fertig sind, wollen
wir in den Leerlauf zurückkehren. Also lassen Sie uns Funktion erstellen, Hit Animation, fertig. Also an diesem Punkt wollen
wir nur zurück in den Leerlauf Zustand. So self.contents Zustand gleich Zustand Punkt Leerlauf. Und dann werden wir auch Angriffsanimation fertig einrichten. So wie Hit Animation beendet oder selbst Punkt aktuellen Status gleich Zustand Punkt AIDL. Aber wenn wir einen Blick auf die Angriffsanimation werfen, können
wir sehen, dass dies der Aufbau für den Charakter ist, der seine Angriffe startet. Das Timing, das wir tatsächlich
das Projektil starten wollen , wird am Ende unserer Animation sein. Dies ist also ein perfekter Ort, um gestartete Projektil zu setzen, die wir in ein wenig einrichten werden. So startete Projektil. Und dann lassen Sie uns voran und erstellen, dass gestartete Projektilfunktion. Für den Moment gehen wir einfach vorbei. Nun gehen wir zum Animationsplayer und es wird diese Callback-Funktionen eingerichtet. Also werde ich hier einen Schlüssel einfügen. Okay, mal sehen, das ist der Angriff. Also wollen wir auf einem Tack fertig machen, wo immer wir die Angriffsanimation fertig haben, und stellen Sie sicher, dass das das Richtige ist, das hier genannt wird. Jetzt gehen wir, um zu schlagen. Und dann wollen wir auf Hit fertig. Also werde ich dort klicken. Sieht aus, als wäre es schon von dem wütenden Schwein aufgestellt. Also hoffentlich sollten wir jetzt in der Lage sein, zwischen Treffer und Leerlauf richtig zu gehen. Also werde ich spielen, ich springe auf das B, okay? Es sah aus wie Hit the, Hit Animation und es kehrt in den Leerlauf zurück. Danach sind 0,5 Sekunden erledigt. Nur um noch ein Mal zu testen. Okay, scheint gut zu funktionieren. Okay, als nächstes müssen wir ein Projektil für unser B2B in der Lage zu Mittag zu schaffen. Also lasst uns eine neue Szene erstellen. Ich werde dies als kinematischen Körper 2D erstellen, da es sich bewegen wird. Und wir werden natürlich
eine Kollisionsform hinzufügen , diese Kollisionsform. Also werde ich den Angriff hier umbenennen, Bienenstich oder das Projektil von anderen. Und lassen Sie uns das in einem neuen Ordner speichern. Ich werde das Geschosse nennen. Und wir werden das da drinnen retten. Also unsere Kollision. Jetzt brauchen wir auch diese helle für unseren Bienenstich. Also werde ich in einem Sprite hinzufügen. Und dann gehen wir in unsere Kunst und finden den Angriff, also b, und dann haben wir die Kugel hier. Also werde ich das in die Textur setzen. So weiter auf unserem Bienenstich Projektil, die Haupt Kollisionsform für den kinematischen Körper 2D. Nun, ich werde nur einen Zusammenstoß mit
der Welt haben , weil ich das Projektil im Grunde lösche. Aber dann, um dem Spieler Schaden zuzufügen, werden
wir einen separaten Bereich haben, der im Grunde durch die Verwendung von Kollisionsschichten überprüft. Wenn es sich um einen Spieler handelt und diesem Spieler Schaden zufügt, bevor er das Projektil löscht. Nehmen wir also das B-String-Objekt und setzen Sie die Standard-Kollision. Schichten im Grunde nur Welt sein und schweißen. Also für unseren kinematischen Bienenstich Körper heute werden wir die Layer-Welt ausschalten. Dieses Objekt wird nur versuchen, auf der Weltebene kollidieren. Also denke ich, das ist alles, was wir brauchen. Und dann definieren wir die Kollisionsform dafür. Also benutzen wir einfach eine Kapselform. Ich denke, das passt zu diesem kleinen Be Stinger
, der irgendwie wie ein Zahn für mich aussieht. Das ist, passen Sie die Größe und Form davon an. Und ich werde das hier
oben positionieren , damit wir die Kollisionsform sehen können. Schichten Sie es auf das Sprite. Und das sieht ziemlich gut für mich aus. Ich könnte sogar nur Ton es nur ein wenig mehr Lieblings-Spieler, wenn es um Kollisionen mit diesem Objekt geht. Also jetzt brauchen wir einen anderen Bereich zu D, um dem Spieler Schaden zuzufügen. Also lassen Sie uns einen Bereich zu D. hinzufügen und dann werde ich diese Kollisionsform 2D duplizieren. Und wir werden es hier auch hier niederlegen, ist im Grunde die gleiche Form für Weltkollisionen und für Spielerkollisionen. Aber auf dem Gebiet zu D, überprüfen
wir nach Spielern und auf dem kinematischen Körper überprüfen wir nach Feinden. Also hier werden wir die Monitorblase ausschalten. Wir werden die Ebene und die Maske für die Welt ausschalten. Und wir werden die Maske für Spieler einschalten,
die ich auf die vierte Option hier gesetzt habe, die vierte. Aber jetzt können wir das so etwas wie Angriffsgebiet umbenennen, nehme ich an. Und wir können ein Drehbuch für unseren Bienenstich einlegen. Also für jetzt werden wir nur dieses Erben von kinematischen Körper 2D haben. Und wir gehen weiter und klicken auf Erstellen. Okay, also wird unser Bienenstich-Skript relativ einfach sein. Lassen Sie uns das alles da oben für jetzt löschen. Also wird unser Projektil wissen müssen, wie viel Schaden es verursacht. Export Float oder VD Schaden entspricht also standardmäßig einem. Für den Export von Float für die Bewegungsgeschwindigkeit dieses Projektils als auch, wir machen es ein wenig schneller als das B selbst, bewegen Geschwindigkeit von 100 standardmäßig. Und jetzt brauchen wir eine Variable für die Zielrichtung. Und wir werden dies standardmäßig auf Vektor zwei Punkt 0. Jetzt müssen wir dieses Objekt für jeden Frame aktualisieren, den es in der Welt gibt. Also führen wir den Physik-Prozess durch. Und hier bekommen wir die Kollision, die auftritt, wenn wir uns bewegen. Und wir werden einen Schritt machen und bis zu diesem Punkt in dem Spiel
kollidieren, das wir getan haben, bewegen und schieben, aber wir wollen nicht wirklich, dass das Projektil entlang der Kante von irgendetwas gleitet. Also machen wir nur Bewegung kollidieren. Und wenn es dann mit irgendetwas kollidiert,
was derzeit nur auf der Weltebene für den kinematischen Körper 2D selbst ist , dann werden wir es einfach löschen. Also verwenden wir Moving collide statt bewegen und schieben. Es wird also keine Folienfunktion geben. Und wir brauchen die Bewegungsgeschwindigkeit, die wir oben deklariert haben, mal die Zielrichtung, die wir vom Startobjekt bekommen, wenn wir voran gehen und das schaffen. Und dann multiplizieren wir das mit Delta. Denken Sie daran, dass beim Verschieben kollidieren Delta nicht automatisch berücksichtigt wird, d. h. die Zeit zwischen den Frames. Sie müssen also mit Delta multiplizieren, wenn Sie bewegliche kollide verwenden. Sie müssen das nicht für das Verschieben und die Folie tun, die wir für den Rest dieses Kurses verwendet haben. Behalten wir das im Hinterkopf. Und wenn wir eine Kollision haben, also werde ich tun, wenn Instanz bei dieser Kollision gültig ist, dann werden wir die Warteschlange drei, die nur dieses Projektil aus dem Spiel entfernt. Also, jetzt müssen wir einrichten, wenn wir einen Spieler treffen. Also benutzen wir diesen Angriffsbereich, gehen zu einem Knoten und machen Körperform eingegeben und verbinden das mit unserem Bienenstich. Also, jetzt haben wir einen Angriff Bereich Körperform eingegeben. Sie sollten immer ein Spieler sein. Und wenn es kein Spieler ist, Wir wollen wahrscheinlich, dass es einen Fehler von irgendeiner Art senden, Überspannungen, tun Körper Punkt bekommen Hit Schaden. Jeder Spieler sollte in der Lage sein, das zu tun. Und ich denke, wir haben es tatsächlich für Charakter eingerichtet, aber das sollte jetzt funktionieren. Und dann nach dem Schaden an den Spieler, wir q3, weil wir das Projektil aus dem Spiel entfernen, und das ist es für unsere Bienenstiche Skript. Also, jetzt gehen wir zum gesehen werden. Lassen Sie uns auf B-Inspektor klicken. Und laden wir das Projektil n für unsere Projektil gepackte Szene. Also hier drüben, laden, Lasst uns zu Geschossen gehen und Bienenstich Asean wählen. Okay, also sollten wir in der Lage sein, eine kleine Vorschau auf unser B zu sehen. Wir können Ressourcen Projektil Schrägstrich Bienenstich sehen, Punkt-Punkt-Punkt asean. Das sollte also in der Lage sein, das zu schaffen.
35. Projektilen: Jetzt müssen wir tatsächlich die Methode zum Starten des Projektils vom Balken erstellen. Also schuf er ein gestartetes Projektil, aber wir haben nichts damit gemacht. Und wir werden tatsächlich einen Parameter in hier übergeben müssen, was die Zielrichtung sein wird, die auch zum Bienenstich weitergeht. Also ein Richtungsvektor 2D, und dann wird diese Richtung von einer Angriffsrichtung kommen. Und das werden wir in einer Minute einrichten. Wenn wir das Projektil zuerst starten, müssen
wir eine Instanz davon erstellen. Also werde ich var gestartetes Projektil hier drüben machen, und das wird gleich Projektil Punktinstanz sein. Also, diese gepackte Szene, wir erstellen eine Kopie davon innerhalb unseres Levels,
sehen, wann wir, wann immer wir diese Methode ausführen. Mit dem neuen Projektil müssen
wir die Position festlegen. So startete Projektil Punkt globale Position. Und wir wollen, dass das der Position unseres B-Objekts entspricht. Erstellen Sie also das Projektil an der Position des B, und dann bewegt es sich von dort. So ist die globale Position dieses Objekts. Und dann müssen wir die Drehung des
Startprojektils einstellen , um unsere Angriffsrichtung anzupassen. Sonst sieht es ein bisschen lustig aus. Dies wird nur die Animation besser aussehen lassen. Also startete Projektil, und ich werde plus
gleich auf den Winkel tun , weil wir
das in der Projektilszene selbst anpassen müssen , um die Standardrichtung für das Projektil einzurichten. Und dann ändert sich das. Es dreht es auf der Grundlage seiner Flugbahn dorthin, wo es sein sollte. Also lassen Sie uns Zielrichtungswinkel tun. Dies wandelt also diesen 2D-Vektor im Grunde in
einen Winkel um , den die Rotation tatsächlich verstehen kann. Also einmal Projektil Punkt Rotation sollte auf der linken Seite sein und dann plus gleich Zielrichtungswinkel. Als nächstes fügen wir das gestartete Projektil unserer aktuellen Szene hinzu. Also holen Sie Baum und dann aktuelle Szene. Und dazu fügen wir ein Kind hinzu. Also fügen wir das Kind dieses gestarteten Projektils hinzu. Diese Bit-Linie bedeutet im Grunde, dass, wenn wir in unserer Ebene 1 sind, es wird dieses Level-1-Route-Objekt finden und
wir werden es als Kind hier unten hinzufügen, um innerhalb unserer Spüle zu existieren. Und dann ist die letzte Zeile, die wir hier brauchen, die Zielrichtung für den Start, das Projektil,
festzulegen. So startete Projektil Punkt Zielrichtung gleich Zielrichtung. Was ist das für eine Zielrichtung und wie richten wir eigentlich den Start des Projektils hier oben ein? Um den Spieler zuerst anzugreifen, müssen
wir feststellen, dass der Spieler eine Angriffszone betreten hat. Wir haben keine Angriffszone eingerichtet. Also lassen Sie uns einen anderen Bereich zu D auf unserem B erstellen. Also werde ich hier oben auf einen Kind-Knoten-Bereich 2D klicken, wir können es nennen, der Projektilangriff oder Bereich könnte es ein bisschen mehr Sinn machen, dass Projektile Angriffsbereiche, aber ich gehe mit, Lassen Sie uns mit der rechten Maustaste eine Kollision geformte 2D hinzufügen. Es ist wie jedes zweite Mal, und machen wir es zu einer Kreisform. Also diese Kreisform, ich nehme den Radius, die Ausdehnung da oben, und ich werde es zu 100 machen. Es ist also ein ziemlich großer Radius, wo wir sagen werden, dass wir den Spieler angreifen, wenn er zufällig im Inneren von hier ist. Also, wenn wir auf Projektil Angriff Bereich und gehen Sie zu Knoten, Sie können sehen, dass es kein Signal für den Spieler vorhanden in gibt, aber es gibt eine für Körperform in Körperform Unfall eingegeben, so auf eingegeben, wir werden den Zielspieler setzen , um der Spieler zu sein, der gerade eingegeben wurde. Und beim Beenden entfernen wir den Zielspieler vom aktuell referenzierten Ziel. Wenn es also kein Ziel gibt, startet
es kein Projektil. Und wenn es gibt und andere Bedingungen erfüllt sind, dann werden wir Projektile starten, nachdem jeder Angriff Timer ausgeführt ist. Also lassen Sie uns Körperform in das B-Skript eingegeben und
auch Körperform in das Skript verlassen verbinden . Ich werde das kleine bisschen hier oben nehmen, ja, genau hier. Und nun lasst uns das Angriffsziel einrichten. Das ist also wirklich einfach. Wir müssen nur Angriffsziel tun gleich der Leiche. Das ist also die Sache, die kinematische Körper oder der Spieler in diesem Fall, die in unseren Angriffsbereich eingegeben und wir registrieren es als Ziel, um zu versuchen, anzugreifen. Nun, wenn dieses Objekt verlässt, sagen
wir nur, dass das Angriffsziel gleich null ist. Jetzt hier oben über unseren Physik-Prozess
, der weiter laufen wird, während das Spiel fortschreitet. Wir wollen in unserem Leerlauf sehen, ob wir in einen Angriffszustand übergehen sollen. Also zuerst werden wir sehen, ob das Angriffsziel gültig ist. Also, wenn Instanz gültig, und wir werden Angriffsziel hier tun. Aber auch, dass die Angriffszeit oder wird derzeit gestoppt, dann werden wir ein Ei Timer wird gestoppt. Also ist die Abkühlung des letzten Angriffs vorbei. Wir müssen ein Ziel angreifen, also werden wir es angreifen. Also lassen Sie uns selbst Punkt aktuellen Status gleich Zustand Punkt Angriff tun. Und nun lasst uns die Angriffsrichtung so einstellen,
dass sie gleich der Richtung nach oben gleich der Richtung zum Angriffsziel ist. Eine technische Richtung entspricht also selbst.position Punktrichtung der Angriffsziel Punktposition. Und dann starten wir den Timer. Weil wir wollen, dass dies nur einmal alle 1 Sekunde oder wie lange Sie die Angriffszeit einstellen oder sein. Also Angriff Timer Punkt Start. Und das muss auch Richtung sein. Das bringt uns also in den Angriffszustand. Wenn wir unten im Angriffszustand sind, wird
unsere aktive Angriffsanimation dank dieses Parameters ausgeführt. Die Angriffsanimation lädt also den Angriff auf. Und dann haben wir die Angriffsanimation beendet, die das Projektil in Richtung
des Spielers basierend auf dieser Angriffsrichtung starten wird. Und wir werden in den Leerlauf zurückkehren, bis unser Skript uns etwas anderes sagt. Gehen wir also weiter und drücken Sie Speichern und sehen, wo wir sind. Okay, also wird das Projektil gestartet. Sie können sehen, dass sich das B nicht bewegt,
während es sich im Angriffszustand befindet . Was ich eigentlich nicht mag, möchte ich vielleicht, dass es Wasserangriffe bewegen kann, weil das einfach ein bisschen klobig aussieht, oder? Also lassen Sie uns einen anderen Übereinstimmungszustand einrichten und es ermöglichen, Wegpunkt nach unten zu bewegen. Also jetzt nur im HIT-Zustand kann es sich nicht bewegen. Lasst uns Play drücken, okay? Und jetzt unser b als angreifend, während sich bewegt. Und wir müssen das Basisprojektil drehen
, so dass dies tatsächlich auf unseren Spieler zeigt. Also, wenn ich mich erinnere, wenn wir zum Bienenstich gehen, der richtige Weg, um es gerade nach oben zu haben. Wenn ich mich also richtig erinnere, der richtige Weg, den Bienenstich
zu
nehmen und dann die Basisrotation auf 270 oder negativ 90 zu
setzen , um es ist esder richtige Weg, den Bienenstich
zu
nehmen und dann die Basisrotation auf 270 oder negativ 90 zu
setzen, um esnach rechts zu machen, der richtige Weg, um es
Gesicht zu machen , wenn Sie in der Winkel vom Start dieses Projektils. Okay, wenn wir also voran gehen und Play drücken, können
wir sehen, dass es unseren Spieler tatsächlich nicht angreift. Derzeit ist eine, die es angreift, die Welt selbst. Also, wenn wir unseren Projektil Angriff Bereich überprüfen, können
Sie sehen, Überwachung ist immer noch eingeschaltet Monitor ein Junge ist immer noch eingeschaltet. Was wir als Masker verwenden möchten, ist Spieler, schalten Sie Maske aus, wie die Welt und Schichten der Welt. Und wir werden auch Mano schrecklich ausschalten. Also, jetzt sollte es auf das richtige Ziel abholen, um anzugreifen, was nur der Spieler sein sollte. Wenn der Spieler also nicht in diesem Bereich
ist, greift er nichts an. Aber wir können in diesem Bereich gehen, damit es angreift. Und es sieht so aus, als wäre die Richtung des Projektils genauer. So dass es meistens richtig aussieht. Nur ein Problem besteht darin, dass es derzeit nicht in die Angriffsanimation eintritt. Lassen Sie uns also voran gehen und werfen einen Blick auf unsere B-Szene und irgendwie debuggen, warum die Animation nicht läuft. Überprüfen Sie hier. Sie können sehen, dass die Angriffsanimation nicht ausgeführt wird. Wir können den Treffer für auf überprüfen, und das funktioniert. Warum läuft der Angriff nicht? Also lassen Sie uns das animierte Sprite überprüfen. wir sicher, dass hier alles gut ist. Und es scheint zu sein. So können wir in Animationsplayer gehen. Und eine Sache, die wir hier tun könnten, ist einfach
die Angriffsanimation neu zu erstellen, die die Fehler beheben könnte. Lassen Sie uns also voran gehen und entfernen Sie die Angriffsanimation, und fügen Sie dann eine neue hinzu, genannt Angriff. Also nochmals, Zurücksetzen, dass wir
die animierte Sprite-Animation auf Frame 0 nehmen werden. Wir fügen den Schlüssel ein, um die Animation anzugreifen, dass wir auch die Call-Methodenspur auf dem B benötigen Also bei, ich denke, es sind 0,4 Sekunden. Und wir wollen mit der rechten Maustaste und Einfügen auf Angriff Animation fertig. Und auch wollen wir die Gesamtdauer der Texte machen, die 0,4 Sekunden sind. Schnappen Sie hier auch 0,05 Sekunden. Gehen wir nun zum Animationsbaum und fügen wir die Animation noch einmal hinzu. Angriff. Verbinden Sie es mit dem einen Schuss, und lassen Sie uns den einen Schuss überprüfen. Also, jetzt geht es tatsächlich, ich kann nicht genau erklären, warum das passiert ist. Jetzt. Es scheint zu funktionieren, damit wir weitermachen und spielen können. Und mal sehen, ob es tatsächlich die Animation abspielt. Das tut es also, okay. So spielte die Animation, aber ich denke, es hat sie nicht in einen anderen Zustand zurückgebracht. Also müssen wir sicherstellen, dass dies bei Animationsangriff beendet tatsächlich eintritt. Und das Problem hier, wenn wir hineinzoomen, ist, dass es bei 0,5 Sekunden ist, wo Sie es bei 0,4 Sekunden haben wollen. Das ist also wichtig. Lass uns voran gehen und spielen. Und wir können sehen, dass es funktioniert. Wir werden diese Projektile zum Start bringen. Und es wird irgendwie den Spieler verfolgen, um diese Projektile zu starten. So können wir immer noch springen, um die B zu treffen und beachten Sie, dass, wenn wir das B treffen, dass es definitiv eine Verzögerung für es beginnt wieder anzugreifen, da wir den Timer neu starten, wenn wir die B getroffen haben So jetzt unsere b im Grunde funktioniert. Wir müssen nur ein paar Klone davon im
Spiel erstellen und Wegpunkte festlegen, zwischen denen sie sich bewegen können. Also lasst uns auf das B klicken und vielleicht werde ich ihn hier oben ein bisschen anfangen lassen. Lassen Sie mich ihn den Spieler angreifen, wenn er irgendwie auf dieser Plattform ist und seine Bewegung wir 0.56, wo wir wollen, dass es sein. Dieser Teil liegt ganz an Ihnen, einfach Dinge zu positionieren , wo Sie wollen, dass sie zwischen und wo Sie wollen, dass der Startort sein. Und vielleicht lasst uns das B nochmal duplizieren und ein B hier oben setzen. Und vielleicht zu Testzwecken, lassen Sie uns eigentlich keine Wegpunkte geben. Also werde ich das Wegpunkte-Array hier auf 0 zurücksetzen. Und lassen Sie uns voran gehen und spielen und sehen, ob das uns einen Fehler gibt. Das tut es auch. Im Grunde kann dies nur dann wirklich ausgeführt werden, wenn es tatsächlich einen Wegpunkt im Array gibt. Also an dieser Stelle könnten wir eine sehr Funktion machen. Also Funk, Unterstrich bereit. Und dann legen wir das hier runter. So ist Wegpunktposition gleich diesem. Anstatt es auf sehr Viren zu machen, kann
dies möglicherweise nicht immer tatsächlich eingerichtet werden. Richten Sie dies also nur ein, wenn Wegpunkte Punktgröße größer als 0, größer als 0 ist. Da gehen wir. Lass uns voran gehen und spielen und sehen, ob das alle Bereiche klärt. Also hier haben wir eine andere, was ist, dass es im Grunde, wenn es keine Wegpunkte
gibt, keine Wegpunktposition gibt. Und wenn es keine Wegpunkt-Position gibt, dann können wir im Grunde keinen Wegpunkt-Mover machen. Also können wir hier einchecken. Wenn die Punktgröße der Wegpunkte größer als 0 ist, wenn dies nicht der Fall ist, dann sollte Wegpunktbewegung im Grunde nichts tun. Also lasst uns einfach alles überziehen. Und wenn es keine Wegpunkte gibt, werden einfach alles überspringen. Es gibt Fälle, in denen wir eigentlich nicht wollen, dass sich der Feind bewegt. Das scheint also jetzt im Grunde gelöst zu sein. Okay, aus irgendeinem Grund startet das B Projektile von einer komischen Position. Daran können wir in einer Minute arbeiten. Aber lasst uns hier rauf gehen und über dieses b sehen. Auch Projektile starten von einer seltsamen Position, aber zumindest funktioniert es, ohne dass das B tatsächlich einen Wegpunkt hat. Also, vielleicht würde die Position anstelle der globalen Position für das
Mittagessen Projektil ein wenig besser funktionieren und lassen Sie uns
voran gehen und spielen und einen Blick darauf werfen. Okay, jetzt startet es von der eigentlichen b also schätze ich, das funktioniert. , Wir könnten auch einen bestimmten Punkt hinzufügen,
z. B. eine Position zu D,von der aus das Projektil gestartet wird. Wir könnten auch einen bestimmten Punkt hinzufügen,
z. B. eine Position zu D, Ich mag das eigentlich besser, denn da es ein B Stinger ist, sollte
es nicht aus der Mitte des BA kommen, sollte hier runter kommen. Lassen Sie uns das hinzufügen. Also lasst uns in das B-Sprichwort in 2D-Ansicht eintauchen. Lassen Sie uns eine Position hinzufügen 2D Kind Knoten hinzufügen, Arzt 2D, gehen, um diese Startposition nennen. Ich werde Alt gedrückt halten und wir werden das hier runter zum Stachelboden ziehen, ungefähr genau da. Jetzt können wir das in unserem Skript referenzieren. Also werden wir auf bereit Bar tun, Startposition gleich Dollar-Zeichen Startposition. Und dann werden wir die Position dieser Position 2D bekommen. Und das ist, wo wir das gestartete Projektil erstellen werden. Also lasst uns voran gehen und jetzt spielen. Okay, das hat nicht ganz geklappt. Vielleicht brauchen wir eine globale Position für die gestartete Position. Okay, Nehmen wir an, spielen Sie Notiz, die dieses Problem wieder verursacht. Okay, also können wir sehen, dass die Startposition dieses Objekts nicht wirklich eine Übereinstimmung mit der Welt ist genau dort sehr gut. So, wie ich fand, zog
ich versehentlich in die Position der Welt weg von 000. So könnten wir die Position
der Welt zur globalen Position des gestarteten Projektils hinzufügen . Oder wir könnten einfach sicherstellen, dass das Niveau immer auf 000 liegt. Also, wenn wir auf eine 000 Weise positionieren, sollte es sein, dann nehmen wir das Niveau und lassen Sie es uns sperren. Jetzt können wir seine Position nicht bearbeiten. Wir können nur die Kinder bearbeiten. Also, wenn wir jetzt spielen, sollte
das dieses Problem lösen. Und jetzt unsere Stinger oder starten von der Zielposition, die wir da unten gesetzt. Und das sieht viel schöner aus. So können wir irgendwie durch unser Level Fortschritte machen. Okay, das Schwein ist immer noch eine Art Schmerz. Und hier müssen wir vorsichtig sein, denn so wird es einfach weiter auf uns schießen. Also lassen Sie uns auch einige Bienen in Level 2 aufstellen. Also werde ich nach Level 2 suchen. Wir werden Level 2 Szene eröffnen. Also lasst uns ein paar B hier aufstellen, B, k wir haben die B-Szene, könnten sie einfach reinlegen.
36. Befertigte Biene mit vertikaler Wegbewegung: Wir können es dort positionieren und dann ein paar Wegpunkte duplizieren. Wir drucken fünf oder 8.6, und lassen Sie sie in die Position bringen, die wir brauchen. Und dann stellen Sie sicher, dass unsere B-Position m hier oben mit den anderen Feinden Wegpunkte von zwei benutzen wird. Und wir werden Wegpunkte sechs und Wegpunkt fünf zuweisen. Jetzt können wir hinzufügen, dies hatte nur zwei zusätzliche Bienen. Warum nicht? Okay, also werde ich hier in ein B und ein B direkt dort fallen. Machen wir eigentlich eine Art schwierig. Wir werden drei Bs haben. Und jede dieser Bienen überträgt sie nicht unter den anderen Bienen. Mal sehen. Sie sollten keine Wegpunkte haben. Sie werden nicht bewegen, die nur eine Art Schmerz für uns sein wird. Nun, wenn Sie die aktuelle Szene anstatt die Startszene für das Spiel testen möchten, können
Sie diese Option hier verwenden, spielen Szene auf Mac, das ist Befehl vorgestellt, das ist Control R unter Windows. So können wir einfach von dieser Szene beginnen und Level 1 überspringen. Also lasst uns einfach herkommen. Wir können sehen, dass unser B versuchen wird, uns anzugreifen, wenn wir innerhalb der Sphäre sind. Wenn Sie einen Schritt weiter gehen wollten, Verwenden Sie die Re-Besetzung, um zu sehen, ob es eine Sichtlinie zwischen hier und dem Spieler gibt. Und dann, wenn diese Quote mit dieser Welt kollidiert, würde
sie davon abhalten, den Start zu machen. Aber wir werden es einfach so einrichten. Ich sehe auch einen anderen Fehler
, der darin besteht, dass wir uns nicht im y bewegen, also muss ich, okay, und lass uns einfach weitermachen. Also werden wir ein paar Wandsprünge machen. Und jetzt kommen wir hierher, um R Feind zu sein. Ja, das ist ein bisschen eine grobe Plattform, also müssen wir vorsichtig sein. Ok. Ich kann nicht doppelt davon abspringen, Schaden zu erleiden, was wie beabsichtigt funktioniert, aber wir können nicht ein wenig über den Feind hinausgehen. Das ist eigentlich ziemlich knifflig. Ok? Also springt und springt. Okay, ich habe den Sprung bekommen. Und dort können wir das Spiel schlagen, wie es ist. Und dann kommen wir zu unserer dritten Etappe. Also denke ich, ich werde dieses b hier rüber nehmen und vielleicht die B3 oder die Demo dieses Spiels
loswerden , denn das ist ein bisschen rau. Aber lasst uns schnell herausfinden, warum sich das B nicht auf dieser Ebene bewegt. Also werde ich den Spieler tatsächlich hierher bringen. Und nur damit wir den Test etwas schneller erreichen können, gehe
ich zum Befehl R, um die Szene in diesem Bereich zu betreten. Und mal sehen, es sieht nicht so aus, als würde es die Move-Methode überhaupt ausführen. Das nächste, was wir testen können, ist der aktuelle Zustand. Lassen Sie uns das ausdrucken. Es sollte den Physik-Prozessfall bei dem zustandsversprechenden Befehl R ausführen und es sieht so aus, als wäre es in Zustand 0, also ist es nicht der Leerlaufzustand. Ich kann in den Angriffszustand wechseln, das ist auch. Klicken wir auf die B. Es hat Wegpunkte, es hat eine Fliegengeschwindigkeit. Also schätze ich, das nächste, was zu überprüfen ist, was ist die Richtung? Also lassen Sie uns die Richtung hier drucken. Okay, in dieser Szene haben sie eine Richtung, aber mal sehen, es druckt nicht die Richtung. Okay, hier ist das Problem. Wir suchen nur nach der Entfernung x wir suchen nicht nach der Gesamtstrecke zu den Wegpunkten. Also vielleicht, was wir tun sollten, anstatt hier, wir können das immer noch speziell für das Schwein haben. Aber wir werden eine andere Methode machen, um Standardentfernung zwei Wegpunkte zu machen, weil gerade jetzt die Entfernung für x 0 auf diesem B ist, es gibt nur oben und unten. Es macht also durchaus Sinn, warum es sich nicht bewegt. Also lassen Sie uns eine var erstellen und wir nennen es Distanz. Und das wird gleich sein, um Entfernung zu bekommen, um Abstand zum Wegpunkt zu bekommen. Ich denke, das braucht nur die Wegpunktposition. Also vielleicht passieren wir die Wegpunktposition
und okay, und anstelle von Entfernung x sagen
wir einfach Entfernung von einem Wert. Ok? Also müssen wir die Funktion hier schreiben. Diese Entfernung zum Wegpunkt. Setzen Sie hier einen Unterstrich für eine virtuelle Wegpunktposition. Okay, also werde ich das passieren. Und das wütende Schwein, ich werde in die wütende Schweine-Version einfügen. Also lassen Sie uns eine Funktion schreiben, die unterstrichen bekommen Abstand zwei Wegpunkte, Wegpunktposition, Vektor 2. Und dann werden wir das einfügen und wir werden das zurückgeben, da das wütende Schwein x nur Entfernung ist. Jetzt für einen Standardfeind wird eine Standardimplementierung für sie haben. Und wie wir tun werden, ist, dass wir einfach
Selbstpositions-Punkt-Distanz zwei machen , eine Wegpunkt-Position. Ok? Und das müssen wir natürlich zurückgeben. Aber der Unterstrich dort. Okay, und das sollte die Fehler klären. Also gehen wir zurück zu unserem Level, um zu singen, gehen auf Befehl R zu treffen und wir können die Szene so laufen, wie sie ist. Und unser b sollte sich bewegen, weil die Entfernung jetzt sowohl das x als auch das y für Zeichen wie diese
überprüft. Aber beachten Sie, dass unsere Schweine immer noch mit ihrer eigenen Version der Funktion bewegen. Um das zu beweisen, Lasst uns auf Stufe 1 gehen. Und lassen Sie uns tatsächlich den Wegpunkt über die Schweine bewegen, und der Wegpunkt zwei über den Schweinen hatte auch. Und obwohl die Entfernung definitiv größer als 10 Pixel ist, werde
ich dafür sorgen, dass mehr als 10 Pixel wiegen. Das Zeichen wird sich nicht bewegen, da es nur die Entfernung auf der X-Achse überprüft. So können wir sehen, dass wir kein bewegliches Schwein haben, obwohl die Entfernung zu diesen Wegpunkten weit nach oben liegt, wechselt
es nicht zwischen den Wegpunkten. Also lassen Sie uns diese Positionen rückgängig machen. Und das sollte unsere Probleme aufräumen, damit sich das Baby nicht bewegt. Also gehen wir zurück zu Level 2. Ich werde diese Ebene zwei sperren, damit wir die Position nicht bewegen. Stellen Sie sicher, dass Transformation Servicer. Und lasst uns den Spieler hierher bringen. Und kommandieren wir R oder kontrollieren R. Und wir werden die aktuelle Szene ausführen. Also lasst uns das noch einmal testen. Und natürlich werde ich diese Debugging-Informationen loswerden. Also lassen Sie uns einfach einen schnellen Lauf durch dieses Level und Sie können den Schwierigkeitsgrad anpassen, wie Sie brauchen. Offensichtlich, wenn der Wandsprung zu schwierig ist, könnte
das ein wenig viel für einige Leute sein, ein Mann, der ziemlich hart ist. Vielleicht möchten Sie die Plattform so wenig
größer als 1 Quadrat machen , zumindest einige davon. Okay, aber jedenfalls scheint alles zu funktionieren. Also, lassen Sie uns ein letztes Mal wieder in das Skript gehen. Lassen Sie uns einfach den Druck aufräumen. Also werde ich nach Miete suchen, wo immer wir sie haben. Ich schneide es einfach aus. Wir brauchen es nicht mehr. Und das wird es so ziemlich für unser Plattform-Spiel sein. Also haben wir Setup, Bewegungsskripte für unseren Spieler. Oder Spieler können auf Feinde springen, ihnen Schaden zufügen. Wir haben zwei Arten von Feinden eingerichtet. Wir haben eine Kachelkarte erstellt. Mit Auto-Kacheln können wir zwischen Ebenen wechseln. Wir haben ein Spiel über DeathZone, ein Spiel über Bildschirm und eine Gesundheits-UI. Beachten Sie also die meisten grundlegenden Komponenten, die Sie für die Erstellung eines vollständigen Jump'n'Run Spiel
benötigen würden . Ich hoffe, dieser Kurs hat euch geholfen, in
Godot zu beginnen, um zu verstehen, wie man ein Jump'n'Run Spiel einrichtet. Also, so vielen Dank für das Ansehen und hoffentlich werde ich einige von euch auch in einigen meiner zukünftigen Inhalte sehen.
37. Bee es Bewachung: Also haben wir ein letztes Bug Fix Video für den Kurs. Wenn Sie das B genau so einrichten, wie ich es getan habe, Sie können in das Problem laufen, wo,
vor allem, nachdem Sie einen zweiten Schlag hinzufügen, dass es scheint einfach nicht, die Animationen konsequent zu spielen. Also habe ich festgestellt, dass eine Lösung dafür darin besteht, den Animationsplayer einfach neu zu erstellen. Also werde ich das wegschneiden und es dann wieder hinzufügen. Also lasst uns mit der rechten Maustaste auf die Biene klicken und einen Animationsplayer hinzufügen. Wir müssen nur die gleichen Animationen noch einmal neu erstellen. Also hier, wir werden neue Animation im Leerlauf tun,
gehen, um die Spur animierte Sprite-Animation hinzuzufügen. Und dann bei Frame 0 muss
dies die Leerlaufanimation wiedergegeben werden. Stellen Sie sicher, dass Schleifen. Snap auf 0,05 eingestellt. Und lassen Sie uns n die anderen Animationen hinzufügen. So Angriff ad Spur animierte Sprite-Animation. Und dann wird das ein Angriff sein. Und ich glaube, hatte eine Nullpunkt-Zeit von 35 Sekunden mit 0,05 Snap. Und die Idole sollten sich schleifen. Fügen Sie diesen Satz auf 0,25 hinzu. Jetzt lassen Sie uns einfach voran und erstellen Sie die Animation. Also Hit Eigenschaft und machte es Sprite Animation. Okay, und so der Schlüssel hier bei Frame 0, und lassen Sie uns die Hit-Animation dort bekommen. Das war also 0,05 für den Snap und 0,45 für die Animation, glaube ich. Jetzt müssen wir nur diese Aufrufmethoden hinzufügen, bei
denen unser B im Grunde gesagt hat, dass Hit beendet ist, also ist der Treffer beendet. Sie nun sicher, dass es auf 0 45 rastet. Und jetzt gehen wir auf Ad Track Anruf-Methode b.
Einfügen Schlüssel angreifen . Die Angriffsanimation wurde beendet. Und wir können hineinzoomen, stellen Sie sicher, dass es an der richtigen Zeit rastet. Danke. Also, jetzt haben wir Leerlauf Angriff getroffen. Jetzt müssen wir nur noch unseren Animationsbaum nehmen und unsere Animationen hier zurücksetzen. Also Rechtsklick Animation, Leerlauf geht zum ersten n. dann brauchen wir Angriff, um in diesen ersten Schuss zu gehen. Und dann für die zweite, die wir getroffen haben. Also lassen Sie uns das hier verbinden. Und jetzt können wir aktiv für unseren Animationsbaum überprüfen. Wir können unsere Animationen testen, indem die auf für den One-Shot und für den zweiten Schuss überprüfen. Jetzt lassen Sie uns voran gehen und spielen und sehen, ob es tatsächlich im Spiel funktioniert. Also hier haben wir unsere Animation auf magische Weise arbeiten. Also schätze ich, was tatsächlich passiert ist, war einfach das Timing etwas um 0,05 Sekunden zu verpassen. Vielleicht war es das Timing der Animationsaufrufe. Aber das scheint zu beheben, was wir vor sich haben. Und lasst uns einfach in Level 2 springen und sicherstellen, dass das immer noch der Fall ist. Also werden wir ein Kommando R auf dieser Ebene machen, und wir werden es einfach sehr schnell testen. Okay, also, dass B gut funktioniert. Und jetzt gehen wir hier rauf, oder die weniger drei B's. Ich schätze, ich habe es auf zwei temporäre IP fallen lassen. Das ist also die Art von Problem, in die UNO eingeht. Selbstverständlich können Sie die Einstellungen für Ihre Animationen überprüfen, wie sie sind. Aber alles neu zu erstellen, könnte etwas zeitintensiver sein, um Ihr Problem zu beheben. Also, wenn Sie irgendwelche Probleme mit Animationen für Ihre b haben, Ihr Spieler oder das wütende Schwein. Ich hoffe, dass das hilft, einige Ihrer Probleme zu lösen.