Transkripte
1. Unreal Engine 5 Blueprints Schritt für Schritt Entwicklung von Space Shooter Spielen: Begeben Sie sich mit den Lupinen
von Unreal
Engine
Five auf ein unvergleichliches Abenteuer zur Spieleentwicklung mit den Lupinen
von Unreal
Engine
Five auf ein unvergleichliches Schrittweise Entwicklung von
Weltraum-Shooter-Spielen. Ihr erster Schritt, um
ein Master-Spieleentwickler zu werden ,
beginnt hier fünf. Ich bin Marcos, ein Entwickler sich hauptsächlich auf den
Programmieraspekt des Spieledesigns konzentriert Meine Reise in die
Spieleentwicklung wurde von
einer tief verwurzelten Leidenschaft für
die Verschmelzung von Kunst
und Technologie angetrieben einer tief verwurzelten Leidenschaft für die Verschmelzung von Kunst Dies hat mich dazu veranlasst,
umfangreiche Studien zu absolvieren und realen Anwendungen im
Bereich des Spieledesigns zu
beschäftigen Bereich des Spieledesigns Dieser umfassende
Kurs lädt Sie zu einer aufregenden
Reise ein, um die
Spieleentwicklung mit
Unreal Engine Five zu meistern Spieleentwicklung mit
Unreal Leistungsstarkes Blueprint-System, das sowohl
auf Anfänger zugeschnitten ist, gerne die Ebene
der Spieleentwicklung erkunden möchten, als auch auf erfahrene
Entwickler, die ihre Fähigkeiten mit Unreal Engine Five
verfeinern möchten ihre Fähigkeiten mit Unreal Engine Five
verfeinern Dieser Kurs verspricht eine
reichhaltige Lernerfahrung , die jeden
Aspekt der Entwicklung eines
fesselnden Weltraum-Shooter-Spiels abdeckt fesselnden Weltraum-Shooter-Spiels Wir haben Ihnen ein
umfassendes Ressourcenpaket zur Verfügung gestellt , um Ihr Projekt in Schwung zu bringen, einschließlich aller erforderlichen Dieses Paket enthält
ein Weltraumlevel mit einem einzigartigen spielbaren Schiff und
zwei verschiedenen feindlichen Objekten Es ist komplett ausgestattet
mit 27 Materialien und den Instanzen oder
Reeffekt-Partikeln für
Schiffstriebwerke und Waffenwerfer, Soundeffekte zu
aktivieren Und zwei Level-Regeln für Action,
Review und Space Skyboards Review Diese Reihe von Ressourcen
soll dir einen Vorsprung verschaffen, darum geht, dein Spiel mit
visuell beeindruckenden und
ansprechenden Elementen zum Leben zu erwecken visuell beeindruckenden und
ansprechenden Der Kurs ist so strukturiert
, dass er Anfängern dabei
hilft, kompetente
Spieleentwickler zu werden Von Grund auf lernen
Sie, eine echte Engine und
51 der fortschrittlichsten
Spieleentwicklungsplattformen
zu
nutzen, 51 der fortschrittlichsten
Spieleentwicklungsplattformen um Ihre kreativen
Ideen in die Realität umzusetzen Verschaffen Sie sich anhand detaillierter
Demonstrationen ein tiefes Verständnis
der Architektur
und Mechanik der Engine. Wir legen zunächst den
Grundstein für Ihr Spiel, einschließlich
der Einrichtung des Spielmodus Entwerfen eines dynamischen Hauptmenüs und Implementierung eines Malsystems für
Spieler Wesentliche Schritte, um
die Voraussetzungen für ein immersives
Spielerlebnis der Kern voranschreitet, desto tiefer tauchen
wir Sie werden lernen, die Interaktion der
Spieler mit
fortschrittlicher Kameramechanik und
intuitiven Steuersystemen zu verbessern fortschrittlicher Kameramechanik und
intuitiven Steuersystemen Implementieren Sie ein robustes
Bewegungssystem, animieren Sie Ihr Raumschiff und entwickeln Sie ein umfassendes
Schießsystem Integration eines
Punktesystems zur Belohnung Spielern, das alle
Teil des Lehrplans ist Der Unterricht ist sorgfältig
darauf ausgelegt, auf den bisherigen aufzubauen und eine solide Grundlage
sowohl in Bezug auf die Grundlagen als auch auf
fortgeschrittene Techniken der
Spieleentwicklung zu
gewährleisten die Grundlagen als auch fortgeschrittene Techniken der
Spieleentwicklung das Sammeln
der Punkte
fügst du ausgeklügelte
Gameplay-Features
wie Raketensysteme hinzu, wie Raketensysteme hinzu, implementierst ein
Highscore-System
und erstellst eine Game-Over-Sequenz . bringt Ihr Spiel zu
einem polnischen Abschluss Dieser Kurs bringt Ihr Spiel zu
einem polnischen Abschluss und vermittelt
mehr als nur Programmieren. Er vermittelt Ihnen Fähigkeiten im Debuggen, in der
Leistungsoptimierung
und
beim Anwenden des letzten
Feinschliffs, die
ein herausragendes Spiel auszeichnen, das für
Personen konzipiert ist, die sich für Spieleentwicklung begeistern Dieser Kurs bietet
unschätzbare Einblicke und praktische Erfahrung,
unabhängig von Ihrem Erfahrungsniveau unabhängig von Für diejenigen, die großes
Interesse an narrativen Spielen haben,
sollten Sie erwägen, sich mit Unreal Gin Five,
visuellem, neuartigem und
erzählerischem Spieledesign,
weiterzubilden visuellem, neuartigem und
erzählerischem Spieledesign, Dieser zusätzliche Kurs
wurde sorgfältig entwickelt Ihr Verständnis
von narrativem Spieledesign
zu vertiefen. Er
bringt Ihnen bei, überzeugende Umgebungen zu gestalten, erzählerische
Feinheiten mit
Anal Engine Five-Datentabellen zu
meistern Anal Engine Five-Datentabellen , um Ihr Verständnis
von narrativem Spieledesign
zu vertiefen. Er
bringt Ihnen bei,
überzeugende Umgebungen zu gestalten, erzählerische
Feinheiten mit
Anal Engine Five-Datentabellen zu
meistern und komplexe Mechaniken nahtlos zu integrieren. Ganz gleich, ob es Ihr Ziel
ist,
immersive Bildromane
oder Spiele mit vielen Erzählungen zu erstellen ,
dieser Kurs wird Sie
befähigen, dafür zu sorgen, dass jede Entscheidung zählt und jede Entscheidung zählt und
dass alle Handlungsstränge bei Ihrem Publikum Anklang finden. Unreal Engine Five: Schritt
für Schritt — die
Entwicklung von
Weltraum-Shooter-Spielen ist dein Tor, Entwicklung von
Weltraum-Shooter-Spielen ist dein Tor, Träume von der
Spieleentwicklung Wirklichkeit
werden zu lassen werden zu Am Ende dieses Kurses verfügen
Sie über ein vollständig
entwickeltes Spaceshoter-Spiel, das
bereit ist, erweitert oder auf Ihre gewünschte Plattform portiert zu werden verfügen
Sie über ein vollständig
entwickeltes Spaceshoter-Spiel, das
bereit ist, erweitert oder auf Ihre gewünschte Plattform portiert zu werden. Wenn Sie bereit sind, sich
auf diese aufregende Reise zu begeben, lernen Sie und haben Sie Spaß.
Schließ dich uns noch heute an
2. Einführung in die UE5-Entwicklung und das Ressourcen-Pack: Hallo und willkommen zum schrittweisen
Space
Shooter-Spielentwicklungskurs
Unreal Engine Five, Blueprint Space
Shooter-Spielentwicklungskurs Beginnen wir unseren Kurs mit einem
Überblick über unser Ressourcenpaket. Und sagen Sie ein paar Dinge
über unser System. Und natürlich
erkläre ich gleichzeitig einige Dinge über Unreal und einige grundlegende Konzepte
von Blueprint Jetzt habe ich das
Resource Pack-Projekt geöffnet, und das erste, was wir sehen, ist dieses Fenster hier
, das wir Viewport nennen Die Karte, die gerade
geladen ist, ist die Standardkarte von Unreal
, die wir nicht ändern werden Wir können auf dem Umriss hier sehen, dies der Inhalt
der Welt ist Und wir können sehen, dass es
diese Welt mit einigen
Standardgegenständen bevölkert hat . Wir werden das aber nicht benutzen. Wir werden verwenden, wenn wir
zum Inhaltsbrowser gehen, gibt es einen Ordner namens Maps. Hier unten ist der
Inhaltsbrowser. Sie können ihn
mit der Kontrolltaste öffnen, schließen oder andocken. Das Layout, und es bleibt hier. Ich persönlich bevorzuge es Dock, manchmal
hängt es davon ab, woran ich arbeite. Lass es uns jetzt haben. In unserem Inhalt ist
das alles, was in unserem Projekt enthalten
ist. Dies sind die Inhaltsordner, die
wir hier kategorisiert haben. Hier können wir die Ordner sehen. Wenn Sie die Filter nicht
sehen können, das möglicherweise daran, dass Sie keine Filter aktiviert
haben. Ich habe einige Filter aktiviert und
deaktiviert. Dies ist ein Ort, an dem die von Ihnen verwendeten
Filtereinstellungen zur schnellen Verwendung gespeichert
werden. Wir können unsere
Filter hier zurücksetzen. Wie Sie sehen können, verschwinden sie. Aber wenn ich klicke,
sagen wir zum Beispiel
Blueprint, Alles über
Blueprints, alle Kategorien Wenn ich sie anklicke, Top-Filterung. Schauen wir uns nun unseren Inhaltsbrowser
an. Wir haben
hier einige Ordner, dann Blueprints,
Materialien, Partikel, Sounds,
Statik, Mesh und Texturen Dementsprechend finden Sie jedem Ordner
die entsprechenden Assets Unter statischen Kennzahlen finden
Sie die statischen Maße,
Texturen , Texturen,
Materialien, Materialien ,
Partikel, Geräusche usw. Im Ordner
Blueprints
finden Sie einen Blueprint namens Gehen wir jetzt zu unseren Karten. Gehen wir zunächst zu
unserer Vermögensebene. Auf der Asset-Ebene
demonstrieren wir unsere statischen Netze, einige Materialien, die wir verwenden werden, und einige Partikel, wie ich diese Kamera
verwende. Lassen Sie mich den
Cond-Browser schließen, damit das einfacher ist. Wenn ich jetzt radikal bearbeite, kann
ich die Kamera
nach links und rechts, nach
oben und unten bewegen , die Kamera
mit W S AD drehen , ich kann mich bewegen echter Editor deckt eine
Vielzahl von Bewegungen im Viewport ab, sodass wir sie jetzt
nicht alle
durchgehen In unseren Viewports
sind das die Partikel, die wir
für Triebwerke und für
unsere Raketenspur verwenden werden für Triebwerke und für
unsere Dies sind die
Materialien, die wir für unsere
Kugeln verwenden werden für unsere
Kugeln verwenden werden Genau hier haben wir die statische Botschaft
, die wir für unsere Spieler, das
Spielschiff und die Feinde verwenden werden Spielschiff und die Feinde Wenn wir zu unseren Inhalten zurückkehren und Raum,
Level, Level und Raum
auswählen, können
wir das hier sehen, können
wir das hier sehen was anders ist, wenn
wir unser Spiel testen. Wir werden
dieses Muster hier verwenden, aber wenn wir drücken, das Level abgespielt, alles, was
wir programmiert haben. Wenn wir aufhören, drücken wir den Stopp oder wir drücken die Escape-Taste. Es stoppt die Simulation. Bevor wir uns nun
eingehender mit einem Heck befassen, wollen wir uns ein wenig mit
unserem System befassen und darüber , welche Komponenten wir verwenden werden, um es herzustellen. Also werde ich Farbe mitbringen und einige Konzepte ein wenig
durchgehen. Wir werden einen Spielmodus verwenden, aber was ein Spielmodus
für jemanden ist , der neu ist,
hat keine Ahnung. Im Grunde ist es also eine
Art Blaupause, dass
ihr
Level-Regeln hostet , weil
die Spielmodi auf jedem Level erscheinen Jedes Level hat seinen
eigenen Spielmodus. Wenn du das Level
zurücksetzt,
wenn du
das Level erneut lädst, dann läuft das Spiel, der
Spielmodus ebenfalls Das ist eine wichtige Sache. Sie können in einem Spiel viele Arten
von Spielmodi haben. Außerdem bist du nicht auf einen beschränkt. Im Grunde ist es eine
Blaupause, die Regeln
auf Ebene und
auch Serverkram hostet Regeln
auf Ebene und
auch Serverkram Das ist auch für den
Mehrspielermodus wichtig. Wie dem auch sei, wir werden keinen Mehrspielermodus
machen. Lass uns weitermachen. Wir
werden einen Spielmodus verwenden. Wie Sie sehen können, habe ich Einfachheit
halber einige Dinge
variiert, aber lassen Sie uns die Punkte miteinander verbinden. In unserem Spielmodus
werden wir unseren Spieler spawnen. Wir werden eine Regel haben,
nach der wir unseren Spieler spawnen können. Wir werden auch das Hauptmenü-Widget
spawnen .
Was ist ein Widget Auch hier ist ein Widget eine
Blaupause, die darauf spezialisiert Dinge auf der Benutzeroberfläche
anzuzeigen, als ob
es einen Grafikdesigner Wir werden uns damit befassen, wenn wir
unsere Lektionen weiterführen. Da wir gerade über Widgets sprechen, werden
wir ein Hauptmenü-Widget haben, ein Gameplay-Widget, in dem wir unser Fadenkreuz, unsere Gesundheitsleiste und
unsere Ausdauerleiste hosten
werden Gesundheitsleiste und
unsere Ausdauerleiste Wir werden auch ein
Game-Over-Widget haben, das
unseren Highscore und
unsere Funktionen zum
Zurücksetzen des Spiels hostet unseren Highscore und
unsere Funktionen zum
Zurücksetzen Jetzt habe ich ein bisschen darüber gesprochen ein
Spieler-Spawn-System für Spieler zu
erstellen So nennen wir den Spielercharakter eines Spielers als
Spielerbauern. Es gibt viele
Möglichkeiten, das zu tun. Wir werden dabei den tatsächlichen Spieler
oder den Blueprint verwenden oder den Blueprint verwenden Wir werden
einen anderen Akt spawnen,
nämlich eine Kugelrakete für Spieler Jetzt heißt das Wort hier Schauspieler. Wenn wir ein Glossar erstellen, gibt es tatsächlich ein
Glossar
über diese Dinge Ein Schauspieler ist ein Akteur ist jedes Objekt, das im Level
platziert werden kann Es könnte ein Spieler sein. Es könnte ein statisches Ich sein. Ein schlichtes statisches
Durcheinander ohne Blaupause. Es könnten ein paar Partikel sein. Es könnten die
Startposition eines Spielers sein, eine Kamera, alles, was im Level platziert
werden könnte. Es ist ein Akteur als Information
in der Hierarchie in Unreal,
es gehört zum Spiel, als
ob es in der
Hierarchie des
Intrakommunikationssystems weiter unten steht Hierarchie des
Intrakommunikationssystems Aber das ist ein bisschen fortgeschrittener. Wie dem auch sei, ein weiterer Akteur
, den wir
erschaffen werden , ist Parent Enemy. Warum nenne ich es einen Elternfeind? Denn durch diesen Schauspieler werden
wir
dem Kinderdarsteller zeigen , wer der schießende Feind ist. Und der Boom-Feind, das
werden Feinde sein, die bestimmte Fähigkeiten und
Statistiken vom
Elternfeind
erben Statistiken vom
Elternfeind Dies ist eine weitere Funktion. Ein weiteres Glossar: Ein untergeordneter Schauspieler ist ein Schauspieler, Eigenschaften des übergeordneten
Schauspielers
erbt Jetzt werden wir einige Systeme haben
, die wir programmieren werden. Unsere Basissysteme wären
natürlich unser Highscore mit einem Bewertungssystem für Sicherheit und
Ladefunktionalität. Das wird jedes
Mal zählen, wenn wir Feinde töten. Mithilfe dieses Punktesystems berechnen
wir unsere
Upgrades zum Beispiel auf der Grundlage Punktzahl und natürlich
eines feindlichen Systems. Ich habe das Gesundheitssystem bis
zum Schluss behalten , weil
wir eine Komponente
verwenden wollten , eine Komponente, eine
Blueprint-Komponente Das Glossar dafür ist
eine Blueprint-Komponente. Es handelt sich können um
ein Verhalten, das
wir entwerfen und mehreren
Akteuren zuordnen So wie wir wollen, dass
der Spieler und die Gegner
dieses Verhalten zeigen, werden
wir es meiner Meinung nach in unserer Codierung als
schädlich bezeichnen . Ich glaube, das
war's für diesen. Ich sehe dich
beim nächsten Mal. Auf Wiedersehen.
3. Spielmodus und UI-Design: Hallo und willkommen bei
Engine Five Blueprints, der
schrittweisen Entwicklung eines Weltraum-Shooter-Spiels Fangen wir also mit unserem Projekt an. Wie Sie sehen können, wird
das Projekt
auf der Standardkarte geöffnet , die leer ist. Nun, falls wir in unserer Map
etwas falsch machen unsere Map als Standard hätten, könnte
das Projekt zurückgenommen werden und Sie
könnten das Projekt öffnen. Vieles kann schief gehen.
Im Grunde haben wir eine leere Standardkarte, und jetzt werden wir unser eigenes Level
öffnen. Im Inhaltsbrowser können wir
auf den Ordnerzuordnungen den Ebenenraum sehen. Das ist unsere
Hauptebene. Dies wird alles
enthalten, was wir erstellen
werden. Lass es uns öffnen. Wie gesagt, das Erste, was wir in diesem Level tun
werden ist ein Spielmodus, der das Hauptmenü-Widget
aktiviert. Und erstellt, dass der Player
tatsächlich das Hauptmenü-Widget anzeigt . Lass uns das zuerst machen. Warum
soll man von dort aus beginnen. Ich habe einen Ordner erstellt, den ich, vielleicht ist es der Inhalt, vielleicht nehmen wir diesen Ordner mit
auf den Haken oder aber du kannst Recht Ordner auf Inhalt legen und in einen neuen Ordner
gehen und es
wird ein Ordner erstellt. Sie nennen es Benutzerschnittstelle. Und ich werde
es nicht benennen, weil ich es bereits gelöscht
habe, oder? Dann können Sie einen Ordner erstellen, oder wir werden ihn verwenden, um unsere Widgets als Assets zu speichern Ich werde ein Widget schreiben, klicken
und erstellen. Ich werde das
Interface-Widget verwenden. Und die Vorlage, die wir verwenden
werden, ist ein Benutzer-Widget. Eine weitere Klasse. Für unsere Zwecke
werde ich diese Arbeitsgruppe anrufen. Ich werde es öffnen. Ich werde es speichern,
nur um es im
Speicher zu behalten, damit nichts
im Blueprints-Ordner passiert Ich werde einen neuen Blueprint schreiben, klicken
und erstellen. Wie Sie sehen können, gibt es
hier keinen Spielmodus, da das Spiel über eine Spielmodus-Basis verfügt , die
eigentlich ein Spielmodus ist, alle Klassen und Typen Wie Sie sehen können, handelt es sich um das
Spiel Old Base und Game Old. Ich werde
diesen auswählen, hier ist er. Und ich werde es Basisspiel
nennen. Jetzt fangen wir an,
unsere Regeln darin zu hosten. Bevor
wir unsere Regeln veröffentlichen, wäre es für unser Niveau
vielleicht klug , dass
dies das Spiel ist. Wie du sehen kannst, habe ich
hier einen Tab namens World Settings. Ich habe diesen Tab nicht hier drüben. Sie können ihn ganz einfach in den
Windows World-Einstellungen finden. Sie können sehen, dass es für mich aktiviert ist, es wird an einer
anderen Stelle im Layout angezeigt, aber Sie können
es jederzeit dort ablegen, wo Sie wollen. In einer Welt werden wir in den Schwulenmodus wechseln. Überschreiben Sie, wo „Nein“ steht oder es könnte
nur „Schwuler Modus“ heißen, was der Standardwert ist. Wir werden den Modus „
Nicht“ oder „Homosexuell“ wählen unser eigener GM-Spielraum, er hat einige Standardwerte. Wir werden den Plan
intern ändern. Wir können es hier ändern, tatsächlich können
wir unseren Charakter auswählen, alles im Blauen
ändern Wir haben
unseren Charakter nicht erstellt, aber er hat alle anderen
Standardcharaktere, die wir
verwenden können , um das Level zu speichern und in einen Modus
zurückzukehren. Diese Einstellungen befinden sich
in den Klassenstandardwerten. Es gibt Klasseneinstellungen,
Klassenstandardwerte und es gibt einige Unterschiede bei
den Optionen zwischen diesen beiden Aber im Moment verwenden wir Klasseneinstellungen und gehen zur
Standard-Punktklasse und wählen aus Der Grund, warum wir keinen
und nicht einmal unseren Charakter auswählen ,
ist, dass der Gade
dafür verantwortlich ist, den Spieler zu spawnen Aber wenn wir hier ausgewählt haben, bedeutet das, dass, wenn
das Level beginnt, der Spieler, bei dem wir
angeben wollen , wann der Spieler
spawnen soll Interessant ist, dass
wir das auch
hier auswählen . Du kannst sehen , dass sich das auch hier geändert hat. Das wirkt sich auf den Blueprint aus. Aber ich finde es schön zu wissen
, dass die Klassenstandardwerte hier das hier zum
Kompilieren
enthalten zum
Kompilieren
enthalten. Jetzt
werden
wir im Viewport nichts mehr hinzufügen, normalerweise in Blueprints
im Wir fügen einige Komponenten hinzu. Sagen wir, was das Blaue ist, in
diesem Fall wollen wir das Konstruktionsskript zum Schließen des Viewports
hinzufügen Nochmals, es ist etwas, das wir im Spielmodus
nicht verwenden werden. Es ist im Grunde ein Tool , um den Blueprint zu ändern,
während er erstellt wird In unserem Fall
wird der Spielmodus im Level erstellt, wir werden nichts erstellen Einwand. Was wir
verwenden werden, ist die Eventgrafik. Das Ereignisdiagramm ist normalerweise der
Ort, an dem der Hauptcode angezeigt wird. Der Haupt-Blueprint-Code wird das Event
Thick löschen, weil wir es
nicht
verwenden werden
, etwas , das pro Thick, pro Frame läuft Wir werden Event Begin
verwenden. Spiel das ab, wenn das läuft. In unserem Fall, wenn das Level
wegen eines Teils des Levels läuft wegen eines Teils des Levels wenn das Spiel beginnt,
tu etwas. Was wir tun werden, werden
wir erstellen,
werden von
hier wegziehen und Ige erstellen. Das ist unsere
Hinrichtungslinie von hier aus. Das, was mache ich, wenn ich im Spiel bin? Ein Widget, was ich
dieses Widget nenne oder ein
Widget erstelle , Wig Connected Line. Dieser Create-Node benötigt eine Klasse von Widgets,
einige Standardwerte. Er hat einige Standardwerte. Und das Widget, das wir
erstellt haben, G-Hauptmenü. Wenn Sie jetzt eine
Reihe von Widgets haben, können
Sie nicht einfach eingeben,
was Sie wollen. Wenn ich das Hauptmenü eingeben würde, könnte
ich das Widget-Hauptmenü sehen Wir werden das für einen
Kurs auswählen. Welches Widget sollte ich erstellen? Im Grunde bedeutet das. Es hat auch einen Besitzer. Wenn Sie beispielsweise ein lokales
Multiplayer-Spiel
oder sogar ein Multiplayer-Spiel hatten , können
Sie Widgets
anderer Spieler anzeigen. Du musst angeben
, welchem Spieler dieses Widget gehört,
wem es gehört. Jetzt verwenden wir einfach Controller, um Player-Controller zu bekommen. Dies gibt einen Verweis
auf unseren Controller. Jetzt werden wir keinen Controller
erstellen, wir werden
den Standard-Controller verwenden. Und wie Sie sehen können, hat
es einen Spielerindex für lokale Multiplayer-Spiele Sie können den Spieler anhand
eines Index angeben , es gibt viele Methoden. Wir haben das Widget erstellt Wenn Sie
jetzt ein Widget erstellen, müssen
Sie es tatsächlich zum Viewport
hinzufügen Wie beim Hinzufügen von allem, was
der Spieler sieht, gibt es dafür einen Knoten
namens Add to Viewport Aber wir
werden diesen Knoten jetzt nicht verwenden. Wir werden ihn
aber behalten. Lassen Sie uns die Verbindung trennen. Ich trenne die Verbindung, indem ich
Alt drücke und mit der linken Maustaste klicke. Wir werden mit der rechten Maustaste
auf den Rückgabewert klicken,
woraufhin wir sehen können, dass es sich um das Hauptmenü vom Typ
G, Objektreferenz handelt rechten Maustaste
auf den Rückgabewert klicken,
woraufhin wir sehen können, dass es sich um das Hauptmenü vom Typ . Jetzt ist Objekt ein großer
Begriff in der Programmierung. Dies wird als
objektorientierte Programmierung bezeichnet. Wir werden jetzt nicht in
Informatik einsteigen. Wir werden diesen Rückgabewert
zu einer Variablen heraufstufen. Was ist eine Variable, die
jemand fragen könnte? Eine Variable besteht aus gespeicherten Daten. Es gibt viele Arten
von Variablentypen. Sie speichern Daten. Im Grunde können
Sie diese Daten später manipulieren und
etwas mit ihnen anfangen. Im Grunde müssen die meisten
Dinge variabel sein. Die meisten Dinge, mit denen du etwas anfangen
willst. Nennen wir unsere Variable
WG in der Menüreferenz, weil sie auf
das Widget-Menü verweist Wir könnten dies
erneut hinzufügen, um Viewport hinzuzufügen. Wie Sie sehen können,
ist das S R farbcodiert. Wir können
den Gamecontroller jedoch nicht
zum Viewport hinzufügen , da dieses Nein
uns einen Rückgabewert gibt Löschen Sie die
Controller-Objektreferenz, wie wir hier sehen können. Eigentlich Hauptmenü,
Widget-Objektreferenz. Wir könnten das hier verbinden. Jetzt wollen
wir es, wie gesagt, zu Viewport hinzufügen Und der Grund, warum wir es nicht so
hinzufügen
, ist , dass wir gleichzeitig einige
andere Dinge tun wollen Zum Beispiel vom
Player-Controller, der alle Eingaben
und alles, was vom Player
kommt,
steuert . Wir wollen eigentlich die Maus einstellen, ich werde das kopieren, einfügen und
das hier verbinden. Ich werde das
hierher bringen, ob die Maus während
des Spiels angezeigt wird oder nicht wird vom
Play-Controller gesteuert. Jetzt setze ich das auf
true und verbinde es hier. Jetzt wäre es schlecht, solche Kabel
unter Drogen zu setzen. Was ich
tun werde, ist, aus unseren Variablen hierher zu bringen, dass wir diese neue erstellt haben. Ich werde
das herbringen. Und wenn ich einfach meine Maus
loslasse, habe ich zwei
Möglichkeiten, es einzustellen oder es zu holen und ich möchte es bekommen. Aber für einen schnellen Weg, das zu tun, wenn du die Taste Strg
drückst, bekommst du, wenn
du drückst, stellst du etwas ein. Wir werden das löschen
und das hier verbinden. Nun, wie nenne ich
diesen Code hier drüben? Denn wenn ich es
mit der Ausführungszeile verbinde, läuft alles zusammen. Es wird ausgeführt,
ausgeführt, ausgeführt. Es wird das auch ausführen. Aber ich möchte es nicht
gleich zu Beginn des Spiels ausführen. Ich möchte es ausführen können, wann immer ich will.
Wie mache ich das? Wie wir sehen können, ist dies ein Theaterstück, das ist das Schlüsselwort,
hier ist der Veranstaltungsteil. Was wir
erstellen werden, ist ein maßgeschneidertes Event. Wenn ich ein benutzerdefiniertes Ereignis so schreibe, wie Sie es sehen
können, lassen Sie es mich erneut tun. Benutzerdefiniertes Ereignis und siehe Seltsames, Benutzerdefiniertes Ereignis, benutzerdefiniertes Ereignis. Sagen wir das. Hauptmenü anzeigen. Ich werde das hier verbinden. Wenn Show Main Menu
läuft, werden diese beiden Dinge ausgeführt. Es zeigt die
Maus an und
fügt die Hauptmenü-Referenz hinzu, also das Hauptmenü im Viewport unter Verwendung
der
Hauptmenü-Referenz. Jetzt gibt es noch eine Sache. Es hilft dem System
zu definieren, was ist, was wir gerade
kontrollieren, worauf wir unseren Fokus haben. Zum Beispiel konzentrieren wir uns auf das Hauptmenü oder wir konzentrieren
uns auf das Gameplay. Selbst wenn
wir gerade im Gameplay sind, konzentrieren
wir uns auf ein
Widget oder spielen wir? Wo sollte ich diese Eingabe, die ich erhalte,
eigentlich schicken ? Das wird als Set-Eingabe bezeichnet. Jetzt können Sie sehen,
dass wir den Eingabemodus
Game und den I-Modus, Game on eingestellt haben . Und ich habe nur den Eingabemodus eingestellt. Ich will das nur, weil wir uns
im Hauptmenü befinden. Wir werden
diese Ausführung
hier verbinden , auf die sich Widgit konzentriert Es fragt uns, wir werden unser Widgit so
einstellen, dass es tatsächlich hier
doppelklickt, einen Umleitungsknoten
erstellt
und erneut doppelklickt um es
hübscher zu machen Wir können Verbindungen immer
begradigen indem wir mit der rechten Maustaste auf die Stelle klicken,
an der wir mit dem Begradigen
beginnen möchten der wir mit dem Begradigen
beginnen Und wählen Sie aus, warum das nicht
gerade ist. Wir können hier wieder
dasselbe tun, diesmal
den Umleitungsknoten überprüfen, alles
ist in Ordnung, aber manchmal brauchen
diese Dinge Zeit Wenn man programmiert, macht man das
normalerweise nicht,
dann kommt man hinterher
und repariert alles Jetzt Maussperre im Modus. Dieser
Maussperrmodus hat mit dem
Sperren der Maus im
Viewport eines bestimmten Widgets zu tun Sperren der Maus im
Viewport eines bestimmten Widgets zu Und es braucht ein
komplizierteres System , um verwendet zu werden,
ebenso wie Flash-Eingänge Es braucht bestimmte
Dinge bei der Eingabe,
spezifische Einstellungen, die verwendet werden müssen Im Moment werden wir
das auch verwenden. Wenn dieses Event läuft, wird
es alle ausführen und unser
Hauptmenü wird dem Viewport hinzugefügt Und es wird unsere Maus zeigen. Wir werden
es tatsächlich bei der Veranstaltung nennen, mit dem Spielen beginnen. Ich werde das Hauptmenü zeigen. Wir nennen diese
Funktion Event. Diese Funktion, die dieses Ereignis
aufruft. Eigentlich denke ich, dass das genug
Information für diesen ist. Ich werde dich im
nächsten sehen. Auf Wiedersehen.
4. Hauptmenü-Funktionalität: Hallo und willkommen bei Real
Engine Pipe Blueprint. Schrittweise Entwicklung von
Space-Shooter-Spielen. In der letzten Lektion
haben wir mit der
Erstellung des
Showmenü-Minisystems aufgehört . Und wir haben es bei
Begin Play aufgerufen , nachdem wir das Widget
erstellt hatten. Gehen wir nun weiter
zu unserem Widget-Hauptmenü. Wie wir sehen können, gibt es in diesem Widget bereits einen Unterschied. Wir haben es im
Widget-Menü auf der rechten Seite, wir können einen Unterschied feststellen. Das sieht überhaupt nicht so aus
wie damals , als wir
diesen Entwurf geöffnet haben Der Spielmodus-Blueprint
sieht aus wie die meisten Blaupausen. Wir haben diesen Viewport
hier drüben, den wir hier geschlossen haben. Wir sehen etwas anderes,
als wir hier oben sehen können. Es ist Designer und Graph. Wenn wir zur Grafik gehen, können wir
unsere Grafik sehen , sogar das Grafiksystem. Aber wir haben ein bisschen
anderes, naja, Eventtickets sind eigentlich üblich, aber die anderen beiden sind unterschiedlich. Darauf wollen wir jetzt achten
. Lass uns zum Design gehen. Lass uns über den Designer
sprechen. Hier gestalten wir
das Aussehen unseres Widgets. Wie das Widget aussehen wird. Wir haben
hier eine Reihe von
Primitiven , wie Audiokomponenten, allgemeine Grundelemente, Rahmen,
Schaltflächen, eine Menge Dinge Aber was wir gerade
brauchen, werden
wir anhand dieser Liste nach Canvas suchen
. Was ist ein Kompass? Ein Kompass ist etwas, mit dem
wir unser Layout nach der
Größe des Bildschirms ausrichten können wir unser Layout nach der
Größe des Bildschirms ausrichten Ordnen Sie unsere Dinge auf der Grundlage oder einer bestimmten Bildschirmgröße
an Aber im Moment haben wir
einen Kompass im Vollbildmodus. In diesem Kompass bringen wir einen Knopf
mit, ich werde hier einen Knopf zeichnen Sie können sehen, dass ich es auf
dem Bildschirm platzieren kann, wo ich will. Lass mich das für eine Sekunde löschen. Wenn ich nur eine Schaltfläche hätte kann
nur eine Schaltfläche ihre Größe
definieren, aber ich kann definieren, wo auf
dem Bildschirm sie sein soll. Ich mache das rückgängig und die Leinwand, damit ich die Position
definieren kann Eigentlich willst du keine
Schaltfläche, ich will zwei Knöpfe, ich will sie innerhalb der horizontalen, vertikalen,
vertikalen Box Aber die Schaltfläche befindet sich nicht
in der vertikalen Box. Ich kann den
Button immer nicht so,
sondern von hier aus in
die vertikale Box bringen . Ich kann aber auch, wenn
ich diesen lösche, mit der rechten Maustaste auf den Button klicken und „Mit senkrechtem Kästchen umwickeln“
sagen. Im Moment hat sich die Hierarchie geändert. Die Schaltfläche ist zuerst das zweite
vertikale Feld. Das Gleiche wäre, wenn ich nur den Button in der Box
verfolgen würde. Zwei Möglichkeiten, eine Sache zu tun, es gibt viele Möglichkeiten
, einige Dinge zu tun. Zwei Knöpfe, wie gesagt, nehmen, die Taste
kopieren
oder wir könnten duplizieren, könnten den gleichen
Effekt haben,
den wir wollen, wenn wir hier drei
Knöpfe hineindrücken oder wir könnten duplizieren, könnten den gleichen
Effekt haben, den wir wollen, wenn wir würden. Das würde nicht besonders
gut aussehen, wenn es nur zwei Knöpfe sind, die man übereinander sehen
kann. Lass uns sie rauslegen. Ich werde uns Pacer bringen.
Bringen wir einen Spacer mit Jetzt möchte ich diesen Abstandshalter
in der Box haben, sagen wir, zwischen
den beiden Aber lassen Sie uns
auch einen Abstandshalter einfügen, kopieren und einen Abstandhalter darüber
platzieren Und kopiere und füge erneut ein und füge einen Abstandhalter darunter ein Stellen Sie nun sicher, dass sich die Abstandshalter in
der vertikalen Box befinden Lassen Sie uns diese Schaltflächen nun benennen. Nennen wir das
Spiel starten, Spiel beenden. Wir haben unseren Mustern Namen gegeben, aber das bedeutet nicht, dass
dieser Name hier auftaucht. Bringen wir dazu einen Text mit. Ich werde es
in die eingegrabenen Knöpfe stecken. Lass es auf den Knopf fallen. Es befindet sich in der Schaltfläche, Sie können sehen, dass dort
Textblock-Textblock steht Richtig. Wenn wir nun zu den Details
gehen, hat
alles seine eigenen Details. Hier drüben haben Abstandhalter Details. Das vertikale Feld enthält Details
zum Text der Details. Wir können hier sehen,
dass Inhaltstext steht. Wir wählen
das und sagen nochmal von vorne anfangen. Während
wir im nächsten sagen werden, dass wir gewinnen, sehen
sie hier immer noch nicht
gut aus. Wir müssen
ihnen sagen, wie groß sie in dieser senkrechten
Kiste sind, wie groß sie sind? In diesem vertikalen Feld
werde ich sie auswählen. Alle von ihnen. Und. Ohne den Text auszuwählen. Ich meine, wir müssen
diese Hierarchie schließen und auswählen der Grund darin liegt, dass wir den Text
auswählen, der Text hier andere
Details hat. Es gibt verschiedene Optionen. Es hat nichts Gemeinsames , weil es sich in der Taste befindet. Wenn ich den Text außerhalb der Schaltfläche platzieren würde und er
sich innerhalb des vertikalen Felds befindet, hätte
er dieselben
Details. Lass uns das machen. Siehst du, es hat auch
Pudding und Größe. Gleiche Details, aber wenn ich
es in die Schaltfläche lege, ändert sich
der Kontext dieses Details und es ist wirklich eine sehr nette Maschine, die
alle auswählt und das Feld drückt, sie
sehen schon gut verteilt Was wir
jetzt ändern müssen, ist die Größe wie groß das vertikale Feld ist, wo es auf unserem Bildschirm platziert wird Was wir tun werden, ist dass wir
die Anker von hier aus tatsächlich auswählen können Das ist eine Definition
dafür, wie wir es,
relativ zur Bildschirmfläche, auf
das Widget einstellen , wir können es mit
den Punkten
definieren , dieses
Symbol hier drüben. Aber es gibt auch eine
Standardliste hier, die besagt, dass ich sie oben verankern möchte. Ich möchte es im Vollbildmodus auf
dieser Seite verankern. Es gibt viele
Standardstatus. Wir werden den
mittleren auf diese Weise verwenden. Wir können die Größe
dieser Box auch etwas einfacher definieren . Nehmen wir an, die
Größe X ist 400 und die Größe Y ist 300. Das klingt cool. Wir
werden es positionieren. Jetzt können Sie sehen, dass es verschoben
ist, weil wir umgezogen sind, ich habe es bewegt. Ich werde die Position neu einstellen. Und Sie können von dieser
Ecke aus sehen
, dass die Richtung und
der ursprüngliche Standort und
der ursprüngliche Standort verschoben werden Ausgehend von dieser Ecke wollen wir zur Hälfte in X-Richtung
-200 und zur Hälfte in
Y-Richtung minus 150
gehen -200 und zur Hälfte in
Y-Richtung minus 150 Und jetzt haben wir eine schöne
Position für unser Widget. Schauen wir uns an, was wir bis jetzt
erstellt haben, denn im Moment haben wir
eine visuelle Darstellung und basierend auf dem Code, den
wir hier geschrieben haben, sollten
wir tatsächlich etwas
sehen. Denn wenn wir das Spiel starten, erstellen wir das Widget und bringen es mit dem
Show-Mauszeiger auf den
Bildschirm. Lassen Sie uns noch einen Schritt abschließen. Gehen wir zum
Button Schnelles Spiel. Nun zu den Buttons, wir müssen zuerst
auf die Variable klicken, damit wir
einige Dinge manipulieren können. Siehst du, wenn ich
auf variabel klicke, ist diese Liste hier drüben erschienen. Die zusätzlichen Dinge wurden
angeklickt, gedrückt und losgelassen. Wir werden es auf veröffentlicht tun. Es wäre
derzeit eine bessere Taktik, Released zu verwenden. Bei der
Veröffentlichung des Schnellspiels passiert etwas. Für die Veröffentlichung des Schnellspiels haben wir gerade ein Spiel beendet. Wir wählen die spezifische Ebene „Schnelles Spiel “ und „Spiel
beenden“. Wir brauchen niemanden, der gerade
spielt, beenden Sie einfach das Spiel. Lass uns kompilieren und auf unserer Ebene
speichern. Lass uns spielen, unser Widget ist da. Spiel starten, schnelles Spiel. Spiel starten. Sollte nichts anderes
tun, als das Spiel zu beenden. Es beendet unser Spiel Es funktioniert also. Okay. Ich denke,
das ist ein guter Haltepunkt. Machen wir
hier eine Pause und wir werden dem nächsten
weitermachen. Auf Wiedersehen.
5. Grundlagen des Player Blueprints: In der letzten Lektion haben wir damit
aufgehört, die Funktionalität von
Quick Game zu entwickeln , und wir haben unsere Mechaniken
für die Anzeige des Widgets
getestet Die Starttaste
unseres Systems funktioniert allerdings nicht. Lass uns das reparieren.
Gehen wir jetzt hier in den Spielmodus. Da wir die Show moderiert haben, werden wir den
Hauptmenücode
hosten Ich schreibe, klicke und
bringe ein weiteres individuelles Event. Ich werde
diese Veranstaltung Hauptmenü nennen. Was wir nun hier erreichen wollen, wir wollen das Gegenteil davon. Wir wollen zeigen, dass der
Mauszeiger ausgeschaltet ist. Wir wollen die Eingabe
im Spielmodus einstellen. Und wir wollen es
aus dem Viewport entfernen. Wie machen wir das? Der
erste Schritt ist einfach. Wir werden
den Player-Controller
anstelle von True kopieren , wir werden
dieses Goldbarren in falsch umwandeln Der nächste Schritt
erfordert einen neuen Modus. Wie wir bereits gezeigt haben, stelle ich nur den Eingabemodus ein, es gibt auch ein Gameplay im eingestellten
Eingabemodus. Da unser Spiel
keine Widgets hat, die den
Benutzerfokus nutzen, passt uns das prima So entfernen Sie es aus dem Viewport. Jetzt gibt es kein
Entfernen aus dem Viewport, ein Entfernen aus dem übergeordneten Ich nehme unsere
Widget-Referenz, kopiere hier
und tippe Teil entfernen Es gibt noch eine andere Option. Es gab eine Option
zum Einstellen der Stabilität. Wir machen die Sichtbarkeit
unsichtbar oder reduzieren sie, was für unsere Zwecke eine andere
Technik ist. Aus dem Elternteil entfernt
ist völlig in Ordnung. Ein wichtiges Detail,
das Sie dabei beachten sollten, selbst wenn wir
die Sichtbarkeit verwenden,
ist, dass unsere Referenz
die Referenz behält, bis
der Spielmodus geschlossen wird . Auf diese Weise werden wir hosten.
Wir haben die
Referenz des Widgets, Wir haben die
Referenz des Widgets auch wenn es
aus dem übergeordneten Element entfernt wurde. Oder stellen Sie die Sichtbarkeit
auf „Zusammenklappen“ oder „Versteckt“ ein. Neben dem Ausblenden des Hauptmenüs. Als Nächstes sollten wir ein Ereignis oder eine Funktion
erstellen. Wir werden jetzt bei den
Ereignissen bleiben. Um den Spieler zu spawnen, erstelle
ich
ein benutzerdefiniertes Event und nenne es Spawn Jetzt werden wir das nicht
archivieren, weil wir
als Erstes die Schaltfläche verwenden sollten , um diese Funktionen
aufzurufen Hier
gehe ich zurück zu unserem Hauptmenü und überprüfe, ob
der Startpunkt unten variabel ist. Auch auf diese Weise zeige ich die Funktionalität
dieser Ereignisse auf. Und wir werden das Release-Event
nutzen. Wenn wir
das Startspiel drücken, wollen
wir den Spieler spawnen
und das Hauptmenü ausblenden Wie machen wir das nun, wenn
wir uns in diesem Widget befinden, das nicht über diese
Funktionen verfügt. Wenn ich von
hier aus das Hauptmenü ausblenden
aufrufe, wird es nicht angezeigt Liste gibt es kein Hauptmenü ausblenden.
Wie mache ich das? Nun, da wir den Spielmodus
verwenden. Der Spielmodus
ist, wie gesagt, ein sehr spezifischer Plan, der im Level
enthalten Real gibt uns einen netten Knoten
namens Get Game Mode, aber dieser gibt einen
allgemeinen Spielmodus-Typ zurück,
wie Sie sehen können, eine auf dem Spielmodus
basierende Objektreferenz. Dies gibt zurück, welchen
Spielmodus dieses Level verwendet. Aber in einer Art
Referenz, die wir nicht verwenden können, um
sie zu vergleichen. Wenn es unser Spielmodus ist, müssen
wir tatsächlich einen
Knoten namens Casting verwenden. Wir werden also das Spiel
GM GM Space kosten Spiel
GM GM Space , wenn wir Objekte vergleichen wollen. Wenn wir sie
verwenden, sind das in der Regel Casting-Knoten. Es gibt noch viele weitere
Details über das Casting, aber das fällt derzeit nicht in
unseren Zuständigkeitsbereich. Wir werden
die Ausführung verbinden und fragen, wann der Spieler anfängt. Das Spiel wird gedrückt ist der
Spielmodus, unser Spiel Ode. Ja, wir werden etwas
tun. Wir werden eigentlich
nichts tun, uns egal, ob es nicht
unser Spiel ist, tun wir nichts. Wenn wir in
den Spielmodus casten. Der Vorteil, den wir
daraus haben, ist, dass wir einige Aktionen erhalten, die auf dem Spielmodus
basieren. Da wir
bestimmte Aktionen über die
Widget-Hauptmenü-Referenz aufrufen könnten . Zum Beispiel können wir
Dinge vom Widget
selbst oder vom
Player-Controller aus aufrufen . Wir haben bestimmte
Dinge für die Maus aufgerufen. Hier können wir bestimmte
Dinge nennen, die wir in unserem
Klassen-GM-Weltraumspiel
geschaffen haben . Von hier aus können wir Spieler spawnen. Von
hier aus werden wir das Spiel verlassen. Du siehst den Fehler, den
ich gemacht habe. Ich habe einen Schlussstrich von der Hinrichtung gezogen. Die Hinrichtung weiß nicht, mit
wem ich spreche oder woher
ich Informationen benötige. Auch hier das
kontextsensitive Problem. Nun, es ist kein
Problem, es ist beabsichtigt. Wenn ich aus dem Spiel zeichne, schreibe
ich Hauptmenü. Und ich verstehe es, wenn ich
es von hier aus aufrufen würde, Hauptmenü. Denn siehe da steht, das
gehört zum GM-Weltraumspiel. Ich klicke, es verbindet
das nicht. Es wird ein Fehler auftreten. Es heißt, das ist, ich
weiß nicht, woher das ist. Aber wenn wir das hier verbinden würden, würde
es auch funktionieren. Kompilieren und speichern. Lass es uns jetzt
testen. Leertaste, drücken Sie Play. Wenn ich jetzt auf Spiel starten drücke, Spawnplayer
nichts, aber das Hauptmenü
sollte verschwinden Ich klicke hier, es ist weg. Dieser Teil funktioniert auch. Damit haben wir
ein nettes Setup erstellt , um unser Spiel zu starten. Jetzt ist es an der Zeit, mit der
Erstellung unseres Charakters zu beginnen. Gehen wir zum Blueprint-Ordner,
wir schreiben,
klicken und gehen zur Blueprint-Klasse und wählen eine Was ist nun der Unterschied
zwischen all diesen Dingen? Warum? Bevor wir ein
Spiel geschaffen haben, in dem alles eine bestimmte Funktion hat, war der Schauspieler quasi die allgemeinste
Klasse, die wir haben können. Eine Spielfigur ist etwas, das wir
besitzen und Input erhalten können. Eine Verbesserung der Spielfigur
wäre ein Charakter, der die Fähigkeit zum Gehen
einschließt Es heißt, weil es die Komponente der
Charakterbewegung hat, ist
es eher für den eigentlichen Charakter Aber da wir ein Raumschiff
benutzen, werden
wir Pawn benutzen Also wähle ich
Bauer und nenne es BP Player es BP Wie Sie sehen können,
hat es auch ein anderes Symbol als der Spielmodus Das ist ein Pon, heißt es. Aber natürlich kannst du deine eigenen Vorschaubilder erstellen, indem du
einige Tools verwendest , die Real für Miniaturbildgröße,
Daumen, Dd-Modus und
Echtzeit-Thumbnails
hat , die du mit
den Vorschaubildern ausspielen
kannst Lass uns das Raumschiff öffnen. Wir sind wieder in der Ansicht, die
wir zuvor hatten, die Widgets. Wir haben ein Viewport, wir haben
ein Konstruktionsskript, wir haben ein Event-Diagramm Das ist es. Aus den
Grundlagen geht hervor, dass wir Klassenstandardwerte und
Klasseneinstellungen haben Jetzt gibt es eine Menge Dinge
, die wir nicht über
den Viewport gesagt haben, und wir werden auch
kein
Konstruktionsskript verwenden Ich schließe das. Wir werden das
Viewport und das Banddiagramm verwenden. Da es sich
nicht um einen Spielmodus handelt, handelt es sich hier um die Präsentation
eines Schauspielers in der Welt Wir werden unser Schiff hier
bauen müssen. Hier werden wir
unser Schiff sehen. In diesem Panel hier drüben sehen
wir eine Schaltfläche
namens Komponenten. Tatsächlich können wir den
Titel Components
und eine Schaltfläche zum Hinzufügen sehen . Dies wird eine Liste
unserer Komponenten sein. Im Blueprint, was der Blueprint
aus den Komponenten enthält Das kann fast alles sein. Als ob es sogar
eine weitere Blaupause sein könnte. Es heißt Child Blueprint. Ich glaube. Kind, lass mich sehen. Ja. Das kann eine weitere
Blaupause für sich Aber bevor wir
das tun, lassen Sie uns
über eine Regel sprechen , die sehr
spezifisch für unseren Fall
ist, nämlich das Sperren von Pass-Blocking Die Kollision wird nur von der Wurzel
beeinflusst. Eine weitere
Kollision innerhalb des Teiches wäre keine
physische Blockade. Es gibt viele Möglichkeiten,
es zum Laufen zu bringen, aber standardmäßig funktioniert es nicht. Es könnte
Kollisionsereignisse registrieren, es könnte
Kollisionsüberschneidungen registrieren, aber es blockiert nicht Wir werden lediglich eine Kollisionsbox hinzufügen. Ich werde diese
Kollisionsbox zu unserer Wurzel machen. Das zweite, was wir hinzufügen
werden, wäre ein statisches Netz, das unser Schiff repräsentieren
wird. Auswahl des statischen Netzes. Nochmals, im
Detailbereich hier drüben. Wir gehen zu Static
Mesh und wählen unser Schiff aus. Welches Raumschiff? Okay, es ist ein bisschen größer. Nun, da wir die Box
als Wurzel ausgewählt haben und es keine
Standardwurzel N ist, senken wir das Schiff. Sie können sehen, dass dieses Feld nicht
die Größe und den Maßstab hat. Es hat weder
unser Skalierungswerkzeug unser Bewegungswerkzeug oder
ein Rotationswerkzeug. Das liegt daran, dass
dies die Wurzel ist, das ist der Bauplan selbst Lassen Sie mich das an den
ursprünglichen Ort bringen. Wir gehen
zum Standort und
wählen hier die Schaltfläche Standard, es ging auf 000. Wie machen wir diese Kiste
so groß wie das Schiff, wo es
da drüben diese
Box gibt, dass wir sie ein bisschen größer
machen werden. Vielleicht viel größer. Zu groß? Ich denke, das ist in Ordnung. Ja, das ist okay. Und
ich werde auf diese Weise größer. Ich denke, das ist in Ordnung.
Auch in dieser Größe. Runden wir diese Zahlen auf. 650-65-0540, sagen wir 190. Das ist unsere physische Blockkollision. Das heißt nicht
, dass
wir hier Schaden nehmen werden, denn
wir spezifizieren den Schaden, der am Körper selbst entstehen
soll. Das ist ein bisschen
höher, spielt keine Rolle. Wir könnten das Schiff
etwas tiefer bringen, aber das könnte zu
weiteren Problemen führen. Wir belassen es bei 000. Lassen Sie uns jetzt kompilieren und mal sehen. Lasst uns eigentlich beim Spawn des Spielers in den
Spielmodus gehen. Wir werden spawnen, so bringen wir andere
Schauspieler auf die Welt Wir wählen eine Klasse aus und bringen
diesen Schauspieler in der Welt hervor. Wir haben hier eine Verwandlung. Wenn wir retisch teilen können, können
Sie sehen, dass der Transformator
drei verschiedene Vektoren enthält Die Position der Spawn-Transformation, die Rotation und der Maßstab Einige Dinge für Kollisionen und einige andere Optionen , die wir momentan nicht verwenden werden Ich denke, wir haben wieder eine Klasse
wie bei Widgets. Welches, welches Widget wir erzeugt oder erstellt
haben. Wir werden hier
unseren Spieler auswählen Raumschiff zur Wir werden 000 verwenden. Da unsere Welt genug ist, fangen wir in der Mitte an. Wir werden verwandelt werden. Schauen wir uns das Ergebnis an. Wir gehen zur Weltraumebene,
drücken auf Play und wenn ich Spiel starten drücke, sehen
wir tatsächlich, dass
etwas erscheint. Ich denke, das ist
genug für diesen. Es ist ein guter Zeitpunkt, um
eine Pause einzulegen, und wir werden mit
der nächsten weitermachen. Auf Wiedersehen.
6. Kameramechanik und Steuerung: Hallo und willkommen bei Unreal
Engine Five Blueprint, der
schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der vorherigen Lektion
haben wir aufgehört, unser
Spawnschiff von innen
zu beobachten Das passiert, weil
wir keine Kamera haben und auch unser
Schiff nicht besitzen Wir sagen nicht, dass dies
das kontrollierte Schiff ist, von hier aus
steuern wir das Spiel Lasst uns diese Dinge reparieren. Gehen wir zu unserem Raumschiff im Viewport und fügen unseren Sprint hinzu Ein Federarm ist eine nette Komponente, um die
Kamera zu halten. Wir verwenden ihn als
Kameraboomstick oder
so, weil er das nette Merkmal
der Zielarmlänge
hat, was die Größe des
Federarms erhöht wir an dieser Federarmkamera
anbringen werden Sie können die Hierarchie hier sehen. Wir haben den Federarm, da
ein Kind die Kamera ist. Man kann ein bisschen in das
Innere sehen als in den anderen. Da ist dieser Arno , der nicht zu sehen ist, wenn wir ihn
geschlossen haben. Wenn wir es geöffnet haben, können wir
die Hierarchie im Federarm sehen die Hierarchie im Federarm Lassen Sie uns einige Standardwerte eingeben Zuallererst sollte das
Erste
die Länge von 2000 sein . Das ist eine schöne Entfernung, wenn man
die Größe unseres Schiffes bedenkt. Es sollte auf Höhe
1.000 sein . Geben wir ihm eine
Umdrehung von minus zehn. Lassen Sie uns kompilieren und speichern. Wenn wir jetzt zum Abspielen gehen
und ich auf Play drücke, wirst
du sehen, dass nichts passiert ist. Schau, was los ist.
Wir fügen die Kamera hinzu. Warum zeigt es uns nicht? Nun, wir müssen das besitzen, um dem Spiel zu sagen, dass
das unser Spieler ist. Benutze grundsätzlich diese Kamera. Bei Spielbeginn. Ich
gehe zu Broll, da es
das Ding ist, das
unseren Charakter kontrolliert, und wir müssen dem Spieler-Controller
sagen, wen wir besitzen Wir besitzen uns
selbst, wer ist das Ziel? Spieler-Controller, der besitzen
wird. Der Spieler-Controller
wird in Po besitzen. Wen besitzen wir in Po? Wir geben Selbst und bekommen
einen Verweis auf „Ich Spieler, die das Spiel kontrollieren,
besitzen diesen Bauplan. Wir werden
diese Hinrichtung verbinden. Gehen wir und drücken Play. Wenn ich jetzt auf Play
und dann auf Spiel starten drücke, können
wir sehen, dass das
Kameraproblem behoben ist. Wir haben einige Fortschritte gemacht, aber es tut nichts. Lassen Sie uns Dinge geschehen lassen. Wir haben den
Spieler besessen, als wir ihn spawnen. Wenn wir den Spieler spawnen, haben
wir ihn besessen Wenn das passiert, wird
das Startspiel
ausgelöst , sobald es erscheint,
und es
ist sofort von selbst in Besitz und es
ist sofort Lassen Sie uns jetzt zu etwas
ganz Einfachem übergehen. Schauen wir uns um
wie vor dem Umzug, schauen wir nach links, rechts war von oben nach unten
und so. Wie werden wir das
machen? Wir werden einige Eingaben benötigen. Jetzt werden wir
das erweiterte Eingabesystem nicht verwenden , da wir
keine Tasten ändern, binden
oder ändern oder
irgendwelche komplizierten Aktionen ausführen werden Tasten ändern, binden
oder ändern oder
irgendwelche komplizierten Aktionen ausführen Alles wird
in digitaler Form sein, nicht in analoger Form Das heißt, wenn ich etwas drücke, passiert
etwas und
wenn ich etwas loslasse
, passiert etwas anderes. Wir haben keine Zwischenstufen
, als ob wir
ein Gamepad hätten , das
mit allen Werten dazwischen 0-1 geht Das ist eine analoge Form von Eingaben. Da wir ein digitales Formular haben, nehmen wir unsere Maus,
X, Y. Das sind im Grunde statische
Eingaben Es ist gut zum Testen, es ist gut, um Dinge nur mit diesem
Verstand
geschehen zu lassen und mit nichts anderem Wie wir sehen können, hat es einen Rückgabewert und
einen Ausführungsknoten. Dieser Wert wird Achsenwert genannt. Jetzt werden diese beiden Ereignisse
ständig ausgelöst. Sie
geben uns ständig das Ergebnis
der Maus-X-Bewegung
und der Mausbewegung. Wir werden
diese beiden Mausachsen
verwenden und sie verwenden, um die Rotation unseres Schiffes
zu steuern. Wenn wir
hier oben oder auf die Klassenstandards klicken, können
wir zu
den Standardeinstellungen der
Pon-Kategorie gehen und sagen, Controller-Rotation verwenden Tonhöhe. Verwenden Sie die Controller-Rotation Die beiden müssen aktiviert sein. Auch dies
finden Sie in den Klassenstandardwerten oder ganz oben in
der
Hierarchie oben, genauer in der
Hierarchie auf der Registerkarte „Komponenten Jetzt wollen wir der Spielfigur
sagen, dass wir
jedes Mal, wenn wir uns auf X bewegen, hinzufügen. Wenn
wir uns auf Y bewegen, addieren
wir Y.
Tatsächlich addieren oder
subtrahieren
wir, basierend auf basierend der Richtung
auf der
Achse, in der sich die Was wir tun werden, ist
deine Eingabe zu kontrollieren. Dies ist ein Knoten, der lediglich
Eingaben zur
Controller-Rotation hinzufügt . Wie das coole Tp
noch einmal erklärt, warum
wir die Tonhöheneingabe verwenden werden, benötigen
beide Knoten einen Wert. Dieser Wert wäre
unsere Mauskonstante, einen Wert
angibt,
kompilieren, speichern wird. Lass uns zu unserem Level gehen und Spiel starten
drücken. Jetzt können Sie sehen, dass ich mich jetzt tatsächlich bewegen
kann, da Sie erkennen können, ob Sie es gleichzeitig
testen , wenn das Y invertiert ist Unbequeme Tipps dafür
wären, diesen, diesen Wert, diesen Wert,
diesen
Y-Achsenwert mit minus eins zu multiplizieren Wert,
diesen
Y-Achsenwert mit minus Jetzt gibt es uns einen
entgegengesetzten Wert. Eine andere Sache ist, dass es ein bisschen zu schnell
war. Wir können
tatsächlich
noch einmal mit einer anderen Zahl multiplizieren , und das auch mit dem X. Ich habe den
Multiplikationsknoten kopiert und eingefügt Ich werde das
hier verbinden. Verbinde das hier. Ich werde
die Werte auf 0,05
0,5 setzen . Das ist die Hälfte
des ursprünglichen Werts Wir würden ein Spiel mit halber
Sensitivität spielen. Wie Sie sehen können, wurde die Empfindlichkeit jetzt stark gesenkt
und wir haben die umgekehrte Drehung
korrigiert Jetzt ist die Kamera ein
bisschen nach vorne gerichtet. Ich denke, wir
sollten es vielleicht etwas weiter hinten platzieren Oder platzieren wir es
etwas weiter hinten. Lassen Sie uns auch die minus Zehn neigen. Neben dem Winkel
des Boomsticks erhält
die Kamera eine zusätzliche Umdrehung um
minus zehn. Dieser Bereich sieht viel besser aus. Wir drehen uns, wir können die Welt jetzt natürlich tatsächlich sehen Wenn Sie sich nach oben drehen, können
Sie sehen, dass es eine Kardansperre gibt
, wie sie genannt wird, die eine 360-Grad-Drehung
verhindert Aber das ist vorteilhaft,
weil es sehr
einfach wäre , die volle Kurve zu fahren Es wird dem
Spieler sehr einfach machen. Ich denke, das ist es für diesen. Ich sehe
dich beim nächsten Mal. Auf Wiedersehen.
7. Übersicht über die Charakterbewegung: Hallo und
willkommen zurück bei Real Engine Five. Schrittweise Entwicklung von
Space-Shooter-Spielen. In der vorherigen Lektion haben wir
damit abgeschlossen,
die Rotation des Charakters so zu erstellen , dass wir alleine hinschauen. Wir haben den Kameraboomstick
und die Kamera hinzugefügt und es
uns ermöglicht, unser Schiff
endlich aus dem richtigen Winkel
zu sehen endlich aus dem richtigen In diesem Fall werden wir unserem
Schiff etwas
Bewegung verleihen Aber bevor wir das tun, lassen Sie mich Farbe mitbringen und einige Erklärungen
kritzeln Zuallererst, wie werden wir unseren Charakter bewegen Wir könnten
den Standort unseres
Schauspielers festlegen , das sind Drehorte. Wir könnten
unseren Standort plus
oder minus eine gewisse Entfernung festlegen . Und wir könnten
den Charakter auf diese Weise bewegen. Wir werden
das nicht tun. Stattdessen werden
wir verwenden, lassen Sie uns für
eine Sekunde zu
einem Projekt zurückkehren. In den Komponenten gibt es eine
Komponente, deren Verhalten für uns bereits aus
einer Reihe zusätzlicher Dinge besteht. Es heißt Belastung bei Bewegung,
Schwebepunkt, Bewegung. Wie wir sehen können, enthält es
Werte für Beschleunigung,
Geschwindigkeit und Werte von Variablen und Attributen, mit denen
man herumspielen Wir werden die meisten davon nicht
verwenden, aber es ist ein ziemlich nettes System ,
um zum Beispiel im Weltraum
schwebende Punkte zu kontrollieren Wie Sie sehen können, gibt
es
hier eine vollständige Beschreibung mit weiteren Informationen Kehren wir nun zu
unseren Dualen mit dieser schwebenden
Bewegungskomponente zurück unseren Dualen mit dieser schwebenden
Bewegungskomponente Nehmen wir an, wir haben unser Schiff hier. Das ist, unser Schiff, sieht
nicht so aus, ist es aber. Wir haben eine Vorwärtsbewegung. Rückwärtsbewegung, sagen wir direkt von links, von rechts Wir werden auch eine
Auf- und Abwärtsbewegung haben. Das wäre unser W,
das wäre unser A. Das wäre, das
wäre D, für oben. Wir benutzen
die Leertaste und für die untere Taste die Steuertaste. Eine andere Sache.
Wenn wir im Weltraum sind und ein Raumschiff haben und wir vorwärts und
gleichzeitig rückwärts vorstoßen Wir sollten uns nicht bewegen. Das Gleiche sollte
passieren, wenn
wir gleichzeitig nach links und rechts vorstoßen, wenn
beide aktiv sind Wenn beide inaktiv sind, sollte
die Geschwindigkeit auf dieser Achse Null und auf dieser Achse
gleich
sein. Eigentlich wäre es
besser, es im Code zu zeigen. Ich denke, es wäre ein
bisschen sinnvoller. Lass uns mit dem Programmieren beginnen. Wir haben unsere schwebende,
bewegliche Komponente. Ich werde es neben
diesem wichtigen Ereignis anbringen , weil unsere
Bewegung stattfinden wird. Wir sollten überprüfen, ob sich unsere
Bewegung bewegt. Bewegen wir uns nicht
so, dass das bei
jedem Frame der
schwebenden Bewegungskomponente passieren sollte , werden
wir die Eingabe ziehen. Das wird uns unsere Bewegung geben. Wenn wir es jetzt bei
Null belassen, wird es nichts bewirken. Aber lassen Sie uns ein Beispiel machen. Wenn wir 100 auf
X setzen und Play
drücken, werde ich
auswerfen, um es anzuzeigen Wir können sehen, dass
unser Raumschiff filmt , wie ich das gerade gemacht habe Wenn du nach draußen
drückst und du auf
dem Viewport auswirfst und du hast diese freie Kamera, um deine
Welt zu sehen Wenn ich auf Play drücke, sehe
ich, dass ich
den Charakter nicht besitze , weil ich aus dem Spiel
ausgeschlossen wurde Ich kann herumnavigieren und sehen was vor sich geht, ohne es
tatsächlich zu spielen Wie wir sehen können, bewegt
es sich
mit einer Geschwindigkeit von 100 auf X zu, wenn
ich 100 auf X setze . Jetzt werden die Dinge
ein bisschen komplex werden. Aber bevor wir
die komplexe Sache machen, habe ich dich vielleicht ein
bisschen erschreckt, aber es ist okay. Wir werden alles
erklären. Bevor wir zu
den komplexen Dingen kommen, lassen Sie uns einige Eingaben machen, wie wir es für Mousex und Mousey getan haben Wir
rufen die Tastatur an, wir
rufen die Tastatur an, ich muss sie finden Hier ist es. Und lass uns eine Tastatur und das Board mitbringen. Und wir brauchen
auch ein Leerzeichen und auf der Tastatur die linke Steuerung. Ich hoffe, du hast
die ganze Suche beendet. Wir haben unsere linke Tastatur mitgebracht. Fangen wir an,
einige Variablen
zu erstellen , um zu sagen, ob sie gedrückt ist
oder ob sie nicht gedrückt ist. Wir werden Goldbarren
verwenden. Dafür benötigen wir 123456
Goldbarren. Das ist nicht der beste Weg, aber so werden
wir in diesem Fall vorgehen Ich mache 12345. Ich werde den ersten nennen. A ist gedrückt, ist gedrückt, tut mir leid, D ist gedrückt, ich werde W haben. Und das ist Ruhe und Raum. Es ist Ruhe. Noch eins, ich kopiere es, füge es ein und lasse Okay, manche haben Kapital, aber nicht. Lass mich das ganz schnell beheben. Lassen Sie uns unsere Variablen mit Setter
hierher bringen. Ich werde Drag & Drop
bei gedrückter Taste ziehen und schon
bekommen wir Setter Der eine ist wahr, der
andere ist falsch. Ich denke, wir können das kopieren und einfügen. Da wir
die Variablen hier erstellt haben, können
wir tatsächlich
eine Variable korrigieren und die Referenz durch W
ersetzen . Schnell und einfach, wir können all diese Verbindungen herstellen, wobei zu beachten ist, dass
es ja ist, wenn sie gedrückt wird. Wenn es nicht gedrückt wird, ist es Nein. Wir werden das
ersetzen durch. Ersetze das durch „Lass uns auch
D
Wiederholungen machen D “. Wir werden dasselbe für die Leertaste tun und wir werden
dasselbe für die Steuerung tun Im Moment können wir unsere Eingaben einfach vornehmen
, um unsere Mechanik zu testen. Lassen Sie uns das alles
etwas weiter zusammenfassen und
einen Kommentar hinzufügen. Eingaben,
Einstellungen, Eingaben , Staples Wir werden auf Show Bubble
klicken, damit wir schon von weitem sehen können, was dieser Code hier bewirkt. Gehen wir zurück zu
den komplexen Dingen. Aber wissen Sie was, ich denke, das bedarf
einer
genaueren Analyse , um erklärt zu werden. Das ist es für diesen. Das nächste Mal sehe ich
dich. Auf Wiedersehen.
8. Entwicklung von Bewegungsfunktionen: Hallo und willkommen bei schrittweisen Entwicklung des Space
Shooter-Spiels
von
Real Engine Five Blueprint Entwicklung des Space
Shooter-Spiels
von In der vorherigen Lektion haben wir damit aufgehört zu sagen , dass wir den
gruseligen Teil für diese Lektion verlassen gruseligen Teil für diese Lektion Wir haben einige Eingaben hinzugefügt. Wir haben gesagt, dass wir hier die gruselige
Mathematik
erklären werden , was ehrlich gesagt gar nicht
so gruselig ist. Lass mich wieder Farbe mitbringen. Was wir
tun werden, ist, wie gesagt, eine Richtung
vorwärts, rückwärts. Die Aufwärts- und Abwärtsrichtung,
die linke, die rechte Richtung. Das ist ein Vektor, eigentlich haben wir einen Vektor mit
drei oder zwei Punkten. Ein mathematischer Punkt, naja, im Grunde ist ein realer Punkt eine
Sammlung von drei Zahlen. Das ist im Grunde das, was
es ist, wie wir es benutzen. Es gibt viele Möglichkeiten
, drei Zahlen zu verwenden. Nehmen wir an, das X
unseres Vektors ist das W, nehmen wir an, der Draht
unseres Vektors ist A und D und das Z unseres Vektors
Raum, Par und Kontrolle. Wir werden
jeden von ihnen separat berechnen. Dann werden wir
all diese zu einem Vektor addieren, um die Gesamtrichtung
unserer Bewegung,
unsere Gesamtgeschwindigkeit, zu erhalten . Wenn wir hier, sagen wir, auf eins und wir uns hier
auf minus eins bewegen und das ist Null, dann bewegen wir uns diagonal in diese Richtung,
eins minus eins Lass uns diese Aktion machen. Lassen Sie uns eigentlich mit der Aktion
fortfahren. Manchmal lassen
sich diese Beispiele besser umsetzen, wenn wir all die mathematischen Fragen
und Fragen
hinzufügen , die wir haben. Wenn wir uns hier
aufwärts, rückwärts, abwärts bewegen, werden wir ein
Chaos anrichten Was wir tun werden, ist eine Funktion zu
erstellen Was ist nun der Unterschied zwischen einer Funktion und einem Ereignis? Es gibt viele Unterschiede. Einer der praktischsten
Unterschiede wäre, dass Funktionen keine
zeitlichen Dinge tun können, wie wir beispielsweise keine Verzögerung
innerhalb einer Funktion ausführen können. Eine solche gibt es nicht. Wir können andere Dinge verzögern
. Das sind viel
komplexere Dinge, aber in normalen Fällen können
wir Verzögerungen vornehmen, also diese Zeit
hinauszögern,
bevor Sie weitermachen. Wir können grundsätzlich mit der Zeit spielen, wohingegen dies bei Funktionen fast unmöglich
ist. Es können viele Funktionen
und Verzögerungen dazwischen liegen. Aber innerhalb der Funktion ist nichts, was einfach gemacht werden
kann. Alles wird auch in
dieser Funktion enthalten sein, diese Funktion wird eine reine Funktion
sein. Was das bedeutet, lassen Sie mich das für eine Sekunde
abklicken. Wenn ich
diese Funktion hier drüben aufrufe, musst du sie per Drag-and-Drop
ziehen Hier können wir sehen, dass es
eine Ausführungslinie hat. Das heißt sprechen,
spielen, spielen, rennen
und anfangen zu spielen. Läuft nach diesem Ereignis. Nach dieser Funktion wird es
diese Funktion ausführen und weiterhin
andere Dinge tun , wenn wir
sie als reine Funktion haben. Sie können sehen, dass es dem sehr
ähnlich ist. Es gibt uns jetzt ein Ergebnis. Wir haben es nicht gegeben, um es uns zu sagen. Machen wir das in Ausgaben
, wenn wir
die Funktion intern
oder extern auswählen . Lassen Sie mich von hier aus
zur Grafik zurückkehren. Innerhalb der Funktion können
wir sehen, dass es effektiv Eingaben
und Ausgaben gibt. Und was die Ausgabe angeht, erstellt
sie Befehle und
verbindet tatsächlich die Ausführungszeile mit
einem Rückgabeknoten. Jetzt können wir sehen, dass es einen neuen Parameter
als Rückgabeknoten gibt, als Ausgabe für diese Funktion. Dies kann
wie eine Blackbox betrachtet werden. Im Inneren passiert etwas
und wir erhalten nur ein Ergebnis. Wir werden
diese Funktion
hierher bringen . Wir gehen rein. Lassen Sie uns diese Funktion benennen.
Nennen wir das Bewegungsmathematik. Der Rückknoten. Wir brauchen ihn
nicht als Goldbarren, sondern als Vektor Weil Vektor das ist, was
wir hier verbinden werden. Um das hier zu verbinden, nennen wir diesen Vektor auch mit Bewegung. Es gab Bewegung,
vielleicht Größe , weil wir
die Geschwindigkeit auch hier
hineinlegen werden. Mir
geht es schlecht, wir werden die
Geschwindigkeit hier nicht angeben, weil unsere Geschwindigkeit
durch unsere schwebende
Bewegungskomponente gesteuert wird . Wir legen keinen festen Standort fest, wir verwenden die schwebende,
bewegliche Komponente. Wir werden
drei neue Variablen benötigen. Wir werden 123 haben. Sie werden
vom Typ Vektor sein. Wenn ich es sehr schnell gemacht habe, können
Sie auf einen Variablentyp klicken und den Variablentyp ändern. Oder Sie können es von
diesem Panel aus hier tun. Und wählen Sie hier den
Variablentyp aus. Lassen Sie uns diese Variablen benennen.
Nennen wir diese. Vorwärts rückwärts. Das wird L R sein, richtig? Das wäre oben und unten. Dieses Ergebnis wäre diese Bewegungsrichtung
das Ergebnis der Addition von
drei Vektoren wäre . Eine andere Möglichkeit, dies zu
tun, besteht darin, dass jeder von ihnen eine Ganzzahl oder ein Float ist. Wir würden
jeden einzeln hinzufügen, aber das Hinzufügen von Vektoren
ist dasselbe. Ich werde das hier verbinden, jetzt müssen wir den Spector irgendwie
auffüllen Ich werde sie
mit Alt mitbringen, um sie einzustellen. Bringen wir sie in Ordnung. Die Reihenfolge spielt keine
Rolle, da diese Hinzufügung sofort
erfolgt. Tatsächlich passiert es, nachdem
wir das alles berechnet haben. Es ist nicht wirklich wichtig,
in welcher Reihenfolge wir das tun. Okay, wir brauchen etwas Platz. Okay, fangen wir
mit B. an. Ich
bringe und es wird
eine Bedingung gestellt und Goldbarren Das heißt, wenn
beide wahr sind, wenn beide falsch sind, wenn einer von ihnen wahr ist
und der andere nicht,
dann wird Falsch zurückgegeben Sie müssen beide wahr sein,
um uns ein wahres Ergebnis zu liefern. In jedem anderen Fall würde
uns das zu einem negativen Ergebnis führen. Wir wollen auch das Gegenteil
davon. Wir werden das kopieren, einfügen
und ihnen vorzeigen. Was bedeutet das?
Das heißt, wenn das ja ist, mach ein Nein, das ist ein Nein,
mach daraus ein Ja. Ich werde auch das Ende herbeiführen. Beachten Sie jetzt, dass ich den Knoten,
die Rückseite der
Goldbarren, vor das Ende gelegt habe die Rückseite der
Goldbarren, vor das Nehmen wir zum Beispiel an, wenn ich ihn nach dem Ende platzieren würde, würde
das nicht zu
den gleichen Ergebnissen führen Wenn zum Beispiel W
wahr und nicht wahr wäre, würde
dies ein negatives Ergebnis zurückgeben. Und wenn man den Knoten hier setzt,
wäre es positiv, aber es
hätte negativ Aus diesem Grund kehren wir beide
einfach um. Dann fügen wir
das Ende hinzu, weil die logischen Operationen das Ergebnis ändern
würden Diese Art von Prüfungen werden Logikgatter
genannt. Es ist ein großes Kapitel
darüber, wie man sie benutzt, was die häufigsten
Anwendungen sind und so weiter. Es ist ein Teil der Informatik, es ist eine sehr interessante Sache. Im Moment haben wir
unsere beiden Bedingungen. Wir haben zwei Bedingungen. Unsere erste Bedingung
lautet: Wird WNS gleichzeitig gedrückt? Und die zweite
Bedingung
besagt tatsächlich , dass WNS überhaupt nicht
gedrückt wurde? Nichts von ihnen ist gedrückt. Wenn es das eine oder das andere ist, sollten
wir etwas tun, das
ich logisches Tor
nenne, logisches Tor. Das heißt, wenn das wahr ist oder
das wahr ist, tu etwas. Was machen wir mit
dieser Frage hier? Weil das eine nette
Komplexitätsfrage ist, aber nicht zu komplex, aber
es geht nicht nur um ein einzelnes Edelmetall Wir werden ein
Ergebnis für unsere Richtung B auswählen. Ich ziehe aus
Richtung B und gebe Select ein Wie Sie sehen können,
haben wir zwei Möglichkeiten. Wählen Sie eine Ebene und einen Vektor aus. Beide sind identisch. Der Unterschied besteht darin, dass ich,
wenn ich Select wähle hier eine Wildcard erhalte. Weil ich vielleicht auf der
Grundlage von etwas
anderem als einem Edelmetall auswählen möchte auf der
Grundlage von etwas
anderem als einem Edelmetall Ich möchte vielleicht auf der
Grundlage einer Ganzzahl auswählen. Ich möchte vielleicht
anhand der Aufzählung auswählen. Select kann unter
verschiedenen Bedingungen verwendet werden. Wenn ich das
Ergebnis von Or hier verbinde, wird
der Platzhalter automatisch in einen Edelstein umgewandelt Wenn diese Bedingung nun aus einem dieser
Gründe zutrifft, sollte
unsere Richtung bei Null bleiben sollte sie Null bleiben Richtung F B , weil wir möglicherweise auf etwas anderes
drücken. Wenn das stimmt, ist es Null. Wenn nicht, wählen
wir erneut aus. Diesmal verwende ich den
Select-Vektor und Sie können sehen, dass Pick A berücksichtigt,
dass dieser Pick a, das Wahre hier,
das Falsche hier ist, während es hier das Gegenteil ist. Falsch ist hier,
wo Wahr hier ist. Nachdem wir das gesagt haben, lassen Sie uns
das ein wenig rückwärts bringen. Lass uns gedrückt werden. Wir brauchen nicht zu
fragen, ob gedrückt ist, denn wenn wir
diese Prüfung hier bestanden haben, dann interessiert uns nur eine
der beiden anderen Richtungen. Wenn das stimmt, dann
werden wir weitermachen. Wenn das nicht stimmt, ist es wahr, wir werden uns rückwärts
bewegen Wenn das nicht stimmt, werden
wir
weitermachen Jetzt muss ich noch
ein paar Dinge erklären. Das ist eine wunderbare Gelegenheit
, um zu erklären, wie die Welt und lokale Ausrichtung aussehen.
Lassen Sie es uns erklären. Nun, wir haben gesagt, dass wir gerade eine
Vorwärtsbewegung Ich habe in unserem Plan ein Beispiel für eins
minus eins Wir haben ein Koordinatensystem. Wenn wir zum Beispiel die Kamera, die Feder
der Kamera,
platzieren , sagten
wir, dass sie sich auf der Z-Achse um
1.000 bewegen wird. Nun, diese 1.000 basieren auf
dem Mittelpunkt unseres Entwurfs in
einem eigenen Koordinatensystem Aber wenn wir auf der Welt sind, ist
dieses Koordinatensystem nicht dasselbe Die Welt hat ihren eigenen Standort. Es ist relativ zur Welt und
relativ zum Bauplan. Das Relative zum Bauplan, wir nennen es den
relativen Standort Und das andere ist
das Wort Standort. Es gibt diesen Unterschied
zwischen diesen beiden. Wir wollen kein Plus
eine Richtung zur
X- oder Y-Achse hinzufügen . Was auch immer wir
innerhalb des Entwurfs als vorwärts betrachten, wir wollen das auf der Welt basierende
Vorwärts hinzufügen Unreal hat uns genau dafür
eine Funktion zur Verfügung gestellt. Sie heißt Get at
Forward Vector. Wir haben für unsere Schauspieler einen
Vorwärtsvektor. Das heißt, wenn
wir nicht S drücken, sollten
wir weitermachen. Wenn wir drücken,
sollten wir rückwärts gehen. Dazu multiplizieren wir einfach mit minus eins
, um den Wert
zu negieren Wie Sie hier sehen können, haben wir Vektor mit Vektor
multipliziert, denn wenn es sich um eine Typmultiplikation handelt,
erhalten wir dies standardmäßig Keine Sorge. Wir können es ändern, es hat uns auch dieses System gegeben. Dass wir
dies von hier aus ändern können, indem wir mit rechten Maustaste klicken und
den kompatiblen Typ auswählen. Wir wählen eine
Ganzzahl und machen eine Minuszahl. Und verbinde das hier. Das Vorwärts- und
Rückwärtsfahren sollte bereit sein. Wenn wir jetzt spielen gehen, sehe
ich keine Bewegung Lassen Sie uns herausfinden, warum das so ist. Ich denke, wir müssen
die Bewegungsmathematik mit
dem Inputfaktor verbinden . Wenn ich jetzt
Crest Game spiele , sind wir es tatsächlich, aber da ist ein bisschen, wir bewegen uns zu langsam
, als dass dieser Hintergrund erkennen
könnte
, dass wir uns bewegen. Aber wie wir das testen können, können
wir tatsächlich
in den Mund nehmen. Wir können verbinden,
sagen wir , den Vorwärtsvektor
in Richtung F B kompilieren. Drücken wir erneut auf Play. Falls wir sehen können, dass es sich bewegt. Wenn wir das
Minus mit Richtung B verbinden, dem Gegenteil von Vorwärts, spielen
wir wieder und wir lehnen ab und
es bewegt sich rückwärts Ja, unser Schiff bewegt sich. Wir können es nur noch nicht sehen. Okay, ich werde
kompilieren und speichern. Ich denke, das sind
genug Informationen. In den nächsten Lektionen werden
wir die anderen
beiden Sätze
abschließen. In
der nächsten werde ich dich sehen. Auf Wiedersehen.
9. Bewegung mit Partikelspuren visualisieren: Hallo und willkommen zurück
zur
schrittweisen Entwicklung eines Space
Shooter-Spiels mit Engine Five schrittweisen Entwicklung eines Space
Shooter-Spiels mit In der letzten Lektion haben wir
mit der Erstellung der Vor
- und Rückwärtsbewegung aufgehört . Das war der schwierige Teil der
Erklärung, was wir tun. In dieser Lektion werden
wir die nächste Bewegung mit
der Links-Rechts-Bewegung
und der Aufwärtsbewegung
abschließen , aber das wird sehr einfach sein Wir fügen diese
Logik einfach hier ein. Beginnen wir mit dieser Kopie und fügen Sie diese Logik hier ein. Ich werde
das mit L R verbinden und wir werden
unsere W und S in A und D ändern . Wir werden
alles durch A
und D ersetzen . Die Reihenfolge
spielt
hier wirklich keine Rolle , weil es dasselbe Ergebnis
sein wird. Wir werden das auch
auf D
ändern , vielleicht umgekehrt. Jetzt besteht der einzige Unterschied darin den Vorwärtsvektor des
Schauspielers verwenden,
sondern wir nicht den Vorwärtsvektor des
Schauspielers verwenden,
sondern
den richtigen Vektor verwenden werden Wenn dieser gedrückt wird, ist das meiner Meinung nach das Gegenteil der Fall. Lass es uns jetzt
überprüfen. Weißt du was eigentlich?
Wir brauchen ein System, etwas Visuelles, um zu beobachten
, dass wir uns bewegen. Ich denke, es ist an der Zeit, ein paar Partikel
hinzuzufügen. Gehen wir zurück zu unserem Viewport und wählen wir
unser statisches Mesh Wir brauchen zwei Kinder, um zwei Partikel
hineinzulegen. Wir werden,
wir werden
Kaskade hinzufügen , weil diese Partikel aus dem alten Kaskadensystem Wir werden das duplizieren. Wir werden den
ersten übrig gebliebenen Weg nennen. Und ich werde
es von der linken Seite ziehen. Lassen Sie uns eigentlich
den anderen benennen, richtig. Ich wähle wieder
die Spur nach links verschiebe sie direkt
am Rand dieses Flügels, vielleicht ein bisschen
innerhalb des Flügels. Wenn
sich das Partikel auf Null bewegt, zeigt
es nicht viel Es ist nicht da, wo ich es haben will,
sondern ein bisschen drinnen. Ja, ich denke, das ist von allen Seiten
perfekt
, sodass ich es jetzt sehen kann, für den richtigen Weg. Ich kopiere
diesen Standort einfach hier drüben. Wählen Sie den richtigen
Weg aus und fügen Sie ihn ein. Da wir
über die Y-Achse sprechen, werde
ich
jetzt einfach den Trail eingeben. Da ich
die Spur hier ausgewählt habe, sie dem ausgewählten Partikel
automatisch
die Komponente
hinzugefügt und ihr auch einen Namen gegeben. Das macht
Real, wenn Sie richtige
Objekt ausgewählt haben und es hinzufügen. Die Referenz wird automatisch erstellt, auch wenn es sich um ein Netz handelt. Wenn es ein
Partikelsound oder was auch immer ist. Da wir die Position
kopiert haben , bevor wir sie tatsächlich einfügen
können, kopiere
ich etwas anderes. Ich muss das wiederholen. Ich hätte
oft schnell
auf Rückgängig drücken und es so machen und den Ort kopieren
und einfügen Aber manchmal können unwirkliche
Abstürze, wenn Sie mehrere Aktionen zum Rückgängigmachen ausführen mit ein
wenig Zurückhaltung ausgeführt
werden Übertreibe es nicht. Warten Sie, bis
die Aktionen abgeschlossen sind Ich platziere den Anhänger
an der richtigen Stelle. Kopiere, platziere den Standort, entferne das Minus, das die Spur zum anderen Ort
führte. Wenn wir jetzt auf Ja drücken, haben
wir Spuren, wir haben Spuren. Wir können sehen, dass wir uns bewegen. Wir können sehen, dass wir uns
bewegen. Das ist großartig. Aber A und D sind vertauscht, wie ich vermutet habe.
Wir werden uns ändern Dies wird gedrückt, bis A
gedrückt wird und
Start gedrückt wird. Es ist richtig. Großartig. Wir haben Bewegung.
Wir wandern auch. Jetzt siehst du, dass der Weg
ein bisschen verschmiert ist. Dies geschieht
aufgrund von Bewegungsunschärfe. Wenn wir zu den Projekteinstellungen,
dann zu den Projekteinstellungen gehen, geben
wir Bewegungsunschärfe
in die Standardeinstellungen, Motion Blair Engine Rendering, ein
und wir Automatisches Speichern, wir
speichern nichts, wir schließen es einfach und es speichert
die Einstellung und drücken Im Moment können wir
sehen, dass unsere Wege nicht mehr so neblig
sind wie zuvor Großartig, jetzt fahren wir mit dem
Hinzufügen der Z-Achseneingaben fort. Ich werde das nochmal als
Basis kopieren. Ich werde das hier verbinden. Ich werde diesen Raum ändern. Und diese eine Kontrolle sind
wir, wir werden das hier machen. Ich
kontrolliere, ich denke, statt
Rechtsvektor oder Vorwärtsvektor bekommen
wir einen Vektor. Jetzt gibt uns Real nur
eine Richtung in seiner Achse. Wenn es uns das Rechte gibt, gibt
es uns nicht das Linke. Wenn es uns vorwärts gibt, es
uns nicht rückwärts Es ist sehr einfach, es zu erstellen. Wenn du einen hast, negierst
du einfach und
du bekommst das Gegenteil Hier
werden wir einen Schalenvektor
für den Achsenraum verwenden .
Und linke Steuerung Lass uns das testen. Drücken Sie die Z-Steuerung, es geht runter. Wenn ich die Leertaste drücke, geht es hoch. Wir haben hier ein paar nette
Bewegungen. Ich denke, das ist es für diesen. Ich sehe
dich im nächsten. Auf Wiedersehen.
10. Schiffsanimation und Steuerung: Hallo und willkommen zurück bei
Real Engine Five Blueprints, schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der letzten Lektion haben wir unsere Bewegung
beendet. In dieser wollen wir anfangen, unsere Bewegung ein
bisschen interessanter,
ein bisschen animierter zu
gestalten . Was wir in
diesem Fall tun
werden, ist, das Schiff ein
bisschen zu dieser Seite zu drehen, ein bisschen zu dieser
Seite, während wir uns bewegen. Lass uns das machen. Das Erste, was wir tun sollten,
ist die Rotation unseres Schiffes zu speichern. Damit meine ich Rotation, die relative Rotation
innerhalb des Bauplans Das ist ein weiterer
Grund, warum wir das Schiff nicht als Base
Collider oder Root
benutzt Wir hatten es als Komponente. wäre besser, es auch als Kinderdarsteller zu haben, vielleicht
hätte es seine eigene Kollision und nicht diese
Kollisionsbox hier drüben. Aber im Moment wird es unseren Zwecken gut
dienen. Gehen wir und speichern die
Rotation unseres Schiffes. Wir wollen, dass das zu
Beginn des Spiels passiert , wenn
wir das Spiel starten. Es speichert die Variable. Wir werden
das statische Netz bekommen und wir werden die Rotation bekommen. Das könnte in das
Bauskript aufgenommen werden, auch nur für den Fall,
dass in dem Moment eine Bewegung
erforderlich ist,
gedrückt wird oder etwas das Schiff
dreht Aber hier ist es in Ordnung. Im Moment werden wir diese relative Rotation zu
einer Variablen heraufstufen und das hier
verbinden. Es hat auch die Variable
für uns benannt, aber lassen Sie uns das so umbenennen, dass das
Original die relative Rotation des ursprünglichen
Körpers Nennen wir unser statisches Maß, das statische Maß des Körpers Ich werde diesem Körper einen Namen geben. Wir sind damit fertig. Nun, wie werden wir
das erreichen? Auch hier
werden wir das Tickivent verwenden. Wir werden einige Fragen
stellen dieser
ähnlich sind,
in einer ähnlichen, denselben
Frage in einem anderen Modus Aber bevor wir anfangen,
Fragen zu stellen, wollen wir hier eine Reihenfolge angeben. Die Sequenz ist ein ganz besonderer Knoten. Es hilft uns, den Code
auch etwas übersichtlicher zu halten. Wir machen das,
wir machen das, wir machen das andere. Aber lass dich vom
Namen nicht verwirren. Das heißt nicht, dass es warten wird , bis diese Aktion abgeschlossen ist Nehmen wir an, wir haben eine
Reihe von Aktionen in der Null und dann haben wir eine
Reihe von Aktionen in der ersten. Es würde nicht warten,
die Aktionen auf Null zu beenden. Es würde dann
eins abfeuern, nur in einer bestimmten Reihenfolge. Aber höchstwahrscheinlich passiert es
sofort, was nicht
bedeutet, dass sie der Reihe nach
gefeuert werden Aber sofort wartet
es nicht darauf die Ausführungslinie
beendet ist, und feuert
dann Der dritte, der vierte, er feuert einfach
nacheinander ab Dafür brauchen wir
etwas,
wie gesagt, wir sollten nicht alles
im Event-Graph platzieren. Wir sollten dafür eine
Funktion erstellen. Ich werde eine Funktion erstellen. Nennen wir es geradeaus drehen. Ich weiß nicht, ob
es gerade ist. Ja, lassen Sie uns die
Dinge mit unseren Funktionsnamen erklären . Genau hier, wir werden diese Regeln hier
brauchen. Und D-Regeln, das
sind die Schaltflächen, die
wir jetzt zum Speichern verwenden. Wir
werden hier keine Auswahl verwenden, wir werden hier einen Zweig
verwenden. Das ist eine if-Anweisung. Wenn das, mach das, wenn
das andere, ich verbinde
die Bedingung und verbinde den Zweig hier drüben. Wir haben den gleichen
Zustand, wenn wir es nicht tun, im Grunde genommen,
wenn wir uns nicht bewegen, wenn beide gedrückt werden oder keiner von beiden gedrückt wird, wir bewegen uns nicht, es ist wahr, dieser Zustand gibt nicht
wahr zurück, dann ist er falsch, und wir testen, in welche
Richtung wir uns bewegen. Jetzt
wird sich der Knoten, den wir für die Ausführung
dieser Aktion benötigen ,
relativ zum Körper Es wird sich auch auf die Rotation des
Bauplans beziehen, nicht auf die Welt Wir werden die relative Rotation
festlegen weil wir den Körper
relativ zum Bauplan bewegen,
nicht relativ zu der Welt, durch die ich hier eine Verbindung herstellen werde Bewegen Sie das ein bisschen nach oben. Nun, als ich sagte, dass man einer Funktion
nicht Zeitangaben zuordnen und sagen kann, dass sie
ein bisschen komplexer ist, werden
wir das demonstrieren. Jetzt gibt es R inter ohne Aufruf,
es gibt R Interpret Two
und R Interpret Constant, was für Interpolation steht Was ist eine Interpolation? Eine Interpolation ist eine
Funktion, die
die unbekannten Werte zwischen zwei
bekannten Datenpunkten bestimmt die unbekannten Werte zwischen zwei
bekannten Datenpunkten Kurz gesagt, lassen Sie mich
die Interpolation durchführen. Wir haben eine aktuelle Rotation und
eine Zielrotation , die
auf einer Geschwindigkeit und einer Zeit basieren Wir erhalten das Ergebnis zwischen
diesen beiden Punkten. Für unseren aktuellen Wert verwenden
wir zum Beispiel get rotation, unsere aktuelle Rotation entspricht der aktuellen
relativen Rotation
dieses Körpers Da wir
in diesem Szenario momentan
nichts drücken , ist
die Bedingung, dass wir
nichts drücken. Das Ziel sollte die
ursprüngliche Körperrotation sein. Wie Sie sehen können, tun wir gerade etwas, das auf der
Zeit basiert. Innerhalb einer Funktion
ist die Deltazeit die Änderungsrate
zwischen Frames. Das sagt vielleicht nicht viel aus. Wenn wir es zum Beispiel
mit
einem Geschwindigkeitswert multiplizieren ,
macht das unsere Bewegung für die Deltazeit
irrelevant. Aber wir nennen das nicht tiefgründig, wir verwenden einfach
die Welt-Delta-Sekunden, das ist die Änderungsrate
zwischen den einzelnen Frames der Welt. Für die
Interpolationsgeschwindigkeit Je höher die Geschwindigkeit, desto langsamer wird diese Änderungsrate Dieses
Interpolationsergebnis wird sein. Im Moment werden
wir eine Geschwindigkeit von eins einstellen. Wir werden zum falschen Schlag
übergehen. Das wird
fast genau so bleiben mit einer Änderung
unseres Ziels. Wir werden das löschen. Eigentlich werde ich
das nicht löschen, ich werde es nur trennen. Denn was wir tun wollen, ist der ursprünglichen Drehung
einen Bereich nach links und rechts zu geben. Ich werde
zwei Rotatoren kombinieren, einen für links und
einen für rechts Die Kombination, das B, das ich hinzufüge,
sollte eine Auswahl haben Ich kombiniere das Original
mit plus dem Offset von rechts oder plus dem Offset
von links, basierend auf einer Regel. Die Regel lautet, wenn A gedrückt wird müssen wir
jetzt nur noch den Offset angeben. Um den Offset zu berechnen, verwenden
wir die
ursprüngliche Körperrotation. Ich werde es hier
kopieren und einfügen. Und ich werde kombinieren, wieder kopieren/einfügen. Ich kombiniere mit sagen
wir 15 und -15 Da A gedrückt wird, sollte das
eigentlich
oben sein, es sollte oben sein Und gehe zu A. Und das sollte
hier hingehören , die ursprüngliche Rotation Wir gleichen es mit
15 Grad auf jeder Seite aus. Wenn A gedrückt wird, addieren wir zur
relativen Drehung, den Betrag
, der auf dem aktuellen Wert basiert, und wir erhalten eine neue Drehung Lass uns kombinieren und speichern. Lass uns anfangen. Und nichts passiert , weil ich vermute, dass ich diese Funktion nicht aufgerufen
habe Ich rufe diese
Funktion hier drüben auf, Stapel,
Speichern, Play drücken. Es funktioniert. Das Schiff bewegt sich nach links und kippt nach links Wir bewegen uns nach rechts und
neigen uns nach rechts. Wenn wir alles verlassen, kehrt
es wieder in seine Position zurück. Im Moment wurde unsere Bewegung
etwas lebendiger. Wir haben jetzt eine Animation. Das einzige, was ich
nicht besonders mag
, ist , dass ich, wenn ich unbeweglich bin, sehen kann, ob ich mich überhaupt
nicht bewege, ich kann diese Linien sehen Manche finden das vielleicht akzeptabel, aber ich mag das
Visuelle auch nicht besonders. Lassen Sie uns das deaktivieren. Gehen wir zurück zur Grafik. Lassen Sie uns die Geschwindigkeit
des Schauspielers ermitteln, wenn sich unser
Akteur nicht bewegt, bringen wir einen Ast hierher,
wenn er sich nicht bewegt, denn das gibt
uns die Geschwindigkeit. Wenn es sich nicht bewegt, ist es Null,
wenn sich das Tor nicht bewegt. Lassen Sie uns die beiden Spuren und Setibility beide miteinander verbinden Dieser Knoten kann
mehr als ein Ziel aufnehmen. Lass uns ihn verbinden. Eigentlich brauchen
wir hier keine Filiale. Wir können hier einfach mobben. Wenn das Null ist, dann bewegen wir uns
nicht, ist das Gegenteil. Dann ist es unsichtbar, bewegt sich nicht. Wenn es sich bewegt,
ist es sogar sichtbar. Ich werde das hier verbinden
und das ist fertig. Ich werde Start drücken. Ich rotiere. Keine Linien. Ich ziehe um. Ich habe Linien. Großartig. Ich denke, das ist es für diesen. Ich sehe
dich im nächsten. Auf Wiedersehen.
11. Einführung des Ausdauersystems: Hallo und willkommen zurück bei
Unreal Engine Five Blueprints, schrittweisen Entwicklung von
Weltraum-Shooter-Spielen Im letzten Video haben wir damit
aufgehört,
einige Animationen
für unser Raumschiff zu erstellen einige Animationen
für unser Wir haben uns
beim Beschuss nach links und rechts gedreht. wir uns nicht bewegen,
haben wir die Sichtweite Wenn wir uns nicht bewegen,
haben wir die Sichtweite
der Spuren beeinträchtigt Wenn du willst, kannst du das natürlich abschalten und
die Spuren
werden auf dieser Strecke immer sichtbar sein. Lass uns etwas mehr
Bewegungsmechaniken entwickeln. Was wir schaffen werden ist ein
Ausdauermanagementsystem und ein Sprintsystem Wie zeigen wir das
im endlosen Raum? Denn wenn man keine
Punktereferenz hat und es
nur ein leerer Raum ist, kann
man wirklich erkennen, mit
welcher Geschwindigkeit man sich bewegt. Lass mich nochmal mein, unser
Raumschiff zeichnen. Nehmen wir an, ich mache es wieder
wie ein Flugzeug, denn das ist das
Einzige, was ich zeichnen kann Nun, können ist eine enorme
Überschätzung meiner Fähigkeiten. Nehmen wir an, das
ist ein Weltraum und es gibt Triebwerke hier, hier und hier. Was wir tun werden, ist ein Partikel zu
verwenden. Wenn wir sprinten, wenn wir boosten oder in der U-Bahn fahren,
oder was auch immer wir den Weltraum nutzen, werden die
Partikel
dadurch größer aussehen Wir werden auch mit dem
Sichtfeld der Kamera spielen. Wenn unsere Kamera zum Beispiel
hier drüben ist und dieses Sichtfeld hat, werden
wir
es ein wenig vergrößern. Es wird so aussehen, als
würden wir sprinten. Als würden wir uns schneller bewegen. Wie
werden wir das erreichen? Jetzt bringen wir eine neue
Ebene, verstecken diese. Wir werden eine neue Eingabe verwenden
, die wir Sprint nennen werden. Eigentlich werden wir es nichts
nennen. Die Links-Shift-Taste,
das ist Links-****, das ist Links-Shift, wenn
wir sie drücken, aktiviert, naja, lassen Sie mich
besser tippen, den Sprint aktivieren. Und wir werden den
Sprint deaktivieren , wenn diese
Aktionen ausgeführt werden. Wir werden eine Zeitleiste
verwenden. Zeitlinie, Was
ist die Zeitlinie? Es ist eine Möglichkeit,
zeitzentrierte Manipulationen an den Schauspielern vorzunehmen, die vor
Ort sind Im Grunde genommen ist
das, was wir tun, richtig . Wir werden es
verwenden, indem wir eine Kurve mit einer Zeitachse
und einer Wertachse Die Zeitleiste
gibt uns die Daten, die Ausgabe des Werts
auf der Grundlage der Kurve, die
wir erstellen werden. Eigentlich wird es keine Kurve sein. Ich denke, dieses Mal wird es nur eine lineare Sache
sein ,
basierend auf dem Punkt, den uns unser
Zeitplan geben wird. So wie jetzt ist es bei 0,25, der
Wert ist zum Beispiel 0,2. Es wird uns
das auf der Grundlage der Zeit geben. Basierend auf diesem Wert werden
wir
die Größe der Flammen
und das
Sichtfeld der Kamera erhöhen die Größe der Flammen . Außerdem werden wir jetzt
ein System haben , das
einen Timer verwenden wird. Was ist ein Timer? Ein Timer ist eines der besten
Systeme, die ein Real anbietet , um bestimmte
Kälteperioden gleichzeitig auszulösen. Aber es basiert nicht auf Thick, weil Thick viele
Male pro Frame Timer läuft, wir können angeben, dass es wie 0,1
läuft, das ist gerade, es läuft zehnmal pro Sekunde Während wir,
sagen wir zum Beispiel,
60 FPS haben , läuft es 60
Mal pro Sekunde Etwas
so viel weniger laufen zu
lassen, erzeugt tatsächlich
eine enorme Leistung. Nun, um nicht das
Gegenteil von Wirkung zu beeinflussen, denn wenn es auf der
Kippe laufen würde, würde das zu
Leistungseinbußen führen. Wenn es mit einem Timer läuft, hat es weniger Auswirkungen auf die
Leistung. Wir werden einen Tim haben.
Lass mich das löschen. Im Timer werden wir so
vorgehen, dass
wir mehr oder weniger Ausdauer haben geht darum, ob unser Schauspieler
sprintet oder nicht Wenn es druckt, werden
wir die Ausdauer erhöhen ,
die Ausdauer zurückgewinnen Wenn es gedruckt wird, reduzieren
wir die Ausdauer. All das muss irgendwie
an den Spieler weitergegeben werden. Die Art und Weise, wie wir das
machen werden, ist sehr einfach. Wir werden einfach
einen Fortschrittsbalken
für II erstellen , bei dem wir
den Balken füllen oder den Füllstand des Balkens reduzieren , basierend
auf unserem Ausdauerwert Lass uns jetzt anfangen. Zuallererst
benötigen wir eine neue Benutzeroberfläche. Also gehe ich zu unserem Ordner
I Ordner und ich werde mit
Recht ein neues Widget oder ein neues
Benutzer-Widget erstellen können. Und wir werden es G Gameplay
nennen, weil es ein
Widget für das Gameplay ist. Auch hier wäre es besser, viele Widgets für
jeden Aspekt zu haben. Aber für unsere Zwecke werden
wir alles in
einem Widget hosten , wenn
der Player startet. Wie gesagt, wir werden dieses
Widget im Player hosten. Auch hier werde ich einen Kompass benutzen. Wenn wir
zum Beispiel viele andere Widgets hätten , würden wir feststellen, dass
sie vom Benutzer erstellt wurden. Als ob wir das Hauptmenü finden könnten. Ich kann zum Beispiel
das Hauptmenü hierher bringen. Das Gleiche wäre
für die Ausdauerleiste, die Gesundheitsleiste, wenn wir
sie auf verschiedenen Widgets haben Aber vorerst werden
wir, wie gesagt, alles hier hosten Zuallererst
wollen wir einen Fortschrittsbalken. Ich werde das
herbringen. Ich werde es etwas größer machen
und es hier aufstellen. Ich werde es tatsächlich
nur dadurch verankern, dass ich es mir ansehe. Vielleicht ist es hier
ein bisschen groß. Ja, ich denke, das
ist vorerst in Ordnung. Wir werden sehen, wenn wir auf Datei
abspielen und speichern, ich schließe es versehentlich. Sehen wir uns diesen Teil an damit wir sehen, ob er okay aussieht. Lass uns das in unserem
Widget auf Begin Play hosten, wir werden acht Widgets erstellen. Wie im Spielemodus haben
wir das
Hauptmenü-Widget erstellt. Wir haben einen On-Player verwendet
, der unser Controller ist. Jetzt wirst du dich fragen, warum ich mich hier nicht auf den Player
setze. Wie du siehst, bringt es es
nicht zum Vorschein. Es muss eine
Controller-Referenz sein. Es kann kein Schauspieler, Spielfigur oder ein Schauspieler Ich werde den
Play-Controller für den Unterricht anschließen. Ich werde
das G-Gameplay einführen
und es
zu
einer Variablen heraufstufen und es
zu und dieses
variable G-Gameplay nennen. Dann werde ich es zu Viewport
hinzufügen. Wenn alles erfolgreich
war ich das Spiel starte, können
wir deine
Ausdauerleiste da drüben sehen Ja, großartig. Jetzt im Widget-Gameplay können
wir hier einige Farben festlegen, wie es Barbin Field aussieht und
einige zusätzliche Details. Gehen wir zum Stil und wählen eine
Hintergrundfarbe Eigentlich werden wir hier nur mit dem Farbton
spielen. Wir
werden kein Bild verwenden, wir werden es
ein bisschen gelb machen Wir werden Alpha
2.3 ändern . Es ist ein bisschen
transparent, wie wir hier sehen können. Es ist bereits durchsichtig geworden. Als Nächstes erhöhen wir den Prozentwert des
Feldes ein wenig, damit wir den anderen Balken sehen können. Blau ist in Ordnung. Aber da
wir die gelben haben, machen wir mit den gelben weiter. Vielleicht macht diese Farbe hier das vielleicht ein
bisschen durchsichtig. Außerdem wird das Alpha 0,7
sein, vielleicht Punkt 0,6, es ist in Ordnung. Lass uns kompilieren. Lassen Sie uns überprüfen, ob dieser
Fortschrittsbalken eine Variable ist. Nennen wir diesen
Fortschrittsbalken B, Underscore Stamina. Auch hier kann es alles sein,
Nitro, was auch immer wir wollen Aber außerdem ist es immer
Ausdauer, wann immer wir etwas machen, es ist sowieso egal In der Grafik gehen
wir jetzt zu Funktionen und
erstellen eine neue Funktion und nennen das Update Stamina Bar Eigentlich Ausdauerbalken. Ausdauer in Prozent. Ich erkläre es eine
Minute für Minute. Nun, wenn wir hier den
Ausdauerbalken haben, brauchen
wir eine Möglichkeit, uns zu ernähren. Die Art und Weise, wie der Knoten, den wir dafür verwenden
, heißt festgelegter Prozentsatz Hier wird ein Wert in
Prozent angegeben. Dieser Prozentsatz entspricht nicht 100,
sondern einer Gleitkommazahl von 0 bis 1, was bedeutet
, dass 0,0 gleich 0,1 ist und 100 ist Wenn wir 0,5 hätten, wären es 50%. Jetzt verbinden wir diesen Knoten hier drüben in Prozent mit der
Funktion in Prozent Das bedeutet, dass
wir jedes Mal, wenn
wir diese Funktion aufrufen, einen Prozentwert angeben müssen. Und es übergibt diesen Wert an
unseren Knoten hier und es funktioniert. Jetzt können Sie feststellen, dass dies als Eingabe in einer Funktion
bezeichnet wird. Wenn wir auf die
Funktionen klicken und zu den Eingaben gehen, können
wir sehen, wie sie für uns
erstellt wurden , wie wir es
in der reinen Funktion getan haben. Die Ausgaben, wenn
ich zum Beispiel auf Ausgaben klicke
, erzeugen eine Ausgabe, einen Rückgabeknoten, der uns
eine Ausgabe gibt und der Wert hier drüben hat
. Wir können es auch hier sehen. Ausgänge, neuer Parameter. Wir werden das nicht verwenden, ich
werde es jetzt löschen, kompilieren und speichern. Ich denke, das ist für
diesen und
wir werden das
System beim nächsten fortsetzen. Auf Wiedersehen.
12. Sprint-Mechanik implementieren: Hallo und willkommen zurück bei
Real Engine Five Blueprints, schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der letzten Version haben wir
die visuelle Darstellung
unserer Ausdauerleiste,
Nero-Balke oder was auch immer erstellt die visuelle Darstellung
unserer Ausdauerleiste, Nero-Balke oder Wir haben auch eine
Funktion erstellt, die wir aufrufen
werden, um den Prozentsatz zu
aktualisieren In dieser Version
werden wir nun mit
den Eingaben und einigen
der Sprint-Mechaniken fortfahren . Ich
klicke mit der rechten Maustaste und lasse die Umschalttaste gedrückt. Das ist der Knopf, wir für den Sprint
drücken werden. Zuallererst benötigen
wir eine Variable, um
unterscheiden zu können, ob wir sprinten oder nicht Ich werde ein Goldbarren herstellen
, das Sprinter genannt wird. Auch hier können Sie Variablen
hinzufügen, Variablen hinzufügen und dann
ihre Typen
hier oder hier ändern . Wir werden das hier an erster
Stelle setzen, aber im Laufe der Zeit werden
wir die Art und Weise ändern, wie die
logische Reihenfolge abläuft. Zuallererst sprinten wir
nicht, wenn wir
die Taste drücken Wenn wir
das Muster loslassen, sprinten
wir nicht Aber nur weil wir etwas, das
gerade passiert, mit einem Namen
deklariert haben passiert, mit einem Namen , heißt das nicht, dass tatsächlich
etwas passiert Erinnerst du dich, als wir mithilfe von Gleitkommabewegungen die Geschwindigkeit
bestimmen, mit der
wir uns in der Welt bewegen? Wir sagten, dass es hier eine Menge weiterer Informationen gibt
, die wir ändern können. Eine davon ist Höchstgeschwindigkeit und eine
andere ist Beschleunigung
und Verzögerung Da unsere Höchstgeschwindigkeit nun niedriger
ist als die beiden, bedeutet
das, dass wir sofort auf Geschwindigkeit
gehen Es gibt keine Beschleunigung
oder Verzögerung. Turning Boost ist eine andere Sache. Wie dem auch sei, es gibt eine Menge von was wir tun werden
, ist, dass
ich beim Sprinten diese
schwebende Bewegung bekomme Mit Ziehen und Steuern werde
ich die Geschwindigkeit einstellen Sagen wir mal, es waren 1.200. Mehr als das Doppelte von 2500. Wenn wir jetzt die Umschalttaste drücken, sagen
wir, dass gedruckt und wir stellen
die Höchstgeschwindigkeit ein. Mal sehen, was wir gemacht haben.
Können wir einen Unterschied feststellen? Ich bewege mich normal. Ich sprinte vielleicht aufgrund des Effekts ein
bisschen, aber wir können
keinen Unterschied feststellen Da wir das erstellt haben, wollen wir weitermachen und einige Trails
hinzufügen Wir werden
ein Partikelsystem verwenden , das Thruster heißt Das Kaskadensystem stammt aus dem alten
System Es wird für uns
hier im Viewport gut funktionieren. Wir
wählen den Körper aus, weil wir möchten, dass er am Körper befestigt
wird. Wenn sich der Körper dreht, möchten
wir, dass er
sich mit dem Körper dreht Wir werden sie nicht
als Kind der Box hinstellen, wir werden sie
als Kind des Körpers hinstellen Ich werde auf
Partikelsystemkomponente hinzufügen klicken. Da ich hier
das Triebwerk ausgewählt hatte, wurde die
Komponente automatisch als Vorlage hinzugefügt Wenn
Sie das nicht getan haben, können Sie das jederzeit tun, indem Sie
einfach das Triebwerk, die Komponente und
hier das Partikel
auswählen Ich werde das um
90 Grad drehen und ich
werde es zurückbringen Es könnte hier sein, tatsächlich ist
das ein bisschen, es ist ein bisschen groß
für eine Startflamme. Also wähle ich das
Schloss hier auf der Skala aus,
sodass es gleichmäßig skaliert, und mache es 0,25 Ja, für Bewegungen im Leerlauf
und einfache Bewegungen Ich denke, das wird in Ordnung sein. Vielleicht möchtest du es größer machen, aber ich lasse es dabei. Ich werde
es duplizieren. Kopieren und einfügen. Und leg einen hier hin. Ich werde wieder einfügen
und einen hier drüben platzieren. Ich werde
diesen duplizieren und das Minus hier drüben
setzen. Vielleicht sind sie ein
bisschen klein, also werde ich sie alle
auswählen. Geben Sie 0,5 ein. Ja, das sieht
ein bisschen besser aus. Zieh das vielleicht hierher. Ja, du kannst so
viel spielen, wie du willst, damit es so aussieht, wie du willst. Ich werde in einer Sekunde
damit aufhören. Ja, ich denke, das ist besser. Lass uns sehen. Ja, das
sieht schon besser aus. Fangen wir damit an, die Flammen
zu manipulieren, denn zuerst legen
wir den Sprint
in die Eingänge Jetzt werden
wir dafür eine Zeitleiste verwenden. Wie gesagt, ich
schreibe „Click and say Timeline“. Es ermöglicht uns bereits
, die Timeline umzubenennen. Wir werden L Sprint sagen. Und ich werde
zwei benutzerdefinierte Ereignisse erstellen. Benutzerdefinierte Ereignisse. Ich werde
einen Start Sprint
und den anderen Stop Split nennen . Lassen Sie uns darüber sprechen, wo wir diese Dinge
verbinden. Zeitlinien, sie bewirken
im Laufe der Zeit etwas und sie
geben uns einen Wert. Wir haben den Wert noch nicht, aber lassen Sie uns über
die Ausführungslinien sprechen. Wir haben von Anfang an
Spiel und Spiel. Das bedeutet, dass es vom Beginn
der
Zeitleiste an abgespielt wird . Von Anfang an abspielen. Wiedergabe wird
auf der Grundlage der aktuellen Uhrzeit auf
der Timeline fortgesetzt . Weil es
bei 50% abgespielt wurde und rückwärts abgespielt wurde, spielen wir
plötzlich wieder, aber es ist bei 3,30%
30% .
Ab diesen 30% wird es weitergehen Wir wollen eine Verbindung herstellen,
wenn wir die Umschalttaste drücken oder loslassen Wir spielen nicht unbedingt von
Anfang an, aber wir spielen vom
aktuellen Startpunkt aus. Das Gleiche, was
wir natürlich mit
Reverse Stop machen werden , ist
einfach anzuhalten, wo auch immer Sie sind. Reverse Fend ist
vom Ende der Zeit. Jetzt gibt es eine festgelegte neue Zeit
und Zeit, eine neue Zeit hier. Tatsächlich ist es
so, wenn wir eine Zeit von
0-50 haben und wir eine neue Zeit auf
30 setzen und wir beginnen zu spielen, spielen von, fangen an zu spielen, es
wird ab dieser Zeit beginnen, es wird bei 30 beginnen und von dort aus
weiterspielen Oder wenn wir rückwärts fahren, wird
es von diesen Zeitlinien
aus umgekehrt sein diesen Zeitlinien
aus Sie finden sie auch in
den Variablenkomponenten. Von hier aus können wir tatsächlich eine
neue Zeit einstellen. Es gibt auch andere Optionen wie Rate
festlegen, Wiedergabegeschwindigkeit festlegen. Wenn wir verlängern wollen, zum
Beispiel, dass wir einen Timer von Null bis Eins hätten und wir drei Sekunden
durchhalten wollten, wären
wir ein Drittel. Aber das sind
umfassendere Einsatzmöglichkeiten von Timeline. Wir werden
sie jetzt nicht machen. Wir haben einen Start-Sprint-Effekt
und einen Stop-Sprint-Effekt. Wir spielen vom
aktuellen Moment aus und wir kehren vom aktuellen
Moment zurück, in dem wir sie anrufen. ganze Zeit. Ich spreche von der
Festlegung von Zeiten und
Werten und allem. Aber wo legen wir das alles fest? Wo haben wir das alles hingestellt? Weil es hier draußen
nichts , was dafür eingestellt werden kann. Nun, eigentlich, Zeitpläne. Sie können auf sie doppelklicken. Sie öffnen hier ihr eigenes kleines
Fenster und haben eine Reihe von Optionen wie die
Gesamtlänge der Timeline Wenn die Zeitleiste
den letzten Keyframe verwendet, werden
wir
gleich sehen, was das ist, ob sie
sich selbst automatisch abspielen oder ob
sie
von Events aufgerufen
werden , wie wir sie hier aufrufen. Wenn es eine Schleife und andere Dinge ist, dann gibt es da drüben diesen kleinen
Knopf , der Truck, Truck heißt. Als Truck legen wir die Zeit und die
Werte fest, die wir wollen. Es gibt verschiedene
Arten von Lastwagen. Wir werden einen Float-Truck
benutzen. Wenn wir darauf klicken, wir die Möglichkeit
, es umzubenennen. Wir werden das Sprint nennen. Und jetzt haben wir unseren
Zeitwert auf dem X-Wert, unseren Float-Wert auf dem Y. Wenn ich kontrolliere, klicken Sie hier. Wenn ich hier klicke, erstelle ich Punkte. Diese Punkte können manipuliert werden und wenn Sie sehen, dass sich der
Zeitwert ändert, wenn ich sie verschiebe , und der Wert ändert sich
auch der Gleitkommawert, setzen
wir eins auf Null von Wert 01, um fünf Werte eins zu bilden Siehst du, es hat unsere
Sichtweite überschritten, es ist hier drüben. Da sind diese beiden Knöpfe
, die wunderbar sind. Es heißt, zoomt, um horizontal zu passen,
und zoomt, um vertikal zu passen. Wenn wir drücken,
können wir unsere Steigung sehen. Ich werde beide
Werte auswählen und dabei die Umschalttaste gedrückt halten. Beim zweiten, Sie sehen, dass
diese Werte ausgewählt sind. Wenn ich mit der rechten Maustaste auf sie klicke, erhalten wir eine wichtige Interpolation Im Moment ist es linear. Wenn ich Auto auswähle, macht das hier drüben diese schöne
Kurve. Wir können die
Kurve jederzeit an unsere Bedürfnisse anpassen. Was ich
jetzt rückgängig machen und die automatische Kurve verwenden werde, wir sind, wir sind jetzt fertig. Als ich sagte, benutze das letzte Schlüsselbild. Unser letzter Keyframe liegt bei 0,5. Wenn ich ihn so belasse, wie er 5 Sekunden
lang ist, ich die Taste gedrückt
und meine Maus wird gedrückt. Mal sehen, ob wir hier die
Fünf-Sekunden-Marke erreichen. Die Zeitleiste endet hier. Das bedeutet, dass dies
0-5 läuft . Wenn ich das letzte Schlüsselbild auswähle, wird
es auf 0,5 laufen. Das
ist unser letztes Schlüsselbild Ich könnte es auch hier bei
0.5 ändern . Sie werden sehen, dass es diesen
verblassenden Teil hier automatisch angepasst Ich bevorzuge es, die letzten Keyframes zu verwenden weil ich vielleicht Dinge ändere, sodass ich
die Länge nicht jedes Mal ändern muss, aber das ist eine Jetzt siehst du, als ich zum Event-Graph
zurückgekehrt bin, hat unsere Timeline
jetzt
dieses Sprint-Alpha. An diesem Ort
ändert sich dieser Wert je nachdem, wie lange
die Timeline läuft. Lass uns darüber sprechen, was wir haben. Auf der Exportseite
der Zeitleiste haben
wir ein Aktualisierungsereignis. Das läuft so lange, wie die
Timeline läuft. Diese Aktualisierung,
was auch immer wir
tun wollen, ist, wenn die
Zeitleiste beendet ist. Wir werden gleich über die
Richtung sprechen. Sprint-Alpha ist der Wert , den wir
in der Timeline festgelegt haben. Lassen Sie uns schön heranzoomen, 0-1 in dieser Zeitspanne Wie Sie sehen können, wenn ich die Maus hier
bewege, wird mir ein Wert angezeigt, der auf der Zeit
basiert Dieser Wert hier wird aus Sprint Alpha
exportiert. Richtung ist nun, ob wir vorwärts
oder rückwärts gehen Und es ist vom Typ
Enumeration, was eine spezielle, sagen
wir, Art von
Variablen in der Realität ist, nicht in der Programmierung
im Allgemeinen Das gibt uns eine
vorgegebene Liste. Lassen Sie uns hier ein Gleichheitszeichen setzen und die Optionen
vorwärts und rückwärts betrachten Das bedeutet, dass
wir bei einem Update
oder bei unvollendeter Wiedergabe bei einem Update
oder bei unvollendeter Wiedergabe wissen können, welche Richtung die Timeline
läuft oder abgespielt wurde Ich werde das löschen , weil wir es nicht verwenden
werden Was wir
verwenden werden, ist, dass ich all die
Triebwerkspartikel hierher
bringen werde all die
Triebwerkspartikel hierher
bringen Cluster eins Triebwerksbasis,
Custer Null Wie Sie sehen, als ich sie erstellt habe. Echter Name für mich, es ist nicht derselbe Name, den
wir immer nennen können. Linkes Triebwerk, rechtes
Triebwerk, mittleres Triebwerk. Aber das ist momentan in Ordnung
für uns. Was ich
mit ihnen machen werde, ist die Weltskala 3 D einzustellen Ich werde all
diese Knoten hier miteinander verbinden. Nochmals skalieren,
das haben wir mit
der Skalenvariablen Viewport hier drüben Vielleicht wird das
entsperrt und es auf 0,25 gesetzt . Ja,
ich denke, das ist besser Lassen Sie mich jeden von ihnen auswählen. 0,25 ist es vielleicht nicht. Ja, es ist in Ordnung. Es ist in Ordnung. Ich werde das
Update verbinden, um die Weltskala einzustellen. Nun, wie werde
ich basierend auf
dem Alphawert hier den Wert ändern ? Nehmen wir an, wir haben den
Standardwert 0,25 0,5 und 0,5. Wie kann ich das machen? Da wir einen Skalenwechsel haben, wollen
wir das auf Basis
eines Laufwerks erledigen, dafür
gibt es einen speziellen
Knoten Dieser Knoten wird Knoten genannt. Wir haben die Vektoren. Im Allgemeinen gibt es auch viele Labore, das heißt von A nach B.
Im Grunde ist
es das,
was auf der
Grundlage eines Alpha-Werts
zwischen A und B interpoliert auf der
Grundlage eines Alpha-Werts
zwischen A und B Wir werden
unser Alpha hier verbinden, da wir unsere Werte kennen, werden
wir
0,25 0,5 0,5 B machen, wir sind, sagen wir 0,5, lassen Sie uns das Gleiche
beibehalten Und 1,5 müssen wir ein bisschen mit diesen
Werten vergleichen. So finden wir sie heraus. Wenn man etwas hat, muss
man immer ein bisschen mit
den Werten spielen. Finden Sie heraus, welche besser
zu Ihrem Koffer passen. Sie können jeden
der Werte in beliebige
Werte ändern . Gerade jetzt. Wir haben gesagt, dass wir auch etwas
mit der Kamera machen
werden. Wir werden
das Sichtfeld ändern. Ich werde die Kamera mitbringen, ich werde das Feld
U einstellen . Ich werde
das hier wieder verbinden. Wir müssen
hier einen Wert angeben, der ein Float für den Alarmwert sein
wird . Ich werde hier unseren
Ausleseknoten erstellen, ihn
mit Alpha verbinden und hier mit Alpha verbinden einen weiteren Ausleseknoten
erstellen. Unser Standardsichtfeld, wir können es an den Details
der Kamera sehen, ist 90, was meiner Meinung nach ein normales
Standardsichtfeld ist. Ich setze Alpha 90 für B. Ich setze 110 frei. Natürlich, um jeden Wert zu ändern. Im Moment geht
unsere Kamera aus einem 90-Grad-Winkel in einen 110-Grad-Winkel. Lass uns das testen. Eigentlich müssen wir
diese beiden Ereignisse im linken Sprint verbinden . Wir werden mit der Veröffentlichung von
Print Effect beginnen. Wir werden den Sprint-Effekt starten. Ich werde
kompilieren. Lass uns spielen. Ich bewege mich, ich
bewege mich, ich sprinte. Ja, es scheint, die Kamera
dreht sich rückwärts, Flammen werden größer Ja, das ist es für diesen, ich schicke dir den nächsten Auf Wiedersehen.
13. Sprint-System und Ausdauermanagement: Hallo und willkommen zurück
zu Andrea Lynching, fünf Baupläne Schritt für Schritt zur Entwicklung von Weltraum-Shooter-Spielen Beim letzten haben wir mit der Mechanik
des Sprintens begonnen. Wir haben tatsächlich die
Bilder des Sprintens gemacht. Mir ist aufgefallen, dass ich ein
sehr wichtiges Detail vergessen habe. Wir erhöhen die Geschwindigkeit, während
wir niemals die Geschwindigkeit verringern. Ich kopiere
das einfach hier, füge es hier ein und verbinde es und kehre zu 1.200 zurück
, was unser Standardwert war Ja, gerade sprinten wir
und wir können aufhören zu sprinten und wir können aufhören Die Bilder, wir halten an, aber die Geschwindigkeit hat sich nicht geändert Lassen Sie uns jetzt mit
unserem Ausdauersystem weitermachen, wie lange können
wir sprinten Weil
wir gerade sprinten, aber es ist Um das zu tun,
werden wir den Timer verwenden, den wir von
Anfang an erklären Spielen Sie das Event am Ende hier ab. Lassen Sie uns tatsächlich ein benutzerdefiniertes Ereignis durchführen , das wir als Starttimer bezeichnen
werden Wir werden Starttimer für dieses
Event haben, weil wir wahrscheinlich
zwei oder drei weitere
Zeiten für das Schießen haben werden . Für Regeneration der Lebenspunkte werden
wir
mehr Timer haben, die wir vom ersten Spielevent an
hintereinander setzen müssen
. Ich rufe die Starttimer an. Um ehrlich zu sein, werde
ich eine Sequenz vor
das Create-Widget setzen , um Dinge nacheinander zu
erledigen Und genauer gesagt, ich werde das Widget
aufstellen und
es loben, Widget hier auf der 10. Dann startet einer, den ich
anrufen werde. Dann lass uns G
herbringen, das ist okay. Timer starten. Was machen wir? Wir werden einen
festgelegten Timer für jedes Ereignis aufrufen. Einige andere Funktionen mit Timer. Sie in dem sehr
kurzen Dialog dort drüben gesehen haben,
gab es noch andere Funktionen wie das Einstellen des Timers anhand des Funktionsnamens. Stellen Sie den Timer für Nextek ein. Jeder von ihnen hat sein eigenes Ereignis mit dem Namen der
Usability-Funktion. Sie haben einige
kleine Unterschiede, aber auch zum Debuggen wäre
es einfacher, etwas zu
debuggen, wir ein Ereignis haben und wir sehen
können, was läuft Dann
würde ein Timer
, der eine Funktion ausführt, der Timer für Funktion so funktionieren wie hier Wir müssen ein benutzerdefiniertes
Ereignis erstellen und dieses Ereignis benennen. Sprinten. Sprinten. Sprinten. Eigentlich hat es nichts mit Frühling zu tun, es hat mit der Ausdauer zu tun Region zur Regeneration der Ausdauer. Wenn wir eine Funktion
namens Region hätten, würden
wir den Funktionsnamen
Set Tim und den
Funktionsnamen
Stamina verwenden und den
Funktionsnamen
Stamina Dieser Timer läuft, er führt
die Regionsstempelfunktion aus. Jedes Mal, wenn wir das gesagt haben, wäre
es schwierig,
das zu debuggen , weil es jedes Mal, wenn es läuft, hier rein geht und nach Dingen
Ausschau hält Vielleicht haben wir mehr
Funktionen als in
anderen Funktionen Ich denke, es ist einfacher, mit dem Löschen von Dingen zu
beginnen und Timer für Ereignis
einzustellen, da
es einfacher ist, dem zu folgen. Jetzt. Nun außer dem ersten Pin , den wir gerade
ein bisschen analysiert haben. Das Ereignis oder der Funktionsname. Lassen Sie mich den Funktionstimer eigentlich
noch einmal mitbringen. Lassen Sie uns über ein
bisschen vom Rest sprechen. Ein grundlegender Unterschied, den
wir
neben diesen beiden Treibern, sagen
wir, dem Ereignis
- oder Funktionsnamen sofort erkennen können neben diesen beiden Treibern, sagen
wir, ,
besteht darin, dass der
Funktionsname ein Objekt hat. Das bedeutet, dass ich eine Funktion
eines anderen Blueprints ausführen kann , von dem
ich eine Referenz habe, ein
Widget, einen Spielmodus oder was auch immer Ich kann eine Referenz
von einem Objekt haben , und ich
kann eine Referenz
von all seinen Funktionen auf einem
Timer auf diesem Blueprint haben von all seinen Funktionen auf einem
Timer auf diesem Blueprint Das ist einer der Unterschiede
zwischen diesen beiden. Nun zu den Gemeinsamkeiten Wir haben Zeit für beide,
und Looping gibt an, wie oft und
wie lange man warten muss, bevor der Delegate
ausgeführt wird, wie es in Sekunden heißt Das Gleiche gilt für die
andere Fraktion, Looping, wenn wir wollen, dass es endlos ist, machen Sie es die ganze Zeit und
dasselbe auf der Es gibt einige andere Statistiken
, die etwas
fortgeschrittener sind, über die wir im Moment nicht mit
ihnen sprechen werden,
wir werden sie nicht verwenden Ich werde das hier löschen. Wir werden eine
Zeit von 1 Sekunde haben und es wird eine Schleife für unser System laufen, wir benötigen zwei Variablen Ich werde eine erstellen und ich werde eine weitere
erstellen Ich denke, es ist an der Zeit, dies ein
wenig zu
kategorisieren , bevor wir die Typen
dieser Variablen benennen und auswählen Lassen Sie uns die
vorherige in einige Kategorien einteilen, ADS und Space Wir werden hier
eine Kategorie erstellen, die sagen wir, Eingaben genannt
wird Ich werde das
alles per Drag-and-Drop in die Eingaben ziehen. Abgesehen vom Gain-Dropping kann ich es von hier aus
jederzeit ändern. Es gibt einige andere Kategorien,
die Fehlerkategorie, im Grunde die neue
Kategorie, die wir gerade erstellt haben. Nun, diese drei ordnen
sie vielleicht einer Bewegungskategorie zu. Ich werde das auch
hier platzieren , ich werde
es auch hier drucken lassen. Und Durchhaltevermögen für zwei
neue Variablen. Diese beiden neuen Variablen
wären vom Typ Integer, tatsächlich
werden sie vom Typ sein, eine wäre Stamina und die andere
wäre x Ich werde
diese Variablen
herbringen und ich werde einen Setter
der aktuellen Ausdauer
mitbringen Wenn der Timer alle 1 Sekunde
läuft und in einer Schleife läuft und
ständig überprüft, bedeutet das, dass er diese
Funktion
ständig alle 1 Sekunde ausführt Wir wollen überprüfen, ob
wir sprinten oder nicht. Um auszuwählen, welchen Wert
wir festlegen werden. Hier wähle ich Node aus. Wie wir es zuvor getan haben,
wieder zwei Optionen. Wählen Sie Float und wählen Sie einfach
Select hat den Platzhalter. Und wenn Sie Float auswählen,
erhalten wir nur einen Goldbarren. Denken Sie daran, dass diese bei Platzhaltern
entgegengesetzt sind. Nun, wenn Sie ein
Edelmetall in Wildcard
und Fas auswählen , geht es hoch
und fällt Wenn ich auswähle,
möchte ich fragen, ob ich tatsächlich
sprinte Ich werde es von hier aus
sprinten Hol dir das Sprinten
und verbinde dich hier. Wenn ich sprinte, wähle A. Wenn ich nicht sprinte, wähle B. Ich werde das vorerst nicht
brauchen Ich werde es hier angeben,
aktuelle Ausdauer plus
und aktuelle Ausdauer und aktuelle Wenn wir nicht sprinten, erhöhen wir unsere Ausdauer Wenn wir sprinten, reduzieren wir tatsächlich die Ausdauer Ich gebe hier die statischen Werte von
eins ein und werde sie
zu einer
Variablen
heraufstufen eins ein und werde , das Plus eins,
ich nenne
es Ausdauer-Region, die variable Sternregion
heraufstufen, variable Sternregion
heraufstufen weil die Rate alle 1 Sekunde
ist Der Wert, wie viel wir pro
Sekunde hinzufügen ,
wird hier platziert. Im Moment ist es einer.
Sie sind beide eins, aber wenn Sie etwas ändern möchten, kann
dieser Wert unterschiedlich sein. Und wenn wir
diesen Wert zu einer Variablen heraufstufen, können
wir ihn als Ausdauerwert bezeichnen Wir platzieren das hier
und das hier. Jeder von ihnen kann
separat für einen Standardwert festgelegt werden. Ich werde das jetzt kompilieren. Wir können sehen,
dass beide Wert eins haben. Wir brauchen ein aktuelles Durchhaltevermögen. Was ich
tun werde, ich werde
die maximale Ausdauer auf zehn setzen die maximale Ausdauer auf Zu Beginn spielen Sie hier mit der
ursprünglichen relativen, ursprünglichen relativen Rotation des Körpers Ich setze die aktuelle
Ausdauer auf maximale Ausdauer. Eigentlich wird get, was auch immer
unsere standardmäßige maximale Ausdauer
ist, auf unsere
aktuelle Ausdauer setzen ist, auf unsere Ein weiterer raffinierter Trick ist, dass Sie,
wenn Sie anfangen,
einige Werte zu
haben , die Sie als Standardwerte festlegen möchten und solche Dinge, Sie können immer Dr egal wie viele
Knoten oder welche Knoten tatsächlich Delay würde in
dieser Situation und einigen
anderen Knoten sowieso nicht verwendet werden , Sie können sie
anklicken und zusammenklappen, um zu All das ist in
dieser Funktion enthalten. Ich werde diese
Funktion Defaults nennen. In dieser Funktion haben
wir nun die Einstellung
der ursprünglichen
relativen Körperrotation und der aktuellen Ausdauer Okay, gehen wir zurück
zu unserem System. Wir reduzieren die Ausdauer oder
wir erhöhen die Ausdauer,
je nachdem , ob wir alle
1 Sekunde sprinten, die wir überprüfen Aber das wird die
Ausdauer weiter erhöhen, auch wenn wir unseren Maximalwert
überschreiten Um das zu erreichen, stoppen Sie es beim Maximalwert. Wir könnten das tun, wenn das dem Maximalwert
entspricht und dann können
wir uns verzweigen und sagen, mach das nicht mehr
oder stoppe die Zeit Aber was wir verwenden werden,
ist ein weiterer Knoten, ein mathematischer Knoten
namens Plump Plot Nun, was die Klammer macht, sie erhält einen Wert und
sie hat einen Minimalwert Und sagt, dass dies
der Mindestwert ist , den dieser
Wert zurückgeben kann, und dies ist der Maximalwert Selbst wenn das ergibt, sagen
wir, wir haben ein Maximum von eins und
das ergibt fünf, wird
es eins zurückgeben. Oder wenn es minus fünf wäre, würde
es Null zurückgeben. Ich werde diesen Knoten verwenden
und ihn hier verbinden, um Platz für
unseren Maximalwert zu schaffen. Wir werden die Ausdauer
verbinden. Was auch immer wir als Maximum setzen, es wird es verklumpen,
um es nicht zu überschreiten, und wenn wir die Ausdauer reduzieren, wird
es nicht Ich denke, wir haben eine Menge
Informationen darin. Ich denke, das ist eine
gute Belastungsgrenze. Ich sehe dich
beim nächsten. Auf Wiedersehen.
14. Sprint-System fertigstellen: Hallo und willkommen zurück bei
Unreal Engine Five Blueprints, schrittweisen Entwicklung von
Weltraum-Shooter-Spielen Im letzten Teil haben wir die Grundlagen
für unsere Mechanik des
Ausdauermanagements
geschaffen für unsere Mechanik des Wir haben einen Timer entwickelt, auf dem der
Loop-Modus basiert. Er läuft alle 1 Sekunde. Bei jeder Iteration wird aktuelle Ausdauer
subtrahiert oder erhöht
,
wobei unser Wert auf
maximale Ausdauer wobei unser Wert auf
maximale Das bedeutet, dass sie nicht unter
Null oder über Null oder In diesem Spiel
werden wir das Widget aktualisieren und
die vervollständigen Mechanik
der
Ausdauerregeneration Lassen Sie uns unsere
Widget-Referenz und die Funktion, die wir erstellt haben,
in das Widget integrieren Das, tut mir leid, falsche Widget. Die Aktualisierungszeit in Prozent. Wir werden
es vom Spieler aus aufrufen. Da wir die
Widget-Referenz haben, die wir zu Beginn des Spiels
gespeichert haben, als das Widget
anhand dieser Referenz erstellt wurde, werde
ich die
Funktion Update Stamina aufrufen Prozent Für Prozent dividiere
ich
die aktuelle Ausdauer
durch die maximale Ausdauer Also, das ist ein
bisschen Spaghetti. Vielleicht, wenn wir mehr Platz schaffen, können
wir das hier rüberbringen, es könnte ein
bisschen besser aussehen Wie dem auch sei, wenn wir diese beiden teilen, erhalten
wir einen Wert von 0-1, das
ist unser Prozentsatz Das nächste, was wir tun sollten, eine Sequenz aufzurufen
und zwei Fragen zu Die erste Frage wäre, wenn die Ausdauer Null ist, unsere aktuelle Ausdauer Wenn ja, wollen wir aufhören
zu sprinten. Den Code, den wir hier haben, müssen
wir tatsächlich zweimal verwenden, da wir
die Standardfunktion
hier erstellt haben, sodass wir
ihn überschneiden Und dann klicken wir mit der rechten Maustaste
und erstellen eine Funktion. Das Gleiche werden
wir mit diesem machen. Wir können diese Funktion aufrufen. Wir haben den Code
einmal geschrieben und wir rufen ihn zweimal auf. Ich werde auf die Funktion
reduzieren klicken. Ich werde das Stop Sprint nennen
. Ich werde diese Funktion kopieren, und wenn unsere Ausdauer
Null stimmt, sollten
wir Die nächste Frage, die ich stellen
werde,
lautet : Entspricht unsere aktuelle Ausdauer der maximalen Ausdauer
? Der Grund, warum ich die
Frage stelle, ist, dass, wenn ja, dieser ganze Timer nicht laufen
sollte, weil er Ressourcen
verbraucht, um einen Timer zu
starten und zu stoppen Im Code
haben wir hier diesen Rückgabewert ,
der
eine Timer-Handle-Struktur zurückgibt. Ich werfe
das zu einem Arrival herauf und nenne es Stamina Hand Mit diesem Griff hier drüben können
wir ihn graben und fallen lassen. Hier können wir den Pause-Timer oder den Post-Timer aufrufen. Im Moment müssen wir
den Timer pausieren. Aber da wir hier den Timer
pausieren, starten wir den Timer, wenn wir die
Umschalttaste drücken,
um mit dem Sprinten beginnen Ich werde diese
Variable auch hierher bringen und Timer für Griff sagen Um einen Timer zu
handhaben, verwenden wir diese
Timer-Handle-Variable, falls das Sinn macht. Im Moment sollten wir in der Lage sein, eine Visualisierung
zu sehen. Lass uns spielen Es ein Häkchen
gewartet, um
uns zu zeigen, dass unser Körper voll ist. Ich benutze Ausdauer.
Es ist anstrengend, ich verbrauche keine Ausdauer Es verbraucht nicht, es
regeneriert, das System funktioniert. Wir müssen nur am Anfang das
Problem beheben, dass wir die Ausdauer in Prozent aktualisieren müssen Ich werde das und die
maximale Ausdauer kopieren und zu unseren Standardwerten zurückkehren Ich werde das hier platzieren, ich werde diese aktuelle
Ausdauer verwenden. Kompilieren und speichern Ja, natürlich hat es nicht funktioniert , weil wir das Widget
erstellen. Später werden
wir es von hier aus ausschneiden, wo wir das
Widget erstellen. Fangen Sie an. Abspielen. Ich werde das aktualisieren, nachdem ich die
aktuelle Ausdauer hierher gebracht Verbinde dieses Spiel. Es ist aktualisiert. Ich benutze Ausdauer. Ich höre auf, Ausdauer zu benutzen. Ich bewege mich immer noch. Nichts
verzehrt es. Durchhaltevermögen einsetzen Ja, es funktioniert. Das vervollständigt unser
Sprintsystem, was auch immer. Wir sehen uns beim nächsten Mal, wo
wir mit
der Schießmechanik beginnen werden Auf Wiedersehen.
15. Grundlagen des Zielens und des Schießsystems: Hallo und willkommen zurück bei
Real Engine Five Blupints, der
schrittweisen Entwicklung von
Weltraum-Shooter-Spielen Im letzten Video haben wir unser Ausdauersystem,
unser Sprint-Ausdauersystem,
fertiggestellt unser Sprint-Ausdauersystem Lassen Sie uns ein wenig kommentieren. Ich werde hier einen
Kommentar hinterlassen, um es zu nennen. Lassen Sie uns das
tatsächlich hier reinstellen, denn es gibt Eingänge, das
sind die Mäuse und die Maus Nennen wir das Sprint
Effects Fine Line. Lassen Sie uns das unter
unseren Frühlingstimer bringen. Jetzt hier, das ist
unser Tick-Event. Also nennen wir
die erste Bewegung, die zweite ist visuell. In Ordnung, jetzt ist alles
ein bisschen mehr kommentiert. Wir werden es am Ende beim Kommentieren belassen, weil
wir noch mehr Dinge hinzufügen werden. Lassen Sie uns jetzt ein bisschen über
das Schießsystem sprechen. Ich werde nicht wieder
ein Raumschiff zeichnen. Dieses Mal wird es unser
Raumschiff sein. Nehmen wir an, wir haben die Waffe irgendwo hier und wir
wollen mit der Waffe schießen Wir haben unsere Kamera hier oben. Warum sage ich, wir haben die Kamera? Weil die Kamera,
das ist unser Viewport. Das ist das Sichtfeld wie wir es in
der Sprintmechanik beschreiben Das sieht die Kamera. Wir können immer
den Mittelpunkt dessen bestimmen, was die Kamera herausfindet. Von dieser Mitte aus
werden wir eine Linie in Richtung
Bildschirmmitte bilden. Dies wird als Spurlinie bezeichnet. Wir werden später
genauer darauf eingehen. Wir werden eine Spurlinie von der Mitte des Bildschirms bis zu einer Entfernung von unserer
maximalen Schießreichweite aufnehmen. Mit dieser Linie
werden wir feststellen, ob
wir irgendwo auf etwas treffen. Haben wir ein Ziel? Warum
werden wir das tun? Denn wenn wir mit unserer Waffe
schießen,
wenn wir auf
einer geraden Linie stehen , die Mitte des Bildschirms und die gerade Linie von unserer
Waffe nicht identisch sein, sie werden nicht dieselbe Position haben. Wir können an dieser Waffe erkennen , dass sie
auf das Ziel schießt. Das ist das Ende dieser Zeile. Aber wenn es einen
Feind dazwischen findet,
wie dieses Schießen hier und
dieses Schießen hier aus
einem völlig anderen
Blickwinkel, müssen
wir
im Grunde neu berechnen, ob diese
Linie etwas gefunden wie dieses Schießen hier und dieses Schießen hier einem völlig anderen
Blickwinkel, müssen
wir
im Grunde neu berechnen, hat Nein, dann schieß hier drüben. Letzten Endes hat diese
Leitung etwas gefunden? Ja, das hat sie, sie ist hier. Unsere Waffe wird den
Schusswinkel für uns neu berechnen,
es wird so aussehen, als ob sie immer auf das
Ziel schießt Lassen Sie uns damit beginnen,
diese Linie von der
Kamera aus in unserem Projekt zu erstellen diese Linie von der
Kamera aus in unserem Projekt zu Wir werden
zu unserem Tick-Event gehen. Wir werden den neuen
Zweig zu unserer Sequenz hinzufügen. Dafür
benötigen wir eine weitere Variable. Wir werden
das R-Richtung nennen. Es wird vom Typ Vektor sein. Ich werde einen
Setter für diese Variable verwenden. Ich werde
sie beide mit diesem verbinden, vielleicht ein bisschen runter gehen Jetzt bringen wir eine Kamera mit, denn von der Kamera wollen wir, wo sie auf den
Mittelpunkt des Bildschirms zielt. Von der Kamera hole
ich mir den Vorwärtsvektor. Wohin auch immer
die Kamera schaut. Wir verstehen, wohin der
Vorwärtsvektor führt. Ich werde das
mit der Reichweite meiner Waffe multiplizieren. Nun, das ist eine Multiplikation
für Vektor für Vektor, aber wir können
das auf einen anderen Typ ändern Ich ändere
es in eine Ganzzahl, ich mache daraus 50.000. Lassen Sie uns daraus eine Variable machen und diesen Bereich als primär
bezeichnen Jetzt
werde ich mit dieser Kamera den Standort der Welt ermitteln. Ich werde
diese beiden Werte addieren. Ich werde das
als meine Zielrichtung festlegen. Was wir hier machen, lassen Sie mich das ein wenig erklären. Wir haben unsere Kamera.
Das ist unsere Kamera. Und sie hat eine Vorwärtsrichtung. Hat eine Vorwärtsrichtung,
diese Richtung. Nehmen wir an, es ist 0,1 0,0,
weil wir x,
y und z haben , wir haben plus eins auf Y. Wenn das
dann der
Vorwärtsvektor ist, multipliziere
ich Bereich 0,1 0,0. Wenn ihn mit dem
Bereich 0,1
0,0. Wenn
ich ihn damit multipliziere, wird
er hier so Dann ist das ein Bereich. Da steht, wenn du
in dieser Richtung bist, geh hierher, 50.000 vorwärts. Dann fügen wir
das Wort Position der Kamera hinzu. Diese 50.000, sagen wir, wir sind 1,0 0,1, machen es uns
einfach. Dies wird unser letzter sein. Das Ergebnis
wird bei 1,50 Tausend liegen. Das ist ein K011. Wann immer wir ein Ziel
haben, streben wir 50.000 € plus
das Wort Standort an Das gibt uns den letzten Punkt. Das haben wir hier gemacht. Das ist unser erstes Ziel. Nehmen wir an, Zielrichtung
ist vielleicht nicht der richtige
Name, sondern nur Ziel. Ich denke, das ist es für diesen. Wir haben viele Dinge gesagt. Wir werden
im nächsten weitermachen. Auf Wiedersehen.
16. Entwicklung des Schießmechanismus: Hallo, willkommen zurück bei Real
Engine Five Blueprints. Schrittweise Entwicklung von
Space-Shooter-Spielen. Beim vorherigen haben wir damit
aufgehört,
unser Ziel zu erstellen , also was ist unser erstes Ziel
vor der Kamera? In diesem Fall
werden wir mit
der Linienverfolgung fortfahren , über die wir
gesprochen haben. Diese unsichtbare Linie, die wir uns
mitteilen, wenn wir auf etwas stoßen. Lass uns weitermachen, lass uns zu unserem Projekt
gehen. Und dann ist der nächste Knoten, den wir
benötigen, Line Trace Four. Jetzt werden wir vier Objekte
verfolgen. Es gibt
auch andere Linienspuren, z. B. nach Kanal, was wie
sichtbarkeitsspezifische Kanäle ist. Wir werden
das gleich erklären. Die Kugeln, die
eine andere Form haben, es ist eine Kugelform. Eigentlich können wir
statt einer Linie, einer Kugel, eine Kugel verwenden. Verfolgt Objekte nach Sphären. Sphärenverfolgung für Objekte. Das ist dasselbe
wie eine Linienspur für Objekte, mit dem kleinen Unterschied
, dass es sich nicht um eine Linie, eine Kugel handelt, die wir uns geben um eine Kugel handelt, die wir uns geben.
Ich werde diese
Linienspur für Objekte löschen. Ich werde diese
Kugelspur für Objekte verwenden. Lassen Sie uns jetzt hier
ein paar Dinge erklären. Start ist dort, wo der Trace beginnt
und wo der Trace endet. Für Ende haben wir unser
Ziel für den Anfang. Wir werden den
Standort der Kamera verwenden, der
dieses Jahr im Kopiertempo angezeigt und zu Beginn
verbunden ist. Jetzt gibt es diesen Radius. So groß ist unsere
Sphäre im Grunde. Ich gebe einen Wert von zehn an. Wir kommen zu einem
wichtigeren Teil. Hier drüben steht, Objekttypen, wir werden diese Variable
fördern, aber das gibt uns
die Möglichkeit, darüber zu sprechen. Was sind Objekttypen
und was sind Kollisionen? Gehen wir zu unserem Viewport, wo wir unser Schiff
und unsere Kollisionsbox haben Im Grunde genommen sind Kollisionen in
Unreal eine Möglichkeit, sich auf
die Erkennung von Kontakten oder
Überschneidungen zwischen
Objekten im Spiel zu beziehen die Erkennung von Kontakten oder Überschneidungen zwischen
Objekten im Oder wenn wir das
statische Netz oder die Box auswählen, gibt es hier eine Kategorie
namens Kollisionen, die viele Eigenschaften und Details hat, mit denen man
herumspielen kann Wir werden
sie mit
ein paar
Details ein wenig durchgehen , aber nicht viele der Simulation „Hitzeereignis
erzeugen“
geht es darum, Hitzeereignisse zu erzeugen,
während die Physik stattfindet. Wir können es im
Tooltip hier sehen. Und physikalisches Material ist
etwas komplexer. Physikalische Materialien, Sie können
Reaktionen haben , die auf dem
physikalischen Material eines
beliebigen Materials basieren , wie
Sie
sagen würden , konkret, und Sie können
eine spezielle Reaktion
auf den Override oder
das vorhandene physische Material haben auf den Override oder
das vorhandene physische Material ,
das
Überlappungsereignisse erzeugt. Ja, das ist
etwas fortgeschrittener. Systeme erzeugen Überschneidungsereignisse wenn die Kollisionsbox irgendwelche Ereignisse
generiert, Überschneidungen oder sogar Treffer,
glaube ich , in
diesem Charakterschritt enthalten ist. Wie der Tooltip schon sagt, es darum, dass die
Bewegungsmechanik des Charakters versucht, auf etwas zu treten Es geht nicht darum, ob du auf
dem Ding laufen kannst , wenn du
durch einen Sprung darauf gelandet bist oder so Jetzt Kollisions-Voreinstellungen. Das ist eine nette Liste, die Real für uns
mit einigen Presets erstellt
hat Aber wir können immer
eine benutzerdefinierte Kollision machen. Die Voreinstellungen
wirken sich auf diese Dinge aus. Im Folgenden haben wir die
Kollision aktiviert, d. h. bei der
Abfrage ist nicht sicher wie sie ausgeprägt ist,
und physikalische Kollisionen Wir können wählen, ob wir einige von ihnen
aktivieren, einige von ihnen
deaktivieren
oder gar keine Kollision zulassen Nun Objekttyp,
das ist es, was unseren Aufbau
dessen, was wir tun, interessieren könnte unseren Aufbau
dessen, was wir tun, interessieren Der Objekttyp ist ein Kanal
oder im Grunde eine Liste. Es ist ein Mechanismus, der verwendet wird, um verschiedene
Arten von Objekten zu kategorisieren und definieren, wie sie im Hinblick auf Kollisionen
miteinander
interagieren im Hinblick auf Kollisionen
miteinander Nicht in anderen Teilen der Programmierung, sondern in Bezug auf Kollisionen Wie sie
miteinander interagieren. Wenn wir zum Beispiel eine Welt
haben, die statisch
ist, was hat das mit
der Weltdynamik zu tun? Hier heißt es
zum Beispiel, blockiere es , ich werde das
wieder zu dem machen, was es war Pond, das ist es im Grunde. Diese nette Kiste hier drüben. Klicken Sie hier, um die Dokumentation zu öffnen. Wenn Sie darauf klicken, erhalten Sie
eine sehr
detaillierte Analyse der Kollisionen in
Epic-Spielen Eine sehr gute.
Lass uns jetzt weitermachen. Wir haben Objekttypen. Wozu dient diese Sphäre der Spurensuche? Für Objekttypen, die
wir verwenden werden, werden
wir kompilieren, um die Standardwerte zu
aktivieren, und wir werden
einen Objekttyp hinzufügen der weltweit dynamisch
wäre Unser Trace sucht nach Objekten vom
Typ Weltdynamik. Eine weitere
Sache mit Kollisionen, und damit höre ich auf,
ist, dass wir
unsere eigenen Objekttypen erstellen können Wenn wir zu den Projekteinstellungen gehen
und zu Kollisionen gehen, gibt es
hier Kollisionen, Wir können neue
Objektkanäle erstellen und dann können wir
neue Trace-Kanäle erstellen Hier drüben gibt es ein Preset. Wir können sehen, ob ich einen
neuen Objektkanal erstelle, wir sagen meinen benutzerdefinierten
P, ich habe ihn nicht kompiliert Wenn ich zuerst kompiliere, siehst du meine benutzerdefinierten
hier und sie haben die
Standardkollisionen Wie dem auch sei, Sie können das System gerne
erkunden, da es ein notwendiges System für
größere Projekte Ich werde diesen löschen. Lass uns weitermachen. Natürlich. Ich habe vergessen, noch
eine Sache zu erklären. Spurenkomplex. Was ist
das für ein Knopf hier drüben? Wenn wir zu einem statischen Ich übergehen, sagen
wir zum
Beispiel ein Raumschiff Bei einigen statischen Messungen kommt
es einfach zu Kollisionen. Wenn wir einfache Kollision zeigen und
sagen, können
wir hier eine einfache
Kollision sehen. Bei einigen von ihnen gibt es auch komplexe Kollisionen
, die Sie sehen können. Es ist viel detaillierter. Es ist immer besser,
einfache Kollisionen zu verwenden , wenn
die statische Masse dies getan hat, aber wir können mit
diesen Optionen hier immer irgendeine Form
von einfacher Kollision
erzeugen . Das werden wir jetzt
nicht durchmachen. Lass uns weitermachen. Wir werden Complex jetzt nicht
verwenden. Schauspieler zum Ignorieren, Schauspieler
zum Ignorieren eines Arrays. Auch hier haben wir nicht über Arrays
gesprochen,
sondern über
Objektkollisionen, für die ich Sie sehen dieses Symbol
hier mit vielen kleinen Kästchen. Das symbolisiert ein Array. Was ist ein Array? Es ist eine Liste. Im Grunde kannst du hier sehen, dass ich noch eine und viele weitere hinzugefügt habe. Lass mich das wiederholen. Das ist es, was dieses NarraA ist. Es gibt einige spezifische Regeln für die
Manipulation dieser Liste. Wir müssen
jetzt nicht von ihnen ausgehen, weil wir sie in dieser Liste nicht verwenden
werden Wir können es mit
Akteuren füllen , die wir ignorieren können, wir werden es
nicht benutzen Jetzt noch ein paar
interessante Dinge. Zeichne den Debug-Typ. Das besagt, wie lange
sollte die Debug-Zeile dauern? Was ist die Debug-Zeile?
Sie zeigt uns unsere Spur Lassen Sie uns das tatsächlich
demonstrieren. Wir haben es, wenn ich
es für ein Bild setze, wollen
wir die
Selbstzeit von 5 Sekunden ignorieren. Wir können uns diese
Kugel ansehen, die mit
unserer Kamera beginnt und mit
unserer maximalen Geschosslebensdauer endet . Sie können hier sehen, sie beginnt
an der Kamera und endet dort
drüben. Lass uns weitermachen. Sich selbst ignorieren heißt,
den Bauplan
selbst zu ignorieren , Farbe nachzuzeichnen Das ist für die Kamera. Wenn ich das ändere, würde sich die Farbe der Debug-Zeile ändern Wenn es
nach dem Hitzeereignis etwas erhitzen würde, würde
es die zweite Farbe bekommen Diesem überlasse ich
es, das spielt keine Rolle. Vielleicht können wir dem Radius
der Kugel einen
etwas größeren Wert geben . Lass uns 20 draus machen. Das sind
2.200. Hier drüben ist ein Punkt Lassen Sie uns jetzt über die
Ergebnisse sprechen. Bei den Eingaben sprechen wir
über Ziehzeit. Wie lange werden die
Debug-Linien
für die Rückgabewerte gezeichnet für die Rückgabewerte Wir haben natürlich die
Ausführungslinie, wir haben diesen Outheat
und den Rückgabewert, der Rückgabewert ist,
ob etwas erhitzt wurde Fragen wir diese
erste Cola-Filiale, da ist der Trace auf etwas gestoßen. Im Moment haben wir
nichts auf der Welt. Umfragen werden immer auslösend sein. Aber da wir unser Hitzeereignis
ein wenig analysieren müssen, denke
ich, dass wir für dieses Ereignis genug
gesagt haben Wir haben
Kollisionen analysiert und
unsere
Kugelspurlinie so erstellt , wie wir sie hier gesehen haben Wir werden mit
dem nächsten weitermachen. Auf Wiedersehen.
17. Targeting und Fadenkreuz verbessern: Hallo und willkommen bei
Engine Five Blueprints, der
schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der letzten Version haben wir unsere Linienverfolgung
erstellt. Wir haben einige Dinge über
Kollisionen und Objekttypen
und einige Dinge über die
Listen, die als Arrays bezeichnet werden, erklärt , für deren Bearbeitung spezielle Regeln
gelten Nun, wir hatten hier einen Zweig hinzugefügt, lassen Sie mich ihn hinzufügen Ich habe ein paar Dinge überprüft. Heute werden wir ein bisschen über
unser Out-Heat-Ergebnis
sprechen . Wenn wir etwas erhitzt haben, wenn wir etwas
hören, was bekommen
wir dann als Gegenleistung? Siehst du, da steht Hitze. Was eine Struktur ist, ist ein spezieller Variablentyp, der viele verschiedene
Variablentypen
enthalten kann . Es ist wie eine benutzerdefinierte Liste
der Dinge, die wir wollen. Es macht es einfacher, Daten zu
manipulieren und Daten wiederzuverwenden. Es ist eine gute Möglichkeit,
Informationen zu speichern , von denen wir wissen, dass sie spezifisch benötigt werden. Oft Strukturen,
normalerweise, wenn wir eine
Struktur haben, können wir sie durchbrechen. Das bedeutet, uns zu zeigen
, welche Daten es enthält. Wir brechen das Heat-Ergebnis. Und wir können sehen, dass es hier eine
Menge Daten gibt. Wir wollen
den Ort abnutzen, falls wir ihn treffen. Wir wollen unser Ziel
ändern. Weil unser
aktuelles Ziel das Ende
der Streiklinie ist ,
der neue Standort. Kehren wir hier zu unserer
wunderbaren Zeichnung zurück. Die tolle Zeichnung.
Anstatt das Ziel jetzt
hier zu haben, sagen
wir, wir haben es
hier oder hier getroffen. Das ist unser neues Ziel. Nun, warum wir nicht sehen können, weil ich
auf der falschen Ebene schreibe. Ja, wenn ich auf diese Ebene klicke, kann
ich auf die
richtige Ebene schreiben, unser Ziel ist nicht mehr hier
und es ist irgendwo hier. Wenn wir nichts treffen, dann bleibt unser Ziel
dieses Ding hier drüben. Wenn wir es nicht tun, haben wir es nicht.
Das Ziel bleibt dasselbe. Eine weitere Information, die
wir behalten sollten, ist die Hitze. Ich werde für diese
Variable werben, für diesen Zielakteur. Ich werde das hier
einstellen. Wenn wir jetzt nichts treffen, sollte
unser Zieldarsteller Null werden. Null ist, glaube ich, ein Begriff, der nichts bedeutet. Im Grunde
ist das etwas, das
zurückkehren wird , weil es etwas
zurückgeben wird. Da diese Liste
ein bisschen umfangreich ist, sollten
wir sie
hier drüben
drücken und die meisten
Dinge verstecken, die wir nicht benötigen. Damit haben wir
unser Targeting-System erstellt, aber das ist alles gut
für die Programmierung. Wie zeigen wir dem Spieler,
dass Sie es ins Visier nehmen? Etwas, von dem wir wissen, dass es
sich in der Mitte des Bildschirms befindet. Gehen wir zurück zu
unserem Widget-Gameplay zur Registerkarte Designer. Lass uns ein Bild hinzufügen. Wir werden
jetzt ein
paar Fadenkreuze für den Bildpinsel hinzufügen , den wir auf den Datei-Texturen
haben Ich werde dieses Fadenkreuz
ausgraben und im Bild ablegen Ich werde das Bild
in der Mitte des Bildschirms verankern Mitte des Bildschirms Was die Größe angeht, würde ich sagen, dass eine quadratische Schachtel
mit 100 mal 100 in Ordnung wäre. Die Position sollte -50 auf X
und -50 auf Y sein. Sie zentriert sich nach oben. Ich werde kompilieren und speichern. Wenn wir jetzt etwas
ins Visier nehmen, wollen
wir dieses Bild. Lassen Sie mich G drücken. Mutter hat das
tatsächlich getan. Ich musste nur darauf klicken, um
das zu entfernen. Wir
müssen dem Spieler zeigen, dass das Fadenkreuz
auf etwas zielt oder nicht Lassen Sie uns die Standardeinstellung auf
Alpha 2.50 0.5 ändern . Es ist ein
bisschen transparent Gehen wir zu einem geraden Diagramm über
und erstellen wir zwei Funktionen. Die erste Funktion
ruft target auf. Die andere werden wir ins Visier nehmen. Gehen wir zurück zum Designer und machen
wir dieses
Bild zu einer Variablen. Geben wir ihm einen
Namen. Ich unterstreiche das Fadenkreuz wieder, um das
Diagramm im Ziel gleichmäßig Fangen wir mit diesem
an. Wir werden das Cross-Image-Set bekommen. Stellen Sie es tatsächlich ein, stellen Sie es ein,
bürsten Sie es, färben Sie die Farbe. Ich verbinde das
hier mit der Aufschrift „Dünne Farbe“. Ich werde keine Variable
erstellen , weil das dasselbe
sein wird. Ich werde
diesen Strukturpin erneut aufteilen,
da es sich um eine
schieferfarbene Struktur handelt. Ich werde das aufteilen und
sagen, dass die Farbe ein schönes Rot sein wird . Alpha wäre 0,5.
Es ist durchsichtig rot. Für die Regeln
behalten wir einfach die angegebene Farbe bei. Jetzt werde ich das
kopieren und einfügen. Ich werde zu Target gehen. Wir werden es einfügen.
Wir werden es verbinden. Ich werde
alles auf eins legen, sodass es weiß und
transparent wird 0,5 Alpha
0,5 Kompilieren und speichern. Jetzt gehe ich mit der Zielmechanik zurück
zu unserem Raumschiff Zielmechanik Ich werde hier
etwas Platz machen. Ich werde
die Widget-Referenz mitbringen. Aus der Widget-Referenz heraus werde ich diese
beiden Funktionen Target nennen. Ziel. Und verbinde
sie mit der Leitung. Vielleicht zweimal so kopieren. Das sieht schon besser aus.
Das gefällt mir wirklich nicht. Wir können das alles in
einer Funktion unterbringen , damit wir nicht dieses
ganze Chaos draußen haben. Und nenne diese Funktion Targeting System
und füge einen Kommentar hinzu. Jetzt sieht es gut aus für den
nächsten Teil unserer Mechanik, wir werden
einen Schusseingang benötigen Ich klicke mit der rechten Maustaste
und tippe die linke Maustaste. Wir werden eine neue Variable
benötigen. Ich werde sie hier erstellen. Ich werde diese Variable aufrufen. Also werde ich
einen Setter herbringen und das
Gedrückte und das
Loslassen auf der Druckmaschine kopieren und einfügen und Ich werde den Wert auf true setzen. Jetzt müssen wir
darüber sprechen, wie unser
Feuermechaniker funktionieren wird Ich denke, das ist eine gute
Belastungsgrenze für diesen Fall. Und wir werden mit dem nächsten
weitermachen. Auf Wiedersehen.
18. Aufbau der Grundlage für das Shooting System: Hallo und willkommen bei der schrittweisen Entwicklung von Space
Shooter-Spielen
von Real
Engine Five Blueprint Entwicklung von Space
Shooter-Spielen
von In der vorherigen Lektion
haben wir mit dem Start
der
Schießmechanik aufgehört und sind mit dem Fadenkreuz
und dem Heat-Ergebnis fertig geworden Wie gesagt. Lass uns das ein bisschen
erklären. Die Schießmechanik, ich glaube nicht, dass wir dafür
viel Farbe brauchen, aber im Grunde ist das
Konzept so, dass, wenn der Spieler
die Taste gedrückt hält,
also dieser Schuss
eine Verzögerung hat , die wieder abgefeuert
wird, wenn
der Knopf gedrückt ist Wenn die Verzögerung aktiv ist, wollen
wir nicht noch einmal schießen,
sondern warten, bis die
Verzögerung beendet Intern in der
Schießmechanik werden
wir überprüfen, ob
die Taste gedrückt oder oben ist Ich denke, das ist es im Grunde. Wir drehen kontinuierlich weiter, solange
der Knopf
das beste Design aller Zeiten hat. Fangen wir damit an.
Wir werden ein individuelles Event erstellen und das Shooting
nennen. Wir werden es hier nennen. Wenn wir klicken, rufen
wir das Laser-Shoot-Event
Now auf, um den Ablauf zu steuern. Wenn wir erneut drehen sollten
oder es sich um eine Verzögerung handelt, gibt es viele
Möglichkeiten, dies zu tun Es könnten Tore sein, es könnten Goldbarren sein, es könnten Staaten sein Bei Aufzählungen verwenden
wir nur einen Knoten. Das bedeutet, wie wir sehen können, er einmal etwas tut
und einen Reset-Eingang hat In dieser Reset-Eingabe werden
wir
ein benutzerdefiniertes Ereignis aufrufen. Nochmals, benutzerdefiniertes Ereignis Wir werden
das Reset-Laser nennen. Das, sag nicht
Laser, okay, Reset. Wenn wir es zurücksetzen wollen, wenn der Spieler wieder schießen kann, werden
wir es zurücksetzen Das nächste, was dieser Kern
der Mechanik
benötigen wird, wäre eine Verzögerung Bei dieser Verzögerung handelt es sich um unsere
Aufnahmeverzögerung, 0,2 Klingt gut. Ich mache daraus
eine Variable und sage Laser-CD. Ich werde das
danach herbringen. Nach der Abkühlung werde
ich neu starten. Jetzt, nachdem wir den Laser, der hier anruft
,
zurückgesetzt haben ,
wird er auf einmal zurückgesetzt Ich werde einen Ast aufstellen
und fragen, ob er feuert. Wenn wir schießen. Wenn
wir immer noch schießen, nenne
ich
Laserlaser, Laserschuss. Wenn wir nicht schießen, werde ich nichts tun. Im Grunde entsteht dadurch die
Schleife, bei der wir immer, wenn
wir drücken, beginnen, den Laser
abzufeuern. Solange wir gedrückt halten, schießen
wir mit dem Laser. Lassen Sie uns das
mit einem Ton vor der Verzögerung demonstrieren Ich werde das Geräusch des
Schießens abspielen und unsere Säure
ist in Sounds. Dieser,
dieser , einige davon sind Geräusche. Einige von ihnen verwenden wir, weil sie ein bisschen
manipuliert werden können Klingt, kann nicht. Ich
werde das hier hinstellen. Wenn ich
jetzt drücke, schieße ich. Das klingt richtig. Und wir können die Kreuzerben sehen und die riesigen, naja,
es ist nicht riesig Es ist nur unsere Perspektive
, die es riesig macht. Die Sphäre, die sich
von hier nach dort erstreckt, auf
die wir zielen, wenn ich sie wieder besitze, können
wir in der Mitte sehen.
Ich denke, es ist an der Zeit,
einen neuen Akteur zu kreieren , der unsere Kugel sein
wird. Gehen wir zum Inhalt.
Gehen wir zu den Bauplänen Und klicken Sie mit der rechten Maustaste und erstellen Sie eine
neue Blueprint-Klasse. Es wird vom Typ Schauspieler sein
. Nun, warum Schauspieler? Weil wir nicht besitzen
werden, es ist nur ein Ding in unserer
Welt, das etwas bewirkt Ich werde das tatsächlich
VP Bulet nennen, weil wir auch feindliche Kugeln
haben werden Ich werde das öffnen und
alles speichern. Wenn es jetzt so geöffnet wird, können
Sie jederzeit auf Blueprint Editor
öffnen klicken und es wird normal geöffnet Es wurden nur
die Klassenstandardwerte angezeigt ,
da der Blueprint nichts
enthielt Gehen wir jetzt zum Viewport. Wir werden hier
drei Dinge hinzufügen. Asmatic Mesh, das
wir im Player hinzugefügt haben, so wie wir es beim Raumschiff Raumschiff des
Spielers hinzugefügt haben Weil wir das für den Körper
brauchen werden. Nennen wir das zuletzt. Jetzt füge ich einen Pfeil
für Abhörzwecke hinzu
, über den wir vielleicht Bescheid wissen müssen Wo ist der Stürmer davon? Ich werde eine Komponente zur
Objektbewegung hinzufügen. Dieser hier drüben.
Das ist für Projektile, wie wir es für den Spieler hatten, die schwebende Bewegung Für Schauspieler können wir
viele weitere Komponenten hinzufügen, aber eine davon ist die
Projektilbewegung Sie erzeugt ein Projektilverhalten
. Es kann es abprallen lassen und viele
Dinge tun. Es gibt eine Menge
Optionen hier drüben. Wir werden nicht
alle in dieser Kugel verwenden, aber wir werden
einige verwenden, vor allem die Geschwindigkeit. Lassen Sie uns kompilieren und speichern,
gehen wir zu unserem Event-Craft. Wir werden diese löschen. , wir werden sie nicht benutzen, Ich glaube
, wir werden sie nicht benutzen, fangen wir jetzt an. Wir werden das auch nicht
benutzen. Wir werden
benutzerdefinierte Ereignisse erstellen. Wählen wir unser Geschoss aus und
gehen wir zu den Kollisionseinstellungen. Wir möchten sie auf einen benutzerdefinierten Wert setzen. Das einzige, was wir ändern
werden, ist, dass
wir alles so
ändern werden, dass es sich überschneidet,
anstatt dass die Welt dynamisch wird.
Wir werden
es zu einer statischen Welt machen. Auch wenn es im Grunde
weltdynamisch ist, wollen
wir, dass es eine statische Welt ist. Da für unser System unsere Spurlinie nach weltdynamischer Bedeutung
sucht, gehen
wir zur Linienverfolgung über. Es könnte einfacher sein, was diese Linienverfolgung in
unserem Zielsystem durchsucht.
Wir haben
Balldynamik gesagt, weil wir entschieden haben, dass das die Dinge sein
werden, wir verfolgen, um unsere
Kugeln zu erhitzen, sollten nicht
vom selben Kanal sein ,
weil wir nicht wollen sie als Ziele verfolgt werden Wir sollten nicht auf unsere Kugeln
schießen. Wir ändern die
beiden Wörter statisch. Das beweist, dass die
Kategorien für unseren Gebrauch bestimmt sind. Als ob wir nicht entscheiden können,
was was tut und warum. Aber ich habe auch geändert, dass es sich mit allem
überschneidet. Dies ist ein völlig
benutzerdefiniertes Verhalten. Der Spieler kann drauftreten, wir können
es auf Nein setzen, es spielt keine Rolle. Es reist viel schneller als wir, es wird schneller reisen als wir. Nichtsdestotrotz werden wir den beschädigten Teil
der Kugel jetzt nicht bearbeiten. Das werden wir tun, wenn
wir uns die Feinde erschaffen. Aber im Moment brauchen wir
die Kugel, die abgeschossen wird und
diese Entfernung zurücklegt. Ich werde
ein individuelles Event erstellen Lassen Sie uns das Ganze starten. Was wir in Kürze
brauchen werden ist eine Richtung Ich werde Eingaben
und andere neue Eingaben auswählen. Es wird vom Typ Vektor sein. Ich werde
diesen Parameter,
diesen Eingabevektor, genauer
gesagt Vektorrichtung, nennen . Das ist die Richtung
, in die die Kugel fliegen soll. Wie
werden wir das machen? Wir werden unsere
Projektilbewegung bestimmen und die Geschwindigkeit einstellen Wir werden
diesen hier wählen, nicht die Geschwindigkeit im lokalen Raum Ich werde
die Geschwindigkeit nicht im
lokalen Raum einstellen , weil wir wollen, dass
sie sich im Weltraum bewegt. Ich kann
das hier direkt verbinden, aber da das
nur eine Richtung ist, in die wir gehen werden,
also dorthin gehen werden, weiß
es nicht, mit
welcher Geschwindigkeit es geht. Ich werde
diese Richtung multiplizieren. Ich werde das in eine Ganzzahl ändern
. Ich werde 80.000 eingeben Weil wir uns im Weltraum befinden, sind die
Entfernungen riesig 80.000 scheint in Ordnung zu sein. Ich werde
es zu einer Variablen heraufstufen. Nenn das Bullet Speed
und verbinde das hier. Das ist alles, was unsere
Kugel braucht, um zu wissen, wohin sie
mit welcher Geschwindigkeit fliegen soll. Ich werde kompilieren und speichern. Lassen Sie uns diese Kugel
zurück auf unseren Spieler verschieben. Blueprint-Spieler, Raumschiff. Blaupause. Nicht im
Zielsystem. Lass uns schießen gehen. Wir spielen ein
Geräusch und es ist in Ordnung, aber wir müssen auch die Kugel
spawnen Ich denke, das ist eine gute
Überwindung und wir werden beim nächsten Auf
Wiedersehen weitermachen
19. Das Aufnahmesystem abschließen: Hallo und willkommen bei Real
Engine Five Blueprint. Schrittweise Entwicklung eines
Weltraum-Shooter-Spiels. Beim letzten Mal haben wir mit der
Erstellung der Kugel aufgehört .
Lassen Sie uns damit beginnen, die
Kugel zu erzeugen, die wir nach Belieben hatten und die wir vor dem Geräusch einmal
abgeschossen Wir werden wieder
eine Sequenz erstellen. Für die Reihenfolge haben wir gesagt,
dass nur das Schießen der Reihe nach erfolgt. Es wartet nicht darauf, dass diese
Zeile ausgeführt wird. Was wir
tun werden, weil unsere Waffe Stufen
hat, wie sie Stufe eins
beim Schießen und Stufe zwei haben
wird. Vielleicht kannst du
danach
eine Stufe drei erstellen oder weitere Waffen hinzufügen, aber im Moment werden wir nur diese Stufe
eins und Stufe zwei
haben. Ich werde eine
neue Variable hinzufügen und das Waffenlevel
nennen. Es wird so oft
vom Integer-Typ
0123 sein , wie wir wollen.
Jetzt ist das ein Chaos Lassen Sie uns noch einmal anfangen,
einige Dinge in Kategorien einzuteilen. Wir haben die Generation Ausdauer. Das ist
Ausdauerverbrauch durch Bewegung. Bewegungsausdauer, Zeit, Griffigkeit. Oder wir können einen Sprint erstellen
und all das in einem zusammenfassen, aber ich werde sie einfach in Bewegung
setzen Ziele sollten zum Schießen gehen. Ich entscheide mich für die
Kategorie Schießen, Nahbewegung, Naheingänge. Eine Reihe von
Primärfeuerschießen, Objekttypen Schießen, Zieldarstellerschießen, Schießen, Schießen, Laser-CD beim Schießen und Waffenlevel beim Schießen. Vielleicht ein Verwandter des ursprünglichen Körpers. Ich werde das auch in
Bewegung umsetzen, es ist Animation. Ich werde
das Widget so belassen. Lassen Sie uns unser Waffenlevel
aus dem Waffenlevel herausholen. Wir werden
einen Auswahlschalter vornehmen. Das ist jetzt ein neuer Knoten. Schalter. Switch ist ein interessanter Knoten. Es kann viele
Arten von Eingängen haben, wie zum Beispiel Switch, das sind Aufzählungen Ich denke, die meisten von ihnen lassen sich einschalten. Wenn wir zum Beispiel
eine Zeichenfolge hätten und wir Fälle
schreiben könnten, die wir hier hatten Laser oder wenn wir eine Variable
hätten, dass wir dieses Wort hier
ändern würden, würde
es basierend auf dem Wort ausgelöst Jetzt verwenden wir eine Ganzzahl, sie wird basierend auf einer Zahl ausgelöst. Wenn App 01 tatsächlich 0,1 ist, haben
wir nur zwei Fälle, Stufe eins und Stufe
und Stufe zwei. Tatsächlich kann man sagen, dass
der Startindex bei, sagen
wir, bei eins beginnt , er wird 12 sein. Wenn ich sage, dass der Startindex
bei 15 beginnt, wird er 15, 16 sein. Es hat auch diese Standard-PIN
, die wir nicht verwenden werden. Lassen Sie uns den Index auf der
Grundlage unseres Waffenlevels auf 00.1 setzen, es wird entsprechend geschossen Das nächste, was
wir zum
Schießen brauchen, ist, von wo aus
wir schießen Ich gehe zum Viewport
und wähle
den Körper aus, weil ich möchte
, dass die Punkte, von denen aus
ich fotografiere, am Körper
befestigt werden Wenn sich der Körper dreht, drehen
sie sich auch. Und ich werde
eine neue Komponente hinzufügen. Und diese wird eine Komponente
sein. Als Komponente ist es nur ein Punkt. Im Grunde können
Sie
diesen Punkt transformieren und einige
Informationen darüber erhalten. Wir fügen die Szene hinzu
und geben diesem Rätsel einen
Namen. Eigentlich werde ich das für die späteren Upgrades noch
zweimal
kopieren und einfügen . Ich werde
eine Schnauze vor die Nase legen, vielleicht etwas tiefer Ja, das scheint dort in Ordnung zu sein. Und ich werde hier
Maulkorb zwei anbringen. Scheint in Ordnung zu sein. Ich werde
den Standort kopieren. Ich werde es auf Mündung
drei kleben und das
negative Vorzeichen vom Y entfernen. Es wird automatisch hierher verschoben Jetzt haben wir ein paar
Punkte, auf die wir schießen können. Als Nächstes werden
wir Null auswählen. Das ist derselbe, den
wir für den Spawn-Player verwendet haben. Es ist derselbe Spawn-Akteur
, mit dem wir den Spieler spawnen, jetzt werden wir unsere Kugeln
spawnen diese Weise
bringen wir Gegenstände hinein,
bringen Objekte Auf eine Art, wie ich
die Kugel für die Verwandlung auswähle , werde
ich mir die
Szene holen, die Schnauze Ich werde den Standort der Welt ermitteln. Nun, das gibt, wie es heißt, die weltweite
Position des Ziels
zurück, nämlich die Position der Mündung Eigentlich kein Standort. Welt transformieren, transformieren. Eine Transformation ist eine Struktur. Im Grunde können wir sie aufteilen. Es heißt nicht Struktur, aber es ist eine Struktur, die
durch drei Vektoren kombiniert wird, nämlich
die Position, die Rotation und den
Maßstab eines Akteurs. Wenn ich es schreibe, klicken Sie
erneut. Ich kann rekombinieren Ich werde die
Wandtransformation von Muskel eins mit
dem Spawn
der Sport-Son-Events verbinden dem Spawn
der Sport-Son-Events der Sport-Son-Events Jetzt müssen wir hier, wie
gesagt,
eine Richtung verbinden , um anzugeben, woher, weil ich die Kugel an diesem Punkt der
Welt spawne diesem Punkt der
Welt Aber wohin gehe ich? Wo sollte ich meine Geschwindigkeit
erhöhen? Wo wir es
hingestellt haben, hier in der Kugel. Wir multiplizieren diese Richtung. Wir legen die Geschwindigkeit fest,
wir legen die Geschwindigkeit fest. Dafür
brauchen wir wieder etwas Mathe. Lassen Sie uns diese Mathematik
in einer Funktion zusammenfassen und diese Funktion nennen, die
vielleicht auf Richtungsberechnung abzielt . Okay? Ich werde
diese Funktion
auswählen und diesen reinen Knoten hier auswählen. Und wählen Sie eine Ausgabe aus, die den Typnamen haben
würde. Ich werde mich orientieren. Ich gehe zurück zu Even Graph und bringe diese Funktion mit. Jetzt sehen Sie, dass sich
diese Funktion von den anderen Funktionen
unterscheidet. Diese hat eine
Ausführungslinie wie diese. Das liegt an Pure. Wenn es pur ist, hat es
keine Ausführungslinie. Wenn es nicht rein ist,
hat es eine Ausführungslinie. Ich werde das hier verbinden. Gehen wir zurück in die
Funktion und rechnen ein bisschen nach. Das Erste, was
wir verwenden werden, ist wie der Vorwärtsvektor, wir in unser
Zielsystem eingegeben haben als wir
das Ende des Ziels erstellt haben. Wir haben diesen
Vorwärtsvektor von der Kamera bekommen. Jetzt brauchen wir nicht mehr den
Vordermann, unsere Schnauze. Nehmen wir an, wir
holen uns unseren Maulkorb. Wir brauchen den
Vorwärtsvektor der Schnauze nicht. Wir brauchen ihn relativ zum Ziel, weil
wir das Ziel haben Ich werde herausfinden, wo sich
die Schnauze befindet. Dann werde ich das Ziel und
die
Position des Ziels ermitteln und das
subtrahieren Das ist ein Vektor. Das Ergebnis ist ein
Vektor, der
vom Schwung zum Ziel zeigt . Aber in Weltkoordinaten ist
das nur eine Richtung. Es weiß nicht, wo es in den
Gesamtkoordinaten der Welt stehen soll. Es hat keine Ahnung. Es
weiß es einfach von hier nach da Aber wo auf der
Welt Um das hinzuzufügen, ich einfach die weltweite Position
der Schnauze hinzu weltweite Position
der Schnauze Eigentlich sollte diese
Attraktion
das Ziel
vom Wort Standort aus sein , nicht das Wort Ort
vom Ziel Das muss das Gegenteil sein. Jetzt scheint es, dass
wir dasselbe tun. Es liegt eigentlich nicht
daran, dass uns das eine Richtung vorgibt und wir
diese Richtung
der Weltlage hinzufügen . Das gibt uns, sagen
wir, eine Verschiebung dieser
Größenordnung in Richtung dorthin. Dann sagen wir ihm,
wo auf der Welt, damit die Vertreibung stattfindet. Machen wir es anhand eines Beispiels. Lass uns ein neues Board erstellen, neues Board, das vorherige. Nehmen wir an, wir haben nur eine
X- und Y-Achse. Wir haben einen Startwert von 0,1
Sagen wir 2,1 Wir haben hier unseren
Startpunkt, wir haben 2,1, das
ist x, das ist y. Wir haben unser Ziel bei, sagen
wir, vier, das
Ziel ist hier. Und 444 wir haben unser Ziel hier. Was wir bekommen, wenn wir
4,1 von 2,1 subtrahieren , ist, wie
groß diese Entfernung ist, im Grunde genommen
zu der Entfernung, wir fügen das Wort
Position hinzu,
diese 2,3 der Größe 2,3 sollte bei
1,2 in dieser Entfernung beginnen Wir subtrahieren
erneut
das Wort Standort, um das Ergebnis auf einer Weltskala zu erhalten, die innerhalb der Welt
basiert Dann
normalisieren wir das Ergebnis, was uns einen Wert von
0-1 gibt. Daraus
erhalten wir eine Richtung Lass uns das abschließen. Wir werden von hier
wieder subtrahieren Wir werden den weltweiten Standort des
Schießpunkts abziehen weltweiten Standort des
Schießpunkts Vielleicht verbinden wir das hier. Oh, weißt du was? Wir
können nur kopieren, nicht schneiden. Kopiert das von hier nach hier. Und lege es so
und normale Kabel. Und jetzt werden wir
es normalisieren und wir werden das hier verbinden. Wir kompilieren und speichern und
gehen zu unserem internen Graphen, zu unserer Schießmechanik, und es ist schon verbunden Das sollte jetzt
funktionieren. Wenn wir Start it anzeigen, das nicht daran, dass wir nichts
hinzugefügt haben , um uns eine Aufzählung
anzuzeigen. Lass uns das ganz schnell machen. Ich werde
für ein statisches Netz
die Form einer schmalen Kapsel wählen . Ich werde es
in unsere Richtung drehen. Ich werde es auf 0,6 skalieren und das werde ich auch tun, also ist es für das Element etwas
gestreckt. Wir werden übrigens
eines aus unseren Materialien auswählen , das statische Netz. Sie finden es im
statischen Me-Ordner hier. Für unsere Materialien werde
ich
den MI Bullet Globe Player verwenden den MI Bullet Globe Player und wir haben ein Bullet
Express-Spiel. Das können wir, also lass uns
zu unserem Raumschiff gehen. Wir gehen zu unserem Zielsystem. Entferne das Häkchen. Ziehe
den hinteren Typ auf Nein, diese Kugel nervt uns nicht Wir schießen. Lass mich den Ton leiser machen
, weil es ein bisschen nervig ist. Wir haben einen Schuss erstellt. Wir bewegen
uns und wir schießen. Unsere Kugeln treffen direkt in
die Mitte unseres Ziels. Wie wir sehen können, wenn ich mich bewege, folgen
sie einfach, weil
Geschwindigkeit und alles gut ist Ich denke, das ist es für diesen. Ich sehe
dich beim nächsten Mal. Auf Wiedersehen.
20. Gegnerkomponenten und Schadensystem: Hallo und willkommen zurück bei
Unreal Engine Five. Schrittweise Entwicklung von
Space-Shooter-Spielen. Beim letzten haben wir
angefangen, Dinge zu drehen. Wir haben diesen
Schießmechaniker entwickelt. Wenn wir jetzt anfangen und
anfangen zu schießen, schießen
wir tatsächlich
einige Kugeln auf unsere Ziele, in unser Ziel, auf unser Und wir können sprinten und schießen und gleichzeitig sprinten Großartig. In diesem Fall denke
ich, dass es an der Zeit ist, auf etwas schießen zu
können. Aber bevor wir das tun, lassen Sie uns das zweite Level
abschließen und testen. Da wir hier
Muzzle One verwenden, könnten
wir auch einfach Muzzle
2.3 verwenden und das Ganze neu erstellen Aber anstatt das zu tun,
werden wir das einfach
ein bisschen optimieren und
eine Funktion daraus machen Das erste, was wir tun
werden, ist,
unsere Richtungsberechnung
von dieser Mündung aus einzugeben unsere Richtungsberechnung
von dieser Mündung aus Ich werde
es als Eingang anschließen. Sehen Sie, es hat diesen
Eingang erstellt, der hier angeschlossen ist. Und ich werde auch diesen
verbinden. Jetzt können wir einen Maulkorb
extern anbringen. Nun, die Gemeinsamkeit zwischen diesen beiden
ist hier die Schnauze eins Ich werde das einfach verbinden ich werde hier eine
weitere Runde
machen, die Schnauze draußen
lassen alles auswählen
und eine weitere Funktion
erstellen Ich werde das Laser Laser
nennen. Ich werde
es jetzt eingeben, eine neue Eingabe. Ich werde das
hier verbinden. Ich werde
das Muzzle Points nennen. Gehe zurück zum Event-Graph. Ich werde
Muzzle hier anschließen. Jetzt ist es aufgeräumter. Jetzt
kopiere ich das zweimal. Kopiere es und füge es zweimal ein. Jetzt werde ich eine Liplde benutzen. Um ehrlich zu sein, brauchen wir
nicht zwei davon. Wir brauchen nur noch einen. Ich ziehe eine Auswahl von der Mündungsstelle und bringe
meine beiden anderen Mündungsstellen Jetzt werde ich das hier
verbinden. Was ist ein Flip-Flop-Knoten? Ein Flip-Flop-Knoten bedeutet, dass jedes Mal, wenn er ausgeführt wird, zuerst ausgeführt
wird Dann flippt zuerst ein BB einfach zwischen
diesen beiden Ausführungslinien Wir werden
beide hier verbinden. Ich werde hier nur die ESA
verbinden. Jetzt wird unser Geschütz Mündung 11,
einmal
aus Mündung drei für Mündung 2,1, mal
aus
Mündung drei
schießen drei für Mündung 2,1, mal
aus
Mündung drei 2,1, mal
aus
Mündung Wenn ich die
Waffenstufe abkopple und hier einfach eins eintippe, kann
ich die Waffe
der Stufe eins tatsächlich testen Wie du siehst, fliegen
sie zum Ziel. Ich bin mir nicht sicher, ob
es gut sichtbar ist, aber die Rotation
der Kugeln bewegt sich ein
wenig in Richtung Ziel, aber sie ist nicht so gut gedreht Wenn wir zu unserem
Bullet-Blueprint zurückkehren und zur Projektbewegung übergehen Projektilbewegung, da ist diese Rotation, die der Geschwindigkeit folgt Wir sollten das überprüfen und
kompilieren und Play drücken. Jetzt können wir sehen, dass unsere Kugeln viel besser rotiert
sind. Ordnung, wir können von Stufe Null aus
schießen, wir können von Stufe eins aus schießen Nun, Level drei wäre
eine Kombination davon. Kompilieren und speichern. Lassen Sie uns diesen kommentieren. Nennen wir es auch, lassen Sie uns das hier hinstellen. Ich werde
das mit Inputs besprechen. Ich werde den Kommentar einfach
leiser stellen. Das ist eins, kompilieren und speichern. Es ist Zeit, ein
bisschen über unsere Feinde zu sprechen. Am Anfang haben wir gesagt
, dass wir
einen Elterndarsteller verwenden werden, um ihn
mit Kindern zu verwenden. Das bedeutet, dass wir
im Grunde
einen Hauptdarsteller haben werden , der unser Elternteil sein
wird. Aus diesem Schauspieler werden wir einige Schauspieler machen lassen. werden ihre
eigenen Eigenschaften haben, aber sie werden die gemeinsamen
Eigenschaften des Hauptdarstellers behalten. Vielleicht braucht es ein doppeltes M. Ich bin mir nicht sicher. Wie dem auch sei, die Gemeinsamkeiten gehen
an den Hauptdarsteller, und dann erschaffen wir Kinder. Das ist Elternteil, vielleicht ist die
Schreibweise falsch. Es spielt keine Rolle, dass
wir einen Feind haben werden. Nennen wir das Bumm Feind. Wir werden einen anderen Feind haben, der
abgeschossen hat, was Bumm Enemy tun wird. Boom Enemy findet heraus
, wo sich der Spieler befindet, und geht wie eine Explosion direkt auf den
Spieler Tatsächlich explodiert er, wenn der Feind den Spieler
berührt Und um beide Schäden zu verursachen, wird
der Spieler beschädigt und der Boom-Feind wird
zerstört Jetzt der andere Feind, er wird sich so verhalten dass er, wenn wir den Spieler haben, einen zufälligen Punkt
um den Spieler herum auswählt, um sich zu bewegen. Befindet er sich in einer bestimmten Entfernung, fängt er an zu schießen. Das Schussmuster entspricht Position
des Spielers plus und minus von diesem
Ort in der Umgebung. Als ob wir
einen zufälligen Effekt erzeugen würden. Jetzt fangen wir damit an, die üblichen Dinge zu
kreieren. Der übergeordnete Bauplan. Lassen Sie uns herausfinden, was
die Eltern haben werden. Alles wird gemeinsam ein statisches Netz zur
Darstellung des Schiffes verwenden . Nehmen wir an, ich bin mir nicht
sicher, wie es buchstabiert ist. Sagen wir Static Mesh, ein Pfeil , der uns die Richtung
und das Gesundheitssystem anzeigt Wie ihr bemerkt habt, haben
wir kein Gesundheitssystem
für, auch für den Spieler, eingerichtet. Dies wird ein System sein
, das wir den
Feinden und dem Spieler zuordnen werden den
Feinden und dem Spieler Das wird als
Blueprint-Komponente bezeichnet und entspricht der Projektilbewegungskomponente
oder
der schwebenden
Bewegungskomponente , die wir Dies wird jedoch eine Komponente sein
, die wir erstellt haben, und wir möchten dieses Verhalten mit einigen anderen
Blueprints verknüpfen Dies ist der Komponenten-Job, der an Blueprints
angehängt wird und ein Verhalten vorgibt Ich denke, es ist ein guter
Ausgangspunkt, dies hinzuzufügen. Um dies zuerst zu erstellen,
können wir es dem Spieler hinzufügen, einrichten und dann mit den Feinden
weitermachen. Bevor wir einige
andere gemeinsame Eigenschaften hinterlassen , die der Elternbauplan
haben
wird , sind die Geschwindigkeit variabel, zum
Beispiel, wie schnell sich der Feind bewegen
wird Eine Punktvariable, die Xp oder wie auch immer wir sie
nennen können, Punkte jetzt sein
könnte Schaden ist variabel. Eine
Kollisionsschadensvariable, das wäre alles vom
Typ Float oder Integer. Der Grund dafür ist, dass dies nur statische Punkte
sind die
wir
als Standardwerte festlegen möchten. Und vielleicht können
wir bestimmte Feinde auch alleine haben, wie auf dem Bauplan des Kindes Wir werden
sie bei Bedarf ändern. Wenn wir sie jedoch
im übergeordneten Element haben, können
wir jederzeit
für jede dieser Variablen
einen Standardwert festlegen . Lass uns Paint schließen. Lasst uns zu unserem Projekt zurückkehren. Gehen Sie zum Inhaltsbrowser,
gehen Sie zu Blueprints und klicken Sie mit der rechten Maustaste auf
Neue Blueprint-Klasse erstellen Aus dieser Liste haben
wir nun diese Akteur-Komponente Eine Akteurkomponente ist eine wiederverwendbare Komponente, die zu jedem Akteur hinzugefügt
werden kann. Das verwenden wir. Schauspieler-Komponente, nennen wir
das PC-Gesundheitssystem. Tatsächlich kann
alles, was
das hat, beschädigt werden und
an manchen Stellen etwas verlieren. Sagen wir und öffnen das. Kein besonderer Unterschied
zwischen einem Blueprint und einer Blueprint-Komponente besteht darin, dass wir
hier kein Viewport haben Wir können keine Komponenten auswählen,
aber wir können keine
Komponenten hinzufügen, wie wir Blueprint
auf der Komponentenliste tun
könnten In diesem System werden
wir
zwei Variablen verwenden und im Grunde genommen
einen aktuellen Zustand und eine aktuelle Gesundheit Alles andere wird modular sein. Der Akteur,
zu dem diese
Komponente gehört , wird automatisch ermittelt. Dafür brauchen wir keine
Referenz. Als wir zum Beispiel Cursor
beim Targeting im
Spieler-Targeting hier anzeigen wollten Spieler-Targeting hier hatten
wir einen Verweis
auf das Widget Wir hatten einen Verweis auf
die Widgets. Wir können also die
Widgets-Funktion aufrufen und sagen, kein Ziel anvisieren oder das Funktionsziel
das Funktionsziel ausführen. Was passiert, wenn wir keine Referenz
haben, weil wir
diesen Plan jedem Akteur beifügen werden diesen Plan jedem Nun, dafür
werden wir den Eigentümer bekommen, was im Grunde bedeutet, zu
welchem Blueprint-Akteur gehöre ich? Und das wird
uns diese Rendite bringen. Um den Schauspieler zu spezifizieren,
müssten wir einen Schauspieler auswählen. Aber wie wir schon
beim
Vergleich im Hauptmenü gesagt haben, wenn unser Spielmodus der Spielmodus
des Spiels ist , das wir ausgewählt haben, bedeutet
das,
dass ein Objekt zurückgegeben wird. Es war während einer allgemeinen
Unterrichtsstunde eines Spielmodus. Wir haben für
euch diesen Spielmodus spezifiziert, wir könnten Spielerraumschiff werfen und herausfinden ob unser Besitzer das Raumschiff ist
und dann Aber wenn wir Dinge tun wollen,
ohne zu spezifizieren, wem
die Referenz gehört. Die Wertetechniken
, mit denen wir diese Botschaft an
Akteure
weitergeben können diese Botschaft an
Akteure
weitergeben , von denen wir nicht wissen
, welcher Akteur sie sind. Zwei davon, die wir
untersuchen werden , sind die Schnittstellen „Bind on Damage Event“ und „
Blueprint Aber ich denke, das sind genug
Informationen für diesen. Ich denke, wir sollten hier aufhören, eine
Pause einlegen und beim nächsten Abschied
weitermachen.
21. Schadfähige Komponenten und Spielergesundheit: Hallo und willkommen zurück
bei Real Engine Five. Schrittweise Entwicklung von
Space-Shooter-Spielen. In der vorherigen
Lektion haben wir ein
wenig über unsere Feinde gesprochen und darüber , wie das System funktionieren wird. Und wir haben angefangen, an der BPC zu
arbeiten, der Bauplankomponente, die
Schaden anrichten kann und die wir unserem Spieler
und unseren Feinden
hinzufügen werden unserem Spieler
und unseren Feinden
hinzufügen Zum Abschluss haben wir ein wenig über
Bind-Ereignisse und Blueprint-Schnittstellen
gesprochen Bind-Ereignisse Schauen wir uns an, was
sie in Aktion tun. Lassen Sie uns zunächst
eine Blueprint-Schnittstelle erstellen. Sehen Sie, wie wir das machen, wir schreiben, klicken, wir gehen zur Kategorie
Blueprint Hier drin gibt es eine
Blueprint-Schnittstelle. Jetzt nenne ich
das I Communications. Blueprint-Kommunikation spielt
eigentlich keine Rolle. Der Name Du kannst es nennen,
wie du willst. Lass uns das jetzt öffnen. Siehst du, das öffnet einen ganz anderen Plan,
als wir es gewohnt sind Das hat die Details hier drüben. Es hat nur Funktionen, es hat keine Variablen. Das sind
Hosting-Funktionen. Lassen Sie uns eine Funktion erstellen,
sie hat standardmäßig eine. Nennen wir dieses Update auf. Wenn wir diese Funktion
namens Update aktiviert haben, kann ich,
wie Sie sehen, hier keinen Code
einfügen. Das liegt daran, dass wir das in Blueprints
hosten müssen. In anderen Blueprints
können wir Eingaben und Ausgaben
wie zuvor in
jeder anderen Funktion
, die wir erstellt haben, einfügen wie zuvor in
jeder anderen Funktion , die wir erstellt haben, Lass uns das machen. Machen wir zwei, eigentlich brauchen wir 21
wären Gesundheit. Es wird vom Typ Float sein
. Das andere wäre Goldbarren. Und wir werden fragen,
ob das Ziel tot ist. Es wird Goldbarren bleiben. Jetzt haben wir die beiden
Eingaben in dieser Funktion, aber wir können
keinen anderen Aufruf tätigen Wie gesagt, das liegt
daran, dass wir
es in anderen Blueprints hosten es in anderen Blueprints Wenn wir von
hier aus diese Funktion annehmen, müssen
wir sie kompilieren und die
Funktion wird aktualisiert Ich kann diese Nachricht hier senden. Der Besitzer sollte
etwas damit zu tun haben. Falls das irgendeinen
Sinn ergibt. Ich sende jemandem
eine Nachricht. Ich weiß nicht wirklich
, wer sie sind. Ich habe nur eine allgemeine Vorstellung davon , dass es sich um eine Handlung oder eine
Objektreferenz handelt. Es ist nicht der Blueprint-Player. Es ist nicht der Blueprint-Feind. Es ist nicht das Blueprint-Geschoss. Jeder Schauspieler erhält
diese Nachricht. Wenn der Schauspieler etwas
damit zu tun hat, muss
er darüber Bescheid wissen. Woher weiß der
Schauspieler nun davon? Nun, wir werden, sagen
wir, das
BV-Spielerraumschiff Und wir gehen zu den
Klassenstandards, den Klasseneinstellungen. Unten stehen Schnittstellen, implementierte Schnittstellen Ich werde hinzufügen und ich
werde das BI hinzufügen. Jetzt, wo ich hinzugefügt habe, kann ich kompilieren. Und wenn ich kompiliere, sehe
ich, dass eine neue A-Kategorie
erschienen ist. Hier heißt es Schnittstellen. Wenn ich das öffne, wird es
die Funktion haben , die
wir in B
erstellt Um es zusammenzufassen, um einem Akteur eine
Blueprint-Schnittstelle hinzuzufügen, gehen
wir zu Klasseneinstellungen, wir gehen zu Implementieren von Schnittstellen und wir drücken auf Hinzufügen, und
wir fügen unsere Schnittstelle Auf diese Weise machen wir
die Funktionen verfügbar, oder wir können sie als
Ereignisse erstellen , wenn sie keine Ausgabe
aus dem
Schnittstellen-Blueprint
haben , den wir gerade erstellt haben Auf diese Weise können wir
jeden Eigentümer dieser Funktion aufrufen. Und wenn der Besitzer es hat, wird
es etwas bewirken. Das können wir mit jeder
Handlung oder Objektreferenz machen. Je mehr du mit der Realität arbeitest, desto mehr werden diese
Systeme zur Selbstverständlichkeit werden und du wirst sie besser
verstehen. Das nächste, was wir anriefen, eigentlich war es das Erste,
worüber wir gesprochen haben , war das Binden,
etwas über diesen allgemeinen
Bezug eines Schauspielers. Wenn es sich um eine Bindung handelt, gehen wir davon dass es viele
Ereignisse
gibt, für die eine Bindung erforderlich ist. Dies sind Ereignisse, die allen Akteuren
gemeinsam sind. Die Akteure beginnen, überschneiden sich, überschneiden sich. Betrachten Sie es als
vorgefertigte Funktionen. Vorgefertigtes Verhalten, das
auf den Klassenakteur zugeschnitten ist. Für uns werden wir
Ereignisse binden und jeden Schaden einstecken. Wir werden das herbringen. Wir werden das eigentlich noch nicht brauchen
. Wir werden es löschen. Bindungsereignisse treten nun
bei Ereignissen oder Aktionen
oder Funktionen auf , die
standardmäßig aus Unreal
existieren Wir können auch einige Dinge
auf unseren Events erstellen und Dinge binden Es ist jetzt ein bisschen
fortgeschrittener. Wie wir hier auf dem Event sehen können, hat
es dieses Symbol, dass wir beide bei jedem Event gemeinsam
sehen können beide bei jedem Event gemeinsam
sehen Wenn wir
also zu einem Event gehen, gehen wir zum Spielerschiff. Wie ihr sehen könnt, ist
es tatsächlich hier mit der Zeitleiste. Auch diese Veranstaltung hat es. Außerdem binden
wir Ereignisse auf diese Weise. Mir war das nicht klar,
als wir das gemacht haben. diese Weise binden
wir Ereignisse von hier aus
an einige Dinge. Wenn ich ein Ereignis nenne, werden
Sie feststellen, dass es ein
bisschen anders ist, weil dieses Ereignis
ein Ereignis darstellt, das Schaden anrichtet. Wenn ich zu meinem Player gehe
und mit der rechten Maustaste klicke, lass uns näher gehen und
jeden Schaden aufschreiben , dort ist
dieses Ereignis, jeder Schaden. Wie Sie sehen können, hat dieser Spieler den gleichen Typ
Outcus wie dieser, mit Ausnahme
dieses beschädigten Schauspielers, der sich auf den
Schauspieler bezieht, der beschädigt wurde Lassen Sie uns nun zwei
Funktionen erstellen, zwei neue Funktionen. Die eine nennen wir, die andere
nennen wir Remove Health. Fügen Sie außerdem zwei Variablen
vom Typ Float hinzu. Die eine wäre die Gesundheit der Eltern. Der zweite
wäre Max Health. Wir hätten das
in einer Funktion herausnehmen und uns irgendwie mit
einem Bullion
entscheiden können oder einfach
durch Subtraktion
eines mathematischen Pluszeichens , was eigentlich Subtraktion ist Aber um das Debuggen zu
vereinfachen, sollten wir zwei Funktionen verwenden. Bei der ersten Methode setzen
wir nun die Kurve
zwei minus den Eingangsschaden Ich habe das hier angeschlossen und
ich werde es, tut
mir leid, auf dem folgenden Pin benennen . Denn wenn ich das sage, wäre die
Subduktion falsch. Auf der obersten. Ich werde
den aktuellen Gesundheitszustand hinzufügen. Jetzt müssen wir das zusammenfassen. Denken Sie an die Klammer, dass
wir einen Minimalwert und
einen Höchstwert als
Grenzwerte für das Ergebnis
dieses Werts dieser Aktion festlegen einen Höchstwert als Grenzwerte für das Ergebnis
dieses Werts dieser Aktion Für die maximale Gesundheit
werde ich die maximale Gesundheit einstellen. Danach werde ich Besitzer von Besitzer
bekommen. Ich rufe den Besitzer des Updates an. Ich werde das hier verbinden und ich werde
den aktuellen Status hier verbinden. Dafür werde ich einfach
vergleichen, dass gleich Null ist. Wenn das wahr ist,
wird es
true zurückgeben und kompilieren und speichern. Bei Add Health werden
wir jetzt das Gegenteil tun. Wir gehen zu Aktueller Zustand
und fügen hinzu. Nun, das spielt keine Rolle
, sondern nur
der Sichtbarkeit halber , indem Kabel entstehen. Nun gut, ich werde mal nachgeben, wir müssen das
nochmal zusammenfassen Ich werde
das kopieren. Eigentlich werde ich das alles noch einmal kopieren. Ich werde
das einfügen und eine Verbindung herstellen. Verbinde dich dieses Jahr.
Mach vielleicht etwas Platz. Ja, es sieht gut aus.
Und ich werde das auch hier
verbinden. Diese Funktionen sind bereit, Gesundheit
hinzuzufügen oder Gesundheit zu entfernen. Gehen wir nun zur Grafik. Wenn wir etwas verbindlich
annehmen, wäre der Schaden rückfällig. Ich werde das
Remove-Health herbringen. Ich werde das hier hinzufügen. Und das heißt, dass unser BPC beschädigt
werden kann. Das wird die Komponente sein, die
besagt, dass dieser Gegenstand hier über Lebenspunkte verfügt und jedes Mal, wenn er
Schaden erleidet, er aus dem
Gesundheitspool entfernt wird Benennen wir diesen Artikel in Rent Find of Damage, Compile and Save um. Lasst uns nun
zunächst die Gesundheit
unseres Spielerschiffs hinzufügen . Wir haben bereits
jedes Damage-Event ausgerufen. Jetzt müssen wir
unsere Komponente hinzufügen, wie wir es bei
der Gleitkommabewegung getan haben. Wir werden das Gleiche tun. Wir werden uns für Komponenten entscheiden und jetzt werden wir BPC
Damageable schreiben Nun, das ist schädlich,
unser Charakter ist zerstörbar . Aber wenn ich die
BBC als schädlich auswähle, so wie wir den
Schwimmteich ausgewählt haben,
hat er hier einige Eigenschaften, einige Details sind dieselben. wir den
Schwimmteich ausgewählt haben,
hat er hier einige Eigenschaften, einige Details sind dieselben. Wir haben alleine zwei
Variablen, die wir festlegen müssen Aktuelle Gesundheit und maximale Gesundheit Ich setze beide jetzt auf zehn,
unser Charakter hat jetzt zehn Lebenspunkte
, falls Schaden anfällt. Wir müssen eigentlich nichts
gegen
einen Schaden tun , denn
das haben wir hier festgelegt. Immer wenn dieser Akteur das
auslöst, weil es ein Bestandteil
davon ist, wird er es auslösen Gehen wir zu unserem Player.
Ich werde das löschen. Was wir jedoch benötigen werden,
ist unsere Schnittstellenfunktion weil wir sie hier erstellt haben
und gesagt haben, dass wir keinen Code einfügen
können. Der Code
befindet sich im Player. Ich werde darauf doppelklicken. Es hat
automatisch ein Ereignis erstellt. Wenn es
automatisch eine Ausgabe hätte, würde
es funktionieren. Aber ich denke, das ist
genug für diesen. Wir werden mit dem nächsten
weitermachen. Auf Wiedersehen.
22. Enemy Blueprint-Architektur: Hallo und willkommen zurück bei
Annual Engine Five Blueprints. Schrittweise Entwicklung von
Space-Shooter-Spielen. Beim vorherigen
haben wir unsere BBC,
unsere
Blueprint-Komponente Damageable, fertiggestellt unsere
Blueprint-Komponente Damageable, Wir binden das Ereignis an alle erlittenen Schäden und
haben Gesundheit entfernt Wir haben auch eine Funktion
zum Hinzufügen von Gesundheit erstellt, wir unserem Spieler hinzugefügt haben. Dann haben wir gesagt, dass
unsere aktuelle Gesundheit maximalen Gesundheitswerte dem Besitzer des Updates
überlassen bleiben. Lass uns weitermachen. Zuallererst sollten
wir fragen, ob
unser Spieler tot ist. Ich gehe hier zur Filiale
und erstelle diese Filiale. Wir fragen, ist
der Spieler tot? Stimmt das? Wenn der Spieler tot ist, werden
wir eine
Funktion namens Spooky Name erstellen Wir werden diese
Funktion später hier verbinden. Wir können diese Funktion
bei Bedarf ausfüllen. Wenn der Spieler nicht tot ist, sollten wir
dem Spieler irgendwie zeigen, dass er gesund
ist . Gehen
wir also zu unserem U, ich würde das Spiel spielen, zum Designer-Tab
gehen. Und lassen Sie uns diesen
Stopp in eine Bar kopieren, platzieren
wir ihn
etwas darüber, wir sicher, dass es
der Ort ist ,
an dem wir ihn so verankern werden. Lass uns die
Farben zu etwas Grün ändern. Die Pilin-Opazität,
auch etwas Grünes. Nett. Eigentlich
sollte der Hintergrund rot sein, finde ich. Grün. Ja, das
macht mehr Sinn. Der Hintergrund rot und
der Vordergrund grün. Jetzt werde ich diese
Bar in Health Bar B Health Park umbenennen . Ich gehe zur Grafik und
da wir ein festgelegtes Prozent erstellt haben, was aktualisiert es? Tam Prozent Wir werden
das duplizieren und wir werden es Update
Percent nennen Anstatt PB-Ausdauer zu haben, klicke
ich mit der rechten Maustaste darauf Eigentlich kann ich das nicht tun. Araber. Ja, ich werde
es löschen und diesen PB-Gesundheitsteil
mitbringen Und diese Funktion ist abgeschlossen. Gehen wir zurück zu
unserem Spielerschiff. Und im falschen Zweig
des Update-Besitzers erhalten
wir die
Referenz unseres Widgets. Und wir
setzen, tut mir leid, Update Health in Prozent jetzt 4%. Ich werde die
BBC beschädigbar machen, damit ich Max Health
bekommen kann , weil der Spieler keine Variable
hat Es befindet sich in der Komponente. Ich hole mir die Komponente, ermittle Max'
Gesundheitsvariable daraus. Ich werde mit Gesundheit teilen. Das wird uns den Prozentsatz geben. Lassen Sie uns das kommentieren. Lassen Sie uns einen Kommentar abgeben, ich
aktualisiere das alles. Lass uns testen gehen. Lass uns Play drücken. Wir
können einen Teil der Gesundheit sehen. Es wurde jedoch nicht aktualisiert, da wir
keinen Schaden erlitten haben. Lass uns das reparieren. Lassen Sie uns
jetzt zu unserem Schiff gehen , wo wir
das Widget erstellt haben , als wir es
für stampfende Prozent aktualisiert Wir werden dasselbe für Gesundheit tun Wir werden
das ein bisschen aus dem Widget
herüberholen aus dem Widget
herüberholen Ich rufe Update Health an. Wir werden aus
dieser Unterteilung schöpfen. Und bring das BPC mit und
erhalte die aktuelle Gesundheit
geteilt durch
Gesundheit abrufen , kompilieren und speichern Bring das hier
her. In Ordnung. Kompilieren speichern. Es ist endlich Zeit, mit unserem Feind
anzufangen. Da wir
unsere fehlende Zutat,
das System, das gesundheitsschädigend ist, fertiggestellt
haben , werden wir
jetzt
einen Plan erstellen, der ein statisches Netz,
einen Pfeil, die Gesundheitskomponente
und einige Variablen
für Geschwindigkeitspunkte oder x
p enthält. Wie auch immer ihr
es für den Kollisionsschaden werden wir
jetzt
einen Plan erstellen , werden wir
jetzt
einen Plan erstellen, der ein statisches Netz,
einen Pfeil, die Gesundheitskomponente und einige Variablen
für Geschwindigkeitspunkte oder x
p enthält. Wie auch immer ihr
es für nennen möchtet Machen wir das im Inhaltsbrowser. Blueprints öffnen.
Klicken Sie mit der rechten Maustaste Neue Blueprint-Klasse
vom Typ Schauspieler. Nun, wenn wir eine KI hätten, die diesen
KI-Baum
steuert , wären wir,
das würde bedeuten, dass wir dabei wären, weil ein KI-Controller P
besitzt. Aber da wir die Akteure hauptsächlich
auf der Grundlage von Bewegungen
kontrollieren , um
Vektorbewegungen zu lokalisieren, und einigen einfachen Regeln, brauchen
wir das nicht Sie werden also vom Schauspielertyp sein. Nennen wir das
BP Enemy Parents. Lass es uns jetzt öffnen. Wir werden ein statisches Ce hinzufügen. Wir werden
der feindlichen Leiche einen Namen geben. Jetzt werden wir dem Schlitznetz einen Pfeil
ohne
Paletten hinzufügen . Und wir werden
unseren PPC Damageable hinzufügen. Geben wir ihm eine aktuelle Gesundheit
von acht und eine Gesundheit von acht Kompilieren und speichern.
Gehen wir zum geraden Diagramm über. Wir werden das alles nicht brauchen. Wir werden unsere Schnittstelle hinzufügen
müssen,
da unser BPC über diese Schnittstelle verfügt
und uns eine Nachricht sendet Und wir werden das
verwenden, wir werden die Interface-Pops hinzufügen Wenn wir das Interface nicht hinzufügen würden, das Einzige, was
passieren würde, dass dieser Akteur die Nachricht erhält
und nichts passiert Ich werde kompilieren und speichern. Ich werde
unser statisches Mesh auswählen. Auf dem statischen Netz gehe ich
zum Ereignis Ich werde mit der Überlappung der
Komponenten beginnen. Bevor wir mit der
Komponente beginnen, sich zu überlappen, wollen wir überprüfen, ob
die Kollisionen dieses Körpers kriegsdynamisch sind, aber
alles blockiert Wir werden eine
benutzerdefinierte Kollision erstellen, wir werden sie so einstellen, dass
nur der Bauer blockiert wird und alles andere, was
ich kompilieren werde,
überlappt, also eigentlich nicht alles
überlappen Das ist nicht nötig
, denn in dem Moment, in dem wir uns
überschneiden,
zerstören wir diesen Akteur Überschneidet die gesamte Weltdynamik, damit unser Geschosszielsystem sie
erkennen kann , und fertig. Woher wissen wir nun, dass sich der Charakter
überlappt hat? Dies ist ein Überschneidungsereignis. Es gibt uns eine Überlappungskomponente, eine
andere Komponente. Überlappungskomponente
geht es um unsere Komponente, anderen Akteur, den Akteur,
wir überschneiden Die andere Komponente ist die
Komponente des anderen Akts. Nun, hier gibt es einige weitere
Details darüber was wir
mit ihnen belästigen wollen , weil wir sie
nicht verwenden werden Hat diese Komponente, dieses Tag. Wenn das stimmt,
dann tu etwas. Wenn das nicht stimmt,
dann tu nichts. Wir bringen hier eine
Wenn-Erklärung mit. Wir benötigen Nuvariable,
die, von der wir gesagt haben, Kollision, Damas, um einen Standardwert festzulegen oder festzulegen, wie viel Schaden wir
bei einer Kollision benötigen Wir werden es schwimmend machen und es Collision Damage nennen . Wir werden kompilieren, um
ihm einen Standardwert zu geben. Und der
Standardwert sollte eins sein. Kompilieren Sie erneut, wir sind
mit dem Körper des
Spielers kollidiert . Was passiert? Jetzt richten wir Schaden an. Das ist ein einsatzbereiter Node aus Unreal, der
Schadensinformationen weiterleitet Es ist der, den wir
verwendet haben, als wir
ihn an die Komponente gebunden haben , bei jedem erlittenen Schaden, bei jedem Schaden, jeden Schaden
nehmen Wenn wir
Schaden von einem Feind zufügen, wird dieser ausgelöst. Wir werden den
Kollisionsschaden hier miteinander verbinden. Für den
Schadensverursacher werden wir
den anderen Akteur verbinden. Wenn ein Anstifter eine Möglichkeit ist , Informationen
weiterzugeben, zum Beispiel, wer den Schaden verursacht hat
oder wer den Schaden verursacht hat, können Sie
auch einige zusätzliche
Informationen weitergeben, Der Controller, der für diesen Schaden
verantwortlich war, und das eigentliche Objekt, das den Schaden verursacht hat, der den Schaden
verursacht hat Auf diese Weise können andere
Informationen und Schadensarten weitergegeben werden. Wenn wir Kurse für den Typ
Damas hätten , aber
das würden wir nicht benutzen Auch hier, Rückgabewert,
der tatsächliche Schaden endete als ob das eine Funktion mit einem
Ausgangsknoten auf unserem Spieler wäre, hätten
wir eine
Gegenleistung, wenn wir das getan Nachdem wir Schaden angerichtet
haben, werden wir
eine weitere Funktion namens Hold-Death erstellen und sie hier hinzufügen. Geben wir die Funktion Death ein. Was wir tun werden,
wenn ein Feind versunken ist, wir werden den
Emitter am Standort spawnen Für den Standort
werden wir uns einen Co-Location suchen. Wenn wir
ein Niagara-System spawnen wollten, würden
wir das
Spawn-System vor Ort verwenden Siehst du, es ist auch auf Niagara. Wohingegen der Spannweitenmesser
keine Effekte hat. Wir wählen
die Explosion aus. Wir werden den
Maßstab etwas größer ansetzen. Wir werden den Schauspieler vernichten. Wir kompilieren und speichern. Ich denke, das
wäre für diesen. nächsten haben wir viele Dinge
gesagt, wir werden
den ersten Feind erschaffen. Auf Wiedersehen.
23. Design und Bewegung von First Enemy: Hallo und willkommen bei
Engine Five Blueprints, der
schrittweisen Entwicklung eines Weltraum-Shooter-Spiels Bei der letzten Version haben wir den feindlichen Elternteil und
das System erstellt Was passiert, wenn der Feind sich mit dem Körper unseres Spielers überschneidet Lassen Sie uns nun ein System erstellen
, wenn der Feind tatsächlich stirbt. Wenn er hier ist, geht es hier um Gesundheit. Wenn es hier um Gesundheit geht,
ist sie auf Null gesunken. In unserer BBC Damageable können
wir alles hinzufügen , was wir beschädigen
wollen. Wenn wir Gesundheit entfernen, rufen
wir den
Besitzer des Updates für das gegnerische Elternteil auf Wir haben dieses
Interface hinzugefügt und wir werden es verwenden, indem wir
darauf
doppelklicken , um dieses Event zu erstellen. Das Einzige, was wir wirklich überprüfen
wollen,
ist, ist, ob das Ding tot ist? Ich werde abzweigen
und das hier verbinden, die Toten. Wenn es wahr ist, rufe
ich den Tod an. Jetzt sind wir bereit, den Feind zu
erschaffen, das erste Kind
dieses Entwurfs Ich werde speichern und kompilieren. Tun Sie das, ich wähle PP,
Enemy Parent, und klicke mit der rechten Maustaste darauf. Und hier oben steht
Create Child Blueprint Class. Jetzt nenne ich
es Enemy. Ich werde es öffnen. Ihr könnt nun sehen, dass dieser Plan den Pfeil, den gegnerischen Körper,
den BPC, den
Schaden verursachbar und die Standardwerte
übernommen hat gegnerischen Körper,
den BPC, den Schaden verursachbar und Jetzt gibt es noch zwei weitere Dinge, die wir dem übergeordneten Feind
hinzufügen müssen Wir müssen zwei
weitere Variablen hinzufügen. Eine davon wird
Speed heißen, sie wird
vom Typ Integer sein und die andere
wird Punkte sein. Es wird auch der Typ Integer
sein. Jetzt sind wir fertig
mit dem übergeordneten Feind, zurück zum Bumm-Feind. Jetzt brauchen wir natürlich Geschwindigkeit, denn dieser Feind
wird sich bewegen. Aber bevor wir das tun,
nutzen wir das statische Ich, das wir
haben, für einen Feind. Ich werde statische Maßnahmen ergreifen. Und ich werde
Feind B auswählen und ihn hier hinzufügen. Wenn sich dieser Feind
einfach auf uns zubewegen würde, wäre er ein bisschen abgestanden Um es ein
bisschen interessanter zu machen, fügen
wir einfach eine
rotierende Komponente Wir werden sagen, dass die Drehung
auf der Y-Achse erfolgen soll, auf minus 180 statt auf der Z-Achse. Es wird sich auf diese Weise drehen. Verwendung einer rotierenden
Komponente hat
nun viele Fähigkeiten
und Eigenschaften. Wir wollen den
lokalen Raum nutzen, weil wir nicht wollen, dass er sich
je nach Welt dreht. Wir wollen den Körper eigentlich nur
drehen, wenn das Spiel beginnt. Ich werde mir diese
rotierende Bewegungskomponente holen. Es ist eine Komponente, ebenso wie
das BPC, das beschädigt werden kann, nur dass es standardmäßig vorhanden ist setzen wir auf
dieses
Komponenten-Update Komponenten-Update werde das verbinden, um
mit dem Spielen der Komponente zu beginnen .
Ich wähle
den feindlichen Körper aus. Dabei wird nicht
der gesamte Schauspieler gedreht, sondern nur dieser Körper Das sind alles Waren,
aber sie bewegen sich nicht. Bringen wir es in Bewegung, denn das
Erleiden von Schaden und das Anrichten von Schaden durch Kollision wird dem Elternteil angetan Hier brauchen wir nur die Bewegung. Wir machen es bei Häkchen. Es bewegt sich also in jedem Frame und die Bewegung
wirkt natürlicher. Wir können nicht die Position festlegen, in der die Position
des Schauspielers festgelegt wird, und der Knoten die Position des Schauspielers festlegen. Nun wird der neue Standort für unser Ziel
interpretiert. Wir werden den Standort
unserer Spieler ermitteln. Wie machen wir das, wenn wir keinen Bezug zum Spieler haben? Hier drücken wir die
rechte Maustaste und rufen den Spieler auf. Es spielt keine Rolle
, welchen Charakter wir haben. Es könnte ein beliebiger Charakter sein. Es ist in diesem Moment die kontrollierte
Spielfigur. Wir werden zum Standort gehen. Von hier aus werden wir
es mit dem Ziel verbinden. Jetzt
bewegt sich unser Feind auf den Spieler zu. Jetzt müssen wir uns zu dieser Zeit
verbinden. Ich werde
es mit dem Event verbinden. Das hängt von Bildrate
des Schauspielers bei Interspeed
ab. Wir wollen die
Geschwindigkeitsvariable der Eltern , die eigentlich
keinen Standardwert hat. Lassen Sie uns einen
Standardwert von 500 festlegen. Und lassen Sie uns auch den Standardwert auf zwei
Punkte setzen .
Setzen wir es auf eins. Wir kompilieren und speichern
jetzt diese Variablen. Wir wollen sie in unserem Charakter haben, aber unser erster Feind, aber wir können sie nicht sehen. Hier oben gibt es eine Option mit der Aufschrift Meine Blueprints Hinzufügen, und hier ist dieses Symbol. Das sind die Optionen für diesen Tab hier
drüben, vererbte Variablen Wenn ich darauf klicke, können wir
alle darauf basierenden vererbten
Variablen sehen . Aber es gibt auch die
Replikation, das Rendern und viele andere Variablen, die von
den
Variablen vom Typ Akteur geerbt wurden. Jetzt können wir die
Kollisionsmatten,
die Geschwindigkeit und die Punkte sehen und sie tatsächlich manipulieren. Wir wollen sie manipulieren, wir nutzen einfach die Geschwindigkeit,
um sie hier zu verbinden. Bevor wir testen,
überprüfen wir unsere Kollisionen. Lassen Sie uns die Dynamik der
Welt meiner Eltern weiterverfolgen. Das könnte nein sein,
ist nicht wirklich wichtig. Benutzerdefinierte Abfragen und die Dynamik
der physikalischen Welt überschneiden sich. Hier sollte alles
gleich sein, weil es erbt. Alles klar, gehen wir jetzt zu
unserem Player und wählen das Kästchen aus. Jetzt sollte die Box benutzerdefiniert sein. Auch hier sollte Static alles
überlappen, vielleicht außer Static, dass es die Abfragephysik blockieren
sollte. Nun zum Körper. Der Körper sollte alles überlappen
und sollte eine Spielfigur sein Eigentlich nicht, wer studiert, denn unsere Körper sind Schachfiguren Es sollte also koreanische Physik
vom Typ P haben. Das könnte nein sein,
alles sieht gut aus. Lass uns das Spiel testen. Und es gibt keinen
Feind auf der Karte. Bringen wir einen Feind auf die Karte. Sagen wir auch alles. Lass uns spielen. Hier ist der Feind. Ich denke, es ist ziemlich klar
, dass es sich auf uns zubewegt. Allerdings nicht in der richtigen
Rotation. Wenn ich in diese Richtung gehe, dreht
es sich nicht um, um uns anzusehen. Das
werden wir in der nächsten Lektion beheben. Wenn wir darauf schießen, richten unsere
Kugeln keinen Schaden an. haben wir noch nicht programmiert
, und sie werden
auch nicht zerstört Aber wenn ihr seht, dass ihr
Weg geradlinig erscheint, was nicht gerade ist, dann
dringt er tatsächlich in unseren Feind Und es sieht so aus, als ob er gerade ist. Sie sehen hier abschießen. Es sieht so aus, als würde es steigen, was eigentlich
hinter dem Feind liegt . Und
es sieht so aus. Und wenn wir uns vom
Feind angreifen lassen, bekommen
wir etwas Schaden, oder? Ja, ich glaube, das
ist es für diesen. Jetzt gibt es eine Menge Fehler. Warum treten diese Fehler auf? Nehmen wir an, Zugriff,
ohne zu versuchen, den Standort des
Eigentümers
auf unserem BP-Bom-Feind auszulesen . All diese Fehler sind identisch. Das sind die Fehler
, die
entstehen , weil wir den Feind
nicht spawnen, ihn einfach
im Level platziert
haben und er
nach einem Spieler sucht Und wir haben noch nicht auf Spiel
starten geklickt, es kann kein Spieler gefunden werden Und es heißt, der Fehler
kann den Spieler nicht finden. Wenn wir starten, tritt dieser
Fehler nicht mehr auf. Aber wir werden keine
Feinde auf diese Weise platzieren, und diese Fehler
werden nicht passieren. Lass mich den Feind löschen. Ja, ich wähle den Feind aus. Löschen, speichern. Und das ist es für diesen. Ich schicke dich als Nächstes. Auf Wiedersehen.
24. Allgemeine Feindfunktionen: Hallo und willkommen bei Unreal
Engine Fight Blueprint. Schritt für Schritt Space
Shooter-Spieleentwicklung. In der letzten Lektion, mit der
wir fertig waren, sind wir
eigentlich nicht fertig geworden, aber wir haben unseren Feind geschaffen aber wir konnten dem Feind keinen
Schaden zufügen. Lass uns das machen. Gehen wir zu unserem Spieler-Bullet
und wählen unser statisches Mesh und das
On-Begin-Overlap-Event aus. Eine weitere Sache, die wir noch einmal mit
dem gegnerischen BP-Elternteil machen
sollten,
ist, ihn zu zerren. Wir gehen zu den
Klasseneinstellungen von BP Enemy Parent und
suchen nach einem Zug und benutzen einen Schlepper Wir werden das kopieren. Wir brauchen das für unsere Kugeln. Wenn wir zu unseren Kugeln gehen, werden
wir fragen, ob der
andere Schauspieler diesen Zug hat? Diesmal nicht die Komponente, sondern die des Schauspielers. Ich werde Enemy hier einfügen. Wenn es ein T hat,
wollen wir Schaden zufügen, der Schadensverursacher
ist der andere Akteur. Machen wir ein paar echte Knoten. Nehmen wir an, wir
fügen 18 Lebenspunkte acht Schüsse zu und der
Feind stirbt. Um es ein
bisschen ausgefallener zu machen, verschieben
wir
nochmal die Anzeige, einen Standort Der Ort wäre
der Standort des Schauspielers. Wir könnten tatsächlich einen Weg finden , um herauszufinden, wo genau die Hitze war. Aber da wir
den Schauspieler danach vernichten, wird
es ein feiner Maßstab sein.
Lass es uns auf einem belassen. Wählen Sie die Partikelexplosion aus. Danach gehen wir
zu oder kompilieren und speichern. Lass uns spielen. Eigentlich
muss ich einen Feind, sagen
wir, etwas weiter weg bringen. Und leiser die Lautstärke. Abspielen. Spiel starten. Wir können unseren Feind sehen. Das Ziel wird ebenfalls rot. Ich habe nicht nachgesehen, bevor
wir unseren Feind haben. Es kommt
mit einer schlechten Rotation auf uns zu. Wenn wir es treffen, wird
es zerstört. Ich habe da ein paar Aufnahmen verpasst. Okay, der Feind war ein
bisschen klein, als wir ihn gesehen haben. Wir möchten vielleicht,
dass sie ein bisschen größer werden. Jetzt haben wir ein weiteres Problem, dass unser Feind uns nicht gegenübersteht, wenn er auf uns
zukommt. Wir brauchen eine Möglichkeit,
den Feind dazu zu bringen, sich auf
uns zuzudrehen , weil wir
das gegen den anderen Feind verwenden werden, ,
nun ja, nicht ideal ist. Aber es ist eine nette
Art,
unsere Bibliotheksfunktion zu demonstrieren ,
eine Funktionsbibliothek. Was ist eine Funktionsbibliothek, wie haben wir die Coms, die Blueprint-Schnittstelle, die wir Hier sind Funktionen für
die gemeinsamen Nutzung der Blueprints enthalten, aber die Funktion wurde in den
anderen Blueprints
gefüllt Jetzt ist es das Gegenteil davon. Es ist eine Bibliothek mit
Funktionen, die wir in der Bibliothek
spüren. Sie haben einige Einschränkungen. Dann
können diese Funktionen von
allen Blueprints gemeinsam genutzt werden , zu denen
wir mit der
rechten Maustaste auf den Blueprint und
die Blueprint-Funktionsbibliothek klicken Es gibt auch
Unterschiede in der Makrobibliothek zwischen diesen beiden, aber wir werden jetzt die
Funktion verwenden Ich werde
dieses P L Space Game nennen. Ich habe es geöffnet und es
hat bereits eine Funktion für uns erstellt. Lassen Sie uns diese Funktion umbenennen. Dreht sich zur Ebene hin. Jetzt werden wir hier einige Eingaben
benötigen. Lassen Sie mich hier einige
der Regeln erklären, wenn wir zum Beispiel den Layer-Controller
bekommen. Es braucht ein Weltkontextobjekt. Es bedeutet, wo gehört
das hin? In welchem Kontext bekommen wir einen Play-Controller wie
diese Funktionen, ich weiß
von nichts. Wir müssen ihnen einen
gewissen Weltkontext geben. Ich werde das nach außen bringen und ich werde
diesem Controller hier einen Namen geben. Wir verbinden jetzt
den Controller, weil es ein Objekt ist, wir können
so ziemlich alles verbinden. Es wäre unklug, hier
etwas anderes als einen
Controller anzuschließen hier
etwas anderes als einen
Controller Es könnte das ganze
System stark unterstützen und es zerstören. Wir werden überprüfen, ob
das gültig ist, gültig ist, denn wenn es nicht gültig ist, sollte
es nicht nach Rotationen
oder was auch immer
suchen , weil unser
Spieler vielleicht gestorben ist Das gibt uns auch Hinweise
darauf, wen wir rotieren. Dadurch erhalten wir
im Grunde das Kontrollierte. Von hier aus geben wir das an den
Spieler weiter, ermitteln Standort der Wand,
den Standort des Schauspielers. Jetzt wissen wir, wo wir erstellen
sollen, wer rotiert. Wir werden also einen anderen Input
benötigen. Dieser wird Schauspieler sein. Wir werden
diesen Schauspieler tatsächlich benennen. Davon werden wir nun, eigentlich auch eine Rotation bekommen. Wir werden eine
Sektor-Rotation durchführen. Wir werden diese
Schauspielerrotation
in Richtung des Spielers festlegen . Hier. Wir machen Inter, diesmal zwei,
es ist nicht konstant. Je weiter es entfernt ist, desto schneller wird es sich drehen. Wir brauchen ein Ziel, eigentlich müssen wir auch
Delta-Time und Interspeed miteinander verbinden . Wie schnell werden
wir abbiegen? Wie finden wir das
Ziel der Rotation? In Wirklichkeit gibt es einen
schönen Knoten namens Point. Schau dir die Rotation an. Wir haben einen Start und ein Ziel, und das gibt uns eine Rotation. Der Anfang des
Ziels sind Standorte. Unser Zielort
ist unser Teichstandort. Unser Startort
wäre der Schauspieler. Standort des Schauspielers. Die Position des Schauspielers, die Position der
Steuerung, gibt uns mit diesem Knoten unser Ziel, wohin wir schauen sollten. Da dies nun,
wie gesagt,
eine gemeinsame Bibliothek ist , eine Funktionsbibliothek, gemeinsame
Funktionsbibliothek, können wir
diese Funktion von überall aufrufen . Wir können es Elternfeind nennen. Wir können es
Player Like A Fit nennen. Klicken Sie auf Spieler und geben Sie
vorwärts rotieren in Richtung Spieler ein. Wir können diese Funktion bekommen. Sie können sehen, dass es ein
bisschen anders ist. Es sieht ein bisschen
anders aus als die anderen. Es ist dünner hier. Es gibt uns die Ästhetik, das
ist etwas anderes. Eine Funktion, eine Bibliotheksfunktion. Wir wollen es nicht in unseren Spieler rufen,
wir wollen
es bei unserem Boom-Feind aufrufen,
bei unserem Tick-Event
rotieren wir zum Spieler. Lasst uns hier etwas Platz schaffen. Lass uns eine Verbindung zum Controller herstellen. Wir werden unserem Schauspieler den
Player-Controller geben. Wir werden uns auf
Delta-Zeit einlassen. Wir werden
Delta-Sekunden verwenden. Und für Interspeed,
nun ja, das ist eine Urteilsentscheidung. Ich mag die Zahl Zehn. Es schien mir, dass
es sich gut dreht. Lassen Sie uns testen, ob unser
Spieler rotiert. Das sollte uns ständig
ansehen. Wir fahren schneller, halten Schritt. Der Feind
schaut ständig auf unseren Spieler. Wir können die
Seiten nur sehen, wenn wir ihre Seiten
tatsächlich sehen. Okay, wir haben es getötet. Ich denke
, das reicht für diesen. Ich sehe
dich beim nächsten Mal. Auf Wiedersehen.
25. Shooter-Feind-Entwicklung: Hallo und willkommen bei Unreal
Engine Five Blueprint Schritt für Schritt bei der Entwicklung von
Weltraum-Shooter-Spielen Zuvor waren wir
mit unserem Bum-Feind fertig, dem Feind, der sich uns nähert Und wenn er
mit uns kollidiert, explodiert er. Und in diesem Fall beginnen wir
mit unserem Shooter-Feind. Aber bevor wir das tun, mir aufgefallen, dass
wir bei Puck ein kleineres Fadenkreuz haben, wenn wir spielen Es sieht nicht so groß aus. Eigentlich habe ich es
schon geändert. Aber wir werden
es auch kleiner machen. Es muss einen
Feind auf der Karte geben. Ja, das ist es.
Deshalb haben wir so viele Fehler. Gehen wir zu WG Gameplay und ändern wir den Cursor
auf den kleinen Cursor. Danach sollten
wir
seine Position auf -25 und die Y-Position auf -25
und die Größe auf
50 X und 50 Y ändern seine Position auf -25 und die Y-Position auf -25
und die Größe auf
50 X und 50 Y . Kompilieren
und speichern. Lass uns Play drücken. Speichere auch das Level, ohne den Feind
scheint dieses Ziel ein bisschen besser zu sein. Eigentlich viel besser.
Nun zu unserem neuen Feind. Lass uns ein bisschen über unseren
neuen Feind sprechen. Nehmen wir an, dass wir unseren Spieler hier
haben. Der Feind wird
irgendwo hier erscheinen. Jetzt ist es Verhalten. Wir werden ein Gebiet haben. Stellen Sie sich einen Bereich um
den Spieler herum vor, in dem tatsächlich die maximale Grenze liegt. Lass uns das alles gelb färben. Was wird der Feind tun? Der Feind wird eine zufällige
Position in diesem Bereich einnehmen. Dies wird sein Ziel sein, um sich zu bewegen. Wenn sich der Feind hierher bewegt, stoppt
er und
fängt an,
auf unseren Spieler zu schießen. Danach wählt er, wo auch immer,
eine neue Position
und bewegt sich dorthin. Selbst wenn die Position
hier vorbei ist und sie
durch den Spieler gehen muss, wird
sie durch den
Spieler gehen, sie wird versuchen, dort durchzugehen. Das wird jetzt
unsere KI für den Feind sein. Lass uns es erstellen.
Gehen wir zu unserem Inhaltsbrowser. Gehen wir zu Blueprints. Klicken Sie mit der rechten Maustaste und wählen Sie
Blueprint Class. Eigentlich
werden wir ein
weiteres Kind des feindlichen Elternteils
BP machen weiteres Kind des feindlichen Elternteils
BP Ich
klicke mit der rechten Maustaste auf Enemy Parent und erstelle eine
Blueprint-Klasse für Kinder Jetzt nenne ich diesen
BP „Feind“ und öffne ihn. Ich werde
das auch hier ansprechen. Speichern Sie es und gehen Sie
tatsächlich zum Viewport. Wählen wir nun Body und
gehen wir zu unseren statischen Meshes. Und wähle Feind A und Drache aus. Lege es auf ein statisches Netz. Jetzt sind die Stimmen der Gegner etwas höher
als wir wollen. Ich werde ein bisschen niedriger sein. Jetzt gehen wir zu einem Schiff,
das im Spieler gebraucht wurde. Hier ist es. Da verwenden wir die
Mündungsstellen des Spielers, also einige Szenenbestandteile, was eigentlich nur ein Punkt
ist So wie wir das für das
Spawnen von Kugeln verwenden, werden wir
das auch für
unseren Feind tun Ich füge ein, ich nenne es Schnauze eins, ich werde es noch zweimal einfügen, kopieren, einfügen Nummer eins, wir werden hierher gehen. Wir sind fast da. Das ist nicht genau
in der Mitte, das ist nicht
wirklich wichtig Aber wenn wir wollen, können
wir hier
die Fangpunkte schließen und sie
einfach manuell verschieben Ja, das ist perfekt. Lass uns zu Nummer zwei gehen. Bring es her. In Ordnung, und ich kopiere den Standort
und gehe zu drei. Füge es ein. Entferne dieses Mal das X-Minus, weil wir uns auf der X-Achse befinden, können
wir hier
von der roten Linie aus sehen. Wir werden es hierher verschieben. Das ist jetzt fertig. Das werden wir nicht benutzen. Lass uns zu unserem Tick-Event gehen. Wir werden
Begin verwenden, danach spielen. Als Erstes schweißen, nach
unserer gemeinsamen Funktion drehen. Dies ist einer der Gründe, warum
wir es allgemein gemacht haben, sodass wir es viele Male verwenden können. Hier werde ich pro bekommen, in der Regel würde
die
gemeinsame Funktion auf einem Häkchen laufen. Aber das ist ein kleines Spiel und
unser Spiel ist sehr einfach. Das wird einfach gut sein. Schauspieler wähle
ich zum Beispiel unser
Selbst für die Delta-Zeit aus. Ich werde eine Verbindung zur
Delta-Sekunden-Intergeschwindigkeit herstellen. Lass uns diesmal einen anderen
Betrag angeben. Geben wir einen, eigentlich 15. Als Nächstes sollten wir fragen, ob wir einen Zweig verwenden werden einen Zweig verwenden und wir werden eine Bedingung
verwenden. Ich werde das auf
falsch setzen und
es dann zu einer Variablen heraufstufen. Denn wenn das
wahr ist und ich es heraufstufen, wird standardmäßig
der Wert true gespeichert. Ich mache es auf
falsch und werbe es hoch, der Standardwert ist falsch. Und ich
nenne dieses Goldbarren Umziehen“, weil wir eine Umzugsbühne und
eine Schießbühne haben Umzugsbühne und
eine Schießbühne Das wird die
Differenzierung erleichtern denn da wir zwei Phasen
haben, können
wir nur eine
der Fragen stellen : Bewegt es
sich oder bewegt es sich nicht? Wenn es sich bewegt, werden wir
den Standort des Schauspielers festlegen. Jetzt werden wir
wieder dolmetschen. Wir wählen
konstante Interpretation
ist Vektorinterpolation
oder Interpret ist
Rotatorinterpolation ist
Rotatorinterpolation Es gibt noch ein paar mehr. Im Moment werden wir den Standort des
Schauspielers ermitteln.
Diese sind aktuell. Für das Ziel
müssen wir
das Ziel berechnen . Wie wir
dem Spieler gegenüber gesagt haben, werden wir das hier
nicht tun. Wir werden
dafür eine Funktion erstellen , da sie zu bestimmten Zeiten
ausgeführt werden muss. Wie hier, wenn das wahr ist, sollte
es unser Ziel bereits
kennen. Wir werden
diesen Variablennamen bewerben. Diesen Zielort
hatte ich bereits erstellt. Es gab einen Absturz
im Motor, um die Zielposition der Vektorvariablen neu zu
starten .
Wir werden die Deltazeit mit der
Delta-Sekunde
des Ticks für Geschwindigkeit
verbinden . Wir nehmen unsere
übergeordnete variable Geschwindigkeit und verbinden sie hier. Denken Sie daran, wenn das nicht angezeigt wird, können
wir
es immer von hier oben finden. Geerbte Variablen anzeigen. Nehmen wir nun an, wir
fegen auch. Kollisionen sind wichtig. Wir
bewegen uns auf diesen Ort Was passiert, wenn wir unser Ziel
erreichen? Setzen wir eine Zweigbedingung. Wir werden herausfinden, dass der Standort des Schauspielers unserem Zielort
entspricht. Nun, dieses kleine Ding
hier drüben ist eine Fehlertoleranz. Da wir
mit Vektoren vergleichen, können
wir eine Fehlertoleranz haben. Wir können das auf
einen oder was auch immer setzen. Wir können es auch nach dem
Zufallsprinzip mit großen Werten haben. Es ist ein bisschen mehr Forschung und
Entwicklung, von wo aus es kommt. Also ob es
das Ziel erreicht oder nicht, aber im Moment ist es egal,
wir werden es so haben. Wenn wir
unser Ziel erreicht haben, sollten wir aufhören, uns zu bewegen. Ich werde mich sofort den Löchern
zuwenden. Wenn das läuft, hört
es auf zu laufen. Das wird von hier aus nicht passieren. Jetzt brauchen wir eine weitere Funktion, aber ich werde daraus ein Ereignis
machen. Wir brauchen auch hier ein Ereignis, also werde ich ein
benutzerdefiniertes Ereignis machen und es benennen. Mist, ich nenne es jetzt
hier, weil wir sichergehen jetzt
hier, weil wir wollen, dass
es nicht wieder läuft. Wir werden
hier einen Hinweis machen, dass es nur einmal schießt. Ich werde ein benutzerdefiniertes
Ereignis durchführen, um das einmal zurückzusetzen. Ich werde Reset benennen. Also weil wir
die Regeln hier komplexer machen wollen und wir
wollen einmal schießen und wir
können alles zurücksetzen, wenn wir von hier aus
schießen. Lassen Sie uns jetzt über den Dreh sprechen, aber lassen Sie uns darüber sprechen, wie wir uns
dabei fühlen . Lassen Sie uns eine Funktion erstellen. Nennen wir diese Funktion
Select Location. Wenn wir als
Nächstes den Standort auswählen, bedeutet
das, dass wir bereits geschossen
haben. Also das Erste, was
wir tun sollten, ist Reset, Shooting, Shooting. Das nächste, was wir jetzt tun
sollten, ist Spieler. Das ist unser Ziel. Wir brauchen unser Ziel. Zunächst fragen wir, ob es gültig ist? Denn wenn der
Spieler nicht gültig ist, bedeutet
das, dass der Spieler gestorben ist. Und wenn der Spieler gestorben ist, sollten
wir nicht nach
einem Ort in der Nähe des Spielers suchen. Es würde zu einem
Problem führen, ist gültig. Jetzt müssen wir als Nächstes zum Standort
des Spielers
gelangen. Von diesem Standort aus
werden wir den Zielort festlegen. Aber wir werden nicht direkt
darauf eingehen, denn als wir das
beim vorherigen Feind gemacht haben, geht der Feind
direkt zum Spieler. Lassen Sie uns ein
hypothetisches Quadrat erstellen. Vielleicht, ja, vielleicht
ein hypothetisches Quadrat um den
Spieler herum, denn wir werden eine Einheit bekommen,
eigentlich nur einen
zufälligen Einheitsvektor eigentlich nur einen Nein, verstehe, das gibt uns einen zufälligen Einheitsvektor
mit einer Länge von eins Wir können das
anhand dieses Standorts als unsere
Richtung betrachten . Wenn ich diese beiden hinzufüge, wenn ich das auch hinzufüge, wenn
das das Zentrum ist, erhalte
ich einen Punkt um ihn herum, eine zufällige Richtung um ihn herum. Wenn ich
das nun mit einer Ganzzahl multipliziere, kann ich einen Punkt von hier
mit einer Richtung von dort bis zu
einer Entfernung der
Ganzzahl, die
ich multipliziere, erhalten mit einer Richtung von dort bis zu einer Entfernung der
Ganzzahl, die
ich multipliziere , ich verwende hier und range, ich werde
ein Minimum von 10.000 bis
15.000 wählen . Das gibt
uns im Grunde einen Punkt aus jeder Richtung um unseren
Spieler in diesem Bereich. Wir werden das auf
den Zielort setzen. Nachdem wir den
Zielort festgelegt
haben, setzen wir
Moving auf true. Im Moment sind wir bereit umzuziehen. Jetzt
sollte diese Funktion bei Spielbeginn aufgerufen werden. Ich werde
das mit Begin Play verbinden. Wenn der Feind anfängt,
wenn er Pons hat, bekommt
er eine Position und
das ermöglicht es ihm, sich zu bewegen. Wenn er sein
Ziel erreicht, hört er auf, sich zu bewegen. Und Schüsse. Jetzt können wir das tatsächlich beweisen,
indem wir hier eine Verzögerung einbauen. Machen wir eine Verzögerung von
zwei Sekunden. Dann
wählen wir Standort verschieben. Das wird tatsächlich wieder laufen, weil ich auch hier eine
Verzögerung einbauen werde. Ich mache daraus
einen Fünf-Sekunden-Film. Denn beim Spielen
läuft das sofort, da wir es auf der Karte
haben, aber der
Spieler wird nicht auf der Karte sein. Das wird ausgelöst, ist nicht gültig. Lass uns spielen. Es
sollte anfangen, sich zu bewegen. Ja ist es. Ich bewege mich nicht. Es bewegt sich, aber es
schaut mich nicht an. Schau mich an. Ich
habe selbst ein bisschen experimentiert und herausgefunden,
was das Problem ist Das Problem ist, dass sich dieses Netz auch in unsere
falsche Wenn wir es um 90
Grad ausrichten, wo ist dann der Pfeil? 90 Grad. Die andere
Richtung, in die ich den Pfeil gedreht habe, wäre
das -90. Ich denke,
das wird unser Problem lösen Jep. Und unser Problem ist behoben Es steht uns immer gegenüber. Es ging um den Dreh- und Angelpunkt
des statischen Netzes.
Es war kein großes Problem. Jetzt bewegt es sich von alleine. Wir hätten nicht viele
Bezugspunkte , wenn wir 23 davon hätten. Lass mich noch
etwas mehr
Spiel mitbringen noch
etwas mehr . Schau, das wird jetzt ein
bisschen gruselig. Sie bewegen sich alle. Sie bekommen
zufällige Punkte in der Nähe, unten, oben,
sie sind überall. Wenn wir mehr bekommen,
werden sie überall sein. Ich denke, das ist es für diesen. Ich sehe
dich beim nächsten Mal. Auf Wiedersehen.
26. Feindliche Schießmechanik: Hallo und
willkommen zurück bei Unreal Engine Five, schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der vorherigen Version
haben wir mit
unserem Feind, unserem schießenden Feind, abgeschlossen unserem Feind, unserem schießenden Feind, Tatsächlich haben wir die
Bewegung des schießenden Feindes abgeschlossen. In diesem Fall werden wir mit der
Schießmechanik
weitermachen Gehen wir in den Bauplan und gehen wir zu unseren Dreharbeiten.
Ich werde das löschen Eigentlich werde ich das behalten, ich werde
es trennen , weil wir diese Knoten benutzen werden
. Ich werde die Verzögerung vom Beginn
des Spiels löschen und mit dem Schießen
weitermachen. Was wir hier nun erstellen werden
, ist im Grunde eine benutzerdefinierte
Schleife mit einer Verzögerung. Sie läuft in bestimmten Intervallen. Was wir
verwenden werden, ist eine Filiale. Wir werden
eine Methode zur Erstellung einer erstellen. Wir werden
zwei Variablen erstellen, beide
werden Integer sein, nicht 64. Ich spiele einfach ganze Zahlen.
Ich nenne es
Shots,
Shots Shots Ich werde kompilieren und sechs Aufnahmen machen. Vielleicht sind sechs zu viel,
vielleicht drei. Ich werde fragen, sind
Schüsse und Schüsse gleich? Wenn sie gleich sind,
setzen Sie die aktuellen Schüsse auf Null und wählen Sie einen
neuen Bewegungspunkt. Wenn sie nun nicht gleich sind, sollten
wir die Anzahl
der aktuellen Schüsse erhöhen. Ich werde das hier kopieren und
einfügen. Das könnte jetzt gemacht werden, indem man aktuelle Aufnahmen um einen Pluspunkt
setzt, aber es kann auch gemacht werden, indem man
den Wert erhöht Nun, ich hatte vorher einige Probleme
damit. Ich weiß nicht, warum ich mich nicht immer so
hätte vorbereiten sollen ich mich nicht immer so
hätte vorbereiten Was machen wir jetzt, wenn
wir den Schuss erhöhen? Zuallererst sollten wir fragen,
ob der Spieler noch am Leben ist. Holen wir uns den
Layer-Controller so, wie er gültig ist. Ich wollte Controller bekommen, weil ein Spieler immer einen Controller
hat, der
gültig ist, auch wenn der
Controller nicht gültig ist. Wenn der Bauer nicht gültig ist, wenn der Spieler einen Bauern nicht
kontrolliert, wäre
der Controller Ich werde das hier
verbinden und dann gehen
wir zu unserem Schießen Dafür brauchen wir einen neuen Schauspieler. Wir brauchen die Kugel des Feindes. Ich gehe zum
Blueprint-Kurs, wähle einen neuen Schauspieler und nenne diesen PP-Gegner Aber jetzt könnten wir
die Spielerkugel
als Elternteil verwenden die Spielerkugel
als und
einige Dinge beibehalten und einige Dinge ändern Aber ich bevorzuge ein
anderes für den Feind, weil wir es vielleicht
später auf ganz
andere Dinge aufrüsten wollen . Ich werde das öffnen, ich
werde ein statisches Netz hinzufügen. Ich werde
Projektilbewegungen hinzufügen. Nun zur Projektilbewegung, habe ich das dem Spieler angetan Wir müssen die Schwerkraft ausschalten. Ich öffne die
Projektilbewegung des Spielers in der kugelgrauen
Projektskala sollte mit unserer Geschwindigkeit Null sein Das hat keinen wirklichen
Einfluss darauf, aber sie sollte Null sein Ich werde kompilieren und speichern. Gehen wir zur feindlichen Kugel
und schalten wir auch die Schwerkraft aus. Auf Null setzen und kompilieren und speichern. Jetzt sollte unser statisches Netz standardmäßig wanddynamisch sein. Was wir tun werden, ist,
benutzerdefinierte Einstellungen vorzunehmen und eine
statische Wand und eine Überlappung auszuwählen. Alles kompilieren und speichern. Das sollte reichen, wir
müssen nichts weiter tun. Gehen wir eigentlich nochmal zu unserem
Player Bullet. Lass uns diese Veranstaltung hier drüben kopieren. Kugel auf Spawngeschwindigkeit und Projektilbewegung
und Geschossgeschwindigkeit Gehen wir zu Bullet
und fügen es hier ein. Jetzt sehen Sie, dass es nicht die Geschwindigkeit
hat, die es durch
Projektilbewegungen erreichen
kann Wie Sie sehen können,
existiert es, aber die
Geschossgeschwindigkeit existiert
in diesem Bauplan nicht Das Event wurde gerade mit Copy-Paste
erstellt. Um das zu erstellen, schreiben
wir Click und erstellen eine
brauchbare Bullet-Speed-Methode. Es erstellt eine Variable für uns ,
es hat aber
keinen Standardwert. Ich kompiliere, es ist Null. Setzen wir es auf 8.000
Kompilieren und speichern. Wie viel kosten unsere Spieler? 8.000 Ja, es ist dieselbe Geschwindigkeit. Jetzt haben wir die Veranstaltung
, die eine Richtung braucht. Und wir multiplizieren es mit der
Kugelgeschwindigkeit und
das gibt der
Projektbewegung die Geschwindigkeit. Nun, das nächste Verhalten, das wir brauchen, können
wir tatsächlich beim Elternteil
des feindlichen, feindlichen Elternteils finden . Hier
kollidieren wir und übertragen Schaden
, der dem Spieler zugefügt wurde Ich kopiere das
alles und
gehe zu Enemy Bullet
und füge es hier Jetzt fragt es nach dem Tod , weil
wir auf dem feindlichen Elternteil die Todesfunktion haben. Jetzt sagen wir, tu nichts. Wie Sie sehen können,
kann es uns zeigen, dass diese Funktion nicht existiert
, weil es uns egal ist. Wir werden das löschen
und wir werden jetzt einfach den Schauspieler für Kollisionsschaden verwenden wir werden nur
einen in den Basisschaden aufnehmen. Und das war's. Wir haben eine Komponente, die anfängt,
sich mit dem feindlichen Körper zu überschneiden. Wir haben kein statisches
Netz, das als feindlicher Körper bezeichnet wird. Ich wähle unser
statisches Netz für die Komponente aus,
beginne mit der Überlappung und
wähle dieses Ereignis aus. Ich werde alles
hierher übertragen und das hier löschen. Wir werden es ansprechen. Ich denke, das ist erledigt, wenn
die Kugel auf einen Spieler zielt. Es wird Schaden anrichten
und sich selbst zerstören. Ein weiteres Problem mit
diesen Kugeln ist, dass ich, wenn wir in die Welt gehen und anfangen zu schießen, den
Ton etwas leiser stellen soll Wenn wir anfangen zu drehen, kannst
du die
Schauspieler hier drüben sehen Dass sie ständig
zunehmen. Wenn das lange so weitergeht, werden wir ein Problem haben. Alles wird anfangen, Frame-Lag
zu bekommen, weil diese Schauspieler tatsächlich für immer und ewig
weitermachen, als ob sie nicht mehr aufzuhalten sind. Was wir tun werden, ist, ihnen ein Leben lang aufzuerlegen. Ein einfacher Weg wäre
eine Verzögerung des Spielbeginns. Sagen wir eine Verzögerung von 15
Sekunden und zerstören den Schauspieler. Wir wissen, dass die Kugeln 15 Sekunden verschwinden und dann zerstört
werden Es gibt eine andere Möglichkeit, genau das Gleiche zu
tun. Wenn wir zu den Cluster-Standardeinstellungen wechseln
und nach Leben suchen, haben
wir eine anfängliche Lebensdauer Wie im Tooltip steht, lebt der Schauspieler
so lange, bevor er stirbt Null ist für immer. Stellen wir das auf 2
Sekunden ein, vielleicht auf fünf. Machen wir dasselbe mit
der Spielerkugel. Lass uns zu Polls Life gehen
und das auf fünf setzen. Kompilieren und speichern.
Jetzt sind unsere Kugeln 5 Sekunden lang einsatzbereit und sie
werden sich selbst zerstören In einem Spiel, das eher fertig gebaut ist, würdest
du
ein Ziehsystem erstellen dem du
die Kugeln zu Beginn
des
Levels spawnen lässt und dann eine bestimmte Menge an
Kugeln
verwendest. Anstatt die Schauspieler
zu
zerstören,
versteckst du sie und bringst sie
an einen Ort in der Leere eine bestimmte Menge an
Kugeln
verwendest . Anstatt die Schauspieler
zu
zerstören,
versteckst du sie und zurück bringst sie
an einen Ort Lassen Sie uns mit
unserer Veranstaltung fortfahren, nachdem wir unsere Kugel fertiggestellt haben Wir haben unser
Geschwindigkeitsereignis und wir haben den Schadensanteil und es bleibt
eine bestimmte Zeit übrig. Jetzt brauchen wir
eine Sequenz, weil
wir von drei Punkten aus schießen werden. Es könnte eine Möglichkeit geben, das mit einem Array zu
machen, aber wir haben einige bestimmte Regeln für Punkt eins und
Nummer zwei. Das würde es
etwas komplexer machen. Vielleicht ist es für manche Leute
einfacher zu debuggen. Ich bevorzuge es, wenn die Dinge
etwas visueller erweitert werden, aber weil alles
gleichzeitig komprimiert werden muss aber weil alles
gleichzeitig komprimiert werden muss
, sodass wir kein endloses
Diagramm haben Wir werden
eine Funktion erstellen und
diese Shot Bullet
für diese Funktion aufrufen . Wir werden Schauspieler hervorbringen, einige Schauspieler in die
Welt
bringen, aus der wir hervorgehen Außerdem
wähle ich die gegnerische Kugel aus, hier ist sie für die Ich werde das teilen. Ich werde mir hier
ein Schild besorgen,
einen Maulkorb bekommen und den Standort
der Welt herausfinden Und verbinde das
hier mit dem Ziel. Ich werde es als
Eingangspin für die Funktion verwenden. Ich werde die Schnauze löschen. Jetzt haben wir das gleiche Event
mit Bullet Bullet. Also Kugel auf, wir
brauchen eine Richtung. Jetzt haben wir kein Ziel. Wir haben kein Ziel. Es ist jetzt einfacher, die Richtung
zu bestimmen , weil das einzige Ziel, das
wir haben, der Spieler ist. Ich benutze den Punkt,
schaue mir die Rotation an, wir kennen
den Standort des Spielers. Aber weil wir
nicht nur direkt auf den Spieler schießen wollen , sondern um den Spieler herum. Ich werde das auch als Input mitbringen
. Ich werde diesem Ziel einen Namen geben. Eigentlich werde
ich das erste und dieses
eine Ziel benennen . Jetzt werde ich dieses Ziel
auswählen. Verbinde das zunächst mit dem
Ziel. Es wird das
Wort Position der Szenenkomponente sein. Wir werden die Mündungskomponente
anbringen. Nun, von der genauen
Betrachtung der Rotation aus, werde
ich
direkt dorthin übergehen. Und ich werde das mit der
Richtung verbinden, für die das eine Funktion
wäre. Gehen wir
jetzt zurück zur Grafik. Der erste ist einfach. Ich nehme
das gezogene Hühnchen mit, sagen wir mal den Maulkorb Welcher ist der mittlere? Ja, das hat sich
ein bisschen bewegt , weil
ich den Schauspieler gewechselt habe. Lassen Sie uns sie noch einmal einrichten, beweist,
dass dies dem Körper
hätte beigebracht werden sollen dem Körper
hätte beigebracht werden Und auf
diese Weise nicht frei zu sein, steht im Plan. Du kannst sie im Körper
erziehen, wenn du willst. Wenn du
mit ihren Plätzen zufrieden bist. Ich werde sie
so lassen, das ist in Ordnung. Die mittlere ist die Schnauze eins. Ich werde von der ersten
Mündung aus eine Verbindung herstellen, das Ziel wäre. Lass uns nach dem Standort des
Schauspielers spielen und das hier
verbinden Dadurch kommt eine Kugel aus der Mitte auf uns zu. Lass uns den zweiten
erstellen Ich werde das kopieren und einfügen. Das Einzige, was wir ändern
sollten
, ist , dass wir davon ausgehen sollten, es heißt Random Point. Bei Bounding Box erstellen wir
eine Box um den Spieler herum, sagen
wir, wir bekommen einen Punkt
um den Spieler Im Grunde machen wir eine Box mit 500.500.500. Ich denke, das wäre genug Ich werde
das mit Target verbinden. Ich werde
Schnauze eins gegen Maulkorb zwei austauschen. Ich werde das kopieren und einfügen. Eigentlich brauche ich das nicht. Wenn ich es hier verbinde, wird es zweimal ausgeführt und
es gibt einen Wert. Jedes Mal, wenn dies angefordert wird, gibt
es einen anderen Wert. Wenn wir wollten, dass dies beiden
den gleichen Wert gibt, hätten
wir
zu einer Variablen heraufsteigen und diese Variable für
diese beiden Ziele verwenden sollen. Denn wenn wir das verbinden, ergibt das immer
einen anderen Betrag. Jetzt sollte die zweite Mündung von
der unteren entfernt werden. Und Mündung drei sollte von Mündung zwei
hinzugefügt werden .
Ab Mündung drei Jetzt werde ich die Reihenfolge überprüfen und eine weitere
machen Und ich werde einen Delay-Node
anrufen. Die Verzögerung sollte 0,2 betragen, klingt in Ordnung. Und ich werde es tun, also nochmal, das wird alles
gleichzeitig laufen. In 0,2 Sekunden
wird die Aufnahme erneut ausgeführt Wenn die aktuelle Aufnahme nicht die maximale ist, wird
sie
zur aktuellen Aufnahme hinzugefügt. Erneut schießen, bis
Schüsse erreicht sind. Wenn die Anzahl der Einstellungen erreicht
ist, setzt es die aktuellen Einstellungen auf Null, wählt einen
Filmpunktsatz aus, der zum
Häkchen bewegt wird, und kümmert sich um den Rest. Ich kompiliere und
speichere und lass uns testen. Ich habe die Verzögerung von
Anfang an entfernt, sodass wir nicht testen können. Gehen wir zum Feind. Setzen wir hier eine Verzögerung ein, 30 Sekunden, 123 setzen sich in Bewegung. Sie werden alle
gleichzeitig schießen, wissen sie es
nicht ungefähr zur
gleichen Zeit, weil sie sich an verschiedenen Orten bewegen oder sie werden
gar nicht schießen. Das ist auch eine Option. Sie entfernen sich wirklich
weiter von mir. Lassen Sie uns überprüfen, warum
das passiert. Ich gehe zu den Bauplänen
des Feindes. Ich werde einen von ihnen auswählen. Spielt keine Rolle. Es
erreicht sein Ziel. Es erreicht sein
Ziel nicht. Es heißt, es wurde geschossen. Ich denke, der Grund
ist sehr einfach. Wenn wir zu unserer Kugel übergehen, haben
wir hier kein
statisches Mesh ausgewählt. Ich habe keine statische Kennzahl ausgewählt
. Wir werden ein statisches
Maß für unser Geschoss wählen. Wir werden zu
statischen Netzen und Formen übergehen, und wir werden diese
Kugelform hier verwenden Das ist ein
bisschen groß für eine Kugel. Wir machen es ein bisschen kleiner. Ich werde es etwas
leiser machen. Nehmen wir an, die Größe sollte mindestens halb so groß
sein, vielleicht
sogar kleiner,
aber lassen Sie uns die Hälfte daraus machen und sehen, wie es
uns erreicht. Für das Material. Wir sollten das Material ändern. Aber es ist das Material hier, es ist ein Material. Ich muss mich nur auffrischen. Gehen wir zu Materialien
und wählen das aus. Mein Feind, der Kugeln glüht. Jetzt sollten wir einige Kugeln sehen können
. Ich glaube 123 Jeder
Feind bewegt sich. Sollten sie ihre Position noch nicht
erreicht haben. Sie gehen das
etwas langsam durch. Sie sind so weit weg. Wir haben geschossen, wir
werden sterben. Ja. Vielleicht können wir die Entfernung
etwas verringern, weil das ein bisschen weit weg
ist. Ich glaube, wenn ich
näher an sie herankomme, mich
richtig ausbreite, nachdem
sie geschossen haben, hat mich dieser getroffen. Ich glaube, selbst wenn wir auf Null kommen, haben
wir kein
Programm gegen den Tod. Es ist nicht wirklich
wichtig, ob ich angeschossen werde. Ja, es geht unter Null, also wird es nicht einmal aktualisiert. Wahrscheinlich bin ich schon gestorben. Ja, sie sind ein bisschen weit
weg. Lass uns das reparieren. Gehen wir zum Feind , wo wir hier
Bewegung auswählen. Lasst uns die 1.000 bis
1.500 senken. Vielleicht ist das niedrig. Lass uns 2000 draus machen. Lass uns nochmal nachschauen. Das ist ein bisschen zu nah. Du wirst keine Zeit haben
, dem zu entkommen. Erhöhen wir es auf 5.000 8.000 8.500. Ich denke,
das wäre genug Ich denke, das ist es für diesen. Ich sehe dich
im nächsten. Auf Wiedersehen.
27. Feindliche Spawning-Mechanik: Hallo und willkommen zu einem
Engine Five-Blueprint. Schrittweise
Entwicklung eines Space-Shooter-Spiels auf dem vorherigen Und es war lang.
Ich werde nicht lügen. Wir haben unseren Feind erschossen. Lassen Sie uns diese Feinde jetzt tatsächlich
löschen. Und ich habe die Himmelskugel gelöscht. Lasst uns diese Feinde löschen. Irgendwelche anderen? Fangen wir mit unserem
Spawnsystem an. Lass uns zu unserem Raumschiff gehen. Gehen wir zum Event-Graph. Gehen wir in ein neues Gebiet. Eigentlich brauchen wir Timer, weil wir es auf einer Zeitschaltuhr
haben Lassen Sie uns ein Timer-Event erstellen. Stellen Sie den Timer nach Ereignis ein. Nun, dieser Timer wird nicht so aussehen wie dieser. Dieser Timer, wir
werden ihn intern aufrufen, er läuft von selbst. Warum werden wir das
tun? Weil wir eine zufällige Zeit
wollen. Ich werde einen
zufälligen Sperrbereich erstellen. Ich wähle 2 Sekunden
und sagen wir 6 Sekunden. Zwischen 2 Sekunden und 6 Sekunden löst sich dieser Timer von selbst aus. Jetzt erstelle ich
ein benutzerdefiniertes Ereignis und
nenne es Span. Oder von hier aus werde
ich wieder eine Sequenz machen. Jetzt müssen wir diesen Timer
anrufen. Also werde ich
ein weiteres Kundenevent erstellen und das als Spawn-Methode bezeichnen Ich werde das hier verbinden, eigentlich
sollte dieser Timer nicht mit
den Timern verbunden werden , weil dieser
nicht aktiviert werden muss Wir müssen ihn nur einmal anrufen. Ich werde
es hier separat haben. Es muss nicht laufen,
denn wenn es damit läuft, wird es sofort anfangen zu
spawnen Vielleicht möchten wir eine Verzögerung
zwischen dem Zeitpunkt, zu dem wir
spawnen wollen, und dem Start des
Spiels Wahrscheinlich werden wir eine Verzögerung hinlegen. Dafür werde ich einen weiteren Zweig
hinzufügen. Auf geht's zum Verzögern. Nehmen wir an,
die Verzögerung beträgt 3 Sekunden. Der Spieler wird damit vertraut gemacht, werden 4 Sekunden mit der Steuerung zur Verfügung
gestellt Dann gehen wir
zu Spa Spawn Wave. Dadurch wird dieser
interne Timer gestartet. Das Erste, was
wir wieder speichern werden. Wenn der Timer einen Feind spawnen lässt, startet
er sich von selbst zurück, um in 2-6 Sekunden
einen weiteren Feind zu spawnen in 2-6 Sekunden
einen weiteren Feind Jetzt werden wir einige Zähler
erstellen. Auch hier werde ich
einen Zweig erstellen und zwei Variablen
hinzufügen Nennen wir die erste, wir gehen
tatsächlich in die erste Ebene
, und das ist wahrscheinlicher , dass sie vom Typ Integer 1
sein wird, das wird auch
eine Ganzzahl sein. Ich werde das damit vergleichen
, ob sie gleich Wenn sie gleich sind,
tu nichts. Wenn sie jedoch nicht gleich sind, wir
Schauspieler aus dem Unterricht hervorbringen Wir werden unseren
Boom-Feind für die Transformation auswählen. Ich werde das aufteilen. Ich werde den Standort des Schauspielers ermitteln und einen zufälligen Einheitsvektor ermitteln. Multipliziere das mit einer Reichweite , aus der ich unsere Feinde
hervorbringen will Das wäre,
sagen wir, vielleicht zu viel. 25.000 25.000 klingt nach Schwein. Und ich werde diese beiden hinzufügen. Ich werde das auf Spawn-Transformation einstellen. Was wir
hier wieder gemacht haben, ist unseren Standort zu ermitteln, zufällige Richtung
von unserem Standort aus
mit diesem Plus Jahr Und multiplizieren Sie
tatsächlich plus Jahr, was völlig falsch ist. Wir wollten mit
einer ganzen Zahl multiplizieren und das verbinden Hier multiplizieren wir die Reichweite aus einer Richtung und basierend auf
diesem Ort auf der Welt spawnen
wir einen Feind Was ist nun der neue Teil hier? Der neue Teil hier ist
, dass wir uns an den Tod
binden werden, an den Zerstörten. Wenn dieser Schauspieler zerstört
wird, gibt es wieder ein
Ereignis, das für uns verbindlich ist, aber es
betrifft generell Schauspieler. Es ist nicht so, dass wir eine Funktion
haben bei der
der Schauspieler zerstört wird. Wir gehen zu einer benutzerdefinierten Veranstaltung. Wir werden das sagen,
es ist Todesstufe eins. Jetzt auf Todesstufe eins binden, setze unseren aktuellen
Feind auf minus eins. Wir können etwas Platz schaffen,
wenn das Maximum eins ist, T minus eins, wir können wieder Gegner
spawnen Das nächste, was wir
tun sollten, ist,
nach der Bindung das
Gegenteil davon zu tun verbinde das
hier minus und ich
mache plus eins. Wenn wir an den Tod gebunden sind, dann
, wenn er bindet,
reduziert das einen, die Zählung Danach erhöhen wir
die Zahl um eins. Wenn wir jetzt
ein bisschen knifflig sein wollen, könnten
wir eine sofortige
Spawn-Welle hinzufügen, wenn ein Feind stirbt Wenn wir das hier hinzufügen, löst
das sofort den
Saw Wave-Spawn-Timer
aus, also wenn ein Feind stirbt,
wird er sich selbst neu erschaffen werden wir nicht tun
, weil das Spiel diese Weise
etwas schwieriger sein
könnte Wir werden das
etwas weiter nach oben verschieben. Wir werden
diesen Code genauso kopieren und einfügen. Wir werden das hier
verbinden. Anstatt die
Feindströmung auf Stufe eins zu erhöhen, werden
wir
diese variable Feindströmung der
Stufe zwei fördern . Wir werden diese Variable
auch auf Stufe 2
für die maximale Stufe „Gegner“ heraufstufen. Wir werden diese beiden
löschen und einfach
mit der rechten Maustaste auf die
Variable Gegner der Stufe eins durch Gegner der Stufe zwei ersetzen Variable Gegner der Stufe eins durch Gegner (
aktuell und maximal). Ersetze es
auch durch maximal Stufe zwei. Das bleibt gleich,
die Klasse wird auf einen Shooter
umgestellt. Wir müssen diese
Death-Level-2-Bindung neu gestalten. Wir werden diese
Variablen auch durch aktuelle Variablen der zweiten Ebene
, die aktuelle Stufe
und auch durch die beiden Variablen ersetzen , auf die auf der falschen
Seite geklickt wurde Das vervollständigt unser
Spawnsystem. Lass es uns jetzt testen.
Lass uns Play drücken. Fangen Sie in 3 Sekunden an. Wir sollten Schauspieler
hier spawnen sehen, was sie nicht sind. Lass uns nachschauen warum. Eine Welle. Es ist sehr einfach, weil wir keine Standardwerte festgelegt
haben. Lasst uns die maximale Anzahl an Feinden auf zehn
und auf Stufe zwei die maximale Anzahl an
Feinden auch auf zehn setzen . Kompilieren und speichern. Fangen Sie erneut an. Feinde spawnen.
Ich kann nicht sehen wo, aber ich kann den Cors sehen Oh da ist es. Ich denke
, das ist ja, das ist ein Feind. Wir haben es zerstört. Das ist
ein weiterer Feind. Jede Menge HP. Vielleicht bewegte es sich und ich
konnte es nicht so gut treffen. Eigentlich so, wie wir dem Shooter-Feind
HP gegeben haben. Gehen wir zum Shooter-Feind und überprüfen, ob BPC Damageable Wir haben acht, das ist
ein Standardwert. Es hat Gesundheit.
Ja, es funktioniert. Wir haben ein System. Mal sehen, ob es die richtige Anzahl an Schauspielern einsetzt. Wir haben 15. Es sollte auf 35 steigen, ohne dass die
Feinde schießen. Wenn sie anfangen zu schießen, werden
sie mehr gehen. Aber es gibt immer
eine andere Möglichkeit, es zu testen, da wir keine Feinde
vernichten. Wir könnten drücken, um auszuwerfen. Wir könnten zu der Liste
hier gehen und zehn Schauspieler sagen. Wir könnten zehn Schauspieler sagen. Hier drüben ist ein Schauspieler. Es hat Wurzeln. Ja. Die Schauspieler sind
etwas kleiner und uns fehlen jede Menge Kugeln Machen wir die Schauspieler
ein bisschen größer. Ich gehe zum Spawn-System
und wähle
die Skala 333 Gleiche gilt für den anderen, vielleicht ist der Spawn
etwas zu weit weg Ich mache das vielleicht
15.000. Es ist ein bisschen mehr. Aktion drei Sekunden Regel. Sie sind größer, wir können sie leicht
erschießen, oder? Das ist tatsächlich das
Erkennen unserer Kugeln, was kein großes Problem ist,
um einen Fehler wie diesen zu lösen, wir werden nur einen
machen, der hier gültig ist Ich denke, das wird das Problem
beheben. Ist der Schauspieler gültig? Weil der Fehler, den wir
beschreiben, beschrieben wurde, er entweder ausstehende Tötung
oder Müll war. Also wurde es zerstört.
Aber aus irgendeinem Grund war eine Veranstaltung erforderlich. Es forderte ein Ereignis,
ein Kollisionsereignis, das Töten von
Feinden, das Töten von Feinden. Mal sehen, keine Fehler. Ich denke, das ist in Ordnung. Ich denke, das ist es für diesen. Ich sehe
dich beim nächsten Mal. Auf Wiedersehen.
28. Score und feindlichen Tod implementieren: Hallo und willkommen bei Unreal
Engine Five Blueprint, der
schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der vorherigen
Lektion haben wir
ein Spawnsystem erstellt und wir schießen auf Spieler.
Keine Spieler Auf uns NPCs
schießen sie zurück. Das heißt, es gibt keinen anderen Sinn. Lass uns einen Punkt erstellen. Was wir
schaffen werden, ist ein Punktesystem. Gehen wir jetzt zum Player. Da wir Zugriff haben,
wenn ein Feind stirbt, sollten
wir eine
Funktion zum Hinzufügen von Punkten erstellen. Ich drücke
Plus für die Funktionen
und wir werden
eine Funktion dazu bringen, Punkte hinzuzufügen. Dafür
benötigen wir eine neue Variable. Lassen Sie uns eine neue Variable erstellen
und sie Punkte nennen. Wir werden
diese Punkte hier festlegen. Wir werden
die aktuellen Punkte hinzufügen, was eigentlich
Punkte zu einer Variablen sind. Diese Variable muss von außen
kommen, weil jeder Feind seine eigenen Punkte hat. Nennen wir diese
variablen Punkte auch tatsächlich als eingehende Punkte. Wir brauchen eine Möglichkeit, unserem Spieler
diese Punkte zu demonstrieren. Wir werden zu unserem Widget gehen. Wir werden unsere
Textvariable auf der Leinwand hinzufügen. Lassen Sie uns ihre Position in der
oberen rechten Ecke festlegen. Lassen Sie uns die Position x setzen. Lassen Sie uns sie
etwas größer machen. Lassen Sie uns sie
hier eigentlich auf 120 setzen. Hört sich gut an. 50, 50 könnten gut
für Position x sein. Verschieben
wir es dorthin,
das sieht gut aus. Minus 150 auf Y 50 für Text. Lassen Sie uns auf Null setzen. Vorerst werden wir die
Rechtfertigung in der Mitte vorbringen. Mal sehen, wie es aussieht. Was ist, wenn es dreistellig ist
123? Ja, es sieht gut aus. Es sieht okay aus. Lassen Sie uns nun diese Variable
setzen und diesen Text
Unterstrichpunkte
nennen Gehen wir zu unserem Graphen und erstellen Variablen eine neue Funktion
und nennen sie Sollwerte In dieser Funktion werden
wir
unsere Textvariable abrufen und Text festlegen. Verbinde das hier
und das im Text, wir werden das hier
verbinden. Das aktualisiert unsere Punkte, unsere Gesundheit als unser Ziel
und all diese Dinge. Gehen wir jetzt zu unserem
Play-Blueprint, holen wir uns unser Widgit-Gameplay
und die Set-Punkte Wir werden das von
hier nach hier verbinden. Jeder Punkt, den wir bekommen,
aktualisiert unseren Punktestand. Nun, wie kommen wir an
die eingehenden Punkte? Lass uns zum Mist gehen. Wir haben einen Hinweis auf
den zerstörten Schauspieler, aber wir wissen nicht, welcher
Schauspieler das ist Was machen wir, wenn wir nicht wissen
, wer genau dieser Schauspieler ist? Wir sagten, wir haben einige Möglichkeiten, Botschaften
zu vermitteln, die nicht handlungsspezifisch
sind Was wir verwenden werden,
ist eine Blueprint-Schnittstelle. Wir werden die verwenden
, die wir gerade haben. Wir werden hier reingehen
und eine neue Funktion erstellen. Und wir werden diese
Funktion Request Hot nennen. Wir geben eine
Ausgabe aus und machen daraus eine Ganzzahl und
nennen diese Punkte. Jetzt
kompilieren und speichern wir
und gehen dann zu unserem Elternteil,
Feind, Feind, Elternteil. Wir gehen zu den Benutzeroberflächen, Sie sehen, hier befinden sich die
Anforderungspunkte, die wir gerade erstellt haben, aber sie haben eine andere
Farbe als diese. Das liegt daran, dass es sich um eine
Funktion mit einer Ausgabe handelt. Wenn ich es doppelt ausführe, bekommen
wir diese Funktion. Ich werde
hier Punkte verbinden und das ist erledigt.
Kompilieren und speichern. Gehe zurück zum Spieler, Raumschiff, binde Todespunkte und sammle Punkte Ich habe nur vergessen, wie wir es benannt haben. Was sind die BI-Request-Points? Ich bitte um die Punkte. Wie viele Punkte
erhalte ich dadurch? Danach rufe ich unsere
Werbepunkte-Funktion auf. Ich werde
diese Punkte hier verbinden. Wie Sie sehen können, gibt es einen Unterschied. Das Ziel hier hat den Schauspieler
zerstört. Weil wir vom zerstörten Schauspieler Punkte
anfordern , genauso wie
das Ziel uns selbst
Punkte hat. Ich werde kompilieren und speichern. Lass uns das in der Arbeit sehen. Lasst uns einen Feind finden. Ich
hätte die Null löschen sollen, die zusätzlichen Nullen, weil sie
momentan nichts aussagen Da sollte eins stehen. Wir haben es nicht für den
zweiten Feind getan. Das ist der Grund. Lass uns das hier kopieren und einfügen. Diese Verbindung hat versehentlich geklickt. Verbinde das hier, weiter
unten, kompiliere, speichere, spiele. Bevor wir
spielen, löschen wir eigentlich auch die zusätzlichen Nullen auf dem Widget Wenn du 10 hast,
wird es eins, wenn du es um
00:01 Uhr schaffst . Es gäbe einige Regeln für das
Anhängen zusätzlicher Nullen Fügen Sie die Manipulation eines String-Variablenknotens
hinzu. Ich töte Feinde, ich
werde Punkte erzielen. Der Punktestand funktioniert gut. Wir haben eine Punktzahl. Jetzt
können wir uns zum Beispiel
selbst sagen, wie viele Feinde wir getötet
haben. Wir können auf unser Spawnsystem gehen und sagen, dass, wenn unser Punkt, lasst uns Punkte holen
mehr als acht ist, hier
abzweigen und das hier verbinden Wenn das nur dann zutrifft, spawnen Sie das Level
nur dann sofort
zum Feind Basierend auf unseren Punkten
haben wir eine interessantere
Spawnmechanik. Was wäre, wenn wir
dasselbe für unsere Waffen tun würden? Wir haben dasselbe für Upgrades getan. Ich denke, wir sollten beim nächsten
hier aufhören. Wir sollten ein
System für neue Waffen schaffen. Auf Wiedersehen.
29. Einführung des Raketensystems: Hallo und willkommen zurück bei
Unreal Engine Five. Schrittweise Entwicklung des Space
Shooter-Spiels. In der vorherigen Lektion
haben wir
unser Punktesystem fertiggestellt und über die Schaffung
eines Upgradesystems
gesprochen. Aber bevor wir
zum Upgrade-System übergehen, sollten
wir eigentlich unsere letzte
Waffe, die Rakete, entwickeln. Das wird eine etwas
fortgeschrittene Waffe sein , weil es
eine zielsuchende Rakete sein wird .
Lass mich das löschen Lass uns ein bisschen
über die Zielsuchrakete sprechen. Sie wird aus einem statischen Netz, das unsere Rakete
repräsentiert und einem Partikel, das den
Rauch der Rakete repräsentiert Außerdem
werden wir jetzt eine Kollision haben. Lassen wir es
um die Rakete kreisen. Wenn die Rakete explodiert, würde
jeder Feind, der sich innerhalb
des Kreises befindet, sterben Wir werden einen zweiten Kreis haben. Vielleicht ist das eine, das ist keine gute
Darstellung einer Zeichnung, oder? Aber wie dem auch sei, es wird reichen. Wir werden einen zweiten Kreis haben, sogar
einen viel größeren
, über den wir
der Rakete mitteilen werden, ob sich ein Feind innerhalb dieses Kreises
befindet. Wenn ihr nicht gestritten habt, dann geht, das ist euer Ziel. Machen Sie das eigentlich zu einem Ziel. Das ist sowieso Ziel. Wenn die Rakete
kein Ziel hat, weil sie zielsuchend
ist, hätte ich vielleicht damit anfangen sollen Wenn der Spieler schießt, trifft die Rakete
ein Ziel , sofern wir es im Visier
haben. Wenn wir
nichts auf dem Zielfernrohr haben, wird
es auch kein Ziel haben. Wenn es reist, erkennt
der zweite Kreis , ob
sich ein Ziel in der Nähe
befindet. Im Grunde wäre es das. Lass es uns machen. Wir
werden uns an die Baupläne machen Wir werden schreiben,
klicken Sie auf Create a blue in class type actor nennen Sie es BP-Rakete und öffnen Sie es Lass uns anfangen zu bauen.
Ich drücke auf Hinzufügen. Ich werde hinzufügen, auf statisches Mesh drücken . Ich werde Tilt benutzen. Ich werde das Shape Pipe verwenden. Ich denke, der Vorwärts ist das X. Fügen
wir einen Pfeil hinzu. Ja, das vorwärts X. Ich
werde das rotieren. Es hat keinen Kegel, aber spielt keine Lieferung
der Nutzlast Ich werde auch die Position des Pfeils entfernen und seine
Rotation auf der Straße neu Ich werde
Niagara-Partikel-Komponenten
für dieses System hinzufügen Niagara-Partikel-Komponenten
für dieses Wir werden die Raketenspur benutzen
. Ich werde es wieder hierher verlegen. Ich denke, es ist zentriert,
es sieht gut aus. Jetzt haben wir unsere Raketenbilder. Das nächste, was ich
hinzufügen werde, ist eine Kugelkomponente. Sphären-Komponente.
Sphärenkollision. Das habe ich nicht in der Farbe
gesagt. Wir werden
diese Kollision im
Vorfeld durchführen, um zu überprüfen, ob wir
etwas erhitzt haben Vorfeld durchführen, um zu überprüfen, ob wir
etwas erhitzt wollen, damit die
Kollisionsüberlappung des Netzes entsteht. Wir werden von
der Kugel vorne kommen. Das ist eine weitere Methode, um
Kollisionswärme zu bekommen. Ohne das Netz zu verwenden, übernehme
ich die
Kugel aus der Aga Ich muss auf Standard klicken,
bevor ich etwas hinzufügen kann. Denn wenn ich auf etwas anderes
geklickt habe, wird es wie in der Hierarchie hinzugefügt Dadurch wird die angeklickte Datei zum
übergeordneten Element. Ich werde auf Standard klicken. Und ich werde
diese Kugel tatsächlich kopieren, einfügen, etwas hinzufügen. Ich werde ihre Position zurücksetzen, vielleicht ein bisschen höher. Das ist in Ordnung. Ich werde sogar skalieren.
Ich werde es nicht skalieren. Ich werde
den Radius auf
5.000 ausdehnen . Das wird die Kugel sein , die
unser Zielsuchsystem erkennt Und ich werde dieser Kollision einen
Namen geben. Ich werde
die erste Kugel kopieren und einfügen, wieder Null, die
X-Aufrufe in der Mitte. Und ich werde ihren Radius auf
3.000
ändern . Vielleicht ist das
ein bisschen groß. Es ist in Ordnung, es ist zu groß bis 2000. Als ob das die Sphäre sein wird , die alle
Feinde in der Umgebung tötet. Vielleicht ist es wieder ein
bisschen zu groß, aber es ist eine große Welt. Wir sollten überprüfen, ob
die Kollisionen zwischen den Sphären
die
dynamische Dynamik der Welt überlagern Lassen Sie uns das benutzerdefiniert machen, lassen Sie uns die Wand statisch machen
und alles überlappen Und machen Sie dasselbe hier auch für die benutzerdefinierte Wand statisch, alles
überlappen. Keine physikalische
Kollisionskompilierung. Das Gleiche. Gehen wir zu
einer weiteren Komponente über. Wir werden eine
Projektilbewegung hinzufügen, weil wir wollen sich die Rakete bewegt
, oder weil wir die Schwerkraft ausschalten Es tut mir leid, nicht aus dem statischen
Netz, sondern aus der Zusammensetzung der
Projektilkomponenten Speichern. Gehen wir zum geraden Diagramm. Beginnen wir mit der Erstellung
einer Funktion, mit der wir
alle Feinde töten , die sich in der befinden. Nennen wir diese Kugel
den Schadensbereich. Ich werde diese
Funktion Damage Area nennen. Nein, eigentlich viel anwenden. Ich werde mir viel Fläche besorgen. Ich werde dafür sorgen, dass
sich alle Schauspieler überschneiden. Nun, dieser Knoten hier drüben erfasst
alle Akteure, die sich
innerhalb dieser Sphäre befinden Wir können es nach einer Klasse filtern, aber Klassen sind uns egal. Wir wollen alles
, was drin ist, hier. Aus dieser Liste
gehen wir an Bord, suchen nach jedem Loop und
verbinden ihn hier. Dies wird als
Actor-Objektreferenz zurückgegeben. Und wir werden fragen, ob dieser
Schauspieler ein Tag hat, das war. Gehen wir zu Parent Enemy. Finde das heraus, hier ist ein
Elternfeind. Hier ist es. Standardmäßig war das Tag Feind
mit Großbuchstaben E. Denken Sie
daran, dass hier Groß- und Kleinschreibung beachtet wird Gehen wir zurück zu unserer
Rakete und tippen das ein. Hier werden wir uns verzweigen, wir werden eine Frage stellen. Wenn der Schauspieler einen Feind hat, werden
wir viel davon
anwenden. Vielleicht hätte ich diese Funktion nicht
sagen sollen, Schaden
angerichtet.
Wenden Sie AOE-Schaden an. Lassen Sie uns das Element verbinden
, um Schaden anzurichten. Wenn der Schauspieler also einen Tag-Feind hat, fügen
wir diesem Akteur
Schaden zu. Nachdem wir
Schaden angerichtet haben, sollten wir zerstören. Aber lassen Sie uns tatsächlich eine visuelle
Explosion machen. Hier. Lass uns am Standort einen
Meter spawnen Macht eine Rakete, die nicht
explodiert, nicht Spaß? Ich werde
Explosion für die Waage verwenden. Lassen Sie uns 2010 auf 20 setzen, ich
denke, das wird in Ordnung sein. Ort. Wir werden den Standort ermitteln. Gehen wir jetzt
zurück zum geraden Diagramm. Als Nächstes sollten
wir zu unserer
Projektilbewegung übergehen Bei der Projektilbewegung
gibt es einige Optionen. Bei den Optionen, die wir wollen, geht
es darum,
ob das
Projektil zielsuchend ist oder nicht. Das wollen wir zur Laufzeit einstellen. Es hat einige zusätzliche Eigenschaften wie Zielsuche,
Beschleunigung und Magnitude Aber wie der Tooltip schon sagt, ist
dies durch die Höchstgeschwindigkeit begrenzt, die hier eingestellt ist. Nun, Geschwindigkeit und Geschwindigkeit
sind verschiedene Dinge. Sie werden beide verwendet, um
Kinematik zu beschreiben. Geschwindigkeit bezieht sich jedoch auf eine Änderung der Entfernung eines Objekts in
Bezug auf die Zeit, wohingegen sich Geschwindigkeit
auf eine Änderung der Verschiebung eines Objekts
in
Bezug auf die Zeit bezieht Verschiebung eines Objekts
in
Bezug Wie dem auch sei, Einzelheiten, ich denke, das ist es für
dieses und wir werden diese
Gleichnisse auf das nächste und dafür sorgen, dass dieses
System funktioniert, okay? Auf Wiedersehen.
30. Flugkörper-Mechanik Homing: Hallo und willkommen bei der schrittweisen Entwicklung von
Weltraum-Shooter-Spielen
von Unreal
Engine Five Blueprint Weltraum-Shooter-Spielen
von In der letzten Phase haben wir
den Aufbau unserer Rakete abgeschlossen den Aufbau unserer Wir haben einige Kollisionen zur Zielsucherkennung und zur Beschädigung von
Gebieten Wir haben die
Projektilbewegung hinzugefügt. Wir haben auch eine
Funktion entwickelt, die
alles beschädigt , was sich
innerhalb des Schadensbereichs Lassen Sie uns nun die Details
unseres Projektils festlegen. Wir wählen die
Projektilbewegung aus. Wir werden 20.000 für die
Anfangsgeschwindigkeit und
auch für die Höchstgeschwindigkeit verwenden Anfangsgeschwindigkeit und
auch für die Höchstgeschwindigkeit Nun, darunter gibt es
diese Zielsucherkategorie. Sie hat die Fähigkeit, ein Häkchen zu machen. Dieses Edelmetall, von dem
behauptet wird, dass es sich bewegt oder nicht darunter, ist die Zielflugbeschleunigung. Das bedeutet,
sagen wir zum Beispiel, wie schnell wir uns beklagend dem Ziel zuwenden das
wir haben, einem Zielsuchlauf Damit die Zielsuche funktioniert, müssen
wir auch ein Ziel haben,
das wir mit Hilfe
der Projektilbewegung
festlegen der Projektilbewegung Bevor wir uns nun das Ziel setzen, geben
wir hier auch 20.000 für die
Beschleunigungsstärke an Aber ab jetzt nehmen wir das nicht mehr hin. Von Anfang an werden wir
eine Funktion entwickeln, die
dies ermöglicht. Wählen wir diese beiden aus, erstellen
wir eine Funktion, nennen wir dieses Set Homing. Geben wir diese Funktion jetzt ein.
Bevor wir die Zielsuche einstellen, sollten
wir die Geschwindigkeit auf Null setzen, unabhängig von der Geschwindigkeit, die das
Projektil Es beginnt mit der Zielsuche. Da wir unsere
Magnitude auf 2000 haben, wird
es sofort versuchen,
unser Ziel zu erreichen und
die Höchstgeschwindigkeit Das nächste, was
wir tun sollten
, ist das Zielsuchprojekt Hier nehmen wir das Goldbarren
, das wir auf den Einstellungen
hier in der Kategorie Zielsuchende
gefunden haben , als Zielsuchprojektil So aktivieren wir es,
weil wir es standardmäßig ausschalten wollen Der Grund, warum wir
standardmäßig ausgeschaltet wollen, ist dass, wenn wir kein Ziel haben, die Rakete
einfach fliegen sollte bis etwas mit
dem Detektor kollidiert und
dann ein Ziel erreicht Lass uns das ein
bisschen hübscher machen. Verbinde es wie hier und ich werde es
hier platzieren . Ja, es ist in Ordnung. Zielkomponente ausfindig machen. Das ist interessant
, denn wenn wir mit der Maus darüber fahren, werden
wir sehen, dass dafür
eine Komponente erforderlich ist, ein schwaches Objekt Es gibt eine Menge Definitionen darüber,
was ein schwaches
Objekt und so
weiter bedeutet. Aber lassen Sie uns bei der Komponente bleiben, sie erfordert eine Komponente. Was wir an unserem Spieler haben,
wenn wir auf etwas zielen, ist eine Referenz auf einen Schauspieler. Wir haben diesen Zielakteur,
wir haben keine Komponente. Aber lassen Sie uns diese
Akteurs-Referenz erstellen,
ohne sie hier
auf der Rakete Blueprint zum Erstellen
einer neuen Variablen. Wir werden es Target nennen. Ich werde den
Typ Schauspieler aus Schauspieler auswählen. Es wird jetzt unsere
Referenz sein, ist leer, aber wir
werden es bald füllen Aber es spielt keine Rolle,
ob es leer ist oder nicht. Wie bei den verbindlichen Ereignissen
gibt es bestimmte
Dinge, die wir mit
Akteuren tun können ,
die für alle Akteure gelten. Eines der Dinge ist
Komponente für Klasse. Wir können hier die
Klasse angeben, die Komponente betrachtet werden
soll. Jetzt können wir uns hier verbinden. Wie Sie sehen können,
tickt es korrekt. Aber wenn ich damit versuche, will
es das nicht, weil es heißt Actor-Objektreferenz nicht mit Sin-Komponenten
kompatibel ist . Jetzt wissen wir, dass unsere Akteure eine
syn-Komponente haben,
weil unser Elternteil, also unser Feind, ja, Elternteil,
diese
Standardwurzel als Root-Komponente hat, da viele Blueprints
Standardwurzeln als Komponenten haben Jetzt können wir das jederzeit überschreiben, aber in den meisten Fällen wird
es wieder eine Root-Komponente haben Jetzt können wir sehen, dass dieser
Rückgabewert, wie er sagt, Component
Array
durchsucht und die
zuerst gefundene Komponente
der spezifischen Klasse zurückgibt . Normalerweise
ist die erste Komponente immer eine Komponente, die Wurzel ist eine Komponente. Lass uns kompilieren und speichern. Das wäre
unser Zielflugziel. Bevor wir gehen,
müssen wir erklären, dass es
ein gewisses Problem mit Zielsuchzielen gibt ein gewisses Problem mit , die die Zielsuchzielkomponente
verwenden. Wenn unsere Rakete ausreichend schnell ist und sagen wir, das
ist unser Ziel, besteht immer die Möglichkeit, dass, sagen
wir, die Rakete
sich so bewegt und
das Ziel
erreichen will Dass sie so schnell fliegt, dass
sie das Ziel nicht erreicht. Und versucht zurückzukehren und es zu erreichen, erreicht das
Ziel
nicht und bewegt fast um das Ziel herum, ohne das Ziel wirklich
zu treffen Um dies zu vermeiden, werden
wir, wenn wir etwas anvisieren, ein
separates System einrichten,
das die Rakete direkt
zum Ziel fliegen lässt das die Rakete direkt
zum Ziel Wenn es ein Ziel erkennt, wird es dafür dieses
Zielsuchsystem verwenden Wir gehen zum Event-Graph. Wir werden das Ereignis ankreuzen und eine Verzweigung erstellen, die Bedingung negativ
machen, sie zu einer Variablen heraufstufen
und sie als Sturm bezeichnen. Nun, wir werden eine
Bewegung mit
festgelegtem Standort für den Standort ausführen. Wir werden konstant mit einer Geschwindigkeit von meiner Meinung nach in diesem Fall
50.000 fahren , weil sie auf
Delta basiert, wäre besser. Das Ziel wäre unsere
Zielvariable, für die wir den Standort ermitteln
werden. Unser aktueller Standort wird unser Standort zum
Abrufen des Schauspielers sein. Der Standort des Schauspielers wird
kompiliert und gespeichert. Nur für den Fall, dass
unser Ziel tot ist, werden
wir überprüfen,
ob das gültig ist, ob der Akteur gültig ist. Denn wenn der Schauspieler nicht gültig
ist,
bedeutet das, dass
er wahrscheinlich zerstört wurde. Wenn es nicht gültig ist, werden
wir es tun Sobald wir die benutzerdefinierte Zielsuche
ausschalten, werden
wir die Kollision mit dem Zielsuchmelder
einschalten, weil wir
sie ausschalten werden, wenn wir ein Ziel haben So wie wir es ausschalten werden
, wird es keine
Überschneidungsereignisse erzeugen Wobei es jetzt eigentlich so ist, wenn wir kein Ziel haben, nach einem Ziel suchen. Lassen Sie uns im Grunde diesen Teil
erstellen Wenn etwas
in die Kugel eindringt, legen
wir das Ziel fest,
dass es dieses Ziel erreicht , sobald die Kollision
der
Zielsuchdetektor-Kollision beginnt der
Zielsuchdetektor-Kollision Wir werden eine Frage stellen Hat der Schauspieler
das Schlagwort Feind Ein Feind wurde
mit dem Großbuchstaben E Feind buchstabiert. Wenn ja, sollten wir das überprüfen. Eigentlich können wir einmal die Frage stellen ob sie schon unterwegs ist. Wenn es ein benutzerdefiniertes Ziel wir das Ziel
von Anfang an hatten, sollten
wir kein neues Ziel finden,
da wir, um ehrlich zu sein, zum
benutzerdefinierten Ziel gehen Wir sollten
ein benutzerdefiniertes Ereignis, eine
Kollision, erstellen und dieses Ereignis hier
aufrufen Wenn wir also ein Ziel haben, wird es erneut ausgeführt weil wir hier ein benutzerdefiniertes Ereignis
erstellen, Suche
zurücksetzen oder Ziel zurücksetzen. Wenn wir ein neues Ziel finden, nennen
wir Reset Search oder Target. Wenn dieses Ziel, das wir
hier gefunden haben, ebenfalls zerstört wird, wird die Suche zurückgesetzt. Das nächste, was wir jetzt tun sollten ist
unser Zielflugziel festzulegen Wir werden unser
Ziel auf diesen Schauspieler setzen. Lassen Sie uns einige rote Knoten so
verbinden
und es sieht besser aus. Und nachdem wir uns das Ziel gesetzt
haben, sollten wir die Zielsuche festlegen, oder? Lass uns eine Sekunde
reingehen und AOE-Schaden anrichten. Hier gibt es ein festgelegtes Zuhause. Aus irgendeinem Grund
werde ich das löschen. Dieser letzte Teil hier, bei dem wir das Partikel
explodieren lassen
und zerstören Wir könnten ihn wieder brauchen. Machen wir eine Funktion daraus , dass es
zusammenbrechen wird. Rufen Sie diese Funktion auf.
Jetzt hat unsere Rakete ein Ziel, das wir von außen
setzen können. Oder sie kann ein Ziel erreichen
, das sie erreicht, wenn sie reist. Und es hat eine
Kollisionserkennung. Das Ziel gerät in eine Kollision mit
Zielsucherkennung. Ich denke, das ist hier ein guter
Haltepunkt. Im nächsten
werden wir vervollständigen, was passiert, wenn wir das Ziel tatsächlich
erreichen. Und wir werden
die Informationen an die Rakete senden ,
die von unserem Spieler
abgefeuert wird, damit sie nach einem Ziel suchen
oder entscheiden kann , dass sie
bereits ein Ziel hat. Auf Wiedersehen.
31. Missile- und Spielerintegration abschließen: Hallo und willkommen bei
Engine Five Blueprints. Schrittweise Entwicklung eines
Weltraum-Shooter-Spiels. In der vorherigen Lektion haben wir unsere
Zielsuchmechanik fertiggestellt Wenn wir von Anfang an ein Ziel haben ,
das wir
für den Fall, dass das Ziel stirbt,
zurücksetzen, setzen
wir
die Zielsucherkennung zurück Und wenn die Zielsucherkennung mit etwas
kollidiert , legen wir das als Ziel fest. Und wir aktivieren die Zielsuchmechanik, die der innewohnt. Lassen Sie uns nun die Mechanik erstellen. Wir sind die Rakete
des Spielers. Ich werde das löschen. Ich werde ein
benutzerdefiniertes Ereignis erstellen und es nennen,
ich glaube, das ist die Schreibweise. Ich kann das überprüfen. Das ist es jedenfalls. Raketenabschussrakete. Wir werden hier
zwei Eingaben benötigen. Die erste
wäre unsere Geschwindigkeit in
Richtung des Ziels, nur für den Fall, dass
wir kein Ziel haben. Das zweite wäre Target. Ich werde diesem Ziel einen Namen geben. Es wird vom Typ sein, die
Referenz zum Referenzobjekt. Jetzt werden wir tatsächlich für
diese O-Variable werben . Ich werde
es Zielgeschwindigkeit nennen. Und ich werde dafür werben. Eigentlich
muss ich das nicht bewerben, wir haben bereits ein Ziel. Ich werde das hier
einstellen. Jetzt werde ich noch einmal
fragen, ob das gültig ist. Als Nächstes sollten
wir der Rakete sagen
,
wenn du mit
etwas kollidierst, dann explodierst Wir werden die Sphäre benutzen,
die wir nicht benannt haben. Ich nenne das
Explosionserkennung. Ich weiß nicht, Raketen. Es ist so etwas wie Impact Us, so
etwas wie
dieses, es heißt. Wie dem auch sei, wir werden
Explosionserkennung,
Kollisionsbeginn, Überlappung verwenden Explosionserkennung,
Kollisionsbeginn, Überlappung Wir werden fragen, ob der
andere Schauspieler das Schlagwort Feind hat. Wenn der Schauspieler den
anderen Tag-Feind hat, werden wir das einmal tun,
ohne diesen zurückzusetzen Wir
rufen unsere Funktion auf, AOE-Schaden zu, das
wird Lassen Sie uns jetzt kompilieren und speichern. Ich denke, wir sind
mit diesem Entwurf fertig. Lass uns jetzt zu unserem Spielerschiff gehen. Denn mit einem Diagramm gehen
wir zu den Eingaben. Denn um
die Rakete abzufeuern, brauchen wir einen neuen Input oder einen Input. Wir werden die Maus benutzen, rechte Taste, rechte Maustaste,
rechte Maustaste. Wir werden
etwas mehr Platz brauchen. Wir werden den Kommentar erhöhen. Ich werde es hier runterbringen. Wenn wir drücken, benutzen
wir einen Zweig, um eine Frage zu stellen. Wir werden die Bedingung
ausschalten und
sie zu einer Variablen heraufstufen. Wir werden diese
Variable als Rakete bezeichnen. Wenn wir nun eine Rakete haben, sollten
wir zuerst sagen, dass wir keine Rakete mehr haben,
weil wir sie abschießen. Dann verschieben wir
den Kurs, der unsere Rakete ist,
weil wir
sie auf die Welt bringen,
wir reagieren
und zu Recht betrügen, die Verwandlung, und teilen
sie für
den Ort auf, an dem
wir die erste Mündung
benutzen werden, diesen
Weltstandort Mündung
benutzen werden, diesen
Weltstandort Ich werde es hier
für den Kurs anschließen, unsere Rakete. Nachdem wir die Rakete gestartet haben, sollten
wir
sie als Lunch-Rakete starten Für Geschwindigkeit und Zieldarsteller verwenden
wir aus unseren Schießvariablen
den Zieldarsteller Für Geschwindigkeit haben wir eine Funktion namens
Richtungsberechnung. Wir werden diese
Funktion für das Ziel verwenden. Wir werden
die Schnauze benutzen. Das ist die Funktion
, die
unsere Geschwindigkeit auf der Grundlage
der Mündung ausgleicht , auf die wir
schießen, und nicht auf
der Grundlage der Kamera nach dem
Start Sondieren Sie tatsächlich oder vorher
und platzieren Sie unsere Rakete. Sound, den
wir meiner Meinung nach finden können. Klingt. Nein, nein, diesen, der
keine Warteschlange hat, wir werden ihn genauso einfach benutzen. Jetzt, nachdem wir Sound
gespielt haben, können wir
ein Delay machen und diese Variable heraufstufen. Machen Sie es sich zum
Testen zunutze. Und bewerben Sie variable
und sagen wir Raketen-CD. Danach
setzen wir diese Rakete auf True. Nochmals, jetzt können wir unsere Rakete
testen. Jetzt ist das ein bisschen größer. Machen Sie den Kommentar bis
hierher und es ist in Ordnung. Ja, kompiliere. Lass uns spielen gehen Sie schießen eine Rakete ab. Das ist eine Kugel. Ich habe die Rakete nicht auf True
gesetzt. Stellen wir die Rakete auf
„True“. Wir haben eine Rakete. Wir werden das über
unser Level-Up-System
einstellen . In der nächsten Lektion schieße ich wahrscheinlich eine Rakete ab. Es geht völlig in die
falsche Richtung, okay? Wir haben einen Feind in der Nähe, aber die Abkühlung funktioniert
tatsächlich wie. Und die Rakete, ich glaube, ich habe etwas falsch
gesehen, alles okay. Sie geht zu den Feinden. Die Rotation ist ein
bisschen komisch. Wenn ich ein Schloss habe, geht
es direkt und richtet keinen
Schaden an. Wahrscheinlich. Ich habe keine Schadenszahl angegeben. Ja, lass uns das überprüfen. Lass uns zur Rakete gehen. Schauen wir uns die Zielgeschwindigkeit an. Hier füge ich hinzu, lass uns multiplizieren, das sollte eine
Multiplikationszahl sein Sagen wir 20 K.
Deshalb
ging es in eine ungerade
Richtung, weil wir
die Zielgeschwindigkeit erhöhten Also ging es
von unserem Schaden aus immer in
eine bestimmte Richtung. Wir haben das entsprechende AOE. Ja, es ist Null. Machen wir daraus zehn.
Kompilieren und speichern. Ich denke, wir sollten es reparieren. Ja, aber nicht die Rotation
. Bewegung des Projektils Wir haben eine Variable namens
Rotation folgt Geschwindigkeit. Wir werden
das benutzen. Wir werden diese Variable
verwenden
und erneut spielen. Jep. Scheint die
richtige Geschwindigkeit zu haben Ich sehe, der Feind ist zum Feind gegangen. Wenn ich den Feind nicht ins Visier nehme. Ja, es geht an den Feind. Großartig. Lassen Sie uns direkt
einen ins Visier nehmen. Es gibt keine Feinde mehr, also da ist es, direkt. Macht das, Louis findet das
toll. Okay, ich denke, das
ist es für diesen. Ich sehe dich als Nächstes. Auf Wiedersehen.
32. Missile-UI und Upgrade-System: Hallo und willkommen zurück bei
Unreal Engine Five Blueprints, der
schrittweisen Entwicklung von
Weltraum-Shooter-Spielen In der vorherigen Lektion
waren wir mit unserer Rakete fertig. Aber von der Rakete ist noch eine Sache
übrig. Wir sollten dem
Spieler anzeigen, wann er
eine Rakete hat und wann
nicht. Gehen wir zu unserem Widget-Gameplay. Und wir werden ein Bild hinzufügen. Wir werden
dieses Bild hierher bringen. Wir werden es gut verankern. Lassen Sie uns zunächst unser Bild
auswählen. Nennen wir dieses
Bild Raketen-CD. Für den Pinsel haben wir in
unseren Texturen ein Raketensymbol. Wir werden das hier verwenden. Wir werden den Alphawert auf 0,5 setzen. Machen wir das Bild
ein bisschen größer,
ich glaube, das ist eine schöne Größe. Schauen wir uns an, wie es aussieht. Abspielen. Ja, wir können es sehen. Gehen wir zurück zum Widget. Jetzt machen wir daraus
eine Variable und gehen zum Diagramm und
erstellen zwei Funktionen. Eine Funktion hat Rakete und die andere Funktion
wäre außerhalb der Raketenmeile. Jetzt bekommen wir unser
Bild, das wir gerade erstellt haben. Hätte ein Vorderzeichen
und ein Unterstrich für
die Sichtbarkeit hier verwenden und ein Unterstrich für
die Sichtbarkeit hier Wir sollten das auf versteckt stellen, weil wir nicht
mit den Raketen beginnen Es wäre ein
Upgrade, das passieren würde. Ich werde kompilieren und speichern. Ich gehe zurück zum Player
, zum Widget und innerhalb
der
Funktion außerhalb der Rakete,
ich hole mir die Raketen-CD. Und ich werde einstellen, ich werde
diese Struktur aufteilen. Ich werde eine
Farbe wählen, wenn wir unterwegs sind. Es wird eine rote Farbe sein. Das Alpha wird 0,5 sein Ich werde das kopieren und zu Has Missile gehen
und es
einfügen und die Farbe auf
Weiß ändern und 0,5
Alpha-Kompilierung speichern Und ich
gehe zurück zum Player. Ich gehe zu unserer
rechten Maustaste. Danach erhalte ich
unsere Widget-Referenz. Ich werde mit der Rakete starten. Wenn wir aus der Rakete schießen, kopiere
ich das Widget und gehe nach der Verzögerung zum Ende über. Und als Rakete
machen wir das Upgrade-System. Wir aktivieren unsere Rakete. Lassen Sie uns das standardmäßig ausschalten. Gehen wir zu unserem Punktesystem , weil unsere Punkte die XP
definieren. Es ist ein übliches System hier, dieses hat keine Blase. Gehen wir punktuell in unsere
Funktion ein. Nachdem wir Punkte hinzugefügt haben,
werden wir die Punkte verwenden. Ich werde
sie gleich hierher bringen. Eine Kopie wurde eingefügt. Ich werde
das eigentlich nicht von Punkten aus tun, sondern von der Ausführungslinie aus, die
ich einschalten werde Nun ist eine Zeichenfolge ein Zeichen, ist ein beliebiges Zeichen, numerisch oder nicht, oder kann ein Symbol wie ein
Fragezeichen oder eine Erklärung sein. Mark kann ein beliebiges Zeichen sein, aber für uns wird
es im Moment nur eine
Ganzzahl sein , wenn die Zeichenfolge eingeschaltet wird. Wir können hier einige Optionen angeben. Wir müssen sie nur benennen, wie wir wollen. Das erste, sagen wir, es wird auf Stufe fünf sein, ich glaube auf Stufe acht. Ja. Falls es über Stufe
acht ist. Wahrscheinlich Stufe neun. Wir spawnen den zweiten
Feind zurück in Punktezahl. Nehmen wir an, wir machen auf Level
11 etwas. Nehmen wir an, auf Stufe fünf aktivieren
wir Raketen. Also werden wir diese
Rakete wahr machen. Wir holen uns
das Widget und besorgen eine Raketen-CD und setzen die
Sichtbarkeit auf True. Deshalb haben wir es
standardmäßig sichtbar gemacht ,
bevor wir es einschalten Jetzt haben wir Level fünf hinter
uns, holen uns die Rakete und
sehen das Widget Außerdem sollten wir D
einen Sound abspielen. Den Sound, den wir auf Sounds finden können. Dieser klingt wie
ein Upgrade-Sound. Wir werden diesen jetzt benutzen. Ein Level von 11, wir sollten unser Waffenlevel
erhöhen. Ich werde die
Waffenstufe auf variabel einstellen. Wir haben es in der Kategorie Schießen, ich werde auch U plus eins machen. Ich werde es gleichzeitig
einstellen , eine Verbindung
zum Sound herstellen. Also lass uns das
testen, kompilieren und speichern. Lass uns spielen. Da sind unsere Feinde. Hier ist unser Feind. Ein Feind. Haben wir
keine Raketen. Ich werde auf eine
Rakete klicken. Es gibt keine. Zwei Gegner verloren. Der Feind ist am Boden.
Vier Gegner ausgefallen. Lass mich den
Ton für eine Sekunde leiser stellen. Fünf Gegner verloren. Und
wir haben die Rakete. Jetzt kann ich lange Raketen abfeuern. Kühlen Sie sich ab. Okay, acht Feinde. Jetzt, bei neun, sollte
es anfangen,
die Operationen zum Schießen von Feinden zu starten, wir haben Level 11, wir haben die neuen Kugeln Hier sind die neuen Feinde. Wir zerstören sie auch. Ich gebe ihnen keine
Chance zu schießen. Geben wir ihnen
die Chance zu schießen. diese Feinde schießen, fangen
sie jetzt an zu schießen. Das Spiel ist ein bisschen einfach. Es ist nicht viel
Design dran, aber ich schätze,
wenn man genug Zeit hat, kann
man wahrscheinlich in
jedem Spiel verlieren Ja, alles funktioniert. Oh, alles klar. Jetzt denke ich, das
wird für diesen sein. Ich sehe
dich beim nächsten Mal. Auf Wiedersehen.
33. Game Over UI und Animation: Hallo und willkommen bei Unreal
Engine Five Blueprints. Schrittweise Entwicklung eines
Weltraum-Shooter-Spiels. In der vorherigen Version haben wir
unser Upgrade-System punktuell
mit unserer Switch-On-Schnur erstellt . Lassen Sie uns das Spiel jetzt ein
bisschen interessanter
gestalten , indem wir sie zu X Feinden machen, auch ein bisschen
größer, größer. Wenn wir unsere Waffe aufrüsten, sollten
wir unsere
Feinde auf sagen wir 13, 15 aufrüsten. Lass uns das hier verbinden. Eigentlich können wir
auch unsere Laser-CD wechseln. Nicht bekommen, sondern von
0,2 auf 0,15 setzen sollten wir
ein bisschen schneller Warum ändert sich das?
Weil wir irgendwie verlieren können sollten. Weil ich denke, mit
dem vorherigen System konnten
wir nie verlieren, wenn
wir verlieren. Was passiert? Wir haben ein Spiel über den Bildschirm. Fangen wir mit unserem
Spiel über den Bildschirm an. Gehen wir zum Kontaktbrowser. Gehen wir zum UI-Ordner. Wir haben den
Ordner schon lange nicht mehr besucht. Klicken wir mit der rechten Maustaste und erstellen
wir ein neues Widget. Dies wird ein Benutzer-Widget
sein. Und nennen wir es G Game Over. Lass es uns eingeben. Dafür brauchen
wir jetzt eine Leinwand. Wir werden ein Bild brauchen. Lassen Sie uns dieses Bild auf den gesamten Bildschirm
ausdehnen. Verankern Sie den gesamten Bildschirm. Lassen Sie uns seine Farbe auf Schwarz umstellen. Es ist in Ordnung. Jetzt brauchen
wir einen Text. Lassen Sie uns diesen Text oben platzieren. Setzen wir seine Größe auf 500. Sieht gut aus. Setzen wir die Position auf minus 50 , weil wir sie vielleicht
etwas niedriger haben wollen. Lass uns den Text mir
schreiben und
sagen, dass das ein bisschen
klein ist, lass es uns größer machen. Sagen wir 100. Cool sieht okay aus, machen
wir es in die Mitte. Machen wir die Größe Y 100. Ja, es kann sich 100 anfühlen. Setzen wir die Y-Position ein. 200. Ja. Scheint ein netter Ort
für unser Game Over zu sein. Das Spiel ist vorbei. Alles klar, jetzt
brauchen wir eine vertikale Kiste. Eigentlich eine horizontale Kiste. Bringen wir es auf die Leinwand. Lass es uns auch in die Mitte stellen. Stellen wir die gleiche
Größe ein, wenn das Spiel über 500.100 liegt. Position minus
Position 250, sagen wir 380. In diesem vertikalen Feld werden
wir
zwei Textvariablen verwenden. Ich werde nicht kopieren und einfügen
, weil es hier viele Einstellungen gibt und wir weniger wollen. Ich werde das kopieren und einfügen. Ich werde eine
Partitur nennen und die andere
wäre eine neue Partitur. Und so, wie sie archivieren
würden, werde
ich das
Gefühl einstellen, dass der erste Punkt bei
eins liegt und der zweite
bei 0,5 fällt. Jetzt vier Gleichungen. Die zweite sollte
mittig horizontal ausgerichtet sein. Zentral, vertikal ausgerichtet. Und der zweite sollte sich horizontal und vertikal
ausgerichtet anfühlen. Lass uns jetzt hier tippen, ich punkte. Lassen Sie uns
die Begründung tatsächlich auf
die linke, auf die rechte Seite setzen . In diesem Fall werden
wir Double Zero eingeben. Wir werden eine
Begründung angeben. Es ist bereits auf der linken Seite. Lassen Sie uns tatsächlich
ein Leerzeichen dahinter setzen. Dieses Symbol hier drüben. Oh, ich habe es bewegt. Ich hätte es gern
etwas weiter links,
aber das ist zu viel. Könnte ein Leerzeichen hierher bringen. Setzen Sie es auch zwischen diese
beiden und lassen Sie es schälen und 0,1, vielleicht weniger 0,05, 100 Punkte Ja, ich finde, das sieht besser aus. Jetzt werde ich
eine weitere horizontale Box verwenden. Ich werde es auf die
Leinwand bringen. Wir werden es
etwas größer machen , weil es unsere
Buttons beherbergen wird. Ich werde 800 draus machen. Ich kann 100 kaufen. Y ist in Ordnung. Ich werde es in
der Mitte des Bildschirms verankern. Für X mache ich minus F hundert, vielleicht -100 150 Kommen wir zu den Knöpfen eine
für den Start und eine für die Schnelltaste. Lassen Sie uns etwas Text
in diese Muster einfügen. Nennen wir dieses Hauptmenü
in der anderen Taste. Nennen wir das beenden. Jetzt
sollten beide, Benutzertext standardmäßig sein,
aber die Schaltflächen, lassen wir einen Abstandshalter zwischen diesen beiden Schaltflächen damit es sich anfühlt, als ob es
schon besser aussieht Jetzt
sollte das horizontale Feld mit der höchsten Punktzahl eine Variable sein, weil
wir das verstecken wollen Nehmen wir an, ich werde die Punkteleiste Lassen Sie uns die
Sichtbarkeit ausblenden. Auch die Punktzahl sollte in der Lage sein. Lassen Sie uns das jetzt unterstreichen. Wir
benötigen eine Animation
, damit der Hintergrund verblasst Ich werde Animationen öffnen. Ich werde
eine Animation auswählen. Ich habe das Bild
draußen ausgewählt , weil
ich es animieren möchte Ich füge ein Animationspad hinzu. Ich wähle diese
Animation aus und füge einen Truck hinzu. Wenn ich jetzt einen LKW hinzufüge, erhalte
ich die Bildvariable weil ich sie ausgewählt habe. Das ist unser Animations-Truck. Dafür drücke ich Plus und
füge
eine Spur mit Render-Opazität Am Anfang sollte
es Null sein, sagen
wir, in 0,75 sollte
es eins sein Damit ist unsere Animation abgeschlossen. Ich klicke auf den
Truck Render Opacity und gehe zu
seinen Eigenschaften und stelle ein, dass,
wenn ich fertig bin, der Status beibehalten Wenn die Animation mit der Wiedergabe
fertig
ist, bleibt sie abgedunkelt und wird nicht wieder transparent. Lass uns mit dem Programmieren beginnen.
Lass uns bankrott gehen Wir werden nicht
das Vorkonstrukt brauchen, wir werden das Konstrukt brauchen Wenn wir konstruieren, werde
ich unsere Animation mitbringen. Es ist in der Kategorie Animationen. Ich werde Animation spielen. Jetzt füge ich
das in eine Sequenz ein, aber bevor wir
mit dem ersten Teil
der Sequenz fortfahren , weil der zweite Teil die Animation abspielen
wird. Wir behalten die Werte hier bei. Standardmäßig sind sie in Ordnung. Wir werden diese
Muster hier machen. Wir werden ein Menü
erstellen und es ist eine Variable, ich werde
das Muster auch beenden und es ist auch eine
Variable für beide. Wir werden das Ereignis
„Unpressed“ verwenden. Wir werden
den ersten mitbringen. Ich werde den
zweiten auch zum Beenden mitbringen, wir werden einfach das Spiel beenden. Für das Hauptmenü laden wir
einfach das Level neu. Wie wir das machen, verwenden wir einen Befehl namens „Level öffnen“ Da es sich um das gleiche Level handelt, das
wir vorher haben können, holen aktuellen Levelnamen
und verbinden
, um sicherzustellen, dass das Entfernen von
Präfixen aktiviert ist, unser Beenden und unser
Hauptmenü sind abgeschlossen Als Nächstes geht es darum,
wie wir den Punktestand machen. Woher
wissen wir von einem hohen Punktestand , für den ein
Speichersystem erforderlich ist? Das war's für diesen. Das nächste Mal sehe ich
dich. Auf Wiedersehen.
34. High Score System und Einsparungen: Hallo und willkommen bei der schrittweisen Entwicklung von Space
Shooter-Spielen
von Real
Engine Five Blueprint Entwicklung von Space
Shooter-Spielen
von In der letzten Version haben wir
das Game over Widget erstellt, das die Highscore-Texte und die von uns programmierten Buttons Und wir haben gesagt, dass
wir das sichere Spiel benötigen, um die
neue Highscore-Funktion nutzen zu können. Gehen wir zu Even Graph
und starten diesen Vorgang. Bevor wir zu Even Graph
gehen, müssen
wir eigentlich ein Speicherobjekt erstellen. Was ist ein sicheres Objekt? Ein Speicherobjekt ist ein Blueprint, ein spezieller Blueprint
,
der die Datei darstellt , die auf dem Computer
auf
der Festplatte gespeichert wird Computer
auf
der Festplatte Wenn wir schreiben, klicken und zur Blueprint-Klasse
gehen, suchen
wir nach demselben Objekt Eigentlich nur das Spiel speichern, wir können das Objekt speichern sehen Wir werden
dieses auswählen und ihm einen Namen
geben, sagen wir Game Object Hops,
SGO, Space Game Lassen Sie uns nun diesen Entwurf öffnen. Sie können hier wie in
Komponenten-Blueprints sehen, dass
wir keinen Viewport
oder so haben, weil das nur Daten für die
Daten speichert, die wir speichern möchten Wir werden hier eine neue Variable
erstellen und sie Punkte nennen. Es wird
vom Typ Integer sein,
das ist es, was wir speichern. Nur eine Ganzzahl mit
dem Namen Points. Lass uns zu unserem
J-Spiel übergehen Bevor die
Animation
läuft, sollten wir uns fragen, ob es dasselbe Spiel gibt? Hier sind nun ein
Slot-Name und ein Benutzerindex erforderlich. Der Benutzerindex für uns ist Null, weil wir nur einen Spieler
haben. Wir haben, wir haben nicht mehrere
Benutzer an diesem Computer. Für den Slot-Namen muss dieser überall gleich
sein, wo
wir den Slot-Namen verwenden. Ich werde dieses
G-One eigentlich SGO-Weltraumspiel
ohne Unterstrich nennen G-One eigentlich SGO-Weltraumspiel
ohne Unterstrich Am Ende das SGO-Weltraumspiel eins. Ich werde daraus einen variablen Slot-Namen machen. Scheint ein guter Name
für diese Variable zu sein. Jetzt erstelle ich zwei
Ereignisse, ein benutzerdefiniertes Ereignis, ich nenne es Spiel speichern, das andere nenne
ich zuerst
benutzerdefiniertes Ereignis und nenne es Los. Nun von, gibt es
einen Spielstand? Ich rufe eine Filiale an.
Wenn ein Spielstand existiert, werde
ich das Spiel laden. Wenn es nicht existiert, werde
ich das Spiel speichern. Lassen Sie uns nun diese beiden Ereignisse füllen. Fangen wir mit einem Ladespiel an. Da es einfacher sein wird, lade
ich das Spiel vom Spielautomaten. Ich werde unsere
Variable für den Slot-Namen verwenden. Dann werde ich für das
GO-Weltraumspiel casten. Ich möchte sehen, ob das
Spiel, das ich geladen habe, aus unserer Klasse
stammt. Wenn nicht,
tun wir nichts, weil wir keine andere Klasse
haben. Aber wenn es wahr ist,
werden wir das eine Variable
umwandeln, die es
für uns als GO Space Game benannt hat. Dadurch werde ich Punkte sammeln,
tatsächlich Punkte bekommen
und
zu einer Variablen hochstufen, in der wir die Punkte
gespeichert haben. Jetzt werde ich
vergleichen, ob diese Punkte kleiner
sind als
unsere Spielerpunkte. Jetzt werde ich dieses Mal casten,
um zu sehen, ob es unser P-Spieler-Raumschiff ist Ich werde für das
Spielerraumschiff casten. Wir können eine Verbindung herstellen oder einfach rechten Maustaste klicken und zu Pure Cast
konvertieren Von hier aus gehe ich zu Punkten. Ich werde das hier verbinden. Wenn die Safe-Game-Punkte jetzt niedriger
sind als unsere, dann werde ich eine
Filiale eröffnen und Safes Game nennen. Das wird es für
unsere Lot-Game-Funktion sein. Für unser sicheres Spiel werden
wir nun ein Spielobjekt erstellen. Denn selbst wenn es bereits ein sicheres
Spiel gibt, werden
wir
mit dem neuen arbeiten. Die Objektklasse
sollte unser sicheres Spiel sein. Jetzt werden
wir den Rückgabewert als
Variable heraufstufen,
aber da wir ihn haben, werden
wir nur die Variable
setzen, die wir hier bereits haben. Wir müssen nicht casten, weil
wir wissen, welche Klasse wir erstellen, und der Rückgabewert
von hier ist unser sicheres Spiel. Das Casting hat keinen Sinn. Als wir geladen haben, wissen
wir nicht , welche Klasse von sicheren
Spielen wir laden. Wir laden es gerade.
Deshalb casten wir. Jetzt werde ich Punkte sammeln. Eigentlich werde ich keine
Punkte bekommen. Ich werde
Punkte setzen , weil wir diese Punkte
speichern. Ich werde Punkte setzen. Ich werde
das aus dem
Raumschiff unseres Spielers kopieren und einfügen , dass wir
die Punkte vom Raumschiff des
Spielers bekommen die Punkte vom Raumschiff des
Spielers Ich werde daraus eine reine
Besetzung machen. Ich werde wieder Punkte miteinander
verbinden. Hier setzen wir
die Punkte unseres Spielers auf Nummer sicher. Ich werde die variablen
Punkte festlegen, die wir haben. Auch zu diesen Punkten. Um das Speichern des
Spielfortschritts abzuschließen, muss
ich das Spiel im Slot speichern. Der Slot, den wir verwenden werden, ist der Slot-Name, den wir in diesem
variablen Slot-Namen
gespeichert haben . Das wird jetzt unser sicheres Spiel
retten. Das ist Spiel im Spielautomaten löschen. Spiel im Slot speichern. Ein Spielautomat. Ja, es ist kein
Steckplatz, es sind zwei Steckplätze. Aber Englisch kann zu Fehlern führen. Es erfordert, wie Sie sehen, ein sicheres Spielobjekt oder
ein sicheres Spielobjekt. Wir werden unsere Variable bekommen,
ein sicheres Spiel, weil
wir sie beworben haben. Hier, das sichere Spiel
, das wir entwickeln. Und wir geben diese
Information an den Spieler weiter
, zeigen auf dasselbe Objekt und speichern es im Slot. Selbst wenn der Spielautomat bereits
über ein sicheres Spiel verfügt, wird
es jetzt überschrieben Als Nächstes sollten wir
unseren Highscore aktualisieren. Denn wenn
es einen Highscore gibt, sollten
wir ihn auf dem Bildschirm zeigen. Lassen Sie uns eine Funktion erstellen, nennen wir sie Highscore. werden wir die Punktzahl unserer
Textvariablen abrufen und festlegen Von hier aus werden wir die Punktzahl unserer
Textvariablen abrufen und
den Text
festlegen. Wir werden unsere Punkte im Text
verbinden unsere
Ganzzahl automatisch in einen Text umwandeln. Außerdem werden wir
die Highscore-Leiste bekommen, das vertikale Feld, lassen Sie mich die
Highscore-Leiste hier benennen und sie sichtbar machen. Der Standardteil hier ist
sichtbar, wir ändern ihn nicht. Und wir kehren zum Ereignisdiagramm zurück. Und nach dem sicheren Spiel werden
wir unsere
Funktion als neuen Highscore bezeichnen. Damit sind unser sicheres Spiel
und unser Highscore-System vervollständigt. Lass uns unser System testen. Lass uns kompilieren und speichern. Lass uns Play drücken. Lass uns
anfangen. Lasst uns einen Feind finden. Wir haben diese Verzögerung von 3 Sekunden. Ich muss den
Ton leiser stellen. Es ist zu hoch. Ich habe zwei Feinde getötet. Ich sollte eigentlich sterben. Im Moment werde ich auf Feinde losrennen, um Schaden
zu erleiden. Das ist das Problem.
Ich kann nicht sterben. Wir haben das
Todessystem in der Funktion Tod nicht gemacht. Von dem Spieler-Blueprint
, den wir erstellt hatten. Lass uns etwas geschehen lassen. Das Erste, was passieren sollte, ist, dass wir die Eingänge deaktivieren. Wir werden den
Player-Controller besorgen, wir werden
deaktivierte Eingänge aufrufen. Der Spieler kann nichts
drücken. Ich werde das mit dem
Player-Controller verbinden und die
Ziele sollten selbst sein. Als Nächstes sollten
wir das Schießen starten, nur für den Fall, dass
es tatsächlich läuft. Als Drittes sollten wir
den Schauspieler im Spiel verstecken. Warum setzen wir jetzt
das Spiel „Schauspieler versteckt“ ein? Weil wir den Schauspieler nicht zerstören
wollen. Weil wir
die Punktezahl
von diesem Schauspieler
im Spiel über Skin bekommen wollen . Anstatt den Schauspieler zu zerstören, werden
wir
ihn einfach verstecken. Lassen Sie uns jetzt eine Explosion
am Standort durchführen. Der Standort wird
unser Standort sein, an dem der Schauspieler ermittelt wird. Danach
sollten wir unser Widget starten. Erstelle ein Widget für die Klasse. Wir werden
unser Spiel dem Spieler vorziehen. Wir werden den
Player-Controller besorgen, wir werden den Port erweitern. Außerdem werden wir
eine Türkollision auf „Deaktiviert“
setzen eine Türkollision . Dieser Schauspieler hat keine
Kollision mehr. Wir kompilieren und speichern. Eigentlich könnten wir den Schauspieler hier
vernichten. Weil wir
das Widget erstellen und es bei der Erstellung zum Viewport
hinzufügen, erhält
es all diese benötigten
Informationen und es wird dieselbe Ladung ausgeführt Aber wenn du sichergehen willst
, dass das 100%
passiert, können wir auch zu unserem Spielerraumschiff
gehen
und dort für eine Ankunft werben Lösche den Setter hier. Ich verbinde
diese Variable
überall , wo wir das
Raumschiff brauchen In dieser Variablen werde
ich beim Spawn sichtbar gemacht und intensiv editierbar
als BP-Spielerraumschiff eingestellt Wenn wir das auf den Spieler
übertragen, wählen
wir das Klassenspiel für beendet Siehst du, wenn ich es spawne, fragt
es danach, dass diese
Variable gefüllt wird Weil ich hier
Expose on Spawn ausgewählt
habe, setze ich self, diese Klasse wird
hier referenziert und sie wird
die Informationen enthalten Lass uns tatsächlich
den Reaktor aufstellen und spielen gehen Lasst uns einen Feind töten. Also wird unser Highscore eins
sein und lasst uns sterben. Das sind zu viele. Wir
hätten den neuen Highscore senken können, zehn. Wir haben einen neuen Highscore. Wir machen keine Maus,
das muss repariert werden. Ich sehe, es gibt
eine Menge Fehler. Ich stelle auch die
Schauspielerrotation ein, wenn wir sterben. Wahrscheinlich können sie den Schauspieler nicht
finden. Die Rotation hat dieses Problem , das in der gemeinsamen
Funktionsbibliothek von liegt. Das ist der Grund, weil wir Controller
bekommen und ich
frage, ob das gültig ist. Wenn ich die
kontrollierte Spielfigur verbinde, würde das unseren
Fehler beheben Lass uns noch einmal spielen,
lass uns das Spiel starten. Bevor wir anfangen, legen
wir die maximale Lebensdauer
auf etwas Kleineres fest. Hier ist die Spielfigur, wir haben Leben, wir haben es auf dem Zerstörbaren. Ja, setzen wir Leben auf
eins, maximales Leben auf eins. Lass uns auf Play klicken. Starte
das Spiel mit Nullpunktzahl. Lass uns sehen, ob wir
sofort sterben. Der Punktestand geht auf eins. Wenn wir einen neuen Highscore haben, nein, keinen neuen Highscore. Jetzt werden wir ein bisschen
schummeln und Punkte auf 11 setzen Sie werden 12. Wenn ich am ersten Feind sterbe, ist
da noch der Feind. Vielleicht gab es hier von
Anfang an einen Feind. Es liegt daran, dass der Punktestand 11 war. Neuer Highscore, 11.
Unser System funktioniert. Es erinnert sich an den
vorherigen Punktestand und registriert einen neuen Highscore. Jetzt geben wir dem Spieler keine
Überlebenschance, auch wenn er einem ausweicht, wir können das Spiel nicht endlos machen Zu diesem Zweck werden wir ein
Regenerationssystem für den Spieler einrichten Und das werden wir
beim nächsten machen. Auf Wiedersehen.
35. Feinschliff und Fehlerkorrektur: Hallo und willkommen bei schrittweisen Entwicklung des Space
Shooter-Spiels
mit
Unreal Engine Five
Blueprint Space
Shooter-Spiels
mit In der letzten Lektion haben wir unser Spiel über den Bildschirm
beendet. Und ich, wir haben unser
Highscore-System fertiggestellt. In diesem werden wir dem Spieler eine Regenerierung
hinzufügen. Bei dieser Regeneration werden wir zwei einfache Regeln
haben. Sie Lebenspunkte, wenn
der Spieler
nicht schießt oder Regenerieren Sie Lebenspunkte, wenn
der Spieler
nicht schießt oder sich
nicht bewegt Wenn der Spieler
schießt oder sich bewegt, regeneriert er keine Lebenspunkte Wir kommen zu unseren Timern und wir
werden noch ein bisschen
weiter gehen und Timer für Event einstellen Jetzt werden wir
ein benutzerdefiniertes Ereignis erstellen und es nach Region
aufrufen Denken Sie daran, dass wir beim
ersten Play-Event
unsere Timer laufen lassen,
die Regeneration
beginnt in einer Schleife, weil es
von Anfang an ein Looping-Timer
sein wird , eine
Zeit, in der wir 0,1-mal pro Sekunde
haben “ einen Abzweig setzen Für die
Bedingung, dass wir
ein Goldbarren haben werden, werden
wir nach dem Ereignis „
Lebensregion “ einen Das heißt, wenn das eine
wahr ist oder das andere
wahr ist, gib uns Wahrheit Wenn es falsch ist,
werden wir schweben,
schweben für unsere BBC Damageable Wir werden Health anrufen. Wie lautete der Name Gesundheit? Für den Betrag
werden wir einen zahlen. Nun, das wäre
für die Region, aber wir brauchen die Bedingungen. Die erste Bedingung
wäre Geschwindigkeit. Wir überprüfen, ob sich
der Akteur bewegt, die Geschwindigkeit ist Null, dann sollten wir uns nicht
regenerieren Eigentlich
sollten wir uns regenerieren, wir werden hier
einen Knoten ziehen Wenn das Null ist, gibt
es Falsch zurück, weil
wir den Knoten gesetzt haben Wenn Null wahr ergibt, macht
Knoten es falsch,
es läuft Wenn wir jetzt feuern, haben wir, glaube
ich, eine Variable, für auch der Wert true,
Do not regenerate, zurückgegeben Damit wird
unser Regenerationssystem vervollständigt. Lassen Sie uns das loben und lassen Sie uns ein paar Seifenblasen und
weitere Kommentare hinzufügen Das ist Sternenlaichen
und das ist Start. Senken wir das auf zwei. Lasst uns Backstücke und
Töpfe hier hinstellen . Ich denke, das ist falsch. Die Rechtschreibung könnte
besser sein, vielleicht auch nicht. Lass uns unser System testen. Lass uns mit dem Spiel beginnen. Lass uns auf Neu beginnen klicken. Der Sound. Die Feinde sollten spawnen. Lass mich ein Vollbild machen. Ich habe mit dem Punktestand geschummelt, oder es wurde geschummelt Und ich habe nur ein Leben. Das ist nicht gut. Lasst
uns Feinde töten. Wir haben die Upgrades jetzt nicht weil wir mit
der maximalen Punktzahl angefangen haben. Okay, lassen Sie uns das reparieren.
Betrug und Behinderungen Waffenstufe Null,
gehe auf 0,0, Schaden anrichten Sagen wir Gesundheit. Lassen Sie uns kompilieren und speichern. Hatten wir irgendwelche
Fehlermeldungen? Hab ich nicht gesehen. Ich gehe zum
Windows Message Log. Nein. Das ist gut. Wenn eine
Fehlermeldung erscheinen sollte, ist
es wahrscheinlich der Zeitpunkt, an dem wir sterben, was wir als
kontrollierten Fehler bezeichnen können. Wie ein Fehler, von dem wir wissen
, woher er kommt. Es beeinflusst nicht
wirklich viel. Ja, manchmal können diese
Fehler passieren. Nicht, dass es gut wäre, sie zu verlassen, aber ja, sie haben
keinen Einfluss auf den Namen. Aber es ist immer besser, einen Code ohne Fehler zu
haben. Sie, wir töten
Dinge. Wir haben eine Rakete. Wir haben, lass uns etwas Schaden anrichten. Wir lesen etwas anderes.
Lasst uns etwas Schaden anrichten. Okay, die Regeneration
ist ziemlich schnell. Wir hätten im Moment
einen etwas geringeren Betrag sagen können. Ich bin unbeweglich. Ja, es ist schnell genug. Siehst du, ich werde wieder gesund. Mal sehen, ob mir das abschießt wie schnell diese
Generationengeneration im Vergleich zum Schaden durch die abgeschossenen Waffen ist. Das geht ein bisschen langsam voran. Wir könnten seine Geschwindigkeit erhöhen. Oh, ich sehe ein paar Kugeln
durchdringen. Wahrscheinlich war ich so
weit weg als es mir war , deswegen Okay. Sie waren nicht in Reichweite. Ich dachte, sie wurden zerstört. Vielleicht ist unsere Reichweite für die
Explosion ein bisschen klein für unsere Karte. Ja, vielleicht könnten wir es größer
machen. Was passiert, wenn ich hier sein sollte? Okay, was ist dort passiert? Feind war, dann waren die
vorderen hinter mir. Die Kugelrakete. Versuche zuerst, hinterherzugehen. Ja, wir brauchen eine
Maus, wenn das Spiel vorbei ist. Lass uns diese Probleme lösen. Wir haben einige Fehler. Sie sehen, es ist der Standort des Schauspielers festgelegt. Wahrscheinlich als wir gestorben sind,
Kugel auf Spawn ausstehend,
Tötung, als wir gestorben sind Bei manchen Dingen können wir
immer dorthin
gehen, an diesen Drehort gehen Wahrscheinlich will es
fragen, ob p gültig ist. Wir sagten, das ist ein gültiger
Knoten und verbunden. Dieser Fehler wird verschwinden. Es ist eine Frage der Zeit,
herauszufinden, wo dies benötigt wird. Verschwenden wir dort keine Zeit. Lass uns drüben zu unserem Spiel gehen. Fangen Sie an zu spielen und zu bauen. Holen wir uns den
Player-Controller und das Set. Also Mauszeiger. Lassen Sie uns das mit wahr verbinden. Ich klicke darauf,
um das Cursorproblem zu lösen, zu
kompilieren und zu speichern. Eine letzte Sache, die wir tun
sollten,
wäre , eine Audiokomponente hinzuzufügen. Wählen Sie diese Audiokomponente aus
und wählen Sie aus unseren Sounds
diese aus, die Musikkomponente. Jetzt hat unser Spiel einen
Musikwiedergabetest. Wenn wir anfangen, fängt die Musik an. gratuliere dem Regime bis jetzt
und hoffe, Ihnen
hat dieser Kurs gefallen. Es gibt viele
Möglichkeiten, die Mechaniken zu optimieren, mit ihnen
herumzuspielen
und die Systeme zu verbessern. Vielleicht noch ein paar Kugeln herstellen. Mach ein anderes Waffensystem. Es gibt eine Menge
Dinge, die du tun
kannst, um dir mehr Feinde zu machen. Vielleicht
wäre es eine Herausforderung,
Feinde dazu zu bringen, eine Menge
Raketen abzuwerfen, wie Drop Amo. Und du hast eine bestimmte
Menge an Amo. Du würdest
Schauspieler auf der ganzen Welt verschieben. Und du machst Kollisionen, wenn der
Spieler damit kollidiert,
wenn das Ende des Spielers damit kollidiert,
wenn der Spieler darauf wenn der Mach solche Dinge. Sie können experimentieren und lernen, Ihr Wissen
erweitern. Vielen Dank, dass Sie uns
folgen. Auf Wiedersehen.