Transkripte
1. Intro (Vorschau): Hallo zusammen, und willkommen
zum Kurs Unreal Engine five, Erste Schritte mit
Blaupausen. Mein Name ist James, auch
bekannt als die wenigen Studios. Und ich war die letzten sechs Jahre ein
Marketplace-Creative . Und während dieser Zeit habe
ich Hunderte von Unreal
Engine-Anfängern unterstützt . Und aus diesem Grund habe
ich einige
der üblichen Dinge gelernt, mit denen die Leute zu kämpfen haben, wenn sie versuchen, die
Spieleentwicklung zu lernen. Ich bin ruiniert. Jing ist eine der
beliebtesten Spiel-Engines der Welt und Blueprints ist seine leistungsstarke, eingebaute visuelle
Programmiersprache. Blueprints geben uns
die Möglichkeit,
einfache oder unglaublich
komplexe Systeme innerhalb
der Engine zu codieren einfache oder unglaublich
komplexe Systeme innerhalb
der , ohne
jemals textbasierten Code
schreiben zu müssen . Und ist eine großartige Möglichkeit, in
die Welt
der Spieleentwicklung einzusteigen . Zu Beginn dieses Kurses beginnen
wir mit
den grundlegenden Variablen. Diese werden verwendet, um Informationen
wie
Standort, Gesundheit
oder Ausdauer des Spielers zu
speichern wie
Standort, Gesundheit
oder Ausdauer des Spielers . Er lernt
die verschiedenen Arten von Variablen kennen und wie man sie während des Spiels
manipuliert. Dann gehen wir zu
Funktionen, Makros und Ereignissen über. Diese werden verwendet, um Ihr Projekt
aufgeräumt und
effizient zu
halten aufgeräumt und
effizient und die
spätere Änderung in der
Projektentwicklung zu erleichtern . Dann gehen wir zu
verschiedenen Arten von Blaupausen über, wahrscheinlich Schauspieler-, Bauern
-, Charakter - und Spielmodus-Blaupausen. Jeder dieser
Blaupausen verfügt über unterschiedliche integrierte
Funktionen, die mit
der Engine geliefert werden, mit der wir dann
unsere Spiele erstellen können. Wir werden auch
Dinge wie Projektile behandeln, die oft
für Waffenkugeln verwendet werden,
Spuren, die oft für
Interaktionssysteme verwendet werden , und
manchmal sogar Meli-Systeme. Und wir werden Player-Eingaben behandeln , einschließlich des neuen
verbesserten Eingabesystems. diese
Weise können wir eine Tastatur oder eine
Maustaste drücken und
Code ausführen , je nachdem, welche
Taste wir tatsächlich gedrückt haben. Wir werden
uns jetzt auch mit Widgets befassen
, sodass wir
UI-Elemente in ihnen erstellen. Regel-Engine wird
lernen, wie man
neue Widgets erstellt und
sie zum Player-Bildschirm hinzufügt, sowie wie man das Layout
ändert
und das Verhalten von Widgets anhängt, zwei verschiedene Variablen,
Funktionen oder Ereignisse, so können wir kontrollieren, dass unsere
Widgets tatsächlich funktionieren. Schließlich werden wir all
das Wissen, das
wir während
des Kurses gewonnen haben, nutzen das Wissen, das
wir während
des Kurses gewonnen haben, , um einige
gängige Gameplay-Systeme zu entwickeln. Dazu gehört ein
Interaktionssystem, das es unserem Spieler ermöglicht, mit anderen Objekten zu
interagieren. Ein beschädigtes System, das es
unseren Charakteren ermöglicht , Schaden
zu erleiden und zu senden. Ein HUD, mit dem wir Informationen auf dem Bildschirm
unseres Spielers
anzeigen können . Wir werden auch ein Reaktionssystem
und ein hockendes System einrichten . Ziel dieses Kurses
ist es, Ihnen
detaillierte Informationen über
die verschiedenen Funktionen zu geben
, die in den Blaupausen enthalten
sind. Damit du am Ende dieses Kurses in
der Lage
bist, deine eigenen Spielsysteme zu planen und zu erstellen. Danke fürs Zuhören und ich hoffe
wirklich, dass dir der Kurs
gefällt.
2. Intro (Übersicht): Hey Leute, und willkommen zur
ersten Lektion in diesem Kurs. In dieser Lektion
wird
ein kurzer Überblick darüber gegeben,
was Blaupausen sind, wofür sie verwendet werden können
und einige gebräuchliche Ausdrücke, und einige gebräuchliche Ausdrücke die wir
während des gesamten Kurses verwenden werden. Was sind Blaupausen, um loszulegen? Blueprints sind eine visuelle
Programmiersprache die in Unreal Engine
integriert ist. Sie werden oft verwendet, um
Dinge wie Charakter,
Waffe oder sogar einen MPC zu definieren . Blueprints ermöglichen es Ihnen,
in der Engine zu codieren und
verschiedene Arten von Knoten miteinander zu verbinden , wodurch zusammen
neue Funktionen entstehen. Die Folge davon könnte
ein Öffnen und Schließen der Tür sein, oder es könnte sich um ein komplexes
Inventarsystem oder Kampfsystem handeln. Die Engine enthält einige
Template-Blaupausen die mit
nützlichem vorhandenen Code beginnen, wie zum Beispiel unseren
Charakter-Blueprint
, den
Sie, wenn ich hier
in das Level einbringe, auf der
rechten Seite sehen können Seite des Bildschirms enthält
es eingebaute
Komponenten, wie zum Beispiel die
Charakterbewegungskomponente,
die die Bewegung der
Charaktere steuert. Eine Mesh-Komponente, die es ermöglicht ,
dass
unser Charaktermodell im Spiel sichtbar ist. Eine Kamerakomponente,
die es einem Spieler ermöglicht, zu sehen, wenn er die Kontrolle über diesen
Charakter
übernimmt. Wenn Sie
mit Blaupausen beginnen. Einige gebräuchliche Begriffe, die Sie
hören werden, sind Blueprint-Klassen. Blueprint-Objekte
oder Blueprint fungiert als Beispiel für
eine Blueprint-Klasse ist unser ThirdPersonCharacter hier
unten. Wenn wir jetzt den Mauszeiger darüber bewegen, können Sie tatsächlich sehen, dass
Blueprint-Klasse steht. Aber wenn wir es
in unser Level ziehen, können
Sie sehen, dass es
ein neues Blueprint-Objekt erstellt und wir können tatsächlich mehrere
derselben Klasse in unser Level ziehen . Dies sind jetzt zwei unabhängige
Blueprint-Objekte. Wenn wir mehrere Spieler hätten, könnte
jeder Spieler
einen anderen Charakter-Blueprint kontrollieren einen anderen Charakter-Blueprint und verschiedene Dinge tun. Aber all diese
Blaupausen
verwenden immer noch dieselbe Blueprint-Klasse, die unsere
ThirdPersonCharacter-Klasse ist. Wenn Änderungen an
unserer ThirdPersonCharacter
Blueprint-Klasse vorgenommen werden ,
wirkt sich dies auf alle unsere
Blueprint-Objekte aus, die unsere Klasse verwenden. Wenn ich zum Beispiel meinen ThirdPersonCharacter
Blueprint
öffne , gehe zu Viewport und ich drehe
einfach unser Mesh, sagen wir 90 Grad, auf diese Weise. Drücken Sie Kompilieren, kehren Sie zu unserer Map zurück. Du kannst sehen, dass unsere
Charaktere jetzt eine andere Richtung schauen. Und wenn ich zurückgehe
und es
einfach zurück in die richtige
Richtung drehe , klicke auf Kompilieren. Sie können erneut sehen, dass einige Blueprint-Objekte nicht im Spiellevel
existieren, sondern
im Hintergrund ausgeführt werden, Informationen
speichern und
wichtige Funktionen ausführen. Zum Beispiel
existiert der
Spielinstanz-Blueprint
, der zum Speichern von
Informationen zwischen den
Levels eines Blueprints
wie dem Spielmodus verwendet wird von
Informationen zwischen den
Levels eines Blueprints , im Level, aber für den Spieler völlig
unsichtbar. Der Spielmodus steuert
Dinge wie die Charakter-Blueprint-Klasse, die
erstellt wird , wenn ein neuer
Spieler dem Spiel beitritt. Und was passiert, wenn ein
Spieler das Spiel verlässt. Blueprints sind ein
unglaublich leistungsfähiges Tool , das eine
schnellere Entwicklung, Debugging und eine
sehr benutzerfreundliche Funktion ermöglicht. In den nächsten Lektionen werde
ich
einige der Grundlagen behandeln ,
um Ihnen den Einstieg zu erleichtern. So können Sie einige
Ihrer eigenen Funktionen erstellen die Blaupausen
anderer Personen lesen, was Ihr Lernen wirklich
beschleunigen kann.
3. Intro (Erstelle von Blueprints): Hallo zusammen. In dieser Lektion zeige ich Ihnen
, wie
Sie neue Blueprint-Klassen erstellen. Wir
werden uns auch den Blueprint-Editor
ansehen . Bevor wir anfangen, zeige ich Ihnen
nur, wie Sie den
Inhaltsbrowser
an unseren Bildschirm andocken. Standardmäßig müssen wir auf
diese Inhaltszeichnung klicken , um sie zu öffnen. Persönlich bevorzuge ich es,
es auf dem Bildschirm zu fixieren. Also klicke ich einfach
auf diese
Dokument-in-Layout-Schaltfläche hier. Und jetzt haben wir unseren
Inhaltsbrowser auf unserem Bildschirm gesperrt. Das ist eine persönliche Präferenz. Du kannst dein Setup
haben, wie du
willst, aber so wird
meins für den Rest
des Kurses sein. Es gibt verschiedene Möglichkeiten,
Blueprints und unseren
Inhaltsbrowser zu erstellen Blueprints und unseren
Inhaltsbrowser Wir können mit der rechten Maustaste klicken und
Blueprint Class hier oben auswählen. können auch
zu den Blaupausen gehen, herausspringen und hier unten die Option
Blueprint-Klasse auswählen. Diese großartigen zusätzlichen
Klassen hier, aber wir werden
sie in dieser Lektion nicht behandeln. Diese werden in
einer zukünftigen Lektion sein. Eine andere Möglichkeit,
Blaupausen
zu erstellen, besteht darin, auf die Schaltfläche Hinzufügen hier
auf der linken
Seite des Bildschirms zu wechseln zu erstellen, besteht darin, auf die Schaltfläche Hinzufügen hier . Und Sie können sehen, dass wir dieselbe Speisekarte
haben. Wir können Blueprint Class auswählen, oder wir können zu Blueprints gehen und auch hier Blueprint
Class auswählen. Also klicke ich einfach auf
Blueprint Class, um unser Fenster zur Klassenauswahl
zu öffnen . Hier können wir auswählen, welche Art von Blaupause wir erstellen möchten. Gibt uns einige der häufigsten
Auswahlmöglichkeiten. Also hier oben. Also haben wir
zunächst einen Schauspieler. Ein Schauspieler ist im Grunde nur eine Blaupause, die in einem Level
existiert. Dann haben wir ****, was festgelegt
hat, dass der Spieler
tatsächlich die Kontrolle über einen Charakter übernehmen kann ,
der auch ein **** ist. Aber es hatte einige erweiterte
Funktionen, sodass es herumlaufen und wir ein Charaktermodell
festlegen können. Wir haben den Spieler-Controller. Dies ist die Blaupause
, die unserem Charakter
oder einem **** sagt , was unser
Spieler von ihm verlangt. Im Spielmodus legen
wir fest, mit welcher Art von Spieler-Controller oder Charakter Spieler-Controller oder Charakter
unsere Spieler beginnen
sollen. Und dann haben wir hier unten einige
Komponenten, die ich
in einer zukünftigen Lektion behandeln werde. Aber im Wesentlichen
können Komponenten zu
anderen Blueprints hinzugefügt werden , um ihnen
zusätzliche Funktionen zu bieten. Und dann
haben wir hier unten alle Klassen. diese
Weise können wir im Grunde
jede andere Blaupause
oder C plus plus
Klasse auswählen jede andere Blaupause
oder C plus plus und sie von unserem neuen Blueprint als Vorlage
verwenden lassen. Um loszulegen,
erstellen
wir einfach einen einfachen Schauspieler damit ich Sie durch
einige der Blueprint-Benutzeroberflächen führen kann. Es beginnt mit der bloßen
Umbenennung dieses Blueprints. Ich nenne meine
Video-Blaupausen. Und wir doppelklicken
darauf, um es zu öffnen. Und wir fangen im Viewport an. Hier können wir
unsere Standorte für neue
Komponenten in unserem Blueprint festlegen . Wenn ich zum Beispiel
hier auf
unsere Registerkarte Komponenten gehe und auf Hinzufügen klicke, suche
einfach nach einem Würfel
und wir fügen einen Würfel hinzu. Jetzt können wir die Position unserer
Würfel festlegen. Wenn ich W drücke, erhalten
wir Bewegungssteuerungen. Wenn ich E drücke, können wir es drehen, oder wenn ich R drücke, können
wir die Größe ändern. Diese Optionen sind auch hier oben
verfügbar. Wenn Sie also stattdessen diese
Schaltflächen verwenden möchten, können Sie dies tun. Und wenn wir
wollten, könnten wir
zusätzliche Komponenten hinzufügen und
ihren Standort auch in
unserem Blueprint festlegen . Wenn ich
diese Blaupause zusammenstelle und in die Welt
ziehe, können
Sie sehen, dass die Mitte meiner Blaupausen an
dieser Stelle hier ist, aber mein Würfel ist hier drüben. Das liegt daran, dass
wir es an
dieser Stelle vom
Zentrum weiter entfernt positioniert haben. Sie können sehen, dass es auch
in der Welt aktualisiert wird. Das gibt
Ihnen also nur eine grundlegende Vorstellung
davon , wie Sie das Darstellungsfenster verwenden. Wofür verwendet wird, ich
werde meinen Würfel vorerst löschen da wir zum nächsten Teil der Benutzeroberfläche
übergehen , dem My Blueprint-Bedienfeld. Jetzt werden wir das oft für meine Codierung verwenden
. Von oben beginnend haben
wir also unsere Grafiken.
Ich denke Graph. Wenn ich darauf doppelklicke, gelangen wir zu
unserem Hauptereignisdiagramm. Hier
werden wir
zumindest zunächst viel programmieren, bevor wir uns
mit Funktionen
und solchen Dingen befassen. Aber im Laufe der Zeit werden Sie sich
damit sehr vertraut machen . Es beginnt mit einigen Basisknoten. Ich werde
in einer zukünftigen Lektion damit Sie sich jetzt nicht zu
viele Gedanken darüber machen müssen . Sie können aber auch sehen
, dass unter unserer Grafik angegeben
wird , welche Ereignisse in diesem Diagramm enthalten
sind. Sie können sehen, dass wir
diese vier Veranstaltungen hier haben. Sie sind auch in
unserer Ereignisgrafik aufgeführt. Wenn ich also sagen würde, doppelklicken Sie auf
active begin overlap, wird
es
uns tatsächlich zu diesem Ereignis führen, was hilfreich sein kann, wenn
Sie versuchen, Dinge zu finden. Als Nächstes haben wir
unsere Funktionen, Makros, Variablen und
Event-Dispatcher. Jetzt
wird jeder von ihnen seine eigenen Lektionen haben weil es
ziemlich große Systeme sind und wir sie häufig verwenden werden. Aber hier wird
es aufgeführt. Alle Funktionen, die in
diesem Blueprint existieren , werden unter Funktionen
aufgeführt. Das gleiche gilt für Makros und
Event-Dispatcher und Variablen. Wenn Sie jemals neue
erstellen möchten, können
wir hier auf den
kleinen Plus-Button
neben Funktionen klicken . Wir können dasselbe mit Makros,
Variablen machen und
Event-Dispatcher können auch hier oben auf diese kleine Schaltfläche
Hinzufügen klicken. Wir können auswählen, ob Sie eine neue Variable,
eine Makrofunktion usw. erstellen möchten , wir können neue Diagramme erstellen. Und das ist nur nützlich,
um Dinge zu organisieren. Angenommen, Sie hatten einen Charakter und wollten zum Beispiel ein Diagramm für die Bewegung
und ein Diagramm für Ihre Waffen
und ein Diagramm für die
Gesundheit
haben und ein Diagramm für Ihre Waffen . Sie könnten das tun und
das gibt Ihnen nur zusätzliche Grafiken, in denen Sie Dinge organisieren
können. Überschreiben von Funktionen. Das werden wir
im Funktionsvideo behandeln. Also mach dir darüber nicht zu
viele Sorgen. Wenn Sie jedoch eine Funktion
überschreiben möchten, finden
Sie diese
Optionen hier. Als Nächstes kommt die Suchleiste. Wir können dies einfach verwenden, um die Funktionen,
Variablen und Makros
nach einem bestimmten Wort zu
durchsuchen . Es ist immer eine gute
Idee,
Schlüsselwörter in Ihre Variablen
- und Funktionsnamen aufzunehmen . Auf diese Weise könnten wir, wenn
wir zum Beispiel ein Gesundheitssystem schaffen würden, einfach nach Gesundheit suchen. Und das zeigt alle
unsere Funktionen,
Variablen, die das
Wort Gesundheit im Namen haben. Als Nächstes werden wir uns mit
der oberen Leiste befassen. Also müssen
wir zunächst kompilieren. Das sagt uns im Grunde nur, ist unser Blueprint-Gameplay bereit? Im Moment
hat es also ein kleines Häkchen, was bedeutet, dass alles gut ist. Wir sind alle okay. Aber wenn ich sagen
würde, ziehen Sie hier heraus und fügen Sie
eine Druckzeichenfolge hinzu und sehen Sie , dass wir sie jetzt kompilieren müssen. Und das
ermöglicht den Engines im Grunde genommen , den Code zu
überprüfen und
sicherzustellen, dass es keine Probleme gibt. Wenn es ein
Problem gäbe und gib uns ein kleines rotes Ausrufezeichen. Es gibt uns wahrscheinlich auch einige Compilerfehler, die
uns sagen, wo das Problem liegt. Dann haben wir unseren Spielstand, der
nur eine Blaupause speichert. Wenn wir auf Speichern klicken und
sehen, dass der kleine Punkt neben dem
Namen des Blueprints verschwunden ist, weil er gespeichert wurde. Wir haben einen Browser.
Wenn wir darauf klicken, gelangen wir zu dem Ort, an dem die Blaupause befindet,
und zu unserem Inhaltsbrowser. Dann haben wir Diff, das ist für die Quellcodeverwaltung. Darauf werde ich nicht eingehen, da die Quellcodeverwaltung ein
ziemlich großes Thema ist. Also werden wir das
vorerst einfach überspringen . Wir müssen etwas finden. Dies gibt uns das Suchfenster,
in dem wir
beispielsweise nach einem Knoten suchen können . Also wenn ich hier nach
Print-String suche, werde ich uns tatsächlich sagen, hey, es gibt einen
Druck-String-Knoten im Graphen. Wenn ich also
darauf doppelklicke, werden wir
tatsächlich dazu gebracht. Das ist wirklich hilfreich. Wenn deine Blaupausen ziemlich groß
werden, kannst
du vergessen, wo
du die Dinge hingelegt hast. Sie können also einfach nach Schlüsselwörtern suchen
, um herauszufinden, wo sich die Dinge befinden. Hi, ohne Bezug versteckt nur Verbindungen, die
zu diesem Zeitpunkt nicht wichtig sind. Normalerweise empfehle ich einfach, das
wegzulassen, aber Sie können damit
spielen, wenn Sie möchten. Als Nächstes haben wir die Klasseneinstellungen. Diese sind wie die Grundeinstellungen unserer Blaupause. Sie werden hier wahrscheinlich nicht zu viel
tun. Die meisten Blaupausen haben
sehr ähnliche Klasseneinstellungen. Sie können auch
den Miniaturansichtswinkel anpassen. So können Sie
den Kamerawinkel für
die Miniaturansicht ändern ,
wenn
der Content Browser ein Telefon hatte. Jetzt können wir auch
Schnittstellen hinzufügen , bei denen es sich ein ganz separates Video
handelt. Aber wenn Sie
die Schnittstellen finden möchten , die sich in den
Klasseneinstellungen befinden, hier unten. Als Nächstes haben wir Klassenstandardwerte. Hier befinden sich jetzt alle unsere
Blueprints-Einstellungen. Da wir also mit einem Schauspieler
angefangen haben, haben die
Schauspieler eine Reihe zusätzlicher Einstellungen, mit denen
sie kommen. Vier-Multiplayer-Replikation für unsere Technologie, die unser Techno hier unten ist, jeden Frame ausführt, daran können
wir ein paar
Anpassungen vornehmen. Wir haben Kollisionseinstellungen, Rendereinstellungen und so weiter. Wir werden in zukünftigen
Videos ein bisschen mehr darauf eingehen. Wenn Sie jemals wissen möchten,
ob ein bisschen mehr Details, was die Dinge tun,
können Sie jederzeit mit der Maus über den Namen fahren und es
gibt uns eine straffe Note. Wenn wir
eine neue Variable erstellen würden,
sagen wir, ich gehe zum Hinzufügen und ich habe
einfach keine neue Variable erstellt. Nennen wir das Test. Wenn wir jetzt zu den Klassenstandardwerten gehen, finden
wir das, oh, wir müssen zuerst kompilieren weil es nicht
angezeigt wird, bis wir seine Klassenstandardwerte abrufen
können. Wir scrollen zurück nach oben. Sie können auf der
Standardeinstellung sehen, dass wir jetzt unsere Testvariable
haben. Und hier können wir
alle
Standardwerte unserer Variablen sehen . Und das sind die Werte, mit denen der Blueprint
bei seiner Erstellung beginnen wird. Also kann ich das auch hier ein
- und ausschalten. Wir haben auch eine
Suchleiste oben , was
sehr hilfreich ist, insbesondere wenn Sie viele Variablen in
Ihrem Blueprint haben oder wenn Sie den Blueprint
einer anderen
Person verwenden, versuchen
Sie, eine Einstellung. Sie können hier nach
Schlüsselwörtern suchen, um die Option zu finden, die Sie benötigen. Dann haben wir die
Simulations- und Play-Buttons. Diese starten im Grunde nur
den Modus „Spiel und Editor“. Wenn ich auf die
Wiedergabetaste klicke, kannst du sehen, dass das
Plan-Editor-Fenster
geöffnet wurde. Als Nächstes haben wir das
Debug heruntergefahren. Das ist ein wirklich cooles
Feature von Blaupausen. Ich werde ein ganzes
Video haben, das sich Debuggen befasst, und einige der
Funktionen, mit denen die Engine ausgestattet ist. Aber nur um euch ein
Beispiel zu geben, was das macht, wenn ich meinen
Druckstring hier mit der Technik verbinde. Dies führt jetzt jedes einzelne
Frame aus, das das Spiel ausführt. Wenn ich also auf unsere Map gehe, ziehe
ich einfach
den Video-Blueprint M. Ich klicke auf „Abspielen“. Sie können sehen, dass der
Halo für jedes gezeichnete
Bild immer
wieder läuft . Und wenn ich zu Video Blueprint gehe, weil ich hier
Video-Blueprints ausgewählt habe. Sie können sehen, dass es
mir den Code zeigt, der gerade läuft. Es ist alles hervorgehoben. Das sagt mir, dass die Tech Note läuft und
die Druckzeichenfolge läuft. Und das kann
sehr hilfreich sein, wenn Sie große Blaupausen haben und genau sehen können, welcher Code gerade ausgeführt wird. Im Moment
werden wir nur eine Pause machen
, um unseren
Druck hier zu löschen. Und es wird auch
unsere Video-Blueprints
von unserem Level entfernen . Nur damit wir einen sauberen Start haben und
zu unserer Blaupause zurückkehren. Eine andere Sache, die ich zu den Suchergebnissen
erwähnen wollte , wenn wir zurückgehen, um zu finden, können
Sie sehen, dass wir hier immer noch
unser Fenster geöffnet haben. Wenn wir hier auf diesen
kleinen Button klicken, werden tatsächlich
alle Blaupausen und unser Projekt nach
unserem Suchbegriff durchsucht. Wenn ich also darauf klicke, kannst
du sehen, dass es tatsächlich
viele Druckbildschirme findet. Es tut mir leid, Print
String-Knoten um unsere Projekte herum. Und das sind eigentlich
Blaupausen, die in den Motor eingebaut
sind. Sie können also sehen, dass
alle Blaupausen durchsucht wurden
und uns
genau sagen , wo Druckstrings während unseres Projekts verwendet
werden. Dies kann sehr
hilfreich sein, wenn Sie
erneut versuchen , etwas
ausfindig zu machen. Sie können alle Ihre
Blaupausen auf einmal durchsuchen. Als Nächstes werfen wir einen Blick
auf das Konstruktionsskript. Wenn ich das Fenster „Finding
Blueprints“ schließe und wir zu
den Funktionen gehen können, ist
Ihnen vielleicht aufgefallen
, dass das standardmäßig vorhandene Konstruktionsskript ist
Ihnen vielleicht aufgefallen
, dass das standardmäßig vorhandene in den Actor integriert
ist. Also doppelklicken wir
darauf, um zu unserem
Konstruktionsskript zu gelangen. Und hier können wir
Code hinzufügen, der ausgeführt wird, wenn wir unseren
Blueprint zum ersten Mal in das Level ziehen. Das ist also großartig, wenn
Sie Level-Design-Tools
und solche Dinge erstellen,
vielleicht möchten Sie die Farbe von
etwas für jedes Mal, wenn
Sie es in das Level ziehen,
zufällig festlegen. Das Konstruktionsskript ist dafür
sehr nützlich. Wenn eines dieser
Fenster jemals verloren geht oder Sie sagen, dass Sie es
versehentlich geschlossen haben, ist das kein Problem. Sie können hier immer einfach
zum Windows-Dropdown gehen . Und hier
können Sie sich mit jedem dieser Panels befassen, die wir uns heute
angesehen haben. Also kannst du abschalten. Wenn ich zum Beispiel meine Komponenten
schließe, kann
ich gehen und
das Bedienfeld „Komponenten“ erneut öffnen und ich
werde einfach wieder auftauchen. Das Letzte, worauf ich hinweisen
wollte, ist die Adressleiste, die
sich hier oben befindet. Hier steht immer
, welcher Blaupausen-Urin, ich trage den
Bauplan, der du bist. Das ist wirklich hilfreich, wenn
Sie zusammen mit
Tutorials oder Screenshots
oder ähnlichem folgen .
Es lohnt sich immer, einen Blick darauf zu werfen,
sicherzustellen, dass Sie auf
der richtigen Blaupause sind, und sagen Sie
auch das Funktionsname
oder Name des Ereignisdiagramms. Wenn ich also zum
Ereignisdiagramm gehe, sagen wir zum Ereignisdiagramm, das Ihnen genau sagt,
wo Sie sich befinden, oder wenn Sie zusammen
mit einem Video oder einem Bild verfolgen, können
Sie genau sehen, wo
sie sich in diesen Videos befinden. Das
war's also für diese Lektion. Hoffentlich haben Sie jetzt
ein
grundlegendes Verständnis dafür , wo Denker und
der Blueprint-Editor sind.
4. Intro (Event: Hallo zusammen, in dieser Lektion werde
ich Sie durch die Ausführung
von
Blueprint-Knoten und
die Reihenfolge, in der sie ausgeführt werden , führen. Um loszulegen. Ich habe hier
in unserem ThirdPersonCharacter
Blueprint ein paar Beispiele aufgestellt . Und ich werde Ihnen
diese einfach durchgehen und erklären,
was jeder einzelne tut. Zunächst müssen wir
das Event beginnen zu spielen. Dies ist ein Ereignis
, das in
die Engine integriert ist und immer dann ausgeführt
wird, wenn unser Spiel startet oder wenn
der Blueprint erstellt wird. Was hier passieren wird, ist, dass
unser Event mit dem
Spiel beginnt , das
unserem Spieler ein Spiel mitteilt,
spielt jetzt einen Sound ab, um zu laufen. Das ist ein benutzerdefiniertes Ereignis
, das ich selbst erstellt habe. Und wenn wir
hier runter gehen, können Sie
sehen, dass wir den
Play-Player-Sound haben. Also fange ich an zu spielen oder x gewürfelt. Es wird unser Spiel ausführen, einen Soundknoten
abspielen, und das wird unseren
Wiedergabesound am Ort ausführen. Und der Sound, der abgespielt
wird, wird überall dort
sein, wo unser
Soundeingang hier ist. Das wird also
der Startsound sein. Dann wird
dieser Sound an dem von uns bereitgestellten
Ort wiedergegeben . Das ist also der Standort für den
Schauspieler
, der der
Ort unseres Charakters sein wird. Sobald der Ton abgespielt ist, unsere Ausgabe unseres
Spiels einen Sound ab. Cool Wir rennen weg. Das passiert immer dann, wenn die Ausführungskette hier unten keine Knoten mehr zum Laufen
hat. Was dies dann bewirkt, ist wir unseren Gesundheitswert auf
unseren Startwert setzen unseren Startwert da der Code normalerweise von links
nach rechts ausgeführt wird. Und wenn wir ein Ereignis treffen, cool, führen wir den Code aus, der mit diesem Ereignis
verbunden ist. Und dann setzen wir die
Ausführung des Codes mit
unserem ursprünglichen Ereignis fort . Als Nächstes haben wir den technischen Hinweis zur
Veranstaltung. Dies ist ein sehr häufig von Anfängern
verwendeter Knoten. Und der Grund ist, dass es jedes einzelne
Bild Ihres Spiels
ausführt. Jedes Mal, wenn Ihre
Grafikkarte einen Frame zeichnet, wird
dieses Ereignis ausgeführt. Das Problem dabei ist,
dass die Leute dazu neigen, viel
Code an diesen Knoten
anzuhängen. Und das kann Ihr Projekt sehr schnell
verlangsamen , da der
meiste Code im Allgemeinen nicht in
jedem einzelnen Frame ausgeführt werden muss. Wir wollen Dinge
wie Player-Eingaben,
Timer und verschiedene andere
Arten verwenden , um diesen Code auszuführen. Anstatt nur jedes
einzelne Bild führen wir es aus ,
weil Sie so eine
schlechte Leistung in Ihrem Spiel erzielen. Aber für dieses Beispiel habe
ich gerade einen
sehr einfachen Code genommen. Ich habe einen Zahlenwert. Und dann plotten wir eins zu diesem Zahlenwert und dann setzen
wir diesen Zahlenwert. Jedes Mal, wenn ein Frame unseres Spiels gezogen
wird, erhöhen
wir unseren
Zahlenwert um eins. Und dann muss ich hier einfach den Stringknoten
drucken. Das nimmt also
den Zahlenwert an konvertiert
ihn in eine Zeichenfolge, bei der es
sich im Grunde um Text handelt. Und dann drucken wir
diesen Wert auf
den Player-Bildschirm. Ich werde
näher auf
diese Ereignisse eingehen , wenn wir einige Beispiele erstellen. Aber im Moment
möchte ich nur
die verschiedenen Arten von Ereignissen erklären und wie sie Code ausführen. Als nächstes haben wir also den
Eingabe-Aktionssprung. Dies ist ein Knoten, der immer dann ausgeführt wird
, wenn unser Spieler
die Sprungeingabe drückt. Das ist also standardmäßig
die Leertaste. Und der Grund dafür
ist, dass wenn wir zur Bearbeitung
gehen und zu den Projekteinstellungen gehen, dann gehe ich hier unten
zu Input. Wir gehen zu Action Mappings. Sie können sehen, dass wir
hier
ein Action-Mapping mit der Aufschrift „jump“ haben . Wenn ich auf den Abwärtspfeil klicke, kannst
du sehen, dass
hier die Leertaste eingestellt ist. Das ist also eine Standardeingabe für das
ThirdPersonCharacter-Projekt. Deshalb ist das
schon für uns da. Wenn ich also zu unserem
ThirdPersonCharacter Blueprint zurückkehre, heißt es deshalb, dass der
Input-Aktionssprung darauf zurückzuführen ist, dass Eingaben bereits
in unseren Action-Mappings eingerichtet wurden. Und was das im Grunde
macht,
ist, wenn ich die Leertaste drücke , will, wird, wird rennen, und das wird
unseren Charakter zum Springen bringen. Und wenn ich dann loslasse, kühlt
das das Stop-Jumping ab. Eingabeaktionen sind
im Wesentlichen die Art und Weise, wie Sie Eingabe eines Spielers
annehmen, und wir können
Code ausführen , indem
wir diese Eingabe verwenden , um in einer zukünftigen Lektion mehr auf
Auswirkungen einzugehen. Es gibt auch ein neues
verbessertes Eingabesystem , das mit
Unreal Engine five geliefert wird. Also werden wir uns auch damit
befassen. Eine andere Möglichkeit, Code über
Player-Eingaben auszuführen , ist
die Verwendung der Eingabeereignisknoten. Wenn ich also mit der rechten Maustaste klicke
und nach einem Tastaturnamen suche, sage Enter. Und wir können
durch diese blättern und unter Tastaturereignissen
finden wir die Enter. Das ist nun ähnlich wie bei
unserer Eingabeaktion Jump. Wir haben Unterdrückt, das den Code ausführt , der mit ihm
verbunden ist, wenn die Enter-Taste gedrückt wird und losgelassen wird, wenn der
Code ausgeführt wird, wenn die Taste losgelassen wird. Diese sind jetzt eher für das
Debugging und das schnelle Prototyping gedacht. Wir werden diese später im Kurs ziemlich oft verwenden , nur weil sie selbst schneller sind
als unsere Projekteinstellungen. In der Regel
würden Sie diese Knoten jedoch nicht verwenden. Wenn Sie die letzten Tastenkombinationen eines
Spiels einrichten, würden
Sie die Eingabeaktionen verwenden
, die ich Ihnen zuvor gezeigt habe. Als nächstes haben wir die „Alle Schäden“
-Knoten, die hier oben sind. Und diese Veranstaltung ist in den Motor
eingebaut. Und es ermöglicht uns,
unserem ThirdPersonCharacter mitzuteilen , dass er
durch andere Blaupausen beschädigt wurde. Und diese anderen
Blaupausen können auch einen beschädigten Wert
liefern, ähnlich wie wir
unser Play Play ein
Klangereignis hier genannt haben, und wir haben einen Startsound geliefert. Dann spielen wir hier unten ein
Klangereignis ab, verwenden diesen Startsound und
spielen einen Sound an einem Ort ab. Dies ist insofern ähnlich, als
die andere Blaupause den Feind
jeden Schaden von m nennen
kann, er kann einen beschädigten Wert liefern. Und jetzt können
wir in unserem
ThirdPersonCharacter Blueprint diesen Schadenswert verwenden,
um von unserer
aktuellen Gesundheit abzuziehen. Jetzt
ruft jedes Schadensereignis eine Funktion
namens Gesundheit verringern auf. Jetzt habe ich
diese Funktion selbst erstellt. Und machen Sie sich keine Sorgen, wenn Sie nicht
wissen, was eine Funktion ist, darauf werden
wir in einer zukünftigen Lektion eingehen. Aber im Wesentlichen ist eine
Funktion ein Knoten, andere Knoten
enthält und
der wiederverwendbar ist. So können wir
diesen Code
an mehreren Stellen und in unserem Projekt wiederverwenden . Wenn ich also doppelklicke, führt uns
diese Funktion tatsächlich in
die Funktion selbst. Und Sie können sehen, dass die Funktion all diese Knoten
enthält. Dies wird nun
ähnlich wie in unserem Ereignisdiagramm ausgeführt. Es wird also von
links nach rechts ausgeführt. Und wenn es
dann am Ende ist, ist der Knoten fertig. Zunächst nehmen
wir also unseren aktuellen
Gesundheitswert und subtrahieren den Schadenswert, den wir erhalten haben, von jedem
Schaden von ihnen. Dann wird es unser neues
aktuelles Gesundheitstal einrichten. Und dann stellen wir ein, oder tut mir leid, wir überprüfen, ob unser aktueller Gesundheitszustand
kleiner oder gleich 0
ist? Wenn es kleiner als
0 oder gleich 0 ist, führen wir den
Play-Sound-Knoten und sagen ihm, dass er den tauben Sound ausführen
soll. Wie Sie sehen können, verwenden
wir unser Spiel,
spielen Sie einen Soundknoten wieder. Und dieses Mal
sagen wir ihm, dass wir den tauben Ton spielen
wollen. Nachdem unser Sound abgespielt
wurde, sagen
wir dem
Schauspieler, dass er sich selbst zerstört, was dem Schauspieler im Grunde
sagt, er solle sich
vollständig vom Level entfernen. Oder wenn ich hoffe, dass es größer
als 0 ist, sagen wir es, wir drehen unser Spiel,
spielen einen Soundknoten, um
den Hertz-Sound anstelle
des tauben Klangs abzuspielen . Nun, wenn unser Destroy
Actor-Knoten läuft oder wenn wir
spielen, einen Sound mit dem
Hertz-Sound abspielen, können
Sie sehen, dass sie keine Ausgänge mehr
haben. Was dann passieren wird, ist, dass
unsere Funktion jetzt beendet ist. Wenn wir also zusätzlichen
Code mit der Ausgabe unserer Funktion verbunden hätten , würde
dieser dann laufen. Haben wir nicht. Diese
Ausführungskette ist jetzt
gerade mit einer
verringerten Gesundheitsfunktion beendet. Das war's
für diese Lektion. Hoffentlich verstehen Sie jetzt was die
Ausführung von Blueprint-Code verursacht und in welcher Reihenfolge die
Dinge im Allgemeinen ausgeführt werden. Machen Sie sich keine allzu großen Sorgen,
wenn Sie Funktionen
oder Ereignisse noch nicht vollständig verstehen Wir werden diese in Zukunft in
separaten Lektionen behandeln . Das war nur der
Dreh raus, wie Code tatsächlich läuft und was ihn zur Ausführung bringt.
5. Variablen (Übersicht): Hallo zusammen, in dieser
Lektion werde ich nur erklären, was Variablen sind
und wofür sie verwendet werden. Variablen sind im Grunde nur eine Möglichkeit, Informationen zu
speichern. Und es gibt viele verschiedene
Arten von Informationen, daher gibt es eine ganze Reihe
verschiedener Arten von Variablen. In den nächsten Lektionen werde
ich Sie nur durch einige
der am häufigsten
verwendeten Variablen führen. Wir werden lernen, wie wir ihre Werte
ändern können. Außerdem werden wir
einige grundlegende Beispiele für
allgemeine Dinge behandeln einige grundlegende Beispiele für , für die
es verwendet wird. Also
erstellen wir zunächst eine neue Variable. Und dazu gehen wir
zu unserem neuen Blueprint-Panel über . Und wir können das
auf verschiedene Weise tun. Wir können auf den kleinen
Plus-Button neben
der Registerkarte Variablen klicken und auf diese Weise eine
neue Variable erstellen. Oder wir können hier
zur Schaltfläche Hinzufügen gehen und
hier die
Variablenschaltfläche auswählen, wodurch auch eine
neue Variable erstellt wird. Sobald wir
eine neue Variable erstellt haben, können
wir sie umbenennen. Also für diese Variable nenne
ich sie einfach neue Variable. Hier. Wir können auch unsere
Variablentypen festlegen. Die Standardeinstellung ist also ein boolescher Wert. Ein boolescher Wert ist nur eine
true oder false Variable, also speichert er entweder einen
true oder false Wert. Jetzt, wo unsere Variable ausgewählt ist, können
wir sie
zum Bereich Details hinzufügen. Wenn Sie
das Detailfenster nicht haben, können
Sie
es jederzeit aufrufen, indem Sie zu
Windows gehen und
den Bereich „Details“ auswählen. Über Nacht haben
wir also im Detailbereich unsere
Variablennamen, damit wir unsere Variable
umbenennen können ,
wann immer wir wollen. Wir können den Variablentyp festlegen. Wenn ich nun hier den
Abwärtspfeil auswähle, siehst
du einige der am
häufigsten verwendeten Variablentypen , die wir in zukünftigen Lektionen
durchgehen werden. Es gibt einige zusätzliche und
Drop-Downs. Wir werden
diese im Kurs nicht behandeln da es viele
, viele davon gibt. Aber ich werde in
einer zukünftigen Lektion erklären,
was
sie sind und wofür sie verwendet werden. Jetzt haben wir hier unten einen
Standardwert. Dies ist im Grunde der
Startwert für unsere Variable. Im Moment hat es hier
eigentlich keine Option. Es heißt nur, bitte
kompiliere die Blaupause. Das liegt daran, dass es sich um
eine neue Variable für diese Einstellung handelt
, die wir kompilieren müssen. Also werde ich einfach hier kompilieren. Sie können sehen, dass wir jetzt
dieses Kontrollkästchen haben , das wir ein- und ausschalten
können. Und das liegt daran, dass ein boolescher Wert ein wahrer oder falscher Wert
ist. Wir können also festlegen, wo
für diese Variable mit einem wahren
Wert oder einem falschen Wert
beginnt. Jetzt gab es auch einige
zusätzliche Einstellungen hier oben. Sie sich im Moment keine allzu großen Sorgen
, wir werden einige
davon in einer zukünftigen Lektion behandeln. Ein großer Teil der Variablen
besteht nun darin, dass wir
die darin
gespeicherten Informationen tatsächlich abrufen können , wenn wir Code schreiben, und
wir können sie ändern. Es gibt also
verschiedene Möglichkeiten, wie Sie Ihre Variablendaten
abrufen können . Wir können es also entweder direkt aus
meinem
Blueprint-Panel-Drop
in unser Ereignisdiagramm
ziehen aus
meinem
Blueprint-Panel-Drop
in unser Ereignisdiagramm und wir erhalten eine Option, um eine neue
Variable zu erhalten oder eine neue Variable festzulegen. Also können wir eine Lücke machen, die
uns diesen Get-Knoten hier gibt. Mit diesem Knoten können wir den aktuellen Wert ermitteln, auf den unsere
neue Variable gesetzt ist. Jetzt können wir auch
ziehen und festlegen, und das ermöglicht es uns,
den aktuellen Wert
unserer Variablen zu ändern . Nun sehen diese Notizen je nach Variablentyp
manchmal anders aus. Da das ein boolescher Wert ist, hat
es hier ein kleines Häkchen. Wir können ein- und ausschalten. Aber sagen wir, wenn dies
eine Variable wäre , in der
wir eine Zahl
speichern, hätten wir
das Kontrollkästchen dort nicht. Eine andere Möglichkeit
, dies zu tun, ist wenn wir unsere
neue Variable hineinziehen, wenn ich die Strg-Taste
auf meiner Tastatur drücke und die
linke Maustaste loslasse
, sofort
einen Knoten für uns erstellen. Und wir können auch die Alt-Taste
ziehen und
gedrückt halten und loslassen. Und das wird
uns eine Reihe von Knoten geben. Anstatt dieses kleine Menü
verwenden zu müssen, können
Sie dort auch einige
Tastenkombinationen verwenden. Sie können
die Variablen auch in unserem Ereignisdiagramm
erstellen die Variablen auch in unserem Ereignisdiagramm wir einfach mit der rechten Maustaste klicken und nach einer neuen
Variablen suchen und einfach die Eingabetaste drücken. Und wir haben unseren Get-Knoten und können
dasselbe mit SAP machen. Also kann ich einfach
nach einer neuen Variablen suchen. Und Sie können sehen, dass
das da oben passiert ist und wir können das auch schaffen. Es spielt also keine
Rolle, auf welche Weise
Sie Ihre Variablen
im Event Graph erstellen,
je nachdem, was für Sie
bequemer ist, Sie können es einfach verwenden. Abhängig davon, wie viel Zeit Sie bereits
in der Engine verbracht haben, wissen
Sie möglicherweise,
welche Variablen
in andere Variablen eingefügt werden können oder nicht . Wenn ich zum Beispiel hier
eine neue Variable erstelle, nenne
ich
diese einfach eine der Variablen. Und ich werde
das als Boolean belassen, kämpfen, das in unser Ereignisdiagramm
ziehen
und ich werde es bekommen. Ich kann
diese andere Variable tatsächlich
in meinen neuen Variablensatzknoten einstecken . Und ich werde das
einfach aus dem Weg räumen. Und was dies tun wird, ist,
dass es alles braucht, was ein Variablenwert ist, und es wird unserer neuen
Variablen sagen, dass es sich um diesen Wert handelt. Wenn wir also diesen Knoten laufen ließen, sagen wir, bei Beginning play, fange ich einfach an
, Notre zu spielen. Steck das ein. Jetzt, wenn das Spiel beginnt, wird
unsere neue Variable auf den Wert gesetzt , auf den
unsere andere
Variable gesetzt ist. Wenn ich also meine
andere Variable auswähle, kannst
du sehen, dass
ich
meinen Blueprint kompilieren muss , also mache ich das. Wenn ich also die anderen Variablen setze, Standard auf true, und wenn
ich zu meiner neuen Variablen gehe, ist der Standard falsch. Dies wird nun unserer neuen
Variablen sagen, dass sie jetzt wahr sein soll. Und wir können das überprüfen, wenn ich schnell eine Druckzeichenfolge
hinzufüge die Ausgabe
meines neuen
Variablensatzknotens mit der String-Eingabe
verbinde . Und diese Ausgabe ist im Grunde
die gleiche wie bei einem Knoten. Also nur um deinen Code
sauber zu halten, oder du kannst das verwenden, anstatt einen neuen Knoten
erstellen zu müssen. Jetzt, wenn das Spiel beginnt, würden
wir erwarten, dass unsere
Druckzeichenfolge true
ausgibt, weil das ist,
worauf unser anderer Vokal, andere Variable gesetzt ist. Wenn ich also ziehen kann und auf Play drücke, können
Sie sehen, dass der Druck
wahr ist. Und wenn ich meine
andere Variable in false ändern würde, werden
Sie sehen, dass sie falsch lautet, wenn wir
auf Play klicken. Das
war's also für dieses Video. In unseren nächsten Lektionen werden
wir uns mit
bestimmten Variablentypen und einigen Knoten befassen, die häufig mit diesen Variablen
verwendet werden.
6. Variablen (Booleans): Hallo zusammen. In dieser Lektion
werden wir uns Booleans genauer ansehen. Boolesche Variablen werden verwendet, um einen true- oder false-Wert zu speichern, aber sie können auch verwendet
werden, um zu steuern , welcher Code in Ihrem Projekt
ausgeführt wird. Und sie können auch das
Ergebnis bestimmter Tests sein. Wenn wir zum Beispiel
überprüfen würden, ob a größer als b ist, wäre
das Ergebnis dieses Tests ein boolescher Wert, weil es entweder wahr oder falsch
wäre. Um loszulegen, werde
ich einige Beispiele dafür
erstellen wie Booleans steuern können
, welcher Code ausgeführt wird. Und wir werden das tun und brauchen ThirdPersonCharacter Blueprint. Also mache ich
das einfach auf. Und hier werden
wir neue Variablen erstellen. also in meinem Blueprints-Panel Klicken Sie also in meinem Blueprints-Panel auf die Schaltfläche Neue Variable, und ich nenne
mein Beispiel Boolean. Und meins ist bereits auf
Boolean eingestellt, aber wenn dies nicht der Fall ist, können
Sie einfach
hier auf das Dropdown klicken und
den booleschen Typ auswählen. Und wir werden
kompilieren, damit unsere Standardwerte hier
im Detailbereich angezeigt werden. Wenn Sie jemals eines dieser Panels vermissen
, können
Sie sie jederzeit einschalten und die Fenster werden hier heruntergefahren. Wir lassen
den Standardwert ist
false, da wir das
tatsächlich mithilfe von Code
ändern werden. Wir beginnen also damit, einen Tick-Knoten zu
erstellen. Wir klicken also mit der rechten Maustaste auf das
Ereignisdiagramm, suchen nach Technologie und erstellen
das Tick-Event. Nun, wenn Sie sich an
unsere vorherige Lektion erinnern, wird jedes Mal
ausgeführt, wenn ein
Frame aus unserem Spiel gezogen wird. Als nächstes nehmen wir
unser Beispiel Booleans. Und wir werden uns davon
zurückziehen und nach Grunge
suchen. Wenn wir es
richtig buchstabieren, können
wir nach Marken suchen und den
Knoten schaffen, der mit unserer Veranstaltungstechnologie
verbunden ist. Also jetzt wird jeder einzelne Frame, dieser Verzweigungsknoten ausgeführt. Was ein Zweigknoten
tut, ist im Grunde nur die boolesche
Variable zu
überprüfen, die an ihn
angeschlossen ist , und führt entweder
true oder false aus,
je nachdem , ob die boolesche Variable wahr oder falsch
ist. Also fangen wir damit an, dass wir einfach ein paar Print-Strings
erstellen. Also ziehen wir uns aus dem Wahren heraus. Wir suchen nach einer Druckzeichenfolge. Und das ist nur ein Knoten
, der bei
jeder Ausführung Text auf
dem Bildschirm unseres Spielers ausdruckt . Also sage ich, ich setze das auf wahr. Und ich kopiere und füge das ein und verbinde es mit dem Falschen. Und ich
setze das einfach auf false. Und das bedeutet nur
, dass, wenn unsere echte PIN auf dem Bildschirm ausgeführt wird und
wenn unser falscher Stift gelaufen ist , die
Leute auf dem Bildschirm laufen. Also ich zeige es dir jetzt, der
Standardwert ist immer noch falsch. Wir sollten also erwarten, dass
die Leute rennen, wenn wir planen, der Editor wird auf
Play klicken und Sie können sehen, dass
false ausgeführt wird. Wenn wir akzeptieren, ändern wir unseren
booleschen Wert in true und klicken auf Play. Sie können sehen, dass
true läuft. Das Coole an
Blaupausen ist, dass wir diesen Code
tatsächlich in Echtzeit
laufen sehen können . Wenn ich also zu meinem
ThirdPersonCharacter zurückkehre während das Spiel noch läuft, siehst
du hier das
Debug-Dropdown. Und wenn ich den
ThirdPersonCharacter auswähle, haben
wir nur eine
Option, da es nur einen ThirdPersonCharacter
Blueprint im Level gibt. Also sammeln wir das einfach.
Sie können sehen, dass wir sehen können Arctic Node jeden Frame
ausführt, der unseren Branch ausführt, was unser
Beispiel Boolean überprüft. Und wenn wir es jetzt speichern, sieht man
tatsächlich, dass es wahr ist. Also true läuft auf unserer Druckzeichenfolge läuft
und es wird true ausgedruckt. Jetzt wollen wir in der
Lage sein,
unseren Booleans-Wert während des
Spiels tatsächlich zu ändern unseren Booleans-Wert während des , damit wir ändern können
, welcher Code ausgeführt werden soll. Also verlassen
wir unseren Spielmodus. Und wir werden einen neuen Eingabeknoten
erstellen. Und ich
suche danach mit der linken Maustaste. Und das wird
immer dann ausgeführt , wenn unsere linke
Maustaste gedrückt wird. Und dann wird das Release immer dann ausgeführt wenn die linke
Maustaste losgelassen
wird, wird herausgezogen und wir
werden einen Zweigknoten verwenden. Jetzt gibt es tatsächlich ein paar Möglichkeiten Branch Nodes zu erstellen. Eine davon ist, B auf
der Tastatur gedrückt zu halten und dann mit der
linken Maustaste zu klicken sehen, dass ein Verzweigungsknoten
erstellt wird oder Sie können mit der rechten Maustaste klicken
und danach suchen. Das bringt auch
den Zweigknoten hoch. Oder Sie suchen nach einem Brunch. Und das bringt
auch die Zweigknoten zum Vorschein, mit denen Sie
sich wohler fühlen. Wir werden
das mit der Presse verbinden. Wir nehmen unser Beispiel Boolean und fügen das
in die Bedingung ein. Sie können sehen, dass ich
es gerade ziehe und es wird es tatsächlich automatisch
mit uns verbinden, dem Zweigknoten für uns. Und was wir hier wollen, ist, wenn unsere linke
Maustaste gedrückt wird, wenn unsere aktuelle boolesche
Variable wahr ist, wir sie auf false setzen wollen. Also werde
ich das einfach in
false stecken und sehen, ob ich es auf true
ziehe, es wird einfach
automatisch eine Verbindung herstellen. Wir wollen also, dass es auf
false gesetzt wird, wenn es bereits wahr ist. Und wir werden
dieses verbundene Sub kopieren und in false einfügen. Und wenn unser aktueller
Wert falsch ist, wollen
wir ihn auf true setzen. Also sollte es
ungefähr so aussehen. Kompiliert das. Und jetzt können wir es testen. Und wieder drücke ich auf „Spielen“. Sie können sehen, dass es aktuell wahr ist ,
denn das ist unser
Standardwert. Wenn ich die linke
Maustaste drücke, wird es falsch. Und wenn ich es weiter drücke, können
Sie sehen, dass es die Druckzeichenfolge
ändert. Jetzt gibt es ein paar andere häufig
verwendete Knoten mit Boolean. Ich möchte
Ihnen also zeigen, dass wir, wenn wir
zu unserem ThirdPersonCharacter
Blueprint zurückkehren , unser Beispiel Boolean nehmen und uns daraus ziehen und nach allen suchen. Sie können sehen, dass wir
ein paar verschiedene oder Knoten haben. Also werde ich einfach
den booleschen OR-Knoten verwenden. Und Sie können sehen, dass
wir zwei Eingaben für Boolean erhalten. Und dann ist eine Ausgabe, die ich wissen
möchte , im Grunde genommen überprüft, ist eine ihrer Eingaben wahr? Ist dies der Fall,
wird true zurückgegeben. Wenn sie alle falsch sind, wird falsch zurückgegeben. Und wir können mehrere Eingaben hinzufügen. Wir könnten also zusätzliche
Eingaben hinzufügen, wenn wir wollten. So ist zum Beispiel unser
boolescher Beispiel-Wert auf true gesetzt, aber alle anderen sind falsch. Das wird also immer noch ausgeführt oder, oder oder Node
oder wird immer noch als true ausgegeben. Also können wir das testen. Sie können sehen, dass es wahr läuft. Aber wenn ich mein Beispiel ändere,
Boolean true, false. Alle Eingaben sind jetzt falsch. Also werden wir jetzt false zurückgeben. Sie können jetzt sehen, dass es falsch
zurückgibt. Ein ähnlicher Hinweis sind
die Antiknoten. Wenn wir also unser Off jetzt löschen, ziehen
wir wieder aus unserem Beispiel
Boolean heraus und suchen nach dem booleschen Knoten,
und wir können ihn auswählen. Und das funktioniert auf ähnliche Weise. Sie nimmt mehrere boolesche Eingaben entgegen und gibt eine boolesche Ausgabe zurück. Und was das bewirkt,
ist, dass im Grunde alle Eingaben wahr
sein müssen, damit sie true ausgeben. Im Moment ist unser
boolescher Beispiel-Wert falsch und dieser zusätzliche ist ebenfalls
nicht typisiert, also ist er falsch. Aber wenn ich mein
Beispiel boolean in true ändere, haben wir
jetzt eine true
und eine false Eingabe. Jetzt ist die Ausgabe falsch,
da beide nicht wahr sind. Damit wir das testen können, klicken Sie auf Play. Man
sieht, dass es falsch ist. Aber wenn wir akzeptieren und ich diese Option
ankreuze, wird
jetzt, wo beide wahr sind, true C ausgeben. Nun, das sind Notizen,
die Sie sehr oft mit
Verzweigungsknoten
verwenden werden und können Sie müssen nicht mehrere Zweigknoten haben, wenn Sie mehr als eine Variable
testen. Wenn Sie also beispielsweise
freie Variablen benötigen, um wahr zu sein bevor ein
Verzweigungsknoten ausgeführt werden soll, verwenden
Sie eine Anode. Ein weiterer häufig verwendeter
Knoten ist der Knoten. Wenn wir uns also hinziehen und
nach nichts suchen, können
wir, Mal
sehen, NICHT Boolean verwenden. Und das konvertiert oder
ändert im Grunde oder Boolean in das Gegenteil von dem, was
es derzeit ist. Also wenn ich das verbinde, ist
momentan unser Boolescher Wert für Baum angekreuzt, aber das wird
das umkehren und es zum Fuchs machen. Wir können also sehen, dass es
definitiv wahr ist, aber es wird die Leute leiten. Sehen Sie, wenn wir zurückgehen und
dies
jetzt auf false setzen , wird kein Knoten
das
tatsächlich konvertieren und es zu einem True machen,
während wahrer Code ausgeführt wird. Nun, es gibt noch eine weitere Notiz, die
ich euch zeigen möchte, und das ist der Equals-Knoten. Es wird also jetzt kein
Knoten gelöscht und ich ziehe heraus, und ich suche nach Gleichen. Mach eins oder zwei gleich. Ich mache das auch gerne,
weil es normalerweise genau die Form anzeigt, die wir wollen. Und das ist r equals note hier, Sie können sehen, dass es
zwei boolesche Eingaben
und eine boolesche Ausgabe hat . Wenn ich das hier mit
unserer Brunch-Note verbinde, heißt
das im Grunde, dass unsere
beiden Eingaben genau gleich sein
müssen. Derzeit sind beide falsch. Unser Beispiel boolean
ist also auf false gesetzt und seine zweite Eingabe
ist auf false gesetzt. Das wird also tatsächlich wahr , weil beide
genau den gleichen Wert haben. Also können wir das im Spiel testen. In C. läuft es wahr obwohl unsere Werte tatsächlich falsch
sind. Und wenn ich unser
Beispiel boolean auf true setzen würde, aber diesen Wert belassen, ist dieser Wert falsch. Es wird falsch ausgeführt
, weil sie nicht
mehr den gleichen
Wert haben. Und wir können das nochmal überprüfen. Drücke Abspielen. Man sieht Leute rennen. Nun als Randnotiz, E5, wenn Sie
diese Knoten erstellen würden, die ich Ihnen
gezeigt habe , ohne aus einem Boolean
herauszuziehen, hätten
sie eigentlich nicht
diese roten Ein- und Ausgänge. Wenn ich zum Beispiel hier nach r equals note suche
, können
Sie sehen, dass es eine boolesche Ausgabe
hat weil ein equals-Knoten immer true oder false
zurückgibt. Aber diese Eingaben sind
tatsächlich ausgegraut. Und der Platzhalter,
was bedeutet, dass sie tatsächlich ein
beliebiger Variablentyp sein
können. Ein paar Möglichkeiten, diese
in unseren booleschen Typ umzuwandeln. Also können wir entweder einfach aus unserem Beispiel Boolean
herausziehen, das
verbinden und es wird automatisch für uns konvertiert. Oder wir können mit der rechten Maustaste auf
diese ausgegrauten Penta klicken und zu Pin konvertieren
gehen. Sie können sehen, dass wir es in viele
verschiedene Variablentypen
ändern können . Aber Sie können sehen, dass wir
dort unsere boolesche Option
haben , also können wir diese auswählen. Und jetzt wandelt es unseren Knoten
in diesen booleschen Typ um. Das war's also für
unsere Lektion über Booleans. Wir werden
sie in
zukünftigen Lektionen viel häufiger verwenden , da Booleans ziemlich cooler Teil des Programmierens
sind. Machen Sie sich nicht zu
viele Sorgen, wenn Sie
sich nicht an alle Knoten
erinnern, die
wir wieder verwendet haben . Diese werden wir in zukünftigen Lektionen viel
häufiger verwenden.
7. Variablen (Ganzzahlen und Schwimmer): Hallo zusammen. In dieser Lektion werden wir
die
Variablentypen float und integer behandeln . Jetzt werden sowohl die
Variablen float als auch integer zum
Speichern von Zahlenwerten verwendet. Der Unterschied
zwischen den beiden besteht darin Zahlen nur ganze Zahlen
speichern können,
was bedeutet, dass sie keinen Dezimalkommawert haben
können, während ein Gleitkommawert Zahlen speichern
kann , die einen
Dezimalkommawert haben. Beide können positive und
negative Werte speichern. Wir beginnen also damit,
zwei neue Variablentypen zu erstellen. Ich werde
zwei neue Variablen erstellen. Die erste, die ich nur
example float nenne , und
die zweite, ich nenne es example
in integer, wird die Typen
so ändern, dass wir Integer wollen. Dann wählen
wir für unser Beispiel float auf welchem Compiler aus. Jetzt, wo unsere
Beispiel-Ganzzahlen ausgewählt sind, können
Sie
im Standardwert sehen dass wir einen Zahlenwert festlegen können. Also kann ich das zum Beispiel
auf 99 setzen, aber ich kann einen
Dezimalpunkt
hinzufügen und einen Dezimalkommawert hinzufügen. Sagen wir, wenn ich das versucht habe, wenn ich die Eingabetaste drücke, wird
es entfernt,
weil eine Ganzzahl nur ganze Zahlen speichern
kann. Wenn ich meine
Float-Variable auswähle und hier zum Standardwert
gehe können
Sie sehen, dass sie
tatsächlich eine Dezimalzahl 0 hat. Und ich kann das
auf 99,99 Hand setzen, und Sie können sehen, dass der Wert
tatsächlich korrekt gespeichert wird. Als nächstes zeige ich Ihnen, wie wir unsere Float- und
Integer-Variablen setzen und abrufen
können , was sehr
ähnlich ist , wie wir mit unserem Boolean
gearbeitet haben. Also werde ich diesen Prozess schnell
durchgehen. Ich werde einfach mit der
rechten Maustaste klicken und
eine Eingabe mit der linken Maustaste erstellen , wie wir es mit unserem Boolean getan haben. Und wir bekommen unser
Beispiel Float Star mit, und wir
werden einfach Get
Float aus unserem gedrückt auswählen . Ich wähle einfach
den Druck-String-Knoten. Und das ermöglicht es uns, einfach unseren aktuellen Wert zu drucken. Wenn wir es in die Zeichenfolge stecken, erhalten wir diesen
zusätzlichen Knoten. Alles was wir tun, ist unseren Flötenwert in
einen String-Wert umzuwandeln. Und ein String-Wert ist nur Text. Und das ermöglicht es unseren
Print String-Knoten, den Float-Wert
tatsächlich auszugeben. Wenn wir jetzt auf
Play klicken und ich mit der linken Maustaste klicke, können
Sie sehen, dass unser Standardwert
ausgedruckt wird. Und der Prozess ist der
gleiche für unsere Ganzzahl. kriegen wir einfach hin. Ich ziehe es direkt
in unsere String-Eingabe. Und Sie können sehen, dass es
uns einen anderen Knoten gegeben hat, der dem ersten ähnlich
aussieht, aber dies konvertiert eine
Ganzzahl in eine Zeichenfolge. Also werde ich die Zeichenfolge drucken
können, um sie anzuzeigen. Dann, wenn wir auf Play klicken
und ich die Maustaste verließ, können
Sie sehen, dass es
sich um einen Integer-Wert handelt. Als Nächstes werden wir anfangen, unsere Werte zu
ändern. Was wir also tun können, ist rechten Maustaste zu klicken und einen Tick-Knoten zu verwenden. Daraus werden wir unseren ganzzahligen Wert
erhöhen. Wir erhalten also einen aktuellen
Integer-Wert. Wir werden uns hinziehen,
wir werden das Plus nutzen. Und das ist ein Add-Knoten. Und es funktioniert
so ziemlich, wie Sie es sich vorstellen können. Es nimmt den aktuellen Wert
unserer Ganzzahl und fügt
ihm einen Wert hinzu. Also setze ich das auf eins. Ausgabe wird also unser aktueller
Beispiel-Ganzzahlwert plus eins sein. Dann müssen wir
unseren Beispiel-Integer setzen. Also
ziehe ich einfach raus, mache SAP,
stecke das in unseren Tick-Knoten
und stecke den Eingang in
unseren zusätzlichen Knoten. Jetzt wird jeder Frame, unsere Beispiel-Ganzzahl erhöht und wenn wir die
linke Maustaste verlassen, wird
der aktuelle Wert ausgegeben. Also wird es kompiliert und auf „Play“ gedrückt Wenn ich also Plus drücke, können
Sie sehen, dass es
bereits bei 249 liegt. Und das liegt daran, dass unser
Tick-Knoten jeden Frame ausführt. Es wird also sehr schnell
zunehmen. Und wenn ich klicke, steigt der
Wert stark. Als Nächstes machen wir
dasselbe mit unserem Float-Wert. Also kehren wir zu unserem
Charakter-Blueprint zurück und entfernen diesen Code hier. Und wir werden
dasselbe tun, aber mit Float. Also ziehen wir uns in die Länge, tun es. Verbinde das mit unserem Tick-Knoten. Dann wollen wir das
aktuelle Beispiel float plus bekommen. Wir verwenden also einen
Add-Knoten und können Dezimalkommazahlen
hinzufügen. Wir könnten also sagen, 1.25 hinzufügen und die Ausgabe
mit unserem Beispiel float verbinden. Also nehmen wir bei jedem Frame den
aktuellen Float-Wert plus 1,25. Und dann das Ergebnis, das wir
jetzt auf unser Beispiel setzen, float. Und dann schließen wir uns hier
unten mit unserer
linken Maustaste an, wir haben unsere
Print-String-Anzeige, unseren Float-Wert anstelle
unseres Integer-Werts. Wenn wir jetzt auf „Spielen“ klicken, können
wir klicken und Sie können
sehen, dass es in Dezimalkommazahlen jetzt
in Dezimalkommazahlen steigt, weil wir unseren Float
verwenden. Als Nächstes führe ich
Sie durch einige
der am häufigsten verwendeten Knoten
mit Floats und Integern. Der Grund, warum wir
diese beiden Variablen zusammen verwenden, ist, dass sie
beide eine Anzahl von
Variablen sind und beide sehr ähnliche Knoten verwenden. Und sie können
tatsächlich auch mit einigen
Knoten
kombiniert werden . Wenn wir also zu unserem
ThirdPersonCharacter zurückkehren, werden wir diesen Code
hier oben los , um uns ein
bisschen Platz zu geben. Und wir beginnen mit den Basisknoten, die wir
bereits verwendet haben. Also werde ich einfach
sowohl Float als auch Integer bekommen. Jetzt ist der erste R
plus Knoten, add node. Wir können erstellen, dass wir
die Eingaben zusammenfügen können. Und gib das Ergebnis aus. Wir können neue Pins hinzufügen,
wenn wir möchten, um mehrere
Variablen zusammenzufügen. Wir können auch
neue Flussvariablen erstellen wie dies einen Float nennen. Stellen Sie dies auf einen Float ein. Wir können das
einer Float-Variablen einstecken. So können wir mehrere
Flussvariablen zusammenfügen. Jetzt, da Sie fünf Jahre alt waren, können
wir
diese Eingaben tatsächlich auf zwei
verschiedene Variablentypen ändern . Also sagen wir, ich wollte meinen Beispiel-Float und meine
Beispiel-Ganzzahl zusammenfügen. könnten wir machen. Wenn wir jetzt mehrere
Pins haben und sie entfernen möchten, können
wir sie einfach mit der rechten Maustaste anklicken und
sie entfernen. Also werde ich einfach
diese beiden zusätzlichen entfernen. Deshalb möchte ich diese
beiden Werte miteinander kombinieren. können wir jetzt machen. So können wir mit der rechten Maustaste
oder einem zusätzlichen Pin klicken, zu Pin konvertieren
und Integer auswählen. Jetzt können wir unsere Ganzzahl m einstecken. Und jetzt wird das Ergebnis von
Beispiel float plus
integer als Float
ausgegeben . Also könnten wir unser Beispiel
float auf diesen Wert setzen. Jetzt können wir das
im Spiel testen, wenn wir wollen. Wir können das hier hinstellen. Verbinden Sie dies mit unserer
linken Maustaste,
um das Ergebnis
in unsere Druckzeichenfolge einzufügen. Jetzt
sagen wir Add 1.25, 1.25. Und das werden wir noch ergänzen. Wenn wir auf „Spielen“ klicken,
erwarten wir, dass es 3,25 sein wird. Und es
steigt tatsächlich, weil wir diesen Float-Wert
festlegen. Jedes Mal, wenn wir klicken, erhöhen
wir jetzt
den Wert, weil unser Beispiel-Float erhöht
wurde. Jetzt kann dieser Prozess mit der
Konvertierung eines der Pins in eine Ganzzahl mit
den meisten Knoten
verwendet werden mit
den meisten Knoten
verwendet , die ich Ihnen zeigen
werde. Wenn wir also weitermachen, nehme
ich ein anderes
Beispiel, Float-Hair. Wenn wir herausziehen und nach
Multiplizieren suchen, können
Sie dieses Symbol hier verwenden, oder Sie können nach Multiplizieren suchen. Das gibt uns einen multiplen Knoten. Das funktioniert so, wie Sie es sich
wahrscheinlich vorstellen. Es nimmt die Eingaben, multipliziert sie zusammen
und gibt eine Ausgabe zurück. Wir können mit der rechten Maustaste auf eine
der Eingaben klicken und sie
ebenfalls in eine Ganzzahl konvertieren. Jetzt haben Sie vielleicht bemerkt, dass ich es
mache , damit die
Ausgabe ein Float ist. Der Grund, warum ich
das mache, ist, wenn wir das
umgekehrt gemacht haben, also wenn ich
meine Ganzzahl hier kopiere und einfüge und wir einen Anzeigenknoten erstellt haben. Wenn ich das in einen Float konvertiere, können
Sie sehen, dass die
Ausgabe jetzt tatsächlich in einen Float
geändert wird ,
obwohl es eine Ganzzahl war. Der Grund dafür ist,
dass
wir, wenn dies eine Integer-Ausgabe wäre, wenn dies eine Integer-Ausgabe wäre, jeden Wert verlieren würden, welchen Dezimalkommawert oder welche
Float-Variable
auch immer haben mag. Also ändert es
das jetzt automatisch in einen Float. Also weiter, wir
haben multiplizierten Knoten. Das können wir auch
mit unserer Ganzzahl machen. Wenn ich also diese Anzeigennotiz lösche, die
hier herausgezogen wird, können
wir nach multiplizieren,
multiplizieren Knoten suchen , und
das gibt uns einen ganzzahligen Multiplizierknoten. Wir haben auch die
Subtrahierknoten. Also wenn ich
diese Notizen einfach lösche, können
wir einen Subtrahierknoten verwenden. Und Sie können hier nach
dem Liniensymbol suchen, oder Sie können nach subtrahieren suchen. Es liegt an dir. Und das gibt uns
dasselbe wie unser Additionsknoten, aber es subtrahiert die
Eingaben und gibt die Ausgaben zurück. Auch hier können wir
diese Eingaben in eine Ganzzahl konvertieren, oder wenn wir
auf einem Integer-Knoten wollten, könnten
wir sie in einen Float konvertieren. Und genau wie zuvor wurde die
Ausgabe wieder in einen Float umgewandelt, da wir
einen Float-Eingang hinzugefügt haben. Das sind also die
grundlegenden Möglichkeiten, wie wir die Werte unserer Variablen
manipulieren können . Wir können diese neuen Werte festlegen. Es gibt aber auch Möglichkeiten,
unsere Variablen zu überprüfen. Also, wenn wir diese
Minusknoten vorerst loswerden, gibt es auch Knoten
wie den Größer-als-Knoten. Wenn ich also
aus meiner Ganzzahl herausziehe, suche
ich nach größer als. Sie sehen, wir können entweder
nach mehr suchen. Wenn ich also nach größer suche, können
Sie sehen, dass es angezeigt wird, oder Sie können das
Größer-als-Zeichen verwenden und diesen Knoten erstellen. Und das gibt uns
zwei Eingaben, die Integer
sind, und eine boolesche
Ausgabe. Das wird also im Grunde prüfen, ob der a-Wert,
der oberste Wert größer als
der b-Wert oder der unterste Wert
ist der oberste Wert größer als . Ist dies der Fall, wird ein wahrer boolescher Wert
zurückgegeben. Und wenn es falsch ist, wird ein falscher boolescher Wert
zurückgegeben. Wie bei unseren vorherigen Knoten können
wir auch hier die Eingangspins konvertieren. Wenn ich also konvertiere, können wir das in einen Float
ändern. Wir können also tatsächlich überprüfen, ob unsere Ganzzahl größer
als unser Float-Wert
ist. Und das wird
immer noch einen booleschen Wert zurückgeben , da dieser immer entweder wahr oder falsch
sein wird. Wir können
dasselbe mit weniger als machen. Wir können also
aus unserer Ganzzahl herausziehen und das
Kleiner-als-Zeichen verwenden, oder
wir können nach weniger suchen. Und das gibt uns den
gleichen Knoten, aber umgekehrt. Also wenn a kleiner als b ist, dann wird es true zurückgegeben. Wenn a größer als b ist, wird falsch zurückgegeben. Es gibt auch
Größer-als- oder Gleich-Knoten. Wenn ich also das
Größer-als-Zeichen in C mache ,
haben wir mehr gleich. Und das überprüft nur, ist ein größer als B oder ist es? Das gleiche wie B. Wenn es größer als b ist,
wird true zurückgegeben. Wenn es mit B identisch ist,
wird auch true zurückgegeben. Und wenn es kleiner als b ist, wird
es false zurückgeben. Und dann haben wir den gleichen Knoten, aber auch mit weniger Sonne. Wir können also weniger als das Gleiche tun. Und das macht
dasselbe, aber umgekehrt. Also muss a entweder mit unserem untersten Wert übereinstimmen oder kleiner
als unser unterster Wert sein. Und das wird wieder wahr werden. Da diese Knoten nun eine boolesche Variable
ausgeben, können
wir diese tatsächlich verwenden, um eine
boolesche Variable zu sagen , wie
wir es in unserer
vorherigen Lektion getan haben. Wenn ich also eine neue Variable erstelle
und sie Boolean nenne, können
wir diese
Größer-als-Knoten oder
kleiner-als-Knoten verwenden , um eine boolesche
Variable zu setzen, wenn wir möchten. Wir können diese Knoten auch verwenden, um einen Zweigknoten zu
steuern. Wenn ich also nach Branch suche
und einen Branch-Knoten erstelle, wie wir es in unserer letzten Lektion getan
haben, können wir steuern, welcher Code ausgeführt
wird,
abhängig vom Ergebnis unseres
größer als oder kleiner als. Hinweis. Ein weiterer Hinweis, den
ich
euch zeigen wollte , ist der Equals-Knoten. Das funktioniert nun ähnlich wie unser boolescher Gleichheits-Knoten. Wenn ich aus
meiner Ganzzahl herausziehe und
die beiden Gleichheitssymbole mache und sehe, dass
wir einen Gleichheitsknoten erstellen. Und das überprüft im Grunde, ob diese beiden
ganzen Zahlen gleich
sind und gibt einen booleschen Wert aus
, den wir dann für Dinge wie einen
booleschen Knoten oder einen Zweigknoten
verwenden können . Im Gegensatz zu den vorherigen Knoten können
wir die Eingabe
auch in einen Float konvertieren, wenn wir möchten. Wir können Float
mit doppelter Genauigkeit wählen ,
weil das
unsere Variable war. Wir können unser
Beispiel float damit verbinden. Und das wird überprüfen,
ist unsere Ganzzahl genau die gleiche wie
unsere Float-Variable? Ist dies der Fall, geben wir true zurück, wenn sie anders sind
, geben wir false zurück. Integer haben auch
eine andere Möglichkeit, steuern, welcher
Code ausgeführt wird. Also, wenn ich diesen
Code vorerst hier lösche und unsere
Beispiel-Ganzzahl nach oben ziehe. Wenn ich herausziehe und nach switch
suche, kannst
du switch on int finden. Und das gibt uns einen
Hinweis, mit dem wir steuern können , welche Ausgabe in Abhängigkeit von
unserem ganzzahligen Wert
ausgeführt wird . Derzeit sind unsere
Integer-Werte also zwei. Wir haben einen Standardstift. Was passiert also, wenn ich jetzt die linke
Maustaste gedrückt hätte , nur unser Standardstift würde laufen und
nichts anderes würde passieren. Aber wenn wir einen neuen Stift hinzufügen, können
Sie sehen, dass ihm
eine Stecknadel hinzugefügt wurde, die 0 sagt. Wenn ich noch ein paar Pins hinzufüge, siehst
du, dass wir 012 haben. Wenn ich nun
die linke Maustaste drücken würde, würden
die beiden Stifte rumlaufen, weil unsere Ganzzahl auf zwei gesetzt
ist. Wenn ich das auf 0 ändern würde, würde unser 0-Stift in Testis oder unter
Verwendung einer Druckzeichenfolge
laufen. Wir setzen das einfach auf 0. Ich kopiere das
und füge es ein und wir setzen eins zu eins und eins zu zwei. Abhängig davon, was unser
Beispiel-Ganzzahl ausgeführt wird,
werden
die verschiedenen Ausgaben nun ausgeführt, wenn wir auf Play klicken. Und ich habe die Maustaste verlassen,
du kannst sehen, dass 0
läuft , weil ich den Wert auf 0
gesetzt habe. Wenn ich es auf eins setze, wird unser ausgeführt und das wird unsere eine Druckzeichenfolge ausführen. Sie können sehen, dass jetzt einer läuft. Dies kann hilfreich sein,
wenn Sie
je nach Wert
unterschiedlichen Code ausführen möchten . Und wenn ich sagen würde, setze
diesen Wert auf 99, jetzt gibt es keinen 99-Pin-Ausgang. Stattdessen
wird unser Standardstift
stattdessen einfach ausgeführt , da es für 99 keine
passende Ausgabe gibt. Wenn wir
dann zu irgendeinem Zeitpunkt einige dieser Ausgänge entfernen
möchten, können
wir einfach mit
der rechten Maustaste auf den Stift klicken und Ausführungsstift entfernen, um diese zu entfernen. Zuletzt möchte ich Ihnen
zeigen, wie wir einen Float
verwenden können , um eine Ganzzahl zu setzen. Dies ist ein bisschen
anders als normal, da unser Float einen
Dezimalkommawertgewinner haben könnte und unsere Ganzzahl diesen Wert nicht
speichern kann. Also müssen wir entweder auf- oder
abrunden oder schweben. Wenn wir also hier unseren
Beispiel-Float bekommen, setzen
wir unseren Beispiel-Ganzzahl. Wir verbinden das hier mit unserer
linken Maustaste. Wir können herausziehen und
direkt in unsere Ganzzahl einstecken. Aber das wird
uns diesen Knoten geben und dieser wird den Wert aufrunden, abrunden oder schweben. Wenn dies also sagen wir 1,25 ist, wird dieser
Wert auf eins abgerundet, und dann wird
Integer auf Eins gesagt. Also, wenn ich hier eine
Druckzeichenfolge hinzugefügt habe, können wir sehen, was das Ergebnis im Spiel ist. Wir erwarten, dass dieses Ergebnis eins ist, wenn ich die Maustaste verlassen habe, und selbst wenn ich
diesen Wert auf 1,99 setze, wird
der Wert immer noch abgerundet. Wenn ich also erneut auf „Spielen“
klicke, kannst du sehen,
dass dieser Wert immer noch auf eins abgerundet wird. Es gibt aber auch andere Knoten
, die es uns ermöglichen, float auf eine
andere ganze Zahl
abzurunden . Wenn wir also zu unserem
Charakter-Blueprint-Kopf zurückkehren und den Knoten löschen. Das ist nur der
Standardknoten, wenn wir
von einem Float zu einem Integer ziehen . Wir können uns aber auch aus
unserem Float herausziehen und nach Runde suchen. Und wir können den runden Knoten verwenden
, der
unseren Float-Wert einfach auf die
nächste ganze Zahl rundet . Also wenn ich das hier oben verbinde, ist unsere Variable
derzeit 1.2. Als wir also die linke Maustaste ließen, hatten
wir erwartet, auf eins
abzurunden. Wenn wir also auf Play klicken,
können Sie sehen, dass es eine
ausdruckt. Und wenn ich
dies auf 1,8 erhöhen würde, würden
wir erwarten, dass es auf zwei runden wird. Sie sehen, dass das richtig
funktioniert. Jetzt brauchen
wir nicht denselben Konvertierungsprozess, wenn wir einen
Float auf eine Ganzzahl setzen wollen, da Floats
ganze Zahlen problemlos anzeigen können. Wenn ich also diesen Code löschen würde, würden
wir unseren Float setzen. Und wir haben hier unsere
Beispiel-Ganzzahl. Ich werde diese Variable einfach
wiederverwenden. Wenn wir das anschließen, können Sie
sehen, dass es uns nur
diese kleine Notiz gibt , die
es von Integer in Flow umwandelt. Und es findet keine Rundung statt, da unsere
Ganzzahl eine ganze Zahl ist. Und unser Float kann
ganze Zahlen gut speichern. Sie können also unsere
Ganzzahl sehen, sie ist 99. Wenn wir die Maustaste verlassen, wird unser
Float auf heute Abend geändert. Also verbinde ich
das einfach mit unserer Druckzeichenfolge. Wenn wir also auf Play klicken, werden
Sie sehen, dass
es
99 ausgibt , weil es Float
als Punktwert ist, aber auf den
richtigen Wert unserer Ganzzahl gesetzt wird. Nun gibt es viele
andere mathematische Knoten,
die in der Engine integriert sind, die wir in
dieser Lektion
nicht behandeln werden , da
es viele gibt. Aber wenn wir
aus unserer Ganzzahl herausziehen, können
Sie nach unten scrollen
und die Masse finden. finden Sie alle
möglichen Knoten Hier finden Sie alle
möglichen Knoten, mit denen Sie spielen
können, wenn Sie möchten. Die meisten von ihnen sind
ziemlich spezifisch, sodass Sie sie wahrscheinlich nicht zu oft
verwenden werden. Aber was ich hier gezeigt habe, sind die am häufigsten verwendeten Knoten. Und genau das
Gleiche können Sie mit den Floats machen. Wenn ich von dort wegziehe
und wir einfach nach unten scrollen, können
wir die Mathematik finden. Sie können sehen, dass Floats
noch mehr da sie ein bisschen
vielseitiger sind , da sie einen Dezimalpunkt
haben. Das
war's also für diese Lektion. Genau wie der Boolesche Wert werden
wir in zukünftigen Lektionen
viel häufiger
Floats und Integer verwenden , nur weil sie
der Kernbestandteil jeder Mathematik in der Engine sind. Sie werden sich also
in Zukunft gut mit ihnen
vertraut machen.
8. Variablen (Namen, Text und Zeichenfolgen): Hallo zusammen. In dieser Lektion gehen wir
auf die Variablentypen Name, Zeichenfolge und Text ein. Alle diese Variablen werden zum Speichern von Text
verwendet, und jeder Variablentyp hat einige Einschränkungen und
Vorteile bei der Verwendung. Zunächst haben wir den Variablentyp
name. Dies wird jetzt verwendet, um
Texte zu speichern , die der Spieler normalerweise
nicht sieht. Es dient eher dazu, auf
bestimmte Dinge im Code zu verweisen. Wenn wir zum Beispiel
eine Bone- oder Sockets-Position ermitteln möchten , verwenden
wir eine
Namensvariable, um dem Motor mitzuteilen für
welchen Knochen oder Sockel wir Informationen erhalten
möchten. Aus diesem ist
die Namensvariable ziemlich begrenzt. Sie benötigt nicht alle
Knoten, auf die Strings und
Textvariablen Zugriff haben. Wir beginnen also damit, unsere Namensvariable zu
erstellen. Also erstelle ich einfach
eine neue Variable und nenne diesen Beispielnamen. Wir setzen unseren
Variablentyp auf die Namensvariable. Und wir werden kompilieren. Sobald das kompiliert ist, können
Sie sehen wir hier unseren
Standardwert haben, und dies ist nur ein
Standardlehrbuch , in das wir Text eingeben können. Also kann ich Hallo sagen. Dies ist eine Textvariable, die diese Informationen
speichert. Wie zu erwarten, wie bei unseren vorherigen Variablen können
wir
wie bei unseren vorherigen Variablen auch
diese Variable abrufen und setzen. Also können wir es hineinziehen
und einen Get-Knoten bekommen, oder wir können hineinziehen und
ihm einen gesetzten Knoten geben. Jetzt hat die einzige andere
Serie, die einen gesetzten Knoten hat eine Textbox,
in die wir auch
manuell Text eingeben können , wenn Sie möchten. Also können wir Hallo sagen. Und wenn dieser Knoten läuft, wäre
es sauer
Beispiel name2 hallo. Wenn wir
einen anderen Namenvariablentyp hätten, könnten
wir diesen natürlich direkt
in unseren Set-Node einbinden, um
unsere benannte Beispielvariable
auf einen anderen Wert zu setzen . Nun, weil alle unsere Variablentypen, die wir uns heute
ansehen,
Textvariablen sind. Sie alle speichern Text. Sie können alle ineinander umgewandelt
werden. Wenn ich also
eine neue String-Variable erstellen sollte, nenne ich dieses
Beispiel string. Die automatische Speicherung hat meine Zeit verlassen. Da haben wir's. Beispiel für eine Zeichenfolge. Wir können den String-Typ wählen. Und wenn ich meine String-Variable erhalte, können
Sie sehen, ob ich meinen Text herausziehe
und mich mit ihm verbinde, es gibt uns nur diesen
Konversionsknoten und das nimmt, was auch immer
unser Beispielstring ist, es ist der Textwert und setzt
ihn zu unserem Beispielnamen. Und das können wir tun und
das Gegenteil auch. Wenn wir also wollten, könnten wir
unsere Zeichenkette mit
dem Beispielnamen setzen . Und es gibt uns diesen
Konversionsknoten umgekehrt. String-Variablen sind die
flexibelsten Variablentypen des
Textes, ihnen stehen viel mehr
Knoten zur Verfügung als Texte oder
Namensvariablentypen bleiben. Aus diesem Grund kann es nützlich
sein, beispielsweise
einen Namen oder eine
Textvariable in eine Zeichenfolge zu konvertieren , diese Zeichenfolge zu bearbeiten
und sie dann
wieder in unseren Namen- oder
Textvariablentyp umzuwandeln. Da wir viel mehr bearbeiten können kodieren wir mit unserem String-Typ. Schließlich haben wir die Typen der
Textvariablen. Also erstelle ich
eine neue Variable. Ich nenne
diesen Beispieltext. Und wir setzen den Typ auf Text und kompilieren, damit wir hier unseren Standardwert
erhalten. Sie können sehen, wie unsere
vorherigen Variablen, wir erhalten ein Textfeld, damit wir Ihnen Text hinzufügen
können. Dies ist eine Textvariable, wir
zum Beispiel kompilieren können
, und das ist jetzt unser
Startwert für unseren Text. Jetzt werden Textvariablen
für die Texte verwendet , die
Spieler tendenziell sehen. Wenn Sie also ein Dialogsystem
oder ein Menüsystem oder
ähnliches hatten , sieht der Spieler tatsächlich die Textwerte. Wir neigen dazu, dafür
Textvariablen zu verwenden. Und der Grund ist,
dass es lokalisiert werden kann, was für die Konvertierung von
Text in verschiedene Sprachen verwendet wird, wofür unreal ein
eingebautes System hat. werden wir in
dieser Lektion nicht behandeln. Es ist jedoch wichtig, dass Sie
beim Erstellen Menüsystemen oder Texten
, die der Player sehen wird, Textvariablentypen verwenden,
damit Sie auf
dieses Lokalisierungssystem zugreifen können , das Ihnen Folgendes
ermöglicht
mehrere Sprachen. So können Texte auf die gleiche Weise abgerufen und
gesetzt werden, wie wir es mit unserer Zeichenfolge
und unseren Namensvariablen getan haben. Also können wir das rausziehen
und einen Get-Knoten bekommen. Und dieser Knoten, Sie können sehen,
dass er unserem
Namen auf Zeichenfolge ähnelt. Wir haben einen Texteintrag und können unseren Knoten auf
eine andere Textvariable
setzen. Oder wir können sagen, eine Zeichenfolge verwenden. Wir können unsere String-Variable bekommen. Wir können das direkt in unsere Texte einfügen und Sie
können sehen, dass es uns einen anders aussehenden
Konvertierungsknoten
gibt, aber es macht im Wesentlichen dasselbe,
was auch immer
die Beispielzeichenfolge ist, es wird das in Text umwandeln, und dann können wir
unseren Beispieltext setzen. Und das Gleiche gilt für unseren Namen. Wenn ich also die Namensvariable erhalte, können
wir sie
direkt in unseren Text einfügen. Sie können sehen, dass wir diesen Konvertierungsknoten
automatisch aufrufen , der unseren
Namenstext in einen Texttext umwandelt. Und das ermöglicht es uns,
unsere Beispieltexte variabel zu setzen. Als Nächstes möchte ich Sie durch einige häufig verwendete Knoten mit diesen verschiedenen
Variablentypen führen. Und wir beginnen mit
der Zeichenfolge, da sie die meisten
Knoten
hat, die damit verwendet werden können, und im Allgemeinen
der flexiblere Texttyp ist
, den Sie
mit der Codierung verwenden können. Wenn wir herausziehen, ist eine
der am häufigsten
verwendeten append. Wenn wir also nach append suchen, können
wir diesen Knoten hier aufrufen. Der Append-Knoten
ermöglicht es uns jetzt,
mehrere String-Eingaben zu verwenden und sie
zu einer Ausgabe zu kombinieren. Dies kann nützlich sein, wenn
Sie sagen möchten, dass Sie einer Zeichenfolge
zusätzlichen Text hinzufügen möchten,
ohne die
ursprüngliche Variable zu ändern. Oder wenn Sie mehrere
String-Variablen hatten, können
Sie sie in
append einfügen und diese Textwerte werden dann kombiniert
ausgegeben. Wenn ich zum Beispiel meine
Beispielzeichenfolge auf hello setze
und den B2B-Bereich festlege, ist
dies ein Test. Die Ausgabe dieses
Knotens wäre hallo. Dies ist ein
All-in-One-String-Wert. Und wir könnten dies verwenden, um vielleicht eine andere Zeichenkette zu
setzen, wenn wir
wollten , oder auch eine
Beispielzeichenkette zu setzen. Wir können auch zusätzliche
Eingaben hinzufügen. Wenn wir also
wollten, könnten wir andere Variablen
in diese Eingaben stecken lassen, und sie würden alle zu einem Ausgang
kombiniert werden. Ein weiterer Knoten, der mit
Strings verwendet werden
kann , ist der contains Node. Wenn wir also rausziehen und
nach contains suchen, können
wir die Zeichenkette bekommen, wir können contains bekommen. Und das wird
unseren Teilstring durchsuchen. Es wird also überprüft, ob sich der
Teilstring in diesem Text befindet. Wenn ich also Hallo sagen würde, würde
es diese Zeichenfolge durchsuchen,
um zu sehen, ob das Wort Hallo darin enthalten
ist, und dann einen wahren oder falschen Wert
zurückgeben. Da unsere
Beispielzeichenfolge auf hello gesetzt ist, würde
dies true zurückgeben. Dann haben wir ein
paar Optionen. Also haben wir einen Anwendungsfall. Das heißt, wird zwischen Groß- und Kleinschreibung unterschieden? Wenn ich zum Beispiel unser Alter in ein kleines h
ändern würde , hat
das Hallo in unserer Zeichenfolge einen Großbuchstaben. Das würde also tatsächlich
false zurückgeben, weil es nicht genau mit unserem
kleingeschriebenen Hallo übereinstimmt. Wir haben eine Suche von n, was im Grunde nur bedeutet
, dass vom Ende
der Zeichenfolge bis zum
Anfang gesucht wird Ende
der Zeichenfolge bis zum , anstatt
vom Anfang bis zum Ende. Ein weiterer Knoten, den wir verwenden können,
ist die ersetzte Notiz. Wenn ich also aus meiner
Stringsuche nach replace herausziehe, können
wir den Ersetzungsknoten erstellen. Auf diese Weise können wir
Texte festlegen, die wir ersetzen möchten und durch die
wir sie ersetzen möchten. Wenn ich also hier meine
Beispielzeichenfolge auswähle und das
Wort Test hinzufüge, das
Wort Test hinzufüge, setze
ich den Fromm auf Test
und die beiden auf unwirklich. Es werden alle
Testwörter durch Unreal ersetzt. Und dann können wir hier einfach
einstellen, ob Groß- und
Kleinschreibung beachtet wird oder nicht , und das wird die neue Variable
ausgeben. Also können wir das tatsächlich
auf unseren Beispielstring setzen. Okay, ich nehme Node, nur
damit wir sitzen und gewinnen können. Stecken Sie das in unseren Set-Knoten, erstellen
Sie eine Druckzeichenfolge und verbinden Sie diese
mit der Ausgabe. Wenn wir jetzt auf „Spielen“ klicken, sehen
wir unsere
Beispielzeichenfolge „Hallo und „Rail“ anstelle von „Hallo Test“, auf
die sie
derzeit eingestellt ist. Jetzt ist der letzte Knoten, den wir uns ansehen werden, die Gleichheitsnote. Wenn wir also unsere
ersetzten Notizen löschen, ziehen Sie sie aus der Zeichenfolge heraus und
wir können nach Gleichwertigen suchen. Und wir wollen, nun, wir haben hier ein paar
verschiedene Optionen. Wir haben genau das Gleiche. Das ist also ein
Gleichheitsknoten, bei dem zwischen Groß- und Kleinschreibung Also wenn wir das schaffen und sehen , dass es drei Gleichheitszeichen hat. Und das wird überprüfen, ob beide
Eingaben genau gleich sind, einschließlich Groß- und
Kleinbuchstaben? Ist dies der Fall, wird
true wenn nicht falsch zurückgegeben. Oder wir können die Groß- und
Kleinschreibung unabhängig verwenden. Dies gibt also true zurück, wenn
die Textwerte identisch sind, auch wenn sie unterschiedliche
Groß- und Kleinbuchstaben haben. Und schließlich
haben wir die Ungleiche. Das wird also das Gegenteil bewirken. Dies gibt true zurück,
wenn die Texteingaben
unterschiedlich sind , und es wird false zurückgegeben wenn die Texteingaben identisch sind. Also gehen wir jetzt
zu unserer Namensvariable über.
Wenn Sie herausfinden möchten, dass eine
der anderen String-Funktionen verfügbar ist, ziehen Sie
einfach aus einer
String-Variablen heraus und suchen Sie nach einer Zeichenfolge. Und Sie finden
alle String-Funktionen
unter der String-Kategorie , die
Sie hier sehen können. Also löschen wir
diesen Code jetzt einfach und fügen einen Beispielnamen
get node wie diesen ein. Jetzt ist unsere Namensvariable
viel eingeschränkter als
die Streichnoten. Es gibt nur ein paar
Notizen, die dafür verwendet werden können . Wenn wir uns in die Länge ziehen, können wir nach Gleichen
suchen. Dies gibt uns den
ursprünglichen Gleichheitsknoten. Sie werden das vielleicht an
unserem Integer-Video erkennen, aber wir können die Eingaben nicht ändern. Wenn ich also mit der rechten Maustaste klicke,
siehst du, dass es keine Konvertierungsoptionen gibt. Bei diesem Knoten nehmen wir
im Grunde nur benannte Variablen auf und
prüfen, ob sie identisch sind , und geben einen
true oder false Wert zurück. Wir können auch einen
Switch auf NameNode erstellen. Wenn wir also diesen Knoten löschen und nach switch suchen, können
wir einen
Switch auf Namenode erstellen. Dies funktioniert nun ähnlich wie der Integer-Switch, den wir in unseren vorherigen Lektionen
erstellt haben . Wir können neue Ausgangspins hinzufügen. Und je nachdem, auf was unsere
Eingangsvariable eingestellt ist, können
wir einen
anderen Ausgangspin verwenden. Damit Sie
im Bereich Details sehen können haben
wir Pin-Namen. Also kann ich diese
Namen ändern, um Hallo zu sagen. Und wir werden den
zweiten zum Testen ändern. Wenn unser
Beispielname auf gesetzt ist, wenn wir ihn einfach in Hallo ändern, wenn dieser Knoten ausgeführt wird, würde
unser hallo neuer Stift laufen. Und wenn es getestet würde, würde
unser Testpin laufen. Und wenn es dann auf
etwas völlig anderes eingestellt wäre, nur zufällige Buchstaben als würden stattdessen
nur zufällige Buchstaben als
unser Standardstift laufen. Damit Sie
mithilfe einer dieser Variablen steuern können,
welcher Code
von einer Namensvariablen ausgeführt wird , funktioniert
dieser Knoten tatsächlich auch
mit unserer Zeichenfolge. Wenn ich also nur schnell eine Zeichenfolge
herausziehe, können
wir auch die Zeichenfolge
einschalten. Das funktioniert genauso. Wir können neue Eingaben erstellen, ihre Namen
ändern
und sie werden ausgeführt, je nachdem, auf was unsere String-Eingabe eingestellt ist. Abschließend gehen wir
zu unserer Textvariablen über. Also werde ich
diese einfach löschen und wir ziehen eine Lücke für unseren Beispieltext ein, wie unseren Stringknoten, die Texte können
einen Gleichheitsknoten verwenden. Wenn wir also in C nach Gleichheit suchen, haben
wir dieselben Knoten
wie für unsere Zeichenkette. Wir sind genau gleich, was bedeutet, wenn beide Eingaben genau gleich sein
müssen, Textwerte angezeigt,
damit sie true zurückgeben. Wir haben die Groß- und Kleinschreibung nicht beachtet, also müssen es nur
die gleichen Textwerte sein. Es spielt keine Rolle,
ob es sich um
Groß- oder Kleinbuchstaben handelt und dann true zurückgegeben wird. Und dann haben wir
das not equal, was
bedeutet, dass beide Eingaben unterschiedlich
sein müssen , damit der
Schnee wahr wird. Jetzt kann unser Textknoten
keine Switches mehr ausführen. Wenn ich also rausziehe und
nach switch suche, können
Sie sehen, dass es
keinen Einschalttext gibt, also ist das eine Einschränkung. Es kann auch keine
Dinge wie append ausführen. Sie können sehen, dass diese Optionen nicht so da sind wie
unsere Strings. Aber wir können
format, format text verwenden, was eher
eine erweiterte Version
des Append-Knotens ist. Jetzt ist der Knoten Text formatieren sehr hilfreich für
Dinge wie das Erstellen von Artikelbeschreibungen oder überall dort, wo Sie unterschiedliche
Eingaben in Ihren Text haben werden . Was ich damit meine,
ist, wenn wir ein Format hinzufügen, sodass der Name dieses Elements
jetzt lautet , können wir möglicherweise mit der
Maus
über verschiedene Elemente fahren und wir möchten dieser Name des Elements ändert, aber wir wollen nicht, dass sich diese
Originaltexte ändern. Was wir tun können, ist
diese beiden Klammern hier hinzuzufügen, und ich zoome hinein, damit Sie den Klammertyp sehen
können. Welchen Namen wir auch immer zwischen diese Klammern setzen
, wir fügen uns einen neuen Stift hinzu. Ich nenne diesen
Artikelnamen. Drücken Sie Enter. Sie können sehen, dass wir jetzt
einen Elementnamen eingegeben haben, und dies ist ein Platzhalter
, den wir hinzufügen können, wir können einen Text einfügen,
wenn wir alles tun wollen, wir können eine Ganzzahl oder eine Zeichenfolge oder
einen Namen hinzufügen ,
was auch immer Sie bevorzugen. Und was auch immer wir eingeben, es wird den
Namen dieses Elements ausgeben und dann die Eingabe. Also als Beispiel, wenn ich ein Häkchen hinzufüge, ziehe es
heraus und drucke die Zeichenfolge. Wir können das
Ergebnis einfach mit unserer Druckzeichenfolge verbinden. Und ich werde meine
Beispieltexte in den Artikelnamen einfügen, und wir werden den
Beispieltext so in Apple ändern. Wenn wir jetzt auf „Spielen“ klicken, werden
wir sehen, dass der Name dieses
Artikels Apple ist. Sehen Sie, der Name dieses Artikels ist Apple. Und
das können wir noch weiter ausdehnen. Also könnten wir diesen Gegenstand tun,
und wir machen die Klammern erneut, geben den Schadens-Typ ein und drücken die Eingabetaste und erstellen
jetzt eine weitere Eingabe. Und wir könnten sagen, benutze unseren String. Wir können das reinziehen und Schadensart
verbinden. Und wir können Feuer legen. Und danach fügen wir den
Schaden hinzu. Jetzt werde ich sagen, dass der Name dieses
Artikels Apple ist und der Gegenstand Feuerschaden verursacht Drücken Sie die Wiedergabetaste und Sie werden sehen , dass er korrekt
ausgedruckt wird. Wenn wir wollten, könnten wir
diese Variablen
mit anderen Codes festlegen , sodass jedes Mal, wenn wir den
Mauszeiger über ein anderes
Element bewegen, der Elementname in
den richtigen Namen wechselt und
der Schadensart ändert sich , um die Arten von Rissen zu sagen. Wenn ich das also zweimal ändere, können
Sie jetzt sehen,
wenn wir auf Play klicken, es heißt Eisschaden
statt Phi-Schaden. Das war's
für diese Lektion. Hoffentlich
haben Sie jetzt eine Vorstellung davon, was jede dieser Variablen nützlich
wäre. Um es noch einmal durchzugehen, wir
Textvariablen,
die wir verwenden , um dem Spieler tatsächlich
Texte anzuzeigen. Dort
werden wir
Dinge wie den Namen eines Artikels,
Beschreibungen und solche Dinge speichern Dinge wie den Namen eines Artikels, . Dann haben wir Strings
, die
für die Bearbeitung in unserem Code nützlich sind . Wir tendieren jedoch nicht dazu
, dies dem Spieler anzuzeigen , da sie nicht zur Lokalisierung verwendet werden
können. Und dann haben wir die
Namensvariable, die eher
rein kodiert wird , um auf
Dinge wie Bone-Namen,
Sockets,
DataTable-Zeilen und solche Dinge zu verweisen .
9. Variablen (Vektoren, Rotatoren und Transformationen): Hallo zusammen. In dieser Lektion gehen wir auf
Vektoren, Rotatoren und
Transformationsvariablentypen ein. Vektoren oder eine Variable, die zum
Definieren von Objekten und Orten verwendet wird. Es besteht aus freien
Floats namens x, y und z. Wenn ich hier im Level einen meiner
Würfel auswähle, können
Sie im Bereich
Details sehen, dass wir eine Position
haben, die eine X
-,
Y- und Z-Position hat . Und wenn ich den Würfel bewege, können
Sie sehen, dass sich diese Werte ändern je nachdem, welche
Achse ich den Würfel
M bewege . Rotatoren ähneln Vektoren insofern, als sie
aus freien Floats bestehen. Sie haben X, Y und Z. Sie haben auch sekundäre Namen. Wenn wir also unseren Würfel ausgewählt haben, können
Sie sehen, dass x Rho ist, y ist Tonhöhe und z ist Ihr. Wenn ich bei ausgewähltem
Würfel E drücke, können
Sie sehen, dass wir
unseren Würfel drehen können und diese
Werte beginnen
sich zu ändern, abhängig von der Achse , mit der wir unseren Würfel drehen. Schließlich
haben wir uns verwandelt. Jetzt sind diese Positions- und
Rotations- und
Skalierungsvariablen tatsächlich
Teil einer Variablen, die als Transformation
bezeichnet wird. Transform wird verwendet, um die Position,
Drehung und Skalierung
eines Objekts
in der Welt zu definieren . Jetzt ist die Skala eigentlich nur ein weiterer Vektor, der aus drei Floats
besteht die dieselben Namen wie
unser Ortsvektor haben. Wir haben x, y und z.
Und eins bedeutet, dass die AXA
ihre normale Standardgröße hat. Wenn wir dies auf zwei erhöhen, wird
es das Doppelte seiner
Standardgröße haben, wie Sie hier
mit unserem Würfel sehen können. Jetzt schauen wir uns an,
wie wir diese
Werte in einer Blaupause
verwenden und ändern können . Also werden wir hier unseren
Third-Person-Charakter öffnen. Und zunächst werden
wir
eine neue Variable erstellen und sie
als Vektor bezeichnen. Und wir ändern unseren
Variablentyp in einen Vektor. Und wir ziehen das hinein und lassen die Variable auch ein Set
ziehen. Sie können also sehen
, wie das aussieht. Jetzt. Unser get-Knoten sieht
ziemlich
genauso aus wie unsere vorherigen Variablen, aber unser Set
hat jetzt drei Eingaben, und dies ermöglicht es uns,
einen Wert für x, y und z festzulegen. Sie haben vielleicht bemerkt, dass dies
ein Dezimalkommazahl, weil dies nur einzelne
Floats sind, die wir setzen können. Wir können diese auf verschiedene
Arten festlegen. Wir können einen weiteren
Vektor mit dieser Eingabe verbinden, und das wird unseren Vektor einfach
auf die Variable
setzen , die
wir in ihn gesteckt haben. Diese können wir
individuell manuell festlegen. Also könnte ich diese auf 123 setzen. Oder wir können tatsächlich
herausziehen und nach dem
Fleisch-Vektor, dem Vektorknoten, suchen . Und das
gibt uns tatsächlich diesen Knoten
, der es uns ermöglicht,
eine variable
Float-Gebühr für jeden dieser x-,
y- und z-Werte einzustecken eine variable
Float-Gebühr für jeden dieser x-, . Eine andere Möglichkeit, diese
Variable festzulegen, ist, wenn wir
unsere Make-Notiz hier löschen und
mit der rechten Maustaste auf den Vektorstift klicken, können
wir den Struct Pen teilen, und das erlaubt
uns tatsächlich, die Floats
direkt auf den gesetzten Knoten zu setzen. Wir müssen also nicht
diesen make vector-Knoten haben. Und wenn wir
diese wieder in
den ursprünglichen Stift kombinieren möchten , können
wir einfach mit der rechten
Maustaste auf den rekombinierten Struct Pin klicken. Und das wird
unseren SAT-Knoten zurücksetzen. Nun mit unserem Vektor,
wenn wir ihn auswählen, können
Sie sehen, dass wir unsere Blueprints
neu kompilieren müssen, also machen wir das einfach
schnell und wieder, in unseren Standardwerten können
wir einen x
-, y- und z-Wert festlegen und dies werden unsere Startwerte
für diese Variable sein. Als Nächstes führe ich Sie nur durch einige gemeinsame Knoten, die mit Vektoren
verwendet werden. Der erste ist also R gleich. Wenn wir rausziehen und
nach Gleichen suchen, dann haben wir genau das Gleiche. Dies ist ein Knoten, der im Grunde beide Vektoren, die in diesen Knoten eingegeben
werden,
genau so
überprüft , wie die x-, y- und z-Werte identisch sind. Wenn ja, wird es versuchen zu behandeln. Wir haben auch eine fast gleiche. Wenn wir hier also die
Gleichheitsnotiz verwenden, können
Sie sehen, dass uns das
zwei Vektoreingaben und
dann eine Float-Eingabe gibt . Und das bewirkt, dass wir zwei Vektoren verbinden
können, n. Und wir können sagen, wir können ihr eine Fehlertoleranz geben
. Also können wir das so einstellen, dass es eins sagt. Und das gibt
true zurück, wenn die x
-, y - und z-Werte
ineinander liegen. Wir können auch alle Standard-Mathematikknoten mit
unseren Vektoren verwenden Standard-Mathematikknoten mit , um sie herauszuziehen.
Wir können den Add
Node verwenden, der uns die Möglichkeit gibt , zwei Vektoren
zusammenzufügen und das Ergebnis zurückzugeben. Wir können den Minusknoten
oder den Subtraktionsknoten verwenden. Das macht genau dasselbe, aber es subtrahiert die beiden Vektoren voneinander und
gibt die Ausgabe zurück. Wir haben den Multiply-Knoten, sodass wir nach Multiplizieren suchen können, und das gibt uns
den Knoten mit den meisten Lagen. Dadurch wird das x
mit dx des Spitzenwerts multipliziert. Der y-Wert ist y und das z durch den höchsten Wert C.
Und ich gebe die Antwort. Natürlich haben wir auch divide, also können wir nach divide suchen. Und das funktioniert genauso. Dividiert den obersten Wert aber den unteren Wert und gibt
uns die Antwort. Jetzt können
wir, wie bei unseren
vorherigen Maps-Knoten, einige
dieser Eingaben ändern. So
kann ich zum Beispiel mit
der rechten Maustaste auf den unteren Eingang klicken
und den Pin konvertieren. Wir können dies in
andere mathematische Variablen ändern ,
damit ganze Zahlen fließen. Wenn wir zum Beispiel
minus einen bestimmten Float
von all unseren x-,
y- und z-Werten und unserem Vektor sagen wollen minus einen bestimmten Float
von all unseren x-, , könnten
wir ihn in
einen Float ändern und das tun. Wir können genau dasselbe
mit unserem Add Node tun. Vielleicht haben wir
diesmal eine Ganzzahl, wir wollten allen
unseren x-, y- und z-Werten
einen ganzzahligen Wert hinzufügen . können wir auch machen. Die nächste Stufe, die
wir uns ansehen heißt Lap Nodes. Also werden wir diese Notizen einfach hier
löschen. Wir ziehen uns aus meinem
Vektor heraus und suchen nach Runde und erstellen diesen Knoten. Und das ermöglicht es uns,
zwei Vektoren zu nehmen und
eine Vektorausgabe zu geben. Und dieser Alpha-Wert ist ein Float. Und das ist im Wesentlichen der Wert zwischen
diesen, den wir wollen. Also zum Beispiel, wenn
wir einen Wert und
a und einen Wert und B hätten und wir dies auf 0,5 setzen. Die Ausgabeposition
würde genau zwischen diesen beiden
Eingabepositionen liegen. Als Nächstes werfen wir
einen Blick auf den Break-Knoten. Wenn Sie sich jetzt
an unseren Set-Knoten erinnern, können
wir ihn herausziehen und
nach dem make-Faktor suchen. Wir können dasselbe auch mit
einem Vektor-Get-Knoten machen , den wir
herausziehen können , und wir können nach break suchen. Und wir können diesen
Vektor jetzt in seine x-,
y- und z-Float-Werte aufteilen . Wir können auch mit der rechten Maustaste auf
unseren Vektor klicken, Knoten
abrufen und Struct Pin
teilen auswählen. Und das gibt uns auch direkten Zugang
zu diesen Werten. Und wenn wir es rekombinieren wollen, wir einfach erneut mit der rechten Maustaste und wählen Structs recombine pen. Jetzt werden wir den Vektor
tatsächlich verwenden , um ein
Objekt in der Welt zu beeinflussen. kannst du dich also gewöhnen
. Zunächst erstellen wir
einen neuen Zugang. Also gehen wir zum
Inhaltsbrowser,
klicken mit der rechten Maustaste und erstellen
eine Blueprint-Klasse. Wählen Sie dann Axon aus. Und wir nennen diesen Würfel, öffnen unseren Warteschlangen-Blueprint und fügen eine neue
Komponente namens cube hinzu. Das gibt
uns nur eine Cube-Komponente, wird diese kompilieren und speichern und dann zum
ThirdPersonCharacter Blueprint zurückkehren. Und wir klicken mit der rechten Maustaste und
suchen nach der linken Maustaste. Dann wird aus der Presse
herausgezogen und
nach Spawn-Schauspieler aus der Klasse gesucht. Und das wird einen neuen Schauspieler
in unserem Level
schaffen , wann immer
wir die linke Maustaste verlassen. Und wir
setzen die Klasse auf
cube, weil wir unseren Würfel spawnen
wollen. Und wir ziehen uns
aus der Spawn-Transformation heraus und suchen nach make transform. Dies funktioniert ähnlich wie
der make vector-Knoten. Es erlaubt uns nur, stattdessen eine Transformationsvariable zu
erstellen. Sie können also sehen, dass wir
unseren Vektor für die Position oder den
Rotator für die Drehung und dann
unseren zweiten Vektor für den Maßstab haben Rotator für die Drehung und dann . Und wir werden den Ort
nutzen, um zu
entscheiden, wo wir
unseren Cubed-Spawn haben wollen. Ich möchte, dass mein Würfel direkt
über dem Kopf meines Charakters erscheint. Also werde ich
die Get Actor Location
Load verwenden , um das zu erstellen. Sie können sehen, dass die Ausgabe
ein Vektor ist und die Eingabe ein Akteurobjekt
ist. Und momentan heißt es nur Süden , weil nichts daran
angeschlossen ist. Also werden wir
unsere Third-Person-Charaktere dazu bringen , vor Ort zu
handeln. Wenn wir herausziehen und wir
möchten, fügen Sie Notizen hinzu. Also werde ich hinzufügen. Wir löschen hier vorerst nur unsere
Vektorvariable. Jetzt möchte ich, dass es
etwas über meinem Charakter erscheint, denn wenn ich das
direkt an die Position anschließe wird
ein Würfel
direkt in unserem Charakter erscheinen, was die Kollision
durcheinander bringen wird. Also
nehmen wir den Ausgang, schließen ihn an die Position und erhöhen
ihn um etwa 150. Es liegt also deutlich über
unserem Charakter. Jetzt können wir also kompilieren
und auf Play klicken. Wenn ich die Maustaste verließ, kann
man einen Würfel als
Spawn direkt über meinem Kopf sehen. Wenn ich mich über einen anderen
Würfel oder Spawn bewege, machen
sie das weiter, während
ich mich im Level bewege. Wenn ich nun
möchte, dass der Würfel mir folgt, können
wir das auch tun. Also, wenn ich aussteige und
zu unserem ThirdPersonCharacter
Blueprint zurückkehre . Damit unser Würfel uns folgt, müssen
wir zunächst einige Änderungen
an unserem Code vornehmen Wir ziehen uns hier
aus dem Rückgabewert heraus und wählen In Variable
hochstufen aus. Dadurch wird
eine neue Variable erstellt,
die denselben Typ hat wie unser Pin
, aus dem wir ziehen. So wird die Variable gefördert. Dadurch wird ein
Cube-Variablentyp erstellt , den wir cube nennen. Und dies ist ein Akt der
Referenzvariablen , den wir in einer späteren Lektion
behandeln werden. Aber im Wesentlichen können wir so unserem neuen Würfel
nur sagen, was
wir damit machen wollen. Dann holen wir uns
unsere neue Cubed-Variable. Wir werden uns hinausziehen
und wir werden tun ist gültig und erstellen
einen Knoten ist gültig. Der untere hier, wir werden etwas mehr Platz schaffen
und wir werden das mit dem Drücken verbinden. Und dann ist das bis
zu unserem Spawn Out to Cube nicht gültig. Und was das macht,
ist im Grunde zu überprüfen, ob r cube Admin schon einmal erstellt
hat. Wenn es noch nicht erstellt wurde, also nicht gültig ist, wird ausgeführt, und das
ermöglicht es uns, einen Würfel zu erstellen. Und wenn unser Würfel erstellt
wurde, dann ist er gültig, wird ausgeführt, was nichts bewirkt. Das hält uns also davon ab, mehr als einen Würfel zu
erstellen. Dann erstellen wir einen Tick-Knoten. Also werden wir das Ereignis ankreuzen. Und wir werden
diese beiden Knoten auch tatsächlich kopieren. Und wir verbinden den
Execute mit dem Authentischen. Und dann ziehen wir uns
aus unserem Würfel heraus und verwenden den Bühnendarsteller. Standort-Knoten. Dies ermöglicht es uns, die Position
unserer Würfel
abhängig von unserem neuen Input zu ändern Position
unserer Würfel
abhängig von . Wir benutzen. Dies ist nur gültig, um
sicherzustellen, dass wir keine Fehler erhalten. Denn wenn wir versuchen, die Position unseres Würfels
festzulegen ohne dass unser Würfel noch
gespawnt wurde , werden wir einige Fehler
bekommen. Also verwenden wir das ist gültig,
stoppen Sie diese Fehler. Und wir werden den neuen Standort auf den gleichen Standort
wie unsere
Spawn-Standorte
festlegen . Also schiebe ich das einfach
ein bisschen höher. Und wir werden diese Knoten
kopieren und einfügen. Und wir verbinden das
mit unserem neuen Standort. Um diesen Code
durchzugehen, jeder Frame-Würfel seine Position
auf die Position unseres aktuellen Zeichens
plus 150 und Höhe
fest . Und das können wir jetzt spielen. Wenn ich auf Play drücke und
dann mit der linken Maustaste klicke und sehe, dass unser
Würfel mir folgt. Wenn ich die linke Maustaste
spame, werden auch
keine weiteren Cubes erstellt. Als Nächstes werfen wir
einen
Blick auf die Rotator-Variable. Also beenden wir das Spiel und kehren zu unserem
ThirdPersonCharacter
zurück. Ich werde diesen Code vorerst hier
behalten, weil wir
ihn verwenden können , um einige Dinge
mit dem Rotator zu tun. Ich habe Ihnen einmal einige
der häufig verwendeten Knoten
mit der Rotator-Variablen gezeigt . Wir erstellen also eine
Rotatorvariable die gleiche Weise
wie zuvor. Erstellen Sie eine neue Variable. Wir nennen das Rotate-Tool. Und wir setzen seinen Typ
auf den Rotatortyp. Dann werden wir kompilieren und unseren Standardwert erhöhen. Sie können hier sehen, dass es unserem Vektor sehr
ähnlich ist. Wir haben ein X, Y
und Z, und das
sind Fließkommawerte. Wir können unseren Rotator erhalten, indem wir
ziehen und get auswählen. Und wir können den Rotator säen,
indem wir dasselbe
mit der set-Option in C tun . Auch hier gibt er uns
wie unser Vektor ein x, y und z. Wir können ziehen und
suchen, Rotator machen. Und wir können hier die Option
Drehen auswählen. Und das gibt uns
die Variablen
, mit denen wir
dann unseren Rotator einstellen können. Oder wenn wir möchten, können
wir mit der rechten Maustaste klicken und
Split Struct Pin auswählen , um direkt auf diese
zuzugreifen. Wir können also einen Float verwenden, um eines
davon einzeln
festzulegen. Wie unser Vektor können wir auch aus unserem Rotator
ziehen, Knoten
abrufen und nach Break Rotator
suchen. Und das gibt uns unsere x
-, y - und z-Werte als Floats, wenn wir
nur auf einen davon zugreifen müssen. Im Gegensatz zum Vektor können
wir jetzt keine normalen Maps verwenden. Also, wenn unsere Rotator-Variable ist, gibt es benutzerdefinierte Knoten, die nur dafür verwendet
werden. Wenn wir also herausziehen und
nach kombiniert suchen, können
Sie sehen, dass wir einen
kombinierten Rotatorenknoten haben, im Wesentlichen nur a mit den B-Werten
kombiniert. Sie können dies
also für Minus- oder
Pluswerte für Ihren Rotator verwenden Pluswerte für Ihren Rotator und dann
erhalten Sie eine Ausgabe. Wir haben auch Zugang
zum Labor für unseren Rotator. Wenn wir also nach LAP suchen,
sehen Sie, dass wir einen Lippenrotator haben
und das funktioniert genauso wie unsere Liebe
zu unserem Vektor. Wir können nicht zwei Eingaben
zum Rotieren oder Eingaben haben. Und wir können ein Alpha setzen, und das ist ein Wert
zwischen 011 wäre der Ausgabewert wäre nur der b-Wert und 0
wäre der a-Wert, und dann wäre 0,5 der Wert
zwischen diesen beiden Werten. Als nächstes haben wir den x-Vektorknoten für die
Lückenrotation. Also löschen wir diesen Knoten
hier und
suchen nach dem x-Rotationsvektor. Und das ist wichtig,
weil es uns ermöglicht, die Vorwärtsrichtung in einer
Vektorvariablen eines Akteurs zu ermitteln. X ist also der
Vorwärtsvektor für die meisten Schauspieler. Wenn wir also hier zu unserem Level gehen, ziehe
ich einfach eine
Third-Person-Vorlage hinein. Du kannst das
x sehen, das rot ist. Sie können sehen, dass rot
x unser Stürmer ist. Auf diese Weise können wir jederzeit
die Vorwärtsrichtung für
unseren Charakter Wenn wir ihn so drehen können, wäre die Vorwärtsrichtung jetzt hier drüben. Aber Sie können sehen, dass die
X-Richtung der Welt immer noch so ist. Wir können diesen Knoten verwenden
, um die Richtung zu ermitteln
, in die etwas in
Abhängigkeit von seiner Drehung zeigt. Das können wir Ihnen an einem Beispiel zeigen. Wenn wir zu unserer
Third-Person-Vorlage gehen
und einen
Teil dieses Codes so bearbeiten, dass unser Würfel tatsächlich vorwärts
in eine Richtung spawnt , in die unsere
Charaktere blicken. Um das zu tun, werden wir unsere Charaktere rotieren
lassen. Also werden wir eine Rotation bekommen, werden die Rotation finden. Los geht's,
aktive Rotation bekommen. Dies gibt uns die aktuelle
Rotation unseres Charakters. Ich werde
rausziehen und
wir werden einen Rotations-x-Vektor bekommen. Und jetzt werden wir das
vervielfachen. Also ziehen wir uns
aus dem Vektor heraus und machen den Multiply-Knoten. Und wir werden die Eingabe hier in
einen Float
ändern, weil wir ihn mit einem Float-Wert
multiplizieren wollen. Und hier werden wir einstellen
, wie weit wir unserem Charakter
voraus sein wollen r Cubed Spawn, und das ist in Zentimetern. Also, wenn ich das auf 500 setze, dann werden wir plus diese beiden Schauspieler
aktuellen Standort. Wir sagen also im Grunde 500 Zentimeter vor dem aktuellen Standort
unseres Charakters. Wir wollen diesen Würfel spawnen. Also ziehen wir uns hier aus unserer
Plusnote heraus und
machen einen weiteren Plusknoten. Und wir werden hier unseren
Zeitwert erhöhen. Stellen Sie dies auf den Ort ein. Ich werde
das einfach wiederverwenden und es an
unseren neuen Standort hier oben anschließen , damit, wenn wir unsere Warteschlange spawnen, aber es uns folgt, dieser Ort dies
kompilieren und speichern wird. Und das wird spielen und spielen. Wenn ich also auf „Spielen“ klicke,
kannst du sehen, dass ich
herumlaufen kann und wenn ich
in den Würfel klicke , wird der Würfel dort drüben
gespawnt. Und wenn ich den Charakter drehe, können
Sie sehen, dass der
Würfel tatsächlich seine Position
vor mir
aktualisiert. Jetzt habe ich es nicht für die
Drehung der Kamera eingerichtet. Deshalb verändert
es den Würfel nicht, wenn ich mich umsehe . Aber wenn ich den Charakter
drehe, kannst
du sehen, dass der
Würfel jetzt aktualisiert
wird, fünf Meter vor uns liegt, aber immer noch
die Position des Charakters beibehält, also folgt
er uns immer noch . Wenn ich diesen
500-Wert auf 200 ändern würde, wäre der Würfel näher uns, weil er
nur zweihundert, zweihundert Zentimeter
vor uns liegt. Jetzt kannst du sehen, dass es zwei Meter vor
uns liegt und immer noch in
Vorwärtsrichtung unseres Charakters
aktualisiert wird. Wenn wir jetzt
zu unserem ThirdPersonCharacter
Blueprint zurückkehren , gibt es noch ein paar
andere Hinweise, die wir mit unserer Rotator-Variablen
verwenden können . So wie wir die Positionsnotiz zum
Set Actor haben, haben
wir auch die
Set-Actor-Rotation, Knoten-Rotation, die dasselbe
bewirkt, aber stattdessen sind Sets Rotation. Und wir können mit unserem Würfel tatsächlich etwas rotieren, wenn wir
wollen. Wenn wir also aus
unserem Würfel herausziehen und die
Faktorrotation darauf einstellen,
und sagen wir bei jedem Frame, jedem Frame, wollen wir
unseren Würfel ein wenig drehen. Also müssen wir als aktuelle
Rotation bekommen und dann hinzufügen. Also ziehen wir uns hin und
kommen zur Rotation. Wir kombinieren Rotatoren. Ich würde das einfach hier
einstecken und wir sagen, lass uns das um
eins erhöhen und sehen, wie das
aussieht. Also drück auf Spielen. Wenn ich die Maustaste verlassen habe, werden Sie
sehen, dass sie sich jetzt in diese Richtung
dreht. Wenn wir
die Werte auf unserem
kombinierten Rotatorknoten ändern würden , können
wir auch eine Eins
im y hinzufügen, und wir werden sehen, dass er eine
andere Drehung ausführt. Als Nächstes werden wir uns mit dem Typ
der Transformationsvariablen befassen. Wir haben in dieser Lektion bereits ein
wenig behandelt, aber im Wesentlichen
ist eine Transformation nur eine Variable, die aus einem Vektor für die Position,
einem Rotator für die Rotation und dann einer weiteren besteht Vektor
für unsere Schauspieler-Skala. Und wir können auf diese
Variable genauso zugreifen unser Standort
und unsere Rotation. Wenn wir also jetzt
zum ThirdPersonCharacter
Blueprint zurückkehren , können
wir eine neue Variable erstellen. Wir nennen das Transform. Und wir werden den
Typ auf Transformation festlegen. Jetzt können
wir es, ähnlich wie bei
den anderen Variablen, bekommen und zentrieren. Jetzt können Sie sehen, dass es nicht über die XY-Optionen verfügt, da es
mehrere Eingaben gibt , die Transformationsanforderungen
von unserem gesetzten Knoten sind. Wenn wir uns in die Länge ziehen, können wir eine Transformation
durchführen. Und dies gibt uns Zugang
, um seinen Standort, seine
Rotation und seinen Maßstab festzulegen . Und das ist ein Vektor, ein Vektor und unser Rotator
hier in der Mitte. Und wir können diese
manuell auf diesem Knoten setzen, wenn Sie möchten. Oder wir können Vektoren und
Rotatoren anschließen , wie wir
es zuvor getan haben. Wir können
diesen Knoten auch teilen , wie wir es mit den anderen
gemacht haben. Wenn wir also hier mit
der rechten Maustaste auf den Pin klicken, können
wir Split Struct
Pin machen, der uns
Zugriff auf die Position,
Skalierung und Drehung gibt. Und wir können das tatsächlich
weiter aufteilen, wenn wir sagen wollen, dass ich diese Transformation
nur auf X1
setzen wollte und ich hatte eine
Float-Variable. Ich könnte diesen Stift tatsächlich wieder
teilen. Und Sie können sehen, dass ich jetzt
den x-float-Wert für unseren
Standort auf diesem einen Knoten festlegen kann . Und wenn ich es dann rekombinieren
möchte,
rekombiniere es und
kombiniere es dann wieder, und es ist wieder normal. Mit
unserem Transform Get
Node können wir das Gegenteil tun , wir können herausziehen, Sie können nach einer
Break-Break-Transformation suchen und wir können auf unsere Position
sowie Rotation und Skalierung zugreifen. Wir können
dies auch teilen, sodass wir rechten Maustaste klicken und
Struct Pin teilen
können. Und das gibt uns auch Zugang
zu diesen. Jetzt können wir die Transformationen eines
Schauspielers festlegen. Wenn wir also zu
unserem Code von vorhin zurückkehren, können
Sie sehen, dass wir die Position des Akteurs und
die
aktive Rotation getrennt angegeben haben , aber wir könnten tatsächlich
den eingestellten Aktor-Transformationsknoten
herausziehen und verwenden . Und das würde uns
Zugang zu seiner Transformation geben, die sich natürlich aus
ihrer Position und Rotation zusammensetzt. Wir könnten also eine
neue Transformation vornehmen. Wir können diese tatsächlich ohne
diese beiden Knoten setzen. Also wenn ich diese beiden lösche, könnten
wir das tatsächlich mit einem Knoten
machen. Also stecke ich das
in unser ist gültig. Mit einem make-Knoten können
wir einfach unseren Standort
von dem Ort nehmen , von dem wir ihn zuvor
erhalten haben. Also hier unten. Dann unsere Rotation,
wir drehen das in Rotation und
lassen die Skala als eine Einheit. Aber wenn wir wollten,
könnten wir das auch anpassen. Wenn wir jetzt auf Play klicken, können
wir tatsächlich
sehen, dass es immer noch genauso
funktioniert wie zuvor. Wir verwenden jetzt nur
diesen einen Knoten anstelle der beiden
separaten. Das Letzte, was
ich in
dieser Lektion behandeln wollte , ist der
Unterschied zwischen lokalen und weltweiten
Transformationen, die vorerst ausatmen werden , und wir werden zum ThirdPersonCharacter
Blueprint gehen und inhärent. Wir gehen zum Viewport. Jetzt
können wir im Viewport eine Komponente hinzufügen, also füge ich einfach einen Würfel hinzu. Das ist der Saturday Cube jetzt
in unserem Blueprint-Viewport. Und wir können sehen, dass wir
hier einen Standort
haben und
momentan liest das Nullen sind 0. liegt daran, dass sich unsere Cubes
aktuell lokal befinden. Ist 0, der Mittelpunkt
unseres Charakters. Wenn ich es vorwärts bewegen sollte, können
Sie sehen, dass es im x
zunimmt.
Und wenn ich das jetzt ziehen
und platzieren kann,
platzieren Sie unseren Charakter
in das Level, Sie können unsere Charaktere
jetzt auf dieser Ebene sehen standort. Aber wenn ich meine
Cube-Komponente auswähle, kannst
du sehen, dass sie uns
einen anderen Wert
gibt als unser Schauspieler. Das liegt daran, dass es sich bei diesem
Wert um einen lokalen Standort handelt. Es ist also derzeit
170 Zentimeter von der Mitte
unseres Charakters entfernt. Aber wenn wir
unseren Charakter auswählen, also wenn wir
den vollständigen Schauspieler auswählen, gibt uns
das unseren weltweiten Standort, und das ist der
Standort unseres Schauspielers auf der ganzen Welt. Jetzt können wir
beide j-Komponenten, den
Weltstandort und den lokalen
Standort, in Blaupausen ändern . Um das zu tun, werde ich hier den
Third-Person-Charakter
öffnen
, der einen
Großteil dieses Codes löschen kann. Wir werden also alle mit
der Technologie verbundenen Codes löschen und auch den
gesamten Code löschen. Wir bleiben also nur noch mit der
linken Maustaste von ihnen übrig. Jetzt gehen wir
zu unserem Viewport und wählen unseren
Würfel aus, den wir erstellt haben. Ich setze es auf 0 zurück, also ist es hier genau in
der Mitte unseres Charakters. Und dann das
Ereignisdiagramm, wir
ziehen es aus den Komponenten heraus. Und wir werden ihm sagen, dass er seinen relativen Standort
festlegen soll. Und wir setzen dies
auf 0 für x 0 und y
und dann auf 150 auf das z. Wenn wir
jetzt die
linke Maustaste drücken, wird
es an
diese neue Position verschoben. Wenn wir also auf „Spielen“ klicken und sehen dass es sich gerade in der
Mitte meines Charakters befindet. Aber wenn ich mit der linken Maustaste klicke, geht es
über den Kopf meines Charakters. Der Grund dafür
ist, dass diese Nullen, Nullen 0 Position für meinen Würfel genau in der
Mitte meines Charakters liegen. Also habe ich nur
gesagt,
dass es das im Z um 150 erhöhen soll . Und jetzt liegt es über dem Kopf
meines Charakters. Wenn wir nun diesen
Code in anstelle von
relativer Position ändern oder die Weltortung
festlegen, verwenden wir dieselben Werte. Also ist x 0, y ist 0 und dann ist z 150. Und wenn wir die Wiedergabetaste drücken, bewege
ich mich nicht. Ich habe gerade geklickt
und sehe meinen Würfel. Wenn ich F1 drücke ist
da drüben hinter der Wand. Der Grund dafür ist
, dass das 0 auf der Welt
ist, aber plus 150 Zentimeter höher. Wenn ich mich jetzt bewege,
kann man tatsächlich sehen der Würfel mit
meinem Charakterstil bewegt. Und das liegt daran, dass der Würfel an meinen Charakter gebunden
ist. Aber wir haben ihr gesagt, dass sie
auf 00150 in der Welt umstellen soll. Das ist also der Unterschied
zwischen der Festlegung eines lokalen Standorts und
eines weltweiten Standorts. Wenn ich jetzt F
frei drücke, um zu
unserem normalen Beleuchtungsmodus zurückzukehren unserem normalen Beleuchtungsmodus und auf das Drahtmodell zuzugreifen. Sie können F1 drücken. Wenn du das nicht wüsstest. Drücken Sie F3 und beenden Sie den Vorgang. Wir können mit
unserem festgelegten Weltstandort dasselbe Ergebnis erzielen wie mit unserem festgelegten
relativen Standort Wir müssen nur den Standort des Schauspielers
ermitteln. Wir ermitteln also den Weltstandort unseres aktuellen
Charakters. Wir ziehen uns in die Länge und machen plus ein Fünftel zu seinem
aktuellen Weltstandort. Und darauf setzen wir unseren Würfel. Stattdessen nehmen wir den
Standort
unseres aktuellen Schauspielers in der Welt, platzieren 150 und setzen stattdessen
R in Würfel. Also können wir das testen. Wenn ich nun auf Play klicke und mit der linken Maustaste klicke, kannst
du sehen, dass wir jetzt
das gleiche Ergebnis haben wie bei
der Verwendung des relativen Ortes, weil wir jetzt
unseren Charakteren einen wilden Ort hinzufügen. Also bleibt unser Würfel jetzt über dem Kopf
unseres Charakters. Das war's also für diese Lektion. In unserer nächsten Lektion werfen wir
einen Blick auf ACTA, eine Objektvariablentypen. Wir haben sie in dieser Lektion
ein wenig benutzt, aber wir werden in unserer nächsten Lektion viel mehr darüber
lernen .
10. Variablen (Schauspieler und Objekte): Hallo zusammen. In dieser Lektion werden
wir uns
Objektreferenzvariablen ansehen und wie sie in der Engine verwendet werden. Also habe ich hier ein sehr
einfaches Beispiel aufgestellt. Wir haben einen Auslöser und
wir haben ein paar Würfel. Und wenn unser Spieler den
Auslöser betätigt, bewegt sich
einer unserer Würfel alle nach oben. Und wenn der Spieler dann den Abzug
verlässt, bewegt sich
einer von ihnen nach unten. Wenn ich die Wiedergabetaste drücke und auf einen Auslöser
gestoßen bin, können
Sie sehen, wie sich der rechte Würfel oben
bewegt und wenn ich den Auslöser
verlasse, bewegt
er sich wieder nach unten. Das passiert jetzt,
weil unser Triggerhaar
einen Bezug zu dem Würfel hat , den Sie hier unten sehen können. Dies ist ein Objekt oder eine aktive Variable
, die auf unseren Würfel gesetzt wird. Und ich kann das tatsächlich
ändern, indem auf die Schaltfläche Schauspieler
aus Szene auswählen klicke. Ich kann auf einen unserer Würfel klicken, damit ich den Würfel
links hier auswählen kann. Und jetzt, wenn wir auf
Play klicken und ich über
den Auslöser renne ,
ändert sich jetzt unser linker Würfel. Und im Wesentlichen ermöglichen
uns
Objektreferenzen ,
der Engine mitzuteilen , welche spezifischen
Objekte wir bewirken möchten. Weil all diese Würfel genau gleich
sind. Sie verwenden unsere Cube-Klasse
aus unserem Inhaltsbrowser, aber jede ist ein
individuelles Objekt. Vielleicht möchten wir einen von
ihnen beeinflussen , ohne
die anderen zu beeinträchtigen. Und Objektreferenzen
ermöglichen uns das. Es wird einen Blick auf
unseren Trigger-Blueprint werfen und sehen, wie das funktioniert. Also mache ich das einfach auf. Sie können sehen, dass wir
unsere ausgewählte Objektvariable haben, mit der wir steuern, welchen Würfel
wir bewirken möchten. Sie können also sehen, dass dies als
ausgewähltes Objekt bezeichnet
wird und auf unseren Würfel eingestellt ist. Und wir haben diese
Up-Variable hier. Es ist darauf eingestellt, Schauspieler einzugeben. Wir haben hier auch
Code, der
steuert, was wir mit
unserem ausgewählten Objekt machen. Wir haben also eine aktive
Begin Overlap, einen Event-Akteur und eine Überlappung. Dies sind einige dieser Ereignisse, die in die Engine eingebaut
sind. Diese werden also
immer dann ausgeführt, wenn
sich etwas überschneidet oder unseren Auslöser auslöst oder aufhört
, ihn zu Jetzt können Sie sehen, dass diese beiden
Knoten
diese überaktiven Pins haben und es sich um Objektreferenzen
handelt. Sie sagen
uns genau, welches Objekt sich überlappt oder ausgelöst hat. Dies ist ein Kostenknoten. Wir werden eine separate
Lektion über die Kosten haben weil sie sehr wichtig sind und viel zu bieten haben. Aber im Wesentlichen bedeutet dies
, dass es
einen Referenzakt nimmt und überprüft, ob dieser Schauspieler ein
ThirdPersonCharacter
ist? Und wenn ja, dann wird es
unserem Code erlauben , ein F naught auszuführen. Es wird die Kosten für den Filz zurückgeben. Daher verwenden wir
diesen Kostenknoten im Wesentlichen als Scheck. Wir sagen im Grunde, wenn ein Akt zum Aufhören beginnt
, uns zu überlappen, ist es dann ein Third-Person-Charakter? Wenn ja, können wir
den Rest unseres Codes ausführen. Wenn nicht, führen wir unseren Code
nicht aus. Und dann nimmt der Rest unseres Codes im
Grunde nur unser ausgewähltes Objekt, das wir in den Optionen hier
festlegen. Und wir sagen ihm, dass er einen neuen Standort festlegen
soll. Also nehmen wir nur den
aktuellen Standort und wir plotten 150 und setzen
ihn auf diesen Standort. Auch hier machen wir
genau das Gleiche unten an der Endüberlappung, aber stattdessen
minieren wir eine 150 von ihrer aktuellen Position und
setzen sie dann auf diese neue Position. Als nächstes möchte ich erklären,
was ein Schauspieler ist? Ein Akteur ist jede Art von Objekt
, das in einem Level existiert. Alles, was Sie
hier sehen können, ist also eine Art Schauspieler. Es gibt viele
verschiedene Arten von Schauspielern, wie zum Beispiel den
Charakterentwurf hier. Wenn ich das reinziehe, ist
das ein Schauspieler, aber es ist eine andere Art von
Schauspieler, sagen wir, Charaktertyp. Es
kann alles, was ein Schauspieler kann, hat
aber auch
zusätzliche Funktionen da es als Charakter verwendet
werden soll. Zum Beispiel kann es von einem Spieler gesteuert
werden. Es hat eine Kapsel und ein
Charaktermodell als Kamera. Dies sind alles Dinge
, die in unseren Charakter-Blueprint integriert
sind . Dies sind alles Dinge, die Schauspieler selbst nicht haben, aber unser Charakter tut es,
weil unser Charakter
ein spezialisierter Schauspielertyp ist . Dies geschieht nun durch einen
Prozess namens Vererbung
, der etwas
schwierig zu verstehen sein kann. Also habe ich hier ein Bild erstellt,
um euch zu zeigen, was ich meine. Wenn ich das
überbringe, können Sie sehen , dass wir oben ein neues
Objekt haben. Jetzt ist im Wesentlichen
jedes einzelne Objekt in Unreal ein U-Objekt. Es gibt sehr einfache
Objekttypen und alles
erbt von ihnen. Wenn wir die Kette entlang gehen, haben
wir Schauspieler. Wir haben jetzt über Schauspieler gesprochen. Sie erben von Ihren Objekten,
was bedeutet, dass sie alles haben, was Ihr Objekt tun kann. Dann haben sie aber auch ihre eigenen zusätzlichen
Funktionen , die es ihnen ermöglichen, in einer Ebene zu
existieren, Komponenten zu
haben und sichtbar zu sein. Und Sie können sehen, dass ich den Würfel und
unsere Trigger-Blueprints
hinzugefügt habe, die wir
für das Beispiel verwendet haben. Sie können sehen, dass diese
dann von unserem Schauspieler erben. Das sind also Schauspieler, die alles
können, was ein
normaler Schauspieler kann. Aber weil wir unserem Auslöser einen
Code hinzugefügt haben und eine Kollisionsbox jetzt ein
eigener Typ mit eigenen
speziellen Funktionen ist . Und dann dasselbe für unseren Würfel. Wir haben eine
Cube-Komponente hinzugefügt. Es ist jetzt also ein eigener Typ
mit eigenen Komponenten. Sind Charaktere die gleichen? Es gibt nur ein paar
zusätzliche Schritte. Sie können also sehen, dass aus dem
Schauspieler ein **** erstellt wird. Jetzt ist ein **** eine
grundlegendere Version unseres Charakter-Blueprints. Es kann
vom Spieler gesteuert werden, hat
aber eigentlich
keine Bewegung oder. Damit unser
Charaktermodell sichtbar ist, haben wir einen
Charakter-Blueprint , der vom **** erbt. So können einige
seiner Fähigkeiten vom Spieler
gesteuert werden Spieler
gesteuert und einige seiner
Bewegungsfähigkeiten. Und dann erweitert
es uns und ermöglicht
uns eine Kapselkomponente
und ein Charaktermodell. Jetzt
ist unser Charakter immer noch Schauspieler. Es kann immer noch alles, was ein Schauspieler auf die gleiche Weise kann. Ein **** ist immer noch ein Schauspieler und kann alles, was
Connected kann. Aber jeder
dieser Schritte fügt ihren Blaupausen nur einige zusätzliche Funktionen
hinzu. Jetzt wäre der gesamte ThirdPersonCharacter
Blueprint tatsächlich der
nächste Schritt von unserem Charakter, da
unser ThirdPersonCharacter vom
Charakter-Blueprint
erbt, wir haben gerade einige
weitere hinzugefügt Funktionalität dazu. Wir haben ein Modell festgelegt und einige seiner Einstellungen
geändert. Jetzt ist es also eine eigene Blaupause. Das ist ein Kind der
Charakter-Bluepause. wir nun zu unserem Beispiel zurückkehren Wenn wir unseren Auslöser auswählen, können
Sie sehen, dass ich
jedes Objekt im Level
auswählen kann,
wenn ich das Dropdown für
unser ausgewähltes Objekt auswähle. Der Grund dafür
ist, dass einen Akt- oder Variablentyp handelt. Und das liegt daran, dass alles
in unserem Level ein Schauspieler ist. Wenn wir wollten,
könnten wir dies
von würfelförmig zu unserem Himmel ändern . Und wenn wir die Himmelskugel auswählen, können
Sie sehen, dass ich dies auf
einen Himmel setzen kann , weil unser
Himmel ein Akteur ist, nur ein spezieller Vektortyp mit eigenen Einstellungen
und Komponenten. Wenn ich nun möchte, dass dies
spezialisierter ist und mir
zum Beispiel
nur Cubes gibt,
müssten wir stattdessen
den Variablentyp von einem Schauspieler
in unseren Cube-Typ ändern . Was wir tun werden, ist das wieder auf einen Würfel zu
setzen, also wechsle ich einfach so Würfel. Und wir wählen hier unseren
Würfel-Blueprint aus. Und dann öffnen wir
unseren Trigger-Blueprint. Und hier können wir
unser ausgewähltes Objekt auswählen. Sie können sehen, dass es derzeit auf einen Actor-Objekttyp
eingestellt ist. Aber wenn wir das ändern, können
wir nach Würfel suchen. Zum Beispiel haben wir
unseren Würfel-Blueprint. Wir können die Objektreferenz auswählen. Und wenn wir
einen Variablentyp ändern, erhalten wir diese
Warnung,
die uns nur mitteilt , dass wir einen Typ ändern. Dies kann einige Probleme verursachen. Wir werden sowieso
Variablentyp ändern auswählen. Wir schließen dieses
Suchfenster und kompilieren. Wenn wir jetzt
unseren Trigger im Level auswählen und auf das Drop-Down klicken, können
Sie sehen,
dass er mir jetzt nur Würfel
anzeigt, weil wir
unseren ausgewählten
Objektvariablentyp auf den Würfeltyp eingestellt haben . Sie fragen sich vielleicht,
warum wir jemals den Würfeltyp
verwenden sollten, wenn wir
einfach den Schauspielertyp verwenden und einen beliebigen Schauspieler
auswählen können . Vielleicht haben Sie speziellen
Code oder Variablen in unserem Cube, auf die wir in anderen Blaupausen
zugreifen möchten . Also öffnen wir den Würfel und ich
erstelle einfach eine neue Variable. Und es wird ein boolescher Wert sein. Und ich nenne
es nur ein Beispiel. Jetzt haben wir diese
Variable in unserem Würfel erstellt. Es ist eine für
unseren Warteschlangen-Blueprint einzigartige Variable , und nur die Cube-Blueprints
haben diese Variable. Also kehren wir zu
unserem Trigger-Blueprint zurück. Da unsere ausgewählte
Objektvariable ein Würfel ist, sie herausziehe und können Sie sehen,
dass ich jetzt mit unserem ausgewählten Objekt auf diese Variable
zugreifen
kann,
wenn ich suche. Und dies würde
uns geben, ob unsere Beispielvariable auf dem Würfel, den wir in der Ebene ausgewählt
haben, wahr
oder falsch ist oder nicht. Gehen wir nun zurück zu
unserem Trigger und ändern den Variablentyp für ein ausgewähltes Objekt
von cube zu actor. Wenn wir jetzt kompilieren, können Sie
sehen, dass die Verbindungen rot werden. Das liegt daran, dass wir,
wenn wir
aus unserem ausgewählten Objekt herausziehen und beispielsweise erneut
suchen, diese Variable nicht mehr
finden können, da diese Variable nur in unserem Coupa-Blueprint
existiert, nicht in der Schauspieler. Und da dies
ein Referenzakt
ist, werden keine Variablen gefunden, die nur in unserem Würfel
existieren. Es werden nur Code und
Variablen gefunden , die im Actor
existieren. Jetzt gibt es Möglichkeiten, wie
wir auf unsere Cubes,
Variablen und Funktionen von
einem Akt des Variablentyps aus zugreifen können . Aber das würde ein Casting erfordern
, auf das wir in einer zukünftigen Lektion
eingehen werden. Im Moment möchte ich nur
einige häufiger verwendete Knoten
mit Objektvariablentypen behandeln . Wir haben bereits in früheren
Lektionen, in
dieser Lektion, einige dieser Knoten
verwendet . Wir haben also Dinge wie
den SAT ACT oder Standort,
SAT ACT oder Rotation That und
setzen Akteur-Transform-Knoten. Wir haben
unseren Schauspieler-Standort
mit dem großartigen
Schauspieler-Standort-Knoten bekommen . Es gibt auch die Schauspieler-Rotation des
Get, die dasselbe tut, aber sie bringt unsere
Schauspieler in
der Welt zur Rotation und gibt einen
Rotator-Variablentyp zurück. Als Nächstes haben wir den
Destroy Actor-Knoten. Also, wenn wir
hier unsere Rotate löschen und Destroy Actor
suchen. Jetzt, wenn dieser Knoten ausgeführt wird, wird
unser Schauspieler zerstört. Und wir können dies mit allen
Apps oder Typen in unserem Level verwenden, und es wird diesen
Schauspieler aus dem Level entfernen. Jetzt ist ein weiterer häufig verwendeter
Knoten der is valid Node. Wenn wir also unsere nehmen, wenn wir unseren Get
Actor löschen, notieren Sie ihn. Und ich werde mich hinausziehen
und suchen ist gültig. In C haben wir zwei Möglichkeiten. Wir werden vorerst den
untersten verwenden. Dies gibt uns einen
Hinweis, dass checks
unser ausgewähltes Objekt ist , um
tatsächlich auf irgendetwas zu setzen. Wenn wir also auf die
Showcase-Ebene gehen, sind hier aktuell ausgewählte
Objekte, Sektor oder Würfel. Aber wenn ich klar bin,
ist das jetzt auf none eingestellt. Keiner der Würfel
wird betroffen sein , wenn unser Charakter und höher ist. Und wenn wir Play drücken
und ich in
den Würfel renne und dann renne
und Play beende. Sie können sehen, dass ich jetzt einige Fehler
habe. Das liegt daran, dass unser
Trigger-Code
unserem ausgewählten Objekt
, das auf
nichts eingestellt ist, im Grunde sagt unserem ausgewählten Objekt
, das auf
nichts eingestellt , dass es seinen Standort ändert. Und das
gibt uns diese Pfeile. Was der
Knoten ist gültig erlaubt, ist zu überprüfen, ob das ausgewählte Objekt
tatsächlich auf etwas eingestellt ist? Wenn ja, dann werden
wir laufen ist gültig. Und wenn nicht, werden wir
laufen ist nicht gültig. Also wenn wir diese Knoten jetzt nehmen, kopiere
ich sie einfach und füge sie ein. Verbinde sie
hier ganz unten. Und wir drücken auf „Spielen“. Wenn wir jetzt in die Box laufen, wir keine Fehler bekommen,
obwohl
wir
nichts ausgewählt haben. Wie Sie sehen können
, stoppt
node jetzt die
Ausführung
des Codes und gibt uns Pfeile. Der andere Knoten ist gültig
funktioniert auf die gleiche Weise. Wenn wir also danach suchen
, ist es gültig. Sie können sehen,
dass dies eine Funktion
ist und im Grunde
genau dasselbe tut. Es gibt uns nur einen booleschen, also true oder false Wert anstelle dieses Knotens
mit den Ausgaben. So könnten wir dies zum Beispiel mit
einem Branch-Knoten verwenden. Abschließend möchte ich nur darauf eingehen
, wie wir Objektvariablen setzen
können. Also können wir sie einfach
in unser Ereignisdiagramm ziehen, wählen Sie hier die Option aus. Und mit dem gesetzten Knoten können wir aus unserer Objekteingabe
ziehen. Und da wir einen Actor-Knoten
verwenden, können
wir diesen mit jedem
anderen Actor-Variablenstift verbinden. Sie können also sehen, dass wir
das in den anderen Schauspieler-Pin hier oder in den Ausgangspin
unseres Autos stecken können. Aber wenn wir
eine andere Art von Objekten erstellen ,
sagen wir einen Charakter. Also nenne ich
diesen Charakter einfach und setze seinen Typ auch
auf Charakter. Also Charakter und dann
Objektreferenz. Und dann werden wir
kompilieren. Wenn wir unseren Charakter
hineinziehen und einen festgelegten Knoten
erstellen. Sie können sehen, wenn ich
aus dem Eingang ziehe, kann
ich ihn nicht an
den Ausgang unseres
Schauspielers anschließen . Und das liegt daran, dass dies ein Schauspieler-Output
ist. Jetzt sind alle Schauspieler
keine Charaktere. Unser Akteur kann also keine Verbindung
zur Eingabe eines
Zeichensatzknotens herstellen. Aber wenn wir uns
von unserem Input zurückziehen, können
Sie sehen, dass ich das
in unseren Third-Person-Kostenknoten einbinden kann . Auch hier werden wir eine
separate Lektion über die Kosten machen. Aber im Wesentlichen
nimmt dieser Knoten eine Akteureingabe entgegen
und prüft, ob das ein Charakter
ist? Wenn ja, können wir
einen Zeichenvariablentyp ausgeben. Und wir können dies dann verwenden
, um unsere
Zeichenvariable zu setzen , da
beide Pins jetzt
ein Zeichentyp sind. Das war's für diese Lektion. Hoffentlich haben Sie jetzt ein
etwas besseres Verständnis dafür wie Objektvariablen in der Engine
funktionieren.
11. Variablen (Arrays und Schleifen): Hallo zusammen. In dieser Lektion werden wir
uns
Array-Variablen und Schleifen ansehen . Also werden
wir zunächst eine neue Variable erstellen. Also tun wir das einfach, indem auf die Schaltfläche Neue
Variable klicken. Und ich nenne
dieses Beispiel name-array. Wir werden den zu benennenden
Typ im Bereich Details festlegen, im Variablentyp können
Sie sehen, dass wir diese
kleine Schaltfläche hier haben. Und hier können wir festlegen, um
welchen Variablentyp es sich handelt. Derzeit ist es also
eine einzelne Variable. Damit haben wir bisher
gearbeitet. Aber als nächstes
wählen wir die Array-Option aus. Tun Sie das und
wir klicken auf Compile. Und Sie können sehen, dass es
jetzt ein anderes Symbol in dem Typ
hat , der
anzeigt, dass es sich um ein Array handelt.
Sie können sehen, dass mein
Standardwert jetzt diese anders
aussehende Option hier ist. Jetzt ist ein Array im Grunde eine Möglichkeit,
eine Variable zu haben, die mehrere Werte
desselben Variablentyps speichern
kann. Unser
Namensvariablen-Array kann hier
mehrere benannte Werte in nur
einer Variablen in unseren
Standardwerten speichern mehrere benannte Werte in nur . Wenn ich in C ein paar Mal auf dieses kleine
Plus klicke
, habe ich hier
kostenlose Einträge. Jetzt haben wir auf der rechten
Seite unsere Variable. Da dies also
eine Namensvariable hat, ist
dies ein Namenswert. Also kann ich hier
Namen eintragen, damit ich James sagen
kann, Bill. Und
nun, zum Beispiel, diese Schauspieler normal
benannte Variablen. Wenn ich schnell
eine andere Variable erstellen würde, was
ich jetzt gerade mache, nenne
ich dieses
Beispiel Float-Array. Ich ändere den
Typ hier auf float. Und es ist bereits als Array
eingerichtet. Wenn dies bei Ihnen nicht der Fall ist, können Sie hier einfach auf die Array-Option klicken. Du siehst es jetzt Ich habe
einen Float und es hat dasselbe Symbol, um
anzuzeigen
, dass es sich um ein Array handelt. Und wenn ich in C kompiliere, sieht
das hier genauso aus
und mein Standardwert, aber wenn ich auf Plus klicke, kannst
du sehen, dass
wir jetzt auf
der rechten Seite statt der Namen Float-Werte haben stattdessen. Weil dies ein Array von Floats anstelle
eines Arrays von Namen ist. Und auf der linken
Seite können Sie sehen, dass wir
diese Indexwerte haben. Auf diese Weise
können wir im Wesentlichen auf diese Variablen zugreifen, die wir später verwenden werden. Aber im Grunde ist dies
die Zeile, in der diese
Variable gespeichert ist. Also zum Beispiel, oder James, Name Wert wird bei Index 0 gespeichert oder Bill Wert wird bei Index eins
gespeichert, und I will Wert wird bei Index zwei
gespeichert. Jetzt können wir uns um
diese Werte bewegen, indem diesen kleinen Indikator auf der Seite verwenden, der es
uns ermöglicht, sie neu zu mischen. Damit ich mich bewegen kann, sagen wir
gut zu Nummer zwei. Erstens können Sie das auch
mit anderen
Variablentypen tun . Wenn ich das also auf 12 setze
und sehe, ob ich diese ziehe, kann
ich sie neu anordnen. Ich möchte eines davon entfernen. Ich kann auf den kleinen
Abwärtspfeil klicken und Löschen auswählen. Ich kann sie auch duplizieren. Oder wenn ich hier auf den kleinen
Mülleimer klicke, kannst du sehen, dass er einfach
alle deine Einträge löscht. Und das sind nur
die grundlegenden Steuerelemente zum Festlegen Ihrer
Standardwerte für ein Array. Als Nächstes möchte ich
Ihnen zeigen, wie wir tatsächlich
auf diese Variablen
in unserem Code zugreifen können . Wenn ich also mein
Beispielnamen-Array hineinziehe, kann ich einfach den Knoten auswählen, wie wir es normalerweise mit
unseren Variablen tun. Sie können sehen, dass ich eine
anders aussehende Variable habe. Jetzt kann ich dies nicht
herausziehen und
als normale Namensvariable verwenden , da diese Ausgabe
gerade einen unserer Werte darstellt. Um einen dieser Werte zu erhalten, die
wir herausziehen werden, suche
ich nach GET. Wir verwenden eine Kopie. Und das gibt uns
diesen Knoten hier. Wie Sie sehen können, haben
wir jetzt eine Eingabe für eine Ganzzahl und eine Ausgabe
für eine normale Namensvariable. Und wenn ich mich davon ziehe, könnte
ich jeden meiner
normalen Namenvariablenknoten verwenden. So könnte ich zum
Beispiel den Gleichheitsknoten machen. Sie können sehen, dass es mir
die gleiche Note gibt , die
wir uns zuvor angesehen haben. Genau wie eine normale
Namensvariable. Der Grund dafür ist, dass
dies im Wesentlichen der Fall ist. Es nimmt unser Array, ruft den Index 0 ab und gibt
dann seinen Wert aus. Wenn ich zum Beispiel diese Knoten ausführen
würde, wäre
die Ausgabe unseres
get-Knotens,
nun ja, weil
das unser Index 0 ist. Wenn ich das ändern
würde, um auch zu sagen, wäre
die Ausgabe dieses Knotens jetzt bell. Das Gleiche funktioniert
mit unserem Float-Array. Wenn ich also mein
Beispiel-Float-Array bekomme und daraus herausziehe
und nach C suche oder bekomme, bekommt man eine Kopie. Und Sie können sehen, dass wir jetzt
diese grüne Version haben. Wir haben eine Eingabe für unseren Index und wir haben eine Ausgabe, die nur ein normaler
Float-Wert
ist, den wir einem normalen Float-Wert verwenden
können. Also, wenn ich Add Node sage, siehst
du, dass ich ein add gut damit
wissen kann, weil das jetzt eine einzelne
Variable anstelle eines Arrays ist . Und das gilt für
alle Arten von Arrays. Wir könnten also ein
Array von Transformationen,
Rotatoren, Vektoren und
ganzen Zahlen erstellen Rotatoren, Vektoren , und der Prozess
wäre genau der gleiche. Wir könnten unsere Standardwerte festlegen. Wir könnten den get-Knoten verwenden
und dann einfach
einen Index hinzufügen , auf den wir zugreifen möchten, und er gibt eine
normale Einzelversion des Array-Typs aus. Es. Jetzt werde ich nur ein paar
der häufig verwendeten
Knoten unseres Arrays
durchgehen . Also haben wir hier die Lückennotiz verwendet, aber es gibt auch Entfernenknoten. Wenn ich also aus
meinem Namensbeispiel wo herausziehe und nach remove suche, können
wir remove index verwenden. Und
wenn dies ausgeführt wird,
wird im Wesentlichen jeder
Index entfernt, den wir hier eingeben. Derzeit ist das also 0. Wenn wir also diesen Knoten ausführen würden, unser Index bei 0
, würde
unser Index bei 0
, der derzeit
gut ist, entfernt. Nun, etwas, das
Sie bei
Radiergummis beachten sollten , wenn Sie einen Index
entfernen. Wenn wir also den
Index 0 entfernen würden, kann ich das tun. Jetzt. Sie können sehen, dass alle anderen Indizes um eins nach oben steigen. Jetzt ist James bei 0
und Bill bei eins, während sie es zuvor waren. James war einer und Bill war zwei. Dieser Knoten ist also
nützlich, wenn wir wissen welchen Index wir entfernen möchten, aber es ist auch eine weitere
Entfernungsnotiz, die wir
verwenden können , wenn
wir herausziehen und nach remove suchen, wir können remove item. Dies ermöglicht es uns nun, es zu sagen, uns einen Namenswert zu
geben und diesen Wert
entfernen zu lassen , wenn
er in unserem Array existiert. Also zum Beispiel, wenn ich Bill aus unserem Array
entfernen wollte , aber vielleicht wusste ich nicht,
welche Indexrechnung App ist. Ich könnte
Bill einfach als Input haben. Dann würde dieser Knoten unser Array
überprüfen und nach dem Rechnungswert
suchen. Und wenn sich dieser Rechnungswert im Array
befindet, würde
er diesen Wert entfernen. Und die Ausgabe
wäre im
Grunde genommen wahr, wenn der Wert
entfernt würde , und false, wenn sie diesen Wert nicht im Array
finden könnte . Und das sind genau die
gleichen für unsere Float-Noten. Wenn ich es Ihnen schnell zeige, können
wir den Index entfernen und Sie können sehen, dass das genauso
funktioniert und
es uns ermöglicht, einen Eintrag
aus unserem Array-Ausgabeindex zu entfernen. Oder wir könnten Artikel entfernen. Und das gibt uns
eine Float-Eingabe, nach wir unser Array
durchsuchen
und dann entfernen können. Jetzt
schauen wir uns an, wie wir
mithilfe unseres Codes
Werte zu unseren Arrays hinzufügen können . Also werden wir
diesen Knoten vorerst entfernen. Wir ziehen uns aus
unserem Beispielnamen heraus, array sucht nach Add. Nun gibt es hier ein
paar Optionen. Wir wählen zuerst die ersten aus. Jetzt fügt der Add Node
im Wesentlichen nur den Wert hinzu, den wir
hier festgelegt haben, zu unserem Array. Da dies ein Namensarray
ist, dieser Wert ein Name. Aber wenn ich hier aus
meinem Float-Array herausziehen und nach Anzeige suchen würde, können
Sie sehen, dass dieser Wert jetzt ein Float
ist, weil wir einem Float-Array einen float-Wert
hinzufügen. Diese Anzeigennotiz erhöht
im Wesentlichen unseren Wert beim ersten
verfügbaren Index. In unserem Namensarray wäre
das also Index zwei, weil 01 genommen wird. Wenn wir also sagen würden, dass wir das Bob
geben würden
, würde das einen
Sumpfwert für Index zwei hinzufügen. Und es würde diesen Index mit diesem
Integer-Stift für die Ausgabe ausgeben. Jetzt haben wir die andere
Anzeigennotiz, die ADD unique. Und das funktioniert ähnlich, aber das wird
zuerst unser Array
überprüfen, ob es unser Array
überprüfen, ob es einen
Eintrag für den von uns gesetzten Wert
hat oder ob es bereits einen Eintrag hat. Wenn wir also Bob erneut hinzufügen, wenn dieser Knoten ausgeführt wird, würde
er zuerst unser Array überprüfen. Es würde sehen, dass die Glühbirne
kein Wert ist , den sie derzeit hat. Es würde es beim
ersten verfügbaren Windex hinzufügen, genau wie unser normaler Add-Knoten, dann würde es diesen Index
mit dem Integer-Stiftschlag ausgeben . Wenn Bob bereits in unserem Array wäre, würde
es keinen
neuen Bulb-Wert hinzufügen, wohingegen der Add Node
nur einen zweiten Bulb-Wert hinzufügen würde. Als Nächstes
möchten wir vielleicht in der Lage sein, einen Wert zu ändern, anstatt einen
hinzuzufügen oder zu entfernen. Angenommen, wir wollten zum Beispiel den ersten Index
von Bill auf Bob
ändern . Nun, um das zu tun,
würden wir einen M-Knoten verwenden. Wenn wir also herausziehen
und L setzen, können
Sie das Set Array sehen. Auf diese Weise können wir
einen Index angeben , den wir ändern möchten, und den Wert, in den wir ihn ändern
möchten. Wenn ich also ändern
wollte, sagen wir Bill, könnte
ich diesen Index auf eins setzen,
weil Rechnungen in Index eins sind. Und ich kann den neuen Wert festlegen. Also Bob zum Beispiel. Wenn dieser Knoten jetzt ausgeführt wird, würde
er den Wert des
Index ändern. Also der Bill Indexer für Bob. Und Sie können sehen, dass wir hier
eine passende Größe haben. Dies
erzeugt im Grunde genommen neue Einträge wenn wir versuchen, einen Index zu setzen , der derzeit noch nicht existiert. Wenn ich das zum Beispiel
auf vier setzen würde, haben
wir nur 01, also haben wir nur zwei Einträge. Was dies tun würde, wenn
es ausgeführt würde, würde
einen Index 23 und dann eine Vier erstellen . Und es würde den
Index vier auf Bob setzen. Aber die beiden Indizes, die es erstellt hat , um zur Nummer vier zu gelangen, wären
nur leere Werte. Nun gibt es noch ein paar andere wichtige Hinweise, die
wir mit Arrays verwenden können. So können wir aus
unserem Array ziehen und nach contains
suchen und
das contains Item verwenden. Auf diese Weise können wir einfach
überprüfen, ob unser Array
einen bestimmten Wert enthält , wenn es true
zurückgibt und wenn
nicht, gibt es false zurück. Wenn wir also Bob sagen würden, würde
es unser Array überprüfen. Enthält es derzeit den Wert Bob? Das tut es nicht. Also
würde R contains node falsch zurückgeben. Aber wenn es diesen Wert
enthalten würde, wenn wir ihn hinzufügen würden,
wenn dieser Knoten ausgeführt wurde, würde
es true zurückgeben. Wir können den Suchknoten benutzen. Wenn wir also herausziehen und nach find, find item Node
suchen, können
Sie hier sehen, dass wir einen Wert eingeben
können und dann wird
unser Array nach uns durchsucht. Und wenn ja, wenn dieser Wert in unserem Array
existiert, wird
es uns den Index geben , dass dieser Wert gerade hoch ist. Wenn ich dies beispielsweise
auf bill setzen würde, würde
es unser Array nach uns durchsuchen, wenn dieser Knoten ausgeführt wird,
und es würde zurückgeben, dass Bill bei
Index eins ist und dieser Wert hier, der ganzzahlige Wert wäre eins. Ein weiterer nützlicher Knoten, der mit Arrays
verwendet werden kann ,
ist der Clear Node. Also, wenn wir uns hinziehen und
nach Klarheit suchen. Wenn es ausgeführt
wird, wird es oder das Array vollständig
getötet. Es wird also im Wesentlichen unser Array von
all seinen Einträgen
leeren. sind also einige der am häufigsten verwendeten Knoten mit Arrays. Wenn Sie jedoch einen der
anderen Knoten finden möchten, können
Sie ihn herausziehen und
nach einem Array suchen. finden Sie viele Hier finden Sie viele
verschiedene Knoten, mit
denen Sie Ihre Array-Variablen
ändern und Werte daraus abrufen können. Ein weiterer Hinweis, den Sie als
Länge für den Knoten nützlich
finden könnten . Wenn wir also herausziehen und
nach Länge suchen, können
Sie sehen, dass wir
einen Knoten namens length haben, und dies zählt nur,
wie viele Einträge wir in
unserem Array haben , und
wie viele wir haben. Wenn ich also beispielsweise einen Knoten mit
drei Längen hinzufügen würde, wäre dies kostenlos, da wir drei
Einträge in unserem Array haben. Jetzt gehen wir zu
Loops über. Also werde ich
diese Knoten vorerst einfach löschen und wir beginnen einfach
mit unserem Namensarray. Wenn ich also in C nach einer
Schleife suche ,
die wir für jede Schleife
haben, werden
wir im Moment darauf
achten. Also werden wir das schaffen. Jetzt funktioniert
dieser Knoten im Wesentlichen darin, dass er aufgenommen und ausgeführt wird. Und wir werden den Schleifenkörper ausführen, egal wie viele Einträge
wir in unserem Array haben. Derzeit haben wir also kostenlos. Also
lief unser Loop-Körper dreimal. Und so kann ich Ihnen das
zeigen, als würden wir uns hinziehen und nach Druckzeichenfolgen
suchen. Und ich füge hier ein großes
Gameplay hinzu. Jetzt haben wir derzeit drei Einträge in unserem Namensfeld. Wenn wir also auf „Spielen“ klicken, werden
wir Hello dreimal
drucken sehen. Drücken Sie also auf „Spielen“, Sie können dreimal
einen niedrigsten Lauf sehen. Wenn wir zu
unserem Code zurückkehren und Sie sehen, dass wir auch einen kompletten Stift
haben. Sobald dieser Schleifenkörper ausgeführt
wurde haben wir
die Anzahl der Werte in unserem Array. Dann wird
der komplette Stift ausgeführt damit ich hier eine weitere
Druckzeichenfolge hinzufügen kann. Lass mich einfach „
Fertig“ sagen. Und jetzt würde das, was wir
Hello dreimal drucken
und dann abgeladen sehen würden, so laufen. Wenn wir jetzt aus dem Spiel und zu unserem
Charakter-Blueprint zurückkehren, haben
wir auch ein
Array-Element und einen Array-Index. Dies sind nun
die Werte aus unserem Array, für die unser
Schleifenkörper ausgeführt wird. Wenn dies zum
ersten Mal ausgeführt wird, leider wenn ich
zum ersten Mal
Body-Ones schleife, ist
der Index 0 und das Array-Element ist was
auch immer unser Wert ist. Derzeit
sind diese also alle auf „Keine“ eingestellt. Aber wenn ich diese
schnell ersetzen sollte, sage
ich einfach, das
ist Bill Bob James. ich nun zum ersten Mal den Wert
in einer Schleife ausführe, wäre
der Wert des Array-Elements bill und der
Array-Index wäre 0. Und dann wäre das zweite Mal
dieses seltene Element Bob und der Array-Index
wäre eins und so weiter. Was nun im Grunde
entscheidet, wann der Schleifenkörper ausgeführt wird, ist, wann er auf
einen Knoten trifft , der
keine Ausgabe hat. Für uns wird das also
einfach
string ausgeben, welchen
Wert wir hier setzen. Und dann
ist dieser Schleifenkörper fertig und es geht
weiter zum nächsten. Wenn es nun auf dem
letzten Schleifenkörper ist,
also wenn es eine Schleife würde,
sagen wir, der Index für das
Array-Element war James, würde
es das Ende dieses
C erreichen . Es gibt keine Knoten mehr zum Ausführen. Und weil wir
am letzten Index sind, wird er dann abgeschlossen ausgeführt, wird er dann abgeschlossen ausgeführt,
was jetzt
fertig ist druckbildschirm. Also, wenn ich
das Array-Element hier in unseren Druckstring
einfüge, verschiebe ich diese Knoten. Wenn wir kompilieren und auf Play klicken, sollten
wir unsere Namen, die
der Entertainer
ausdrucken lassen, auf dem Bildschirm sehen . Wenn wir das also in C machen , werden diese
ausgedruckt, und dann wird
der W1-Wert gedruckt,
sobald die Arrays abgeschlossen sind. Das sind also die Grundlagen für die
Funktionsweise eines Loop-Knotens, aber wir haben noch ein
paar andere Typen. Wenn wir also jetzt zu
unserem Charakter zurückkehren und dies für jede Schleife löschen. Wir ziehen uns in die Länge und
suchen erneut nach einer Schleife. Jetzt versuchen wir die
for-each-Schleife mit break. Das funktioniert jetzt sehr
ähnlich wie der letzte Knoten, aber es gibt uns einen zusätzlichen Input , den wir
hier sehen können, break genannt. Und das ermöglicht es uns,
unseren Loop-Körper
an einem bestimmten Punkt zu stoppen . Also zum Beispiel, wenn wir unseren Loop-Körper laufen lassen
wollten bis wir den Bob-Namen erreicht haben,
und dann unseren Loop-Körper
abbrechen wollten. könnten wir machen. Wenn wir hier also
etwas mehr Platz schaffen, können
wir uns von unserem
Array-Element zu einem gleich verschneiten ziehen . Wir könnten sagen, wenn unser
Array-Element gleich
ist , denke ich, dass es Bob war. Bob wird Bob sagen. Wir wollen einen Zweigknoten überprüfen. Und wir wollen while
Schleife abbrechen, wenn der Wert Bob ist. Also können wir das machen. Wir können von
True ziehen und
das hier mit dem Break-Eingang verbinden . Und wenn wir
auf die weiße Linie doppelklicken, können
wir diese
kleinen Knoten erstellen, die uns
helfen, unseren Code
ein bisschen besser zu organisieren. Also mache ich das einfach so. Was nun passieren wird,
ist, wenn unsere Schleife läuft,
wird überprüft, ob das
Array-Element Bob ist. Wenn ja, dann wollen wir unseren
Loop-Lauf beenden. Das wird uns veranlassen, Bill zu rennen und Bob
wird auf einer Schnur drucken. Aber James wird es nicht tun, weil wir unsere Schleife
gestoppt und abgeschlossen haben, sind
wir stattdessen gelaufen. Wir können das ausprobieren. Ich kann auf „Spielen“ klicken. Sie können sehen, dass Bill und Bob
rennen und dann läuft es fertig, weil unser James-Wert
nicht mehr ausgeführt wird. Wenn wir diesen
Namen ändern würden, um Bill zu sagen, würden
wir jetzt erwarten, dass nur der Rechnungsname ausgeführt wird,
denn wenn er einmal in Rechnung gestellt wird, würde
dies unsere Schleife abbrechen. Also können wir das jetzt versuchen. Und du siehst Bill,
und dann
bricht es einfach unsere Schleife ab
und fertig wird
ausgeführt, anstatt dass der Rest
unserer Schleife abgeschlossen wird. Wir könnten dies auch
mit unserem Index tun, wenn wir uns aus unserem Index
ziehen
und gleich Anstatt die Werte zu verwenden, können
wir stattdessen einfach
den Index verwenden. Also sag, ich wollte unseren Loop-Index
eins
stoppen, das kann ich tun. Ich könnte
das einfach auf eins setzen,
das in unseren Brunch stecken und
kompilieren und auf Play klicken. Sie können sehen
, dass wir dasselbe Ergebnis erzielen, das Bill und Bob drucken. Und dann werden die Loops
beendet, weil wir die Schleife
abgebrochen haben und sie dann als falsch
abgeschlossen haben. Jetzt gibt es noch einen
anderen Schleifentyp, wir uns ansehen können. Also werde ich diese Texte einfach
löschen. brauchen wir nicht mehr. Aber wenn wir uns in die Länge ziehen, können wir wieder nach einer Schleife
suchen. Und für jede Schleife gibt es das
Gegenteil. Und das funktioniert genauso wie
der erste Loop-Knoten, den
wir ausgearbeitet haben. Aber anstatt von Anfang bis Ende zu loopen, würde
es vom Ende
zum Anfang laufen und alles andere ist mit diesem Knoten gleich. Es gibt auch Loop-Knoten
, die kein Array verwenden. Also wenn wir das
jetzt löschen und ich nur
nach einer Schleife gesucht
habe, scrolle ich nach unten und du wirst
sehen, dass wir vier Schleifen haben. Wenn ich jetzt darauf klicke, siehst
du, dass
wir
anstelle einer Array-Eingabe einen ersten Index
und den letzten Index haben. Das
sagt einer Schleife im Grunde nur, wie oft sie laufen wird? Also, wenn ich
unseren ersten Index bei 0 belassen würde, aber den letzten Index
für diese Schleife setzen würde, würde er
fünfmal laufen , weil er einmal für
0 laufen
würde und dann wieder, bis
es bis zu vier wird. Und während es durch
jeden Schleifenkörper lief, stieg
der Index um eins. Wir haben auch denselben Knoten, aber mit einer Pause,
wenn wir das wollten, könnten
wir eine
for-Schleife mit break machen. Und das funktioniert wieder
ähnlich wie bei unserem Break-Knoten. Es ist nur so, dass
wir
anstelle einer Array-Eingabe erneut einen Index setzen können und der letzte Index,
soweit wir
ihn auf 04 setzen, würde er fünfmal laufen. Aber während unseres Loop-Körpers könnten
wir diese
Schleife abbrechen, indem wir
die break-Eingabe ausführen , wie wir es
gerade bei der
Schleife mit unserem Array getan haben. Abschließend wollte ich Ihnen nur
zeigen, wie wir
ein Rennen einrichten können , damit wir
sie wie normale Werte festlegen können. Wenn wir also hineinziehen, können wir das festgelegte
Beispielnamen-Array
auswählen. Sie können sehen, dass wir nur
einen normalen Set-Node erhalten , und
wir können dies
als
Number-Array-Werte festlegen , um schnell
ein anderes Namensarray zu erstellen. Und wir setzen dies auf name und
ändern seinen Typ in array. Wir könnten das nehmen und
wir können es in unser Beispielnamenarray genau wie bei
normalen Variablen. Und das würde nur
unsere aktuellen oder Entschuldigung nehmen Es würde unsere
Name-Array-Werte annehmen und sie auf das
Beispielnamen-Array
setzen. Es würde also
unser Namensarray vollständig löschen und dann die Werte auf genau
die gleichen Werte wie unser Namensarray
setzen. Dies gilt auch für unser
Float-Array. Und dann können
wir für jede andere Art
von Array, die Sie erstellen, diese in Ordnung bringen. Und wir können
einen anderen Array-Wert annehmen. Wir könnten das
auch so einstellen, solange
sie vom gleichen Typ sind, hätten wir unseren Float in unser Float-Array
gesteckt, Name ist in
unser Namensarray gesteckt. Das Gleiche gilt für alle
Knoten, die ich verwendet habe. Also unsere Loop-Arrays, wenn ich es Ihnen schnell zeige, können
wir unser
Beispiel Float-Array nehmen, ich kann herausziehen und ich
kann nach Schleife suchen. Und Sie sehen, wir
haben dieselben Knoten für Ich erstelle einen neuen Loop-Knoten. Wir haben dieses Array-Element,
aber anstelle eines Namens ist
es nur ein Float-Wert, da dies ein Array
von Float-Werten ist. Unser Index bleibt jedoch
derselbe, da er für
jeden Eintrag in unserem Array immer einen Index haben
wird. Wir können auch ein Rennen um unsere Schauspieler- oder Objektreferenzen machen. Also wenn ich das schnell mache, nenne das
einfach das actors-Array. Sie können sehen, dass
wir, wenn ich den Typ in actor
ändere, zu unserer
Actor-Objektreferenz gehen. Sie können sehen, dass wir jetzt eine Reihe von Schauspielern
haben. Und das funktioniert wieder, genauso wie wir
unseren Namen und Float-Arrays verwendet haben. Wir könnten
eine Reihe von Schauspielern durchgehen. Und das gibt uns
eine Akteurausgabe und einen Index, dass dieser Schauspieler eine App in unserem Array
ist. Jetzt hat die Engine einige Knoten eingebaut, die tatsächlich Arrays
ausgeben. Ein Beispiel dafür wären also die
sich überschneidenden Akteure. Und das bringt im Wesentlichen die Akteure, die sich mit
unseren aktuellen Blaupausen überschneiden. Ich bin also im
ThirdPerson-Charakter. Dies würde dazu führen, dass
sich jede App unseren Charakter überlappt und sie als Array ausgibt. Wir könnten das
genauso verwenden, wie wir unsere Array-Variablen verwendet
haben. So könnte ich zum Beispiel alle Schauspieler
durchgehen, die sich gerade mit meinem Charakter
überschneiden. Und wir könnten jede Art
von Kontrolle machen, die wir wollten, wir könnten sagen, vielleicht
zerstören. Wenn wir wollten, könnten
wir
die Schauspieler zerstören , die sich mit unserem Charakter
überschneiden. Und wir können
dieses Array-Element
wie eine normale Variable verwenden , wie wir es in unserer vorherigen
Lektion mit dem Actor-Typ getan haben.
Wir können dies verwenden, um ihre Positionen zu ermitteln. Oder wir könnten es benutzen, um ihre Standorte
festzulegen. Genau wie ein normaler variabler
Akt. Natürlich müssen wir dafür auch
keinen Loop-Knoten verwenden . Wir könnten den get-Knoten verwenden
und dies wird uns nur den ersten Index in der Reihe von Akteuren geben, die unseren Charakter
überlappen. Wenn wir durchkommen wollten, sagen wir den zweiten oder dritten, könnten
wir
diesen Eingabewert ändern. Und dann könnten wir unseren
get-Knoten verwenden, um uns an einen
dieser Knoten anzuschließen , die wir mit aktiven Variablen
verwenden können. Das war's also für diese Lektion, und das war's für den
Variablenabschnitt des Kurses. In unserer nächsten Lektion werden wir
uns mit
Funktionen befassen und wie sie funktionieren und wie wir neue
erstellen können.
12. Grundlagen (Funktionen): Hallo zusammen. In dieser Lektion lernen wir
etwas über Funktionen, wie sie verwendet werden und
wofür sie verwendet werden. Funktionen sind eigenständige
Codeteile, die wir ganz einfach ändern und
wiederverwenden können. Zunächst werde
ich in meinem
Third-Person-Charakter hier einfach eine neue Funktion
erstellen. Und das können wir tun, indem wir hier auf die neue Funktionsschaltfläche klicken. Oder wir können auf die Schaltfläche
Hinzufügen gehen und eine
neue Funktion auswählen , die eine neue Funktion für uns
erstellt. Ich nenne mein Beispiel. Sie können sehen, dass
es auch
ein neues Ereignisdiagramm für
uns mit einer Eingabe geöffnet hat. Und es hat den Namen
unserer Funktion hier. Hier werden
wir
unsere Funktion codieren , falls Sie jemals
zum Code einer Funktion gelangen müssen . Sie befinden sich also im
Ereignisdiagramm und möchten den Code Ihrer
Funktion abrufen Sie können jederzeit einfach
auf den Funktionsnamen doppelklicken und Sie gelangen
direkt zu Ihrer Funktion. Wie Sie sehen können,
haben wir einen Eingabeknoten immer dann ausgeführt
wird, wenn
unsere Funktion ausgeführt wird. Wenn wir zum
Event Graph gehen und unsere Beispielfunktion
herausziehen, können
Sie sehen, dass sie
uns einen neuen Knoten namens example gegeben hat. Jetzt, wann immer dieser
Input-Ausführungs-Pin ausgeführt wurde, wird
der Code in unserer
Funktion ausgeführt. also ein kurzes Beispiel Wenn ich also ein kurzes Beispiel zu
meiner Beispielfunktion hier
in unserem Event-Diagramm hinzufüge, erstelle
ich einfach
einen Begin-Playing-Knoten in unserem Event-Diagramm hinzufüge, . Und ich verbinde das mit meiner Beispielfunktion. Wenn das Spiel jetzt beginnt, wird
unsere Beispielfunktion ausgeführt, und das wird den
Code in unserem Beispiel ausführen
, der diese Druckzeichenfolge ist. Also werde ich einfach auf Play
kompilieren. Sie können sehen, dass unser
Druckstring läuft. Um Ihnen zu zeigen, wie
das nützlich sein könnte, beenden
wir das Spiel, kehren zu ThirdPersonCharacter zurück
und erstellen eine neue Funktion und wir
nennen dies Gesundheit erhöhen. Und wir werden auch
eine neue Variable erstellen und diese
aktuelle Gesundheit nennen. Wenn Ihre eine Ganzzahl ist,
können Sie einfach darauf klicken und
sie in eine Ganzzahl ändern und wir werden kompilieren. Nun könnte man denken, wenn wir die Gesundheit erhöhen
wollen, würden
wir zu unserem Ereignisdiagramm gehen, aus unserer
aktuellen Gesundheit herausgezogen wurde, um Gesundheit zu erhalten. Und wir würden einen Add-Knoten verwenden und den Berg
hinzufügen, den wir hinzufügen
möchten, um einen zu sagen. Und dann würden wir dann den aktuellen Gesundheitszustand
festlegen. Das Problem dabei ist jedoch jedes Mal, wenn Sie
unsere Gesundheit und unseren Code ändern möchten, wir
jedes Mal, wenn Sie
unsere Gesundheit und unseren Code ändern möchten,
all diese Notizen aufschreiben müssen. Welche Funktionen
uns erlauben, ist, diesen Code im Grunde
genommen in eine Funktion zu
stecken. Und anstatt diesen Code ausschreiben
zu müssen, können
wir einfach
eine Funktion in
den Event Graph oder
eine andere Funktion ziehen den Event Graph oder und
diesen Code ausführen lassen. Wenn wir also diesen Code nehmen, schneiden
wir ihn einfach ab und kehren zu unserer
erhöhten Gesundheitsfunktion zurück. Fügt das ein
und verbindet sich. Wenn wir jetzt
die Funktion „Wie erhöhen“ ausführen, wird sie
nur
eine Gesundheit zu unserer
aktuellen Gesundheit hinzufügen , was nicht besonders nützlich ist. Wir wollen
wählen können, wie viel Gesundheit zu unserer aktuellen Gesundheit
hinzugefügt wird ,
und das können wir nicht tun. Wenn wir also hier unseren
Eingangsknoten auswählen, können
Sie im
Bereich Details sehen dass
wir Ein- und Ausgänge haben. Jetzt können wir neue Eingaben hinzufügen indem wir auf diesen kleinen
Button hier klicken. Und das wird eine
neue Variableneingabe hinzufügen. Sie können sehen, dass wir hier einen Input
haben. Und wenn wir zum Event Graph gehen und unsere Funktion
increase how ziehen, können
Sie sehen
, dass diese Variable
auch hier verfügbar ist . Jetzt können wir dies umbenennen, indem
wir zu unserer Funktion zurückkehren, die Eingabe
auswählen und
sie in mount ändern. Wir können hier auch den
Variablentyp ändern. Also minus ist standardmäßig auf
Integer gegangen. Aber Sie können es in eine
beliebige Variable ändern. Wir verwenden
vorerst Integer
, weil das unsere
Gesundheitsvariable ist. Und wir können
aus unserer Menge herausziehen und diese hier in den
Plus-Knoten
stecken. Was nun passieren wird, ist, wenn unsere
Funktion zur Erhöhung der Gesundheit ausgeführt
wird . Sie nimmt
die Menge plus diese Menge auf unsere aktuelle Gesundheit
und legt den aktuellen Gesundheitszustand fest. Jetzt ziehe ich
von hier aus und füge
einen Druckstring hinzu, nur damit wir sagen
können, ob das funktioniert, ziehen
wir ihn aus dem gesetzten Knoten heraus und stecken ihn hier in den
Print-String-Knoten. In unserem Ereignisdiagramm möchten
wir nun unsere Gesundheit
erhöhen, sagen wir, wenn ich eine Taste drücke,
damit ich mit der rechten Maustaste klicke und
nach einem Eingabeereignis suche. Sag warum. Wir scrollen durch und finden die
y-Eingabe von ihnen. Dies wird immer dann ausgeführt, wenn
ich Y auf meiner Tastatur drücke. Wenn ich das anschließe, wie schnell kann ich den Betrag einstellen. Also sage ich fünf. Wenn wir jetzt kompilieren
und auf „Play“ klicken, jedes Mal, wenn ich Y drücke können
Sie
jedes Mal, wenn ich Y drücke, sehen, dass sich meine aktuelle
Gesundheit erhöht, weil sie
jedes Mal, wenn ich Y
drücke, um fünf erhöht
wird. unsere Funktion. Wenn wir also zurückgehen
und das Stück beenden, können
wir hier zu unserer Funktion zur Erhöhung der
Gesundheit zurückkehren. Wenn wir den Eingabeknoten auswählen, können
wir eine neue Ausgabe hinzufügen. Also werde ich
hier auf
die Schaltfläche „Neue Ausgabe“ klicken und Sie sehen, dass jetzt
ein neuer Knoten für uns erstellt wurde. Und das
führen wir aus, wenn wir etwas
von unserer Funktion
ausgeben wollen . Wenn ich das also in
den vorderen Teil stecke, nachdem ich Zeichenfolge in C
gedruckt
habe, kann ich ihr einen Namen geben. Also werde ich einfach die aktuelle Gesundheit angeben. Und wir nehmen, was auch immer unser aktueller Gesundheitswert
ist, und geben ihn aus. Wenn wir kompilieren und zu unserem Ereignisdiagramm
zurückkehren, können
Sie sehen, dass unser Knoten
im Ereignisdiagramm jetzt eine Ausgabe
namens current health hat. Und diese Ausgabe, unabhängig von den Werten die
wir
von unserer Funktion aus in sie einfügen. Im Moment gebe
ich also nur
meinen aktuellen Gesundheitswert aus. Wir können also
im Ereignisdiagramm darauf zugreifen. Jetzt können wir auch Funktionen
innerhalb einer Funktion verwenden. Wenn wir also hier
und hier zu unserer Funktion zur Erhöhung der
Gesundheit gehen , wollten wir
vielleicht
jedes Mal, wenn sich unsere Gesundheit erhöht, einen Ton abspielen , können
wir eine
neue Funktion erstellen, bei der ein Geräusch
abgespielt wird den Ort unseres Charakters, den wir auch an anderen Orten
nutzen könnten ,
wenn wir es wollen. Also
erstellen wir zum Beispiel eine neue Funktion. Wir nennen das einfach Sound spielen. Soundplayer abspielen. Standort. Hier können wir aus unserem
Eingang ziehen und den
Plattensound am
Positionsknoten verwenden , der
aus dem Standort gezogen wird und die Position des Schauspielers ermittelt. Dadurch wird ein Sound wiedergegeben, den wir an der Position des aktuellen
Spielers
eingestellt haben . Jetzt können wir einen neuen Eingang für
unsere Sounds hinzufügen , sodass wir wählen können
, welcher Sound abgespielt werden soll. Ein schnellerer Weg. Wir können das so machen
, als würden wir hier von
unserem Soundeingang
herausziehen und diesen auf den Eingangsknoten Wenn ich loslasse, sieht man, dass
es tatsächlich nur
einen neuen Soundeingang für uns hinzufügt und diesen Sound benennt. Wenn wir es umbenennen wollen, können wir das, wir machen das einfach in
den Eingaben hier. Und jetzt, wenn wir kompilieren, wenn wir zu welcher Erhöhung,
wie Funktion zurückkehren , können wir jetzt
die neue Funktion, die
wir gerade erstellt haben,
in unsere erweiterte Funktion ziehen die neue Funktion, die
wir gerade erstellt . Wir können das wie im Event Graph verwenden. Wenn ich das also verbinde, können wir
jetzt Sound sagen,
weil wir
den Soundeingang zu unserer Funktion hinzugefügt haben . Und wann immer wir
die
Ausführung der Funktion erhöhen und denselben Code ausführen erhöht sich unsere Gesundheit
um den Betrag. Es wird eine Zeichenfolge mit
der aktuellen Menge ausgeben und dann den
Code in unserem
Wiedergabesound an einem Ort mit
dem von uns eingestellten Sound ausführen . Derzeit habe ich keinen Sound
eingestellt. Sobald diese Sounds abgespielt wurden und diese
Funktion abgeschlossen ist, wird
sie fortgesetzt und
unser aktueller Gesundheitswert
in unserem Ereignisdiagramm zurückgegeben . Und natürlich ist der Wiedergabeton am Spielort nur eine Funktion wie unsere
Steigerung der Gesundheit. Wenn wir also wollten, könnten wir es
auch im Ereignisgraphen und an anderen Orten oder
innerhalb einer Funktion
verwenden . Eines der besten Dinge an Funktionen ist, dass sie wiederverwendbar sind. Also habe ich meine Funktion
zur Erhöhung der
Gesundheit hier auf der y-Eingabe ausgeführt. Aber ich könnte auch
die
Funktion increase how in anderen Teilen
meines Codes verwenden , wenn ich möchte, ich kann so viele haben, wie ich möchte. Und wenn alle ausgeführt werden, wird der Code so ausgeführt, wie
Sie es erwarten würden. Immer wenn wir irgendetwas
innerhalb unserer erhöhten
Zellfunktion modifizieren . Nehmen wir an, wir wollten
hier eine Änderung
vornehmen oder wenn es einen Bug
oder ähnliches gab, könnten
wir eine
Änderung an einer Stelle
innerhalb vornehmen oder die Funktionsweise erhöhen. Und das wirkt sich auf alle Orte
aus, an denen wir einen erhöhten
Gesundheitsknoten
verwendet haben . Funktionen haben auch
eine weitere Funktion lokale Variablen
genannt wird. Wenn wir also das Herz öffnen
und die Funktion hier unten
im Bedienfeld „Mein Blueprint“ sehen
können, haben
wir die lokalen Variablen. Jetzt
funktioniert eine lokale Variable ziemlich
genauso wie eine normale
Variable, ist genau das. Sie existiert nur
innerhalb unserer Funktion. Wir können also nicht von unserer
erhöhten Gesundheitsfunktion aus auf
eine lokale Variable im Ereignisdiagramm zugreifen, sondern nur innerhalb
unserer erhöhten Funktion auf sie zugreifen. Eine andere Sache von lokalen
Variablen ist, dass die
Variable nach Abschluss dieser Ausführung oder nach Abschluss
unserer Funktion auf ihren Standardwert zurückgesetzt wird. Also als Beispiel, wenn ich eine neue Variable
erstelle, hip and cool dieses Beispiel. Und das ist nur ein boolescher Wert. Wenn wir also hier einen Get-Knoten erstellen, erstellen wir auch
eine Druckzeichenfolge. Wenn wir jetzt diesen
Print-String-Knoten ausführen, werde
ich mein
Beispiel an die Zeichenfolge anschließen. Es wird
entweder true oder false ausgegeben je nachdem, was unser
aktueller Beispielwert ist. Standardmäßig ist es auf „false“ gesetzt. Wenn
ich es danach auf true setze, würden
Sie erwarten, dass der Code das nächste Mal, wenn
wir diesen Code ausführen true
zurückgibt, weil wir ihn
nach dem Drucken der Zeichenfolge auf true
setzen. Aber es wird immer
falsch zurückgegeben, wie Sie hier sehen können. Denn jedes Mal, wenn unsere
Funktion beendet ist
, wird diese Variable auf
ihren Standardwert zurückgesetzt , der falsch ist. Lokale Variablen sind
eine großartige Möglichkeit,
Informationen
vorübergehend in
Ihrer Funktion zu speichern ,
ohne
neue Variablen erstellen zu müssen , die sich schnell
summieren können , wenn Sie viele
Funktionen haben. Es gab auch ziemlich gute
Möglichkeiten, Ihre Veranstaltung zu organisieren. Angenommen, Sie haben etwas mehr Code im
Gange und wollten Variablen
speichern, nur
um die Dinge in Ordnung zu halten. könntest du auch machen. Eine weitere nützliche Sache, die
Sie verwenden können, um Ihre Funktionen aufzuräumen,
da
wir unsere Eingaben haben , zum Beispiel
unseren MT-Eingang hier. Und dieser Draht wird
in unsere Anzeigennotiz aufgenommen. Vielleicht haben Sie in
Zukunft eine Funktion, die
viele Eingaben hat. Sie würden
überall Kabel haben und es
würde nicht sehr aufgeräumt aussehen. Was Sie
stattdessen tun können, ist rechten Maustaste zu klicken und
so viel zu vergessen. Sie können sehen, dass ich
Zugriff auf die Betragsvariable habe, aber ich habe keine lokale
Variable namens amount. Es gibt keine normale
Variable namens Betrag. Dies ist im Grunde
nur eine Abkürzung zu dieser Menge, die hier ausgegeben wird. Anstatt also
das Kabel von
unserem Eingang anzuschließen, können
wir es einfach hierher ziehen
und wir können diesen Wert erhalten. Und alles, was getan wird, ist
im Wesentlichen nur
den Draht auszuschneiden und auf
diese Mengenvariable zuzugreifen, eine
Art Abkürzung. Jetzt haben Funktionen
einige Einschränkungen. Wir können zum Beispiel keine
latenten Knoten innerhalb einer Funktion verwenden . Jetzt haben wir uns noch nicht mit
latenten Notizen befasst, werden dies
aber in einer zukünftigen Lektion tun. Aber nur als kurzer Überblick können wir einen Verzögerungsknoten erstellen, wenn wir mit der rechten Maustaste klicken und das
Ereignisdiagramm hier
anzeigen und nach dem heutigen Tag
suchen wenn wir mit der rechten Maustaste klicken und das
Ereignisdiagramm hier
anzeigen und nach dem heutigen Tag
suchen. Jetzt hat ein latenter Knoten
ein kleines Uhrsymbol in der
oberen rechten Ecke. Und im Grunde genommen erhält ein
Delay-Knoten eine Eingabe und wartet dann
unabhängig von unserer Dauer
so lange, bevor er die Ausgabe ausführt. Es erlaubt
uns also nur, Code hochzuhalten. Also, wenn ich zum Beispiel meine Spielnotiz hier
einstecken würde, und ich setze
das einfach auf drei. Und dann habe ich meine
erhöhte Gesundheit hier reingesteckt. Es würde mit der Wiedergabe beginnen, würde laufen, ein Verzögerungsknoten würde
dann ausgeführt werden und es würde drei Sekunden warten, und dann würde es
die abgeschlossene Ausgabe ausführen. Da dies ein latenter Knoten
ist, können
wir ihn nicht
innerhalb der Funktion verwenden. Also, wenn ich zu meiner
Gesundheit gehe, fair, und ich ziehe heraus und suche
nach Verspätung. Sie können sehen, dass dieser
Verzögerungsknoten nicht hochkommt weil er latent ist und wir diese
nicht
innerhalb der Funktion verwenden können. Als Nächstes werden wir uns
reine und unreine Funktionen ansehen. Also, wenn wir hier zu
unserem Ereignisdiagramm zurückkehren und ich eine neue
Erhöhung der Funktionsweise erstelle. Und drüben im
Detailbereich können Sie sehen wir es in
eine reine Funktion ändern können. Wenn ich das also übernehme,
können Sie sehen, dass dies auch alle anderen Funktionen
beeinflussen wird , es ändert es in
diese Funktion. Diese Funktion wird nun für jeden Ausgang ausgeführt, der mit unseren Ausgangspins verbunden jeden Ausgang ausgeführt, der mit unseren Ausgangspins verbunden
ist. Also als Beispiel, wenn ich meinen ersten
Plano-Tipp nehme und nur einen festgelegten
aktuellen Gesundheitszustand verwende. Und wir werden uns bis hier verbinden, werden die
Gesundheit um sagen wir eins erhöhen. Und wir werden das mit
dem aktuellen Gesundheitszustand verbinden. Also sag ich hoffe mit 0
würde es um eins erhöhen und dann eine
neue aktuelle Gesundheit ausgeben. Also das wäre einer. Und wenn ich diesen gesetzten Knoten erneut kopieren
und
einfügen würde, verbinden wir das mit hier. Dieser Knoten wäre einer, aber dann würde dieser Knoten
erneut für diesen gesetzten Knoten laufen, und dieser Knoten würde ihn
tatsächlich auf zwei setzen, und dann so weiter und so fort. Für jede Verbindung würden wir
diesen Knoten erneut ausführen und den Wert „Ich hoffe“
erhöhen. Während eine unreine Funktion, wenn wir unsere Funktion
erneut auswählen und auf Tech P0 klicken, wenn wir dieses Backup verbinden,
um mit der Wiedergabe zu beginnen, wird
dies immer die
gleiche Ausgabe zurückgeben, die bei der Ausführung hatte. Wenn das Spiel beginnt wird unsere
Gesundheit von 0 auf eins erhöht. Wir werden diesen Wert hier festlegen. Dieser Wert wird auf eins gesetzt. Und dann wird
auch dieser auf eins gesetzt, weil er nur
einmal ausgeführt wird, wenn er ausgeführt wird. Und dann speichert es die Werte seiner Ausgabe in diesen Pins. Und dann ist jede Verbindung, die
wir dafür haben , dieselbe, bis wir diese Funktion erneut
ausführen. Das sollten Sie
sich nur merken ,
wenn Sie
mit reinen Funktionen arbeiten So viele Verbindungen
Sie mit dieser Funktion
verbunden haben , sind, wie
oft sie ausgeführt wird. Wenn Sie irgendeine Art
von Mathematik
oder etwas wie eine
Erhöhung der Gesundheit haben , jedes Mal, wenn Sie etwas
herausziehen und etwas einstellen, wird
es
jedes Mal, wenn Sie etwas
herausziehen und etwas einstellen, erneut ausgeführt. Ihr Wert,
Ihre Ausgabewerte
können also bei
jeder Ausführung unterschiedlich sein. Als Nächstes werfen wir einen
Blick auf das Überschreiben von Funktionen. Wenn Sie es noch nicht
gesehen haben, empfehle
ich
Ihnen, einen Blick darauf zu werfen. Wir haben die Lektion einer Variablen
über Schauspieler und Objekte. In dieser Lektion gehe ich in die Erbschaft
ein und erkläre ein wenig darüber. Aber im Grunde ist jedes
Objekt, das
auf der Welt existiert , ein Schauspieler,
einschließlich unseres Charakters. Aber dann haben wir
verschiedene Arten von Schauspielern wie unseren Charakter hier. Und wir können auf
den Akt der Funktionen
oder die Funktionen, die innerhalb des Aktors
existieren, über
diese Überschreibungsoption hier
auf der Registerkarte Funktionen zugreifen den Akt der Funktionen
oder die Funktionen, die innerhalb des Aktors
existieren, über . Wenn wir also darauf klicken, können
Sie sehen,
dass auf der rechten
Seite Schauspieler steht. Nun sind dies Funktionen, auf die wir
zugreifen können und die auf dem Akteur existieren. Und wir haben sie, weil
wir eine Figur sind, aber wir sind auch Schauspieler. Wenn du ein
bisschen weiter runtergehst, kannst
du sehen, dass wir
einige haben, die Charakter sagen. Jetzt haben wir Zugriff
auf diese Funktionen da unser
Third-Person-Charakter ein Charakter ist. Und wenn wir noch weiter nach unten gehen, können
Sie sehen, dass wir auch ****
haben. Und wir haben diese, weil unser
Charakter auch ein **** ist. Und wann immer wir hier eine
dieser Funktionen auswählen, teilen
wir der Engine im Grunde mit, wir nicht möchten, dass Sie
den Code ausführen, der
beispielsweise im Charakter-Blueprint existiert . Wir wollen diese Funktion
übernehmen und unseren eigenen Code ausführen. Also
könnten wir zum Beispiel klicken, können springen. Und Sie sehen, dass
wir diese Funktion jetzt aus
der Charakterklasse übernommen haben. Wir können unseren
eigenen Code schreiben und haben jetzt nicht alle Funktionen so
aussehen, wo wir einen
separaten Editor haben, wenn wir
erstellen oder wenn wir eine
andere Funktion überschreiben, sagen wir die destroyed,
das wird erstellen Sie tatsächlich etwas, das wie ein
Ereignis in unserem Ereignisdiagramm aussieht. Und der Grund dafür ist
, dass unsere zerstörte Funktion
keine Ausgaben hat, aber springen kann, also hat
sie hier eine Ausgabe. Und was auch immer wir hierher
zurückgebracht haben, wird grundsätzlich überprüft,
wenn wir versuchen zu springen. Wenn ich jetzt
versuchen würde zu springen, wäre
ich nicht in der Lage
, weil wir die Funktion
übernommen haben und wir sagen ihr nur, dass wir nicht
springen können, wenn wir das auf false setzen. So könnten wir hier unseren eigenen
Code haben, der zum Beispiel steuert ,
ob wir
springen können oder nicht. Jetzt fragen Sie sich vielleicht, ob wir
diese Funktionen überschreiben können. Können wir tatsächlich
herausfinden , wo sich diese
Funktionen befinden,
hineinschauen und sehen, was mit den von uns erstellten
Funktionen
so passiert wie möglich. Leider sind dies
C plus plus Klassen. Schauspieler, Charakter
wichtig werden tatsächlich in C plus plus
erstellt und
in den Motor eingebaut. Es gibt keine Blaupause, zu der
wir gehen können. Wir können
zum Beispiel First-Person-Charakter haben und uns diese Funktionen
ansehen. Du kannst es in C plus
plus machen, wenn du möchtest, aber das ist ein
bisschen weiter fortgeschritten. Abschließend möchte ich Ihnen nur
zeigen, wie Sie
Funktionen von einem
Blueprint in einem anderen aufrufen können . Wenn wir also hier zu unserer
Third-Person-Map gehen, erstelle
ich einfach schnell eine neue
Blueprint-Klasse. Es wird einen Schauspieler geben,
nenne es Trigger, ihn hier in
das Level zieht. Und ich öffne die Blaupause. Wir fügen eine neue Komponente hinzu
und nennen diese Box. Wir wollen den Box-Kollision und ich schiebe ihn einfach
nach oben. Und wir sind auch in
der
Detailsuche nach versteckt im Nin-Spiel. Ich entferne das Häkchen,
nur damit ich es sehen kann. Und dann werden wir
diese Suche los und
scrollen nach unten. Wir sagen eigentlich weiter, wir können zu Event Graph gehen, was eine neue Funktion erstellt. Entschuldigung, das Ereignis würde
reichen, beginnen sich zu überschneiden. Wir haben diesen Knoten bereits verwendet, falls Sie sich an
unsere vorherigen Lektionen erinnern. Aber im Wesentlichen wird
dieses Ereignis wenn sich etwas mit
unserem Auslöser überschneidet , und es wird uns einen Hinweis auf
den Akteur
geben , der uns überlappt. Also können wir uns davon lösen. Und ich werde ThirdPersonCharacter nur etwas kosten
. Wenn Sie sich nun
im Wesentlichen daran erinnern, welche Kosten es kostet, überprüft es, ist dieses
Eingabeobjekt ein Zeichen? Wenn ja, führen wir den
obersten x-Würfel hier aus und er gibt uns Zugriff auf
das Zeichen, das variabel ist. Auch in Zukunft
wird es eine Casting-Lektion geben, aber das ist nur
ein kurzes Beispiel. Wenn Sie sich erinnern, können wir
damit auf Variablen zugreifen. Also haben wir das mit unseren Würfeln gemacht. Wir können auch auf Funktionen zugreifen. Also, wenn ich mich hinziehe,
weil ich auf
den ThirdPersonCharacter
Blueprint caste und daran haben wir
gearbeitet. Wenn ich es herausziehe und nach mehr Gesundheit
suche, können
Sie sehen, dass ich diese Funktion
erhöhen kann. Und wenn Sie sich erinnern, setzen
wir es so, dass wir, wenn
wir zu
unserem Merkmal zurückkehren, unsere Funktion auf PO erhöhen. Wenn ich das also deaktiviere
und es unrein mache, muss ich dieses trennen weil es
uns etwas Anderes wünschen wird. Sie können sehen, dass es
tatsächlich aktualisiert wurde hier. Und damit können wir
auf die Funktionen zugreifen, die in unserem
Third-Person-Charakter in einer anderen Blaupause
vorhanden sind. Diese Funktion wird so ausgeführt, als ob wir sie einfach in unserem
Third-Person-Charakter ausführen würden. Aber stattdessen können wir das
jetzt tatsächlich ausführen, wenn sich unser, sagen wir, unser Charakter überschneidet. Also werde ich auslösen, damit wir seine Gesundheit um sagen wir fünf
erhöhen können . Wenn wir jetzt auf „Spielen“ klicken
und ich über die Box renne, können
Sie sehen, dass
sie jetzt diesen erhöhten Gesundheitswert
ausdruckt . Das war's
für diese Lektion. Hoffentlich verstehen Sie ab und
zu
ein bisschen mehr über Funktionen. In unserer nächsten Lektion werden
wir uns Makros ansehen.
13. Grundlagen (Makros): Hallo zusammen, in dieser
Lektion
werden wir uns Makros ansehen. Diese ähneln
Funktionen insofern, als es sich um
eigenständige Codeteile handelt
, die wir in eigenständige Codeteile unserer Blaupause wiederverwenden
können. Wir werden auch erfahren,
wann Sie möglicherweise
ein Makro verwenden möchten , anstatt auch
eine Funktion zu verwenden. Also lass uns anfangen.
Wir erstellen ein neues Makro. Das können wir hier im Panel „Meine
Blaupausen“ tun. Sie können entweder hier auf die
neue Makroschaltfläche klicken oder zur Dropdown-Liste gehen
und Makro auswählen. Wenn wir darauf klicken, können wir unser neues Makrobeispiel
aufrufen. Sie können sehen, dass es auch einen neuen Editor für uns
geöffnet hat, wie es bei einer Funktion der Fall ist. Und wir haben einen Input
und einen Output geschneit. Im Gegensatz zu einer Funktion können
Sie jetzt sehen, dass wir
keine Eingaben und unser Makro haben , und das liegt daran, dass wir sie selbst hinzufügen
müssen. Also können wir hier im
Detailbereich auf
das Plussymbol klicken und einige neue Eingaben
erstellen. Jetzt können wir tatsächlich
Ausführungs-Pin-Ein- und Ausgänge erstellen . Wenn wir also
hier für
die Ausgaben auf die Option Neue Ausgabe erstellen klicken , können
Sie jetzt sehen, dass ich
eine Ausführungseingabe und
eine Ausführungsausgabe habe . Und wenn wir das ziehen können,
gehen Sie zum Event Graph, könnten dieses Makro
jetzt tatsächlich in unseren Event-Graphen ziehen. Und Sie können sehen, dass
wir sowohl unsere Eingabe Ausgaben haben und wir können als auch unsere
Ausgaben haben und wir können diese auch
umbenennen,
etwas Besseres. Benennen Sie das also um, um in diesem 12 out zu
sagen, nur um es ein bisschen klarer zu machen. Das Coole an Makros
ist, dass Sie tatsächlich
mehrere
Ausführungseingaben und -ausgänge haben können . Wenn ich also wollte, könnte ich eine weitere Ausführungsausgabe
hinzufügen. Ich könnte das anrufen. Und wir könnten
etwas Code und Haare ausführen. Und je nachdem,
was dieser Code tut, könnten
wir dann eine dieser Ausgaben ausführen. Genau wie unsere Funktionen können
wir auch variable
Ein- und Ausgänge haben. So könnte ich zum Beispiel
eine neue Integer-Eingabe hinzufügen eine neue Integer-Eingabe und den
Namen ändern, um amount zu sagen, wie wir es mit unserer Funktion
in unserer vorherigen Lektion getan haben. Sie können sehen, dass wir jetzt einen Betrag eingegeben
haben. Wenn ich zurück
zum Event Graph gehe, können
Sie sehen,
dass wir das im Ausführungsstift haben, und wir haben auch
eine Eingabe und dann unsere beiden Ausgaben. Die Art und Weise, wie wir
Makros verwenden, ist der Art, wie wir Funktionen
verwenden, insofern sehr ähnlich wir überall
in unserem Blueprint mehrere Makros haben können .
Wir können Makros innerhalb
anderer Makros verwenden, wenn wir möchten zu und ob wir innerhalb des Makros
Änderungen vornehmen. Wenn wir hier zum Beispiel Code
hinzufügen würden, würde
sich das auf alle
Makros auswirken, die wir aus
diesem Makrotyp erstellt haben. Alle diese Makros
würden also
mit den Änderungen aktualisiert , die wir in unserem Makro
vornehmen. Jetzt haben wir unser Makro mit ein
paar verschiedenen
Ein- und Ausgängen eingerichtet . Wir können hier
genauso codieren wie im Event Graph
oder in unserer Funktion. In unserem letzten Video habe ich eine Funktion zur
Steigerung der Gesundheit eingerichtet. Ich kann
dasselbe mit Makro machen, also erstellen wir eine neue Variable, wir als aktuelle Gesundheit bezeichnen. Und wir setzen es auf Integer,
falls deins noch nicht vorhanden ist. Und das ziehen wir
in einen Add-Knoten. Und wir werden den Betrag addieren. Und wir ziehen uns aus der Ausgabe unseres Add
Node heraus und
stellen den aktuellen Zustand so ein. Da es sich um ein Makro handelt, können
wir nun mehrere
Ausgabeausführungsstifte haben. Wir könnten also überprüfen,
ob unser aktueller Gesundheitszustand 100
entspricht? Wenn es da ist, möchten wir vielleicht einen anderen Ausführungsstift
ausführen. Ich verwende hier einen Branch-Knoten. Wenn es bei 100 liegt, führen
wir die oberste Ausgabe aus, und wenn nicht,
führen wir die unterste aus. Sie können diese umbenennen, sagen wir maximale Gesundheit für die oberste und nicht maximale Gesundheit
für die untere. Weil wir vielleicht möchten, dass anderer Code ausgeführt wird,
je nachdem, ob wir Max Health sind oder nicht. Wenn wir also hier zu
unserem Ereignisdiagramm zurückkehren, können
Sie sehen, dass
unsere beiden Beispielnotizen
hier aktualisiert wurden, sodass sie die Ausgaben aktualisiert haben. Und das liegt daran, dass wir ihr Makro
geändert haben. Und wir könnten das jetzt ausführen und unseren Gesundheitswert
erhöhen. Also wenn ich sage, setze das auf 50 und wir fügen ein
neues Eingabeereignis hinzu. Und was würdest du verwenden, sagen wir x, die die x-Eingabe von m finden. Wenn
ich im
Spiel X drücke, werden 50 Gesundheit hinzugefügt. Und dann können wir unterschiedlichen Code
ausführen je nachdem, ob wir selbst
Mac sind oder nicht. Also verwende ich einfach
die Druckzeichenfolge , weil sie im Spiel leicht
zu sehen sind. Also rufen wir Max Health an
und kopieren und fügen sie ein. Das wird max so laufen. Also werden wir Komponenten machen. Jetzt können wir auf Play klicken
und sehen, ob das funktioniert. Wenn ich X drücke, kannst du
momentan nicht max out sehen. Wenn ich es erneut drücke,
werden wir jetzt die maximale Gesundheit erreichen. Das ist also nur ein Beispiel dafür,
wie wir Makros verwenden können, um in unseren Blueprints
abhängig
von einem Wert
unterschiedlichen Code auszuführen in unseren Blueprints
abhängig
von einem Wert
unterschiedlichen Code Jetzt enthält die Engine . Jetzt enthält die Engine
tatsächlich viele eingebaute Makros. So
ist zum Beispiel r ein gültiger Knoten, wenn wir mit der rechten Maustaste klicken
und so was gültig ist, und wir scrollen nach unten
zum Knoten ist gültig. Vielleicht erkennen Sie
das aus einer unserer vorherigen Lektionen. Dies ist nur ein Makro und
es ist in die Engine eingebaut. Wenn wir also darauf doppelklicken, gelangen
wir tatsächlich zu einer Blaupause namens Standardmakros. Und das kommt mit
der Engine und Sie können sehen, dass dies nur ein Makro ist, genau wie unser Beispielmakro. Es hat das gleiche
Layout und wir können auch die Eingaben sehen. Wenn wir also zu Standardmakros gehen, sehen Sie sich hier die Eingaben an. Es hat also nur
einen Hinrichtungs-Pin. Eingabe und Objekt-Pin und
dann an Ausführungsausgänge. Und das alles ist die Verwendung der gültigen Funktion, die in die Engine
integriert ist. Schecks. Ist das
Eingabeobjekt gültig und verwendet dann eine Verzweigung, um entweder run
gültig oder nicht gültig zu sein. Es gibt andere Makros , die mit der Engine geliefert werden und
die Sie auschecken können. Sie gehören alle zu diesen
Kategorien hier. Wenn Sie also möchten, können Sie diese
durchsehen und
sehen, wie sie funktionieren. Aber im Wesentlichen sind Makros
sehr nützlich für kleinere, in sich geschlossene Codeteile , die Sie in Ihrem Projekt
häufig wiederverwenden können. Vielleicht wolltest
du zum Beispiel überprüfen, ob der Charakter tot
ist? Also, anstatt
die Zustandsprüfung zu erhalten, ist das weniger als oder, ist das kleiner oder gleich 0? Und wenn Sie dann einen F-Knoten ausführen, könnten
Sie den ganzen Code einfach
nehmen, ausschneiden
und in Ihre eigenen Makros einfügen, damit Sie ihn haben könnten, ist tot. Wir könnten das hier reinwerfen. Und wenn wir tatsächlich von
unserem Ausführungsstift zur Eingabe ziehen , können wir dasselbe
mit den Ausgaben tun. Also können wir das so machen. Das macht es nur ein bisschen schneller als
sie alle hier hinzufügen zu müssen. Jetzt haben wir hier ein
kleines Makro, wir überprüfen können, ob
unser Charakter tot ist. Also können wir das einfach hineinziehen. Und anstatt all diese Knoten hinzufügen
zu müssen. Und jedes Mal, wenn wir
überprüfen wollen, ob der Charakter tot ist, können
wir
ihn einfach in ein kleines
Makro ziehen und das macht
das alles für uns. Hier liegt
ihre Stärke wirklich in Makros, man
kann sie oft verwenden. Sie können steuern, welcher
Code ausgeführt wird. Und sie sind nur
praktische kleine Tools, insbesondere für Dinge wie das Überprüfen von Werten, wie
wir es hier tun. Ein weiterer Vorteil von
Makros besteht darin, dass Sie
latente Knoten darin verwenden können . Wenn Sie sich also an
unsere vorherige Lektion erinnern, können
Sie keinen
Delay-Knoten innerhalb einer Funktion verwenden, aber Sie können
ihn in Makros verwenden. Also wenn ich wollte, könnte
ich einen
Delay-Knoten hinzufügen und hier
also eine ziemliche Verzögerung. Sie können sehen, dass ich das ganz
gut
hinzufügen kann . Ich kann es zusammenstellen. Und wenn wir zu unserem Ereignisdiagramm gehen, können
Sie jetzt sehen dass das Makro latent ist weil es die
kleine Uhr dort hat. Und das liegt daran, dass
wir darin diesen Delay-Knoten hinzugefügt haben. Und der Grund
dafür ist, dass Makros
so ausgeführt werden, als wären sie Code
im Event Graph. Stattdessen wurden sie einfach
zu
OneNote zusammengefasst , das wir ganz einfach wiederverwenden
und bearbeiten können. Sie setzen auch Funktionen
nicht jedes Mal zurück, wenn wir sie ausführen. Sie ähneln also viel mehr dem Code,
den wir im Event Graph haben ,
als
dem Code, den Sie in einer Funktion
haben. Einige Dinge, die Sie mit Makros nicht tun
können, sind, dass Sie sie nicht
von anderen Blaupausen aus aufrufen können. Wenn Sie sich also an
unsere vorherige Lektion erinnern, erstelle
ich einen Auslöser und
wir können das wieder tun. Wenn wir eine neue
Blueprint-Klasse erstellen, verkaufen
wir sie mit einem
Akzent und ich nenne sie Trigger, wird das öffnen. Und ich erstelle eine neue
Box-Kollisionskomponente. Und wir bewegen das nur ein
bisschen nach oben und wir setzen es
auf Versteckt im Spiel
, um es auf Versteckt im Spiel
, um auszuziehen, damit
wir es einfach sehen können. Und hier erstellen wir
einen beginnenden Überlappungsknoten. Wenn Sie sich erinnern, wird dies ausgeführt, wenn etwas mit
unserem Auslöser überlappt immer dann
ausgeführt, wenn etwas mit
unserem Auslöser überlappt, und dann gibt es uns den Akteur, der ihn überlappt. Ziehen Sie also von hier aus und verwenden Sie den Cast to
ThirdPersonCharacter. Und dies wird
unsere Akteurausgabe übernehmen , die
sich überlappt oder ausgelöst hat. Und es wird prüfen, ob es ein
ThirdPersonCharacter für ist, dann gibt es uns
Zugriff auf das Feuer einer Variablen und wir werden
den erfolgreichen Pin
hier oben ausführen . Wenn Sie sich also erinnern, können
wir Funktionen über diese aufrufen. Aber geh zurück zu meinem
Charakter und ich
erstelle einfach eine Funktion. Wir nennen das „Gesundheit
erhöhen“. Und wir werden einfach kompilieren. Ich füge keinen Code hinzu und
wir kehren zu unserem Auslöser zurück. Wenn ich in die Länge ziehe, kann oder kann ich auf diese Funktion zugreifen, um die Gesundheit zu verbessern. Du kannst sehen, dass ich diese
Funktion von meinem Charakter aus aufrufen kann. Aber wenn du dich erinnerst, wir haben r is dead Makro. Wenn ich herausziehe und nach tot
suche, kann
ich dieses
Makro nicht finden, da es von meinem
Character Blueprint aus nicht zugänglich ist. Ich kann es nur in
meinem Character Blueprint verwenden. Wenn Sie sich an unsere vorherige Lektion erinnern
, können
wir schließlich Funktionen
aus unseren übergeordneten Blueprints überschreiben. Da es sich beispielsweise um
einen
Third-Person-Charakter-Blueprint handelt
, ist dies einen
Third-Person-Charakter-Blueprint handelt
, ein Kind des Charakters. Ich kann Funktionen überschreiben , die im
Character Blueprint existieren. Aber das
geht nicht mit Makros. Makros existieren nur in
unseren Blaupausenhaaren. Ich kann keines der Makros überschreiben und
die
Kontrolle über sie übernehmen ,
zum Beispiel
vom Charakter-Blueprint oder dem aktiven Blueprint. Zusammenfassend lässt sich sagen, dass
Makros wirklich nützliche
Tools sind, die Sie
erstellen können und die Ihr
Leben ein bisschen einfacher machen können. Sie müssen also nicht ständig Sachen
neu codieren. Und Sie können sie
nur an einer Stelle ändern, und das
wirkt sich auf alle
Stellen aus, an denen das Makro verwendet wird. Sie können auch sehr
einfach steuern, welcher Code ausgeführt
wird, da wir mehrere
Ausführungseingaben und -ausgaben haben können.
14. Grundlagen (Strukturen und Enen): Hallo zusammen. In dieser Lektion werden
wir uns Strukturen und Enums ansehen. Also lass uns anfangen. Strukturen, oder manchmal auch als Strukturen
bezeichnet, sind eine Möglichkeit,
mehrere verschiedene Arten
von Variablen
innerhalb einer Variablen zu speichern . Um Ihnen ein Beispiel zu geben Ich
erstelle einfach eine neue Variable. Ich nenne
es Beispiel Stroh. Und wir werden
den Variablentyp auf
eine Struktur setzen , die tatsächlich in die Engine
eingebaut ist. Wenn Sie die
anderen Engine-Strukturen finden möchten , die mit ihm geliefert werden, können
Sie einfach
zur Strukturkategorie gehen. Und hier sehen Sie alle Strukturen,
die Sie
in der Engine verwendet haben. Wahrscheinlich
gehst du hier nicht sehr oft rein. Weil diese
hauptsächlich für Motorfunktionen und
ähnliches verwendet werden. Aber wir werden
eines als Beispiel verwenden. Also werde ich erstellen, oder ich setze unseren
Variablentyp zwei namens float. Und wir setzen unsere
Variablen auf zwei Namen float, und dann werden wir kompilieren. wir nun kompiliert haben, können
Sie sehen, dass unser Standardwert
eine Float-Variable und
eine Namensvariable enthält eine Float-Variable und , die wir
beide einzeln verwenden können ,
wenn wir möchten. Und sie funktionieren genauso, wie Sie erwarten würden, dass ein Name oder eine
Float-Variable funktionieren. Jetzt enthält diese Struktur nur zwei Variablen, einen
Float und einen Namen, aber Sie können auch mit
viel mehr Variablen und verschiedenen
Variablentypen getroffen werden. Jetzt können wir mit
allen anderen Variablentypen
einen Schlaganfall erhalten und so einstellen , wie wir es können. Wenn wir also unsere
Beispielstruktur hierher ziehen , können Sie
sehen, dass wir alles bekommen können. Wir können einen gesetzten
Knoten erstellen und er gibt uns diese Knoten, die wir zuvor mit
anderen Variablentypen
gesehen haben . Das Coole an
Strukturen, auf die wir auf
diese Variablen zugreifen können , ist sehr einfach darin
gespeichert. Wir können einfach aus
unserem Get-Knoten ziehen und einen Break-Knoten
erstellen. Jetzt, da ich named float
verwende, heißt
es break namens float. Aber wenn wir eine
andere Struktur
mit einem anderen Namen verwenden würden , würde
es break heißen und stattdessen den
Namen dieser Struktur. So wird der Blake
Break namens Float-Knoten erstellt. Und Sie können hier sehen
, dass wir jetzt sowohl auf die Variable
als auch auf unsere Namensvariable zugreifen
können . Und das sind nur
normale variable Pins. Nun, wenn wir wollten, könnten
wir aus
unserem Float ziehen und wir könnten
zum Beispiel einen Add-Knoten oder einen anderen
float-bezogenen Knoten
erstellen . Und wir könnten
dasselbe mit unserem Namen tun, auch
variable Ausgabe. Wenn wir sagen würden, eine float-Variable, könnten
wir diese Float-Variable auch
mit diesem Stift setzen. Wir können die Haare
der Pins auch andere Weise erhalten,
wenn wir genug bekommen, notieren Sie es
erneut, und wir
klicken mit der rechten Maustaste auf den Ausgangspin Wir können hier die Option
Struct Pin teilen auswählen. Sie können sehen, dass
wir jetzt
den Float-Wert und
unseren Namenswert direkt aus der
Beispiel-Strukturvariablen abrufen können den Float-Wert und . Und wenn wir sie
rekombinieren wollen, damit es hier zu unserem normalen
Standard-Get-Knoten zurückkehrt, können
wir mit
der rechten Maustaste auf die Ausgangspins und Struct Pin recombine auswählen. Sie können sehen, dass es
jetzt wieder normal wird. Ich werde jedoch sagen, mit meiner Erfahrung
mit der Engine diese Split-Struct-Pin-Option verwendet, anstatt den Break-Knoten zu verwenden, dies etwas
anfälliger für Brüche
bei Motor-Upgrades ist und solche Dinge. Ich persönlich bevorzuge es
, die Break-Knoten zu verwenden, aber es ist eine persönliche Präferenz. Sie können die
Splinte verwenden, wenn Sie möchten. Jetzt wissen wir also, wie Informationen von unserem
Stroke-Get-Knoten erhalten können. Wir wollen in der Lage sein,
Informationen für unsere
Striche festzulegen , was wir tun können. Also wenn wir hier unsere
Setnote nehmen und aus dem Input-Pin
ziehen, wird nach make suchen. Sie können sehen, dass wir eine
Option für make named flow haben. Wenn wir nun wieder
eine andere Art von Struktur verwenden würden, würde
es Make und
dann der Name des Striches heißen. Also erstellen wir diese Notiz hier. Sie können sehen, dass wir jetzt
eine Float-Eingabe und eine Namenseingabe haben . Dies ermöglicht es uns, den Fluss in Gang zu
setzen oder benannte Variablen
in unserer Struktur zu erhalten. Das einzige Problem dabei
ist zu sagen, dass wir nur unseren Float-Wert
ändern wollen und wir wollten
unseren Namenswert nicht ändern, wir wollten das einfach gleich
lassen. Dies würde tatsächlich unseren Namenswert
überschreiben. Was wir also stattdessen tun können, wenn wir nur eine
der Variablen in unserer Struktur ändern wollen , können
wir einen Knoten erstellen, herausziehen und nach Mengenmitgliedern
suchen. Und Sie sehen, wir haben
Set-Mitglieder im Non-Struct-Namen. Also wieder
heißt unsere Float. Wir sagen also, dass Set-Mitglieder in benanntem Flow diesen Knoten
erstellen. Und wir bekommen diese
merkwürdig aussehende Notiz hier. Im Bereich Details. Wir können zu
diesem Drop-down gehen. Können Sie sehen, dass wir für jeden
Variablentyp, der sich
in unserer Struktur befindet, ein Kontrollkästchen haben . Wenn ich also nur die Float-Variable
ändern möchte, können
wir das hier übernehmen. Und Sie sehen, dass das jetzt eine Eingabe für unseren Float
hinzugefügt hat. Wenn dieser Knoten jetzt ausgeführt wird, könnten
wir eine neue
Float-Variable
innerhalb unserer Struktur setzen , ohne unsere Namensvariable zu
beeinflussen. Während
wir mit dem gesetzten Knoten sowohl unsere Float-Variable als auch unsere Namensvariable
setzen müssten . Und natürlich, wenn Sie eine
Struktur mit mehr Variablen hätten, wären
diese hier aufgelistet. Sie können
mehrere Variablen
mithilfe der Notizen der Set-Mitglieder übernehmen . Wenn ich also wollte, könnte ich diese
beiden Pins auch hier
als Eingang haben. Und wir könnten diese
beiden
Werte gleichzeitig ändern . Dieser Knoten
verhält sich automatisch wie ein gesetzter Knoten. Wir müssen also keinen festgelegten Knoten verwenden , damit diese
Änderungen angewendet werden. Gerade wenn dieser Knoten ausgeführt
wird, ändert er diese Werte
für uns innerhalb unserer Struktur. Bisher haben wir
diesen benannten Schwimmer verwendet , der in den Motor eingebaut
ist. Aber wir können tatsächlich
unsere eigenen Striche erstellen und wählen, welche Variablen darin gespeichert werden sollen. Um das zu tun, gehen wir hier
zum Content Browser. Ich klicke einfach mit der rechten Maustaste
und ein leeres Feld. Dann wollen wir
zu den
Blaupausen gehen und die Struktur
auswählen. Was nun, wenn Sie
Ihre Struktur benennen wird
die Struktur genannt und die Variablentypen Option. Also nenne ich
meine Videostruktur einfach so. Und wir doppelklicken darauf, um
es zu öffnen. Ich werde
meins hier oben platzieren. Sie können sehen, dass wir jetzt
eine Option haben , mit der wir unsere Variablen
setzen können. Standardmäßig haben wir also nur eine boolesche Variable, die Member-Unterstrich 0
genannt wird. Wir können
hier oben neue Variablen hinzufügen , indem wir auf die Schaltfläche Variable
hinzufügen klicken. Und wenn wir wollen,
können wir Variablen entfernen, indem hier
auf den kleinen
Mülleimer klicken, um sie zu entfernen. Also fügen wir ein paar Variablen hinzu. Und Sie können sich vorstellen, wenn wir beispielsweise Informationen
über ein Element speichern
möchten, könnten
wir dafür eine Struktur verwenden und all diese Informationen in einer Variablen
speichern, anstatt Hunderte von Variablen,
die ein Element beschreiben. Vielleicht wollten wir zum Beispiel, dass
unser Artikel einen Namen hat. Also würden wir den Artikelnamen festlegen. Wir könnten diesen
Namen vielleicht ein Gewicht nennen. Also werden wir Float verwenden. Wir nennen dieses variable Gewicht
vielleicht einen beschädigten Wert. Wir könnten also eine
ganze Zahl zum Schaden sagen, und dann ist vielleicht ein
Text, den wir
sagen können , die Beschreibung. Und das können wir uns sparen. Wenn wir jetzt zu
unserem ThirdPersonCharacter zurückkehren, können
wir eine neue Struktur erstellen. Und das nennen wir unser Video. Und wenn wir
zum Variablentyp übergehen, können
wir nach einem Video suchen. Und Sie werden eine Videostruktur sehen. Das ist der Name
unserer Struktur. Wenn Sie jaws
etwas
anderes genannt haben
, müssen Sie danach suchen. Also werden wir das erstellen
und wir werden kompilieren. Wenn wir jetzt
zum Standardwert übergehen, können
Sie sehen, dass wir alle
vier unserer Variablen,
die wir
in unserer Struktur erstellt haben vier unserer Variablen,
die wir
in unserer Struktur erstellt , mit den richtigen Namen haben und sehen,
ob wir name setzen können, ein Float, eine Ganzzahl und eine Beschreibung
für unsere Struktur. Und genau wie zuvor können wir mit
der Bremsnotiz darauf
zugreifen. Wenn wir also einen Knoten erstellen, ziehen
wir ihn heraus und erstellen
eine Break-Videostruktur.
Sie können sehen, dass die Engine einfach automatisch für
uns eingerichtet wird, sodass wir diesen Knoten einfach
erstellen können. Und einfach so haben wir
über unseren Break-Knoten
Zugriff auf unseren Namen, unser Gewicht , unseren
Schaden und unsere Beschreibung. Auch hier gilt: Wenn wir diese Variablen mit
dem
Set Member-Knoten festlegen möchten, können
wir
die Set-Mitglieder herausziehen und verwenden. Und Sie sehen Set-Mitglieder
in der Videostruktur. Und wir können alle
Variablen übernehmen, die wir wollen, wie wir es zuvor
mit unserem benannten Float getan haben. Aber das ist jetzt unsere
eigene benutzerdefinierte Struktur. Jetzt können wir auch die
Standardwerte für unsere
Struktur festlegen . Wenn wir also zu
unseren Videostrichen zurückkehren, können
Sie sehen, dass wir hier eine
Standardwerte-Option haben. Hier könnten wir also einfach festlegen, was die Standardstandardwerte für den Video Struck-Typ
sind. Vielleicht möchte ich einfach nur
sagen, Artikelname sagen. Wir wollten das
Standardgewicht sagen eins und beschreiben welches Teil? Artikelinfo hier. Und der Schaden wird zehn sein. sind jetzt die
Standardwerte, wenn wir
jetzt speichern und zu
ThirdPersonCharacter zurückkehren. Und ich wähle meine
Videostruktur oder Kompilierung aus, weil wir einige Änderungen an der Struktur vorgenommen
haben, müssen kompiliert werden. Sie können sehen, dass es jetzt
die Standardwerte verwendet , die
wir in unserer Struktur festgelegt haben. Wenn wir wieder in der
Lage sein wollen, Variablen zu ändern, können
wir einfach
hier auf
die Registerkarte Struktur klicken und auf
diese Variablen zugreifen. Eine andere Sache, Sie hier tun können,
ist, wenn wir wollten, könnten
wir
diese neu anordnen, damit ich mir
am Ende
dieses kleine Symbol hier schnappen kann . Wir können die
Reihenfolge ändern, also möchte ich vielleicht der Name
jetzt Dritter statt oben ist, wir machen das und wir können auf Speichern klicken. Kehren Sie zu unserem Charakter zurück
und wir werden kompilieren. Sehen Sie jetzt, wo unser
Video-Takt ausgewählt ist, dass sie sich jetzt in
einer anderen Reihenfolge befinden. Jetzt ist es etwas, was Strukturen wirklich
mächtig
macht , dass wir sie in Arrays
verwenden können. Wenn Sie sich also in
unserem Array-Video daran erinnern , eine
Variable als Array festzulegen, können
wir hier auf dieses kleine
Drop-down-Menü klicken und ein Array auswählen. Lassen Sie uns nun ein paar
unserer Verbindungen dort unterbrechen weil wir kein
Array an
einen dieser Knoten anschließen können . Also werde ich diese vorerst einfach
löschen. Aber wenn Sie sich erinnern, können
wir aus
einer Array-Variablen herausziehen und nach einer Schleife suchen. Wir können für jede Schleife auswählen. Auf diese Weise können wir jetzt unsere Einträge
in unserem Array
durchgehen. Also werde ich einfach hier kompilieren, also haben wir unsere Standardwerte. So
könnten wir zum Beispiel eine Struktur verwenden, um viele Informationen
über verschiedene Artikel zu speichern
, zum Beispiel
für ein Inventar. Wenn ich zum Beispiel hier ein paar Eingaben
erstelle, können
Sie sehen, dass wir jetzt mehrere Versionen
dieser Struktur im Array
gespeichert
haben . Und dann können wir
diese Versionen unserer Struktur
mithilfe des Loop-Knotens durchlaufen und dann mit dem Array-Element
auf ihre Informationen
zugreifen. Und dann können wir einfach
das Break-Video verwenden ,
wie sie es zuvor waren. Und wir können von unserem Array aus auf diese
Informationen zugreifen. Das sind also so ziemlich
die Grundlagen von Strukturen. Sie sind sehr nützlich,
um die Dinge zu organisieren und
große Datenmengen zu speichern. Als ob du ein
Inventar voller Gegenstände hättest. Sie können diese verwenden, um
viele
Informationen zu jedem Artikel zu speichern . Und dann können wir sie in
einen Strahl stecken oder wir können Striche
verwenden, um auch
die Dinge zu organisieren. Vielleicht hast du eine Reihe von Variablen, die du
immer zusammen benutzt hast. Sie können
diese also in einer Struktur speichern und einfach
über eine Variable darauf zugreifen. Als Nächstes werden wir uns
die Gewerkschaften ansehen. Jetzt. Auch hier hat der Motor wie
die Struktur tatsächlich eingebautes Indium. Wenn Sie also nach
unten gehen, können Sie
die Idiom-Kategorie hier sehen . Und es gibt viele
, die mit dem Motor geliefert werden. Auch hier werden Sie diese nicht
wirklich verwenden. Sie sind einfach in die Engine
integriert und werden von Knoten
innerhalb der Engine verwendet. Sie können aber auch
Ihre eigenen Enums erstellen , genau wie
wir es mit unserer Struktur getan haben. Jetzt zeige ich dir,
wie das geht. Also wird es diesen
Blueprint vorerst kompilieren. Und wir klicken mit der rechten Maustaste
und unser Inhaltsbrowser wechselt wieder zu den Blaupausen. Und hier wählen wir
die Aufzählung aus. Und das nennen wir ein Video. Wie auch immer Sie diesen Blueprint
nennen wird er in
der Variablentypoption genannt. Das ist also nur
etwas, das man im
Hinterkopf behalten sollte. Wir können das öffnen. Sie können sehen, dass es unserer
Struktur oben ein bisschen
ähnlich
sieht , aber es gibt hier einige
Unterschiede, sodass wir zunächst keine
Standardwerte
haben . Wir klicken auf In Zähler hinzufügen. Sie sehen, dass
uns das hier einen neuen Input gibt. Jetzt können wir nur noch einen Namen setzen, also könnten wir Option eins sagen. Und wir fügen
noch ein paar hinzu, damit wir sie im Editor sehen
können. Also nennen wir diese Option zwei und speichern sie. Jetzt können Sie hier nicht wirklich viel
mehr tun. Also kehren wir zu unserem
ThirdPersonCharacter zurück. Und ich
erstelle eine neue Variable. Wir nennen das ein Video. Darin. Ich werde den
Variablentyp hier ändern. Ich
ändere es einfach in eine Single. Und wir klicken auf das
Drop-down-Menü und
suchen in dir nach unserem Video. Einfach so. Und wir werden kompilieren. Jetzt können Sie
im Standardwert
hier sehen , dass wir dieses Dropdown haben. Siehst du das? Da ich Option
eins und Option zwei habe , die ich in meiner Video-Union eingerichtet habe, sind
dies die Optionen, die ich für meinen Standardwert
habe. Jetzt funktionieren Enums genauso wie die meisten Variablen, die wir
bekommen und setzen können. Wenn ich also rausziehe und einen
Get-Knoten mache, können
Sie sehen, dass wir
ihn einfach wie eine normale Variable bekommen können. Und wir können es auch einstellen. Wenn ich also rausziehe und setze, kannst
du sehen, dass ich einen gesetzten Knoten habe, aber wir können tatsächlich
einfach manuell festlegen , welche Option wir wollen, auch
mit dem gesetzten Knoten, oder wir können eine
Eingabe nehmen, wenn wir wollten. Jetzt sind Enums
wirklich nützlich, um zu steuern, welcher Code in Ihrem Projekt ausgeführt
wird. Und die Art und Weise, wie sie das tun können, ist wenn wir
aus unserem Get-Knoten herausziehen, können
wir einen Switch machen. Sie würden das Einschaltvideo sehen. Schon wieder. Wenn Sie in Menschen sind, die
etwas anderes genannt werden, würde
es sagen, einschalten
und dann der Name des Enums. Aber unseres ist Video Indium. Also werden
wir das schaffen. Sie können sehen, dass es
einen Schalterknoten für uns erstellt hat und dass wir für jede Einstellung, die wir
in unserem Indium haben, einen Ausgangspin erhalten. Wenn wir also zu
unserem Video in num zurückkehren, habe ich ein paar weitere Optionen hinzugefügt, also fügen wir noch ein paar weitere hinzu. Ich setze das einfach
auf Test 123 und Test 456. Das sparen wir uns. Wenn wir jetzt zu
unserem ThirdPersonCharacter zurückkehren, möchten
Sie wahrscheinlich nur
kompilieren, um sicherzustellen, dass Sie diese Optionen
Update sehen. Jetzt haben wir unsere
beiden ursprünglichen Optionen und es wurden
einige zusätzliche hinzugefügt. Auf diese Weise können wir
tatsächlich steuern, welcher Code ausgeführt
wird, je nachdem,
auf was unsere Enums eingestellt sind. Ein gutes Beispiel dafür, wie dies verwendet werden
kann, da Sie möglicherweise
Gegenstände in Ihrem Spiel haben und verschiedene Gegenstände unterschiedliche
Dinge tun, wenn sie verwendet werden. Vielleicht hattest du Verbrauchsmaterialien, Medikamente, solche Sachen. Sie könnten für jeden
dieser verschiedenen
Elementtypen eine
Option haben und dann einen anderen Code ausführen lassen je nachdem, um welchen
Elementtyp es sich handelt. Jetzt können wir auch eine
ausgewählte Notiz von ihnen verwenden. Wenn wir also herausziehen,
suchen wir nach select. Wir können tatsächlich
eine Variable auswählen , die von unserem Enums-Wert
abhängt. Im Moment ist es nur
ausgegraut, weil wir
keinen Variablentyp eingegeben haben. Aber wenn ich
eine neue Variable erstellen sollte und
wir diese Float nennen, setze
ich sie einfach auf einen Float. Wenn wir diesen Float jetzt
in die Select-Note stecken, können
Sie sehen, dass sie
alle zu Floats werden. Auf diese Weise können
wir diesen
Rückgabewert auswählen und daraus ausgeben. Wir können
eine dieser Eingaben in
Abhängigkeit von unserem indischen Wert auswählen . Wenn wir es also zum Beispiel
auf Option zwei setzen würden,
würde alles, was mit Option zwei
verbunden ist was mit Option zwei
verbunden ist, über
den Rückgabewert zurückgegeben. Jetzt können wir auch Dinge wie die
Steuerung eines
Branch-Knotens mithilfe von Enums tun . Wenn ich
diese Knoten vorerst nur lösche, können
wir sie herausziehen und
einen gleichwertigen Knoten erstellen. Wir können das überprüfen. Wir können diesen Equals
Ethereum-Knoten hier
erstellen. Und wir können überprüfen, ob unser Immunsystem
einer ist , wenn
es sich um scharfe Optionen handelt? Und wenn ja, können
wir einen wahren Wert ausgeben, und wenn nicht, wird ein falscher Wert
gesetzt. So könnten wir ihm einen
Branch-Knoten erstellen und kontrollieren ob dies je nach Wert
unserer Gewerkschaften wahr oder
falsch ausgeführt
wird oder nicht . Jetzt können wir unser
Indium auch in unserer Struktur verwenden, also können wir das
jetzt tun, wenn wir wollen, wir könnten hier zu
unserer Videostruktur zurückkehren, eine neue Variable
hinzufügen und wir nennen das
sagen Item-Typ. Wir können das
als unsere Video-Immunität festlegen. Einfach so. Speichern Sie das und vielleicht
wollten wir unsere Optionen ändern. Vielleicht war das Essen, Trinken, Treffen und Waffen. Jetzt könnten wir
dieses Video Indium in
unserer Struktur verwenden dieses Video Indium in , um die Typ-ID
eines Elements festzulegen. Wenn wir also hierher zurückgehen und
unsere Videostruktur bekommen, können wir sagen, dass wir unser Array
durchlaufen. Wir können auf alle Werte in unseren Strukturen zugreifen ,
damit ich unsere Videostruktur herausziehen und
durchbrechen kann. Sie können sehen, dass wir
jetzt
eine bestimmte Anzahl von Variablen überschritten haben . Wir bekommen also diese kleine
Drop-Down-Option, die wir verwenden können. Und das können Sie tatsächlich weiter
organisieren. Vielleicht brauchst du also nur
den Gewichtswert. Sie könnten also
hier reingehen und das Häkchen bestimmte Variablen entfernen,
die nur die Option Gewicht anzeigt. Nun, nur um die Dinge in
Ordnung zu halten, weil Sie
möglicherweise eine Struktur mit
vielen Variablen haben. So können Sie das Häkchen entfernen, welche Sie in
diesem bestimmten Moment einfach nicht benötigen. Dies wirkt sich in keiner Weise auf
Ihren Schlag aus. Es räumt nur den Knoten auf. Wir können aber auch auf
den Gegenstandstyp in ihm zugreifen , den wir unserer Struktur hinzugefügt haben. Wenn wir also herausziehen, können wir sagen, den Gleichheitsknoten
verwenden. Wir können überprüfen, ist dieser Artikel, dieser spezielle
Eintrag in unserem Array? Ist es
zum Beispiel ein Lebensmittel , wenn es das ist, dann möchten wir vielleicht
einen bestimmten Code ausführen. Oder wenn es zum Beispiel
eine Waffe wäre , könnten
wir sie mit einem anderen Code
ausführen lassen. Wie ich bereits sagte, könnten wir diesen Switch-Knoten
verwenden. Damit wir ein
Switch-On-Video ausführen können. Und jetzt können wir wechseln,
je nachdem, um welche Art von Element es sich bei diesem Eintrag in unserem
Array handelt. Das war's für diese Lektion. Zusammenfassend lässt sich sagen, dass Strukturen eine wirklich gute Möglichkeit
sind mehrere
Variablentypen in einer Variablen zu
speichern. Und dann können
wir mit Arrays viele
Informationen speichern , auf die wir
dann ganz einfach zugreifen können. Und Enums sind eine großartige Möglichkeit, zu kontrollieren, welcher Code in Ihren
Projekten ausgeführt wird. Oder wir können sie verwenden, um
Variablen auszuwählen ,
abhängig von der nums, Fantasie.
15. Grundlagen (Veranstaltungen): Hallo zusammen. In dieser Lektion werfen
wir einen Blick auf Event-Knoten. Jetzt haben wir
in unseren vorherigen Lektionen bereits ziemlich oft
Event-Knoten verwendet . Wenn Sie sich zum Beispiel an die beginnende
Spielnote erinnern, ist
das ein Ereignis oder zerstörter
Ereignisknoten
auch ein Ereignis. Diese Ereignisse werden aus dem
Code innerhalb der Engine aufgerufen. Code, der
in die Engine integriert ist, führt diese Ereignisse aus, wenn das Spiel beginnt oder wenn die
Schauspieler zerstört werden. Jetzt können wir auch
unsere eigenen benutzerdefinierten Ereignisse erstellen , die wir ausführen können, wann immer wir wollen. Mach das, wir können mit der rechten Maustaste klicken. Wir können nach benutzerdefinierten Ereignissen suchen. Und wir können
hier die Option
Benutzerdefiniertes Ereignis hinzufügen verwenden , um einen neuen Event-Knoten zu erstellen. Ich
nenne einfach mein
Beispielereignis , ein solches Ereignis. Und Sie können sehen, dass es jetzt wie unsere anderen Events
aussieht, aber dieses Ereignis wird momentan eigentlich
nie ausgerufen, weil wir es nirgends aufgerufen
haben. Wenn ich also möchte, dass mein
Beispiel vent ausgeführt wird und den Code sieht, mit dem
ich mich verbinde, wie die Druckzeichenfolge, müssten
wir
unser Beispielereignis aufrufen. das zu tun, können wir ein existierendes Ereignis
wie die Notiz der
Anfangsebene
verwenden , um es aufzurufen. So könnten wir zum Beispiel Ereignis herausziehen und
suchen. Und das würde jetzt unser Beispielereignis
nennen
, wenn das Spiel beginnt. Jetzt können wir Ereignisse an
mehreren Stellen in unserem Code aufrufen. Also zum Beispiel, wenn wir möchten, dass
dieser Beispiel-Eventcode ausgeführt wird, wenn das Spiel beginnt und auch wenn unsere
Charaktere zerstört werden. könnten wir
auch machen. Wir könnten uns einfach auf ein anderes Beispielereignis zurückziehen. Cool hier. Und jetzt,
wenn unser Spiel beginnt, nennen
wir dieses Ereignis,
ich führe seinen Code aus. Und auch wenn dieser
Schauspieler zerstört wird, rufen
wir das Event auf
und führen diesen Code aus. Wir können auch
Beiträge zu unseren Veranstaltungen hinzufügen. Wenn wir also hier unsere
Veranstaltungsnotiz auswählen, können
Sie sehen, dass es
eine Eingabeoption gibt. Wenn ich also hier auf die Schaltfläche
Eingabe hinzufügen klicke, können
wir sehen, dass du
eine neue boolesche Eingabe hast. Und das fügt
unserem Event-Knoten eine Ausgabe hinzu und auch Eingaben
zu unseren Event-Cool-Knoten. Jetzt können wir eine
Variable mithilfe der Kernknoten steuern. Vielleicht
wollten wir zum Beispiel, dass unser boolescher Wert true ist, wenn das
beginnende Spiel läuft, aber falsch, wenn das
zerstörte Spiel läuft. Und dann könnten wir
vielleicht anderen Code ausführen lassen,
je nachdem, ob
dieser Ausgabewert wahr oder falsch
war oder nicht . Ereignisse werden auch ziemlich
häufig beim Programmieren
für den Mehrspielermodus verwendet. Wenn wir das Ereignis hier auswählen, können
Sie sehen, dass es
einige Replikateinstellungen hat. Diese sind für Multiplayer gedacht. Jetzt werde ich in
dieser Lektion nicht darauf
eingehen, da der
Multiplikator
ein riesiges Thema ist und Sie wirklich die Grundlagen von
Blaupausen kennen
müssen , bevor Sie mit der Codierung für Multipolar beginnen.
Eine andere Sache, die Sie mit Ereignissen machen
können,
ist sie
von anderen Blaupausen aus zu nennen , wie
wir es mit unseren Funktionen können. Wenn ich also
meine Blaupause hierher ziehen kann, erstelle
ich
eine neue Blaupause. Ich werde nur einen Schauspieler benutzen und wir werden ihn
verkaufen, um ihn auszulösen. Und das mache ich auf. Ich füge nur eine Box hinzu. Kollision wird
zum Event Graph gehen und wir werden
eine Beginn-Überlappung erstellen. Event Schauspieler beginnen sich zu überschneiden. Schon wieder. Das ist nur eine Veranstaltung. Sie können sehen, dass auf dem Knoten
„event“ steht. Aber das wird aufgerufen, wenn etwas Überlappungen Auslöser
sind, das gibt uns eine
Ausgabe der
Akteurüberlappung , die Todd Trigger daraus ziehen
wird. Wir werden einen Cast to
ThirdPersonCharacter-Knoten verwenden. Und wenn Sie sich an
unsere vorherigen Lektionen erinnern, ist
diese Überprüfung der
andere Akteur, unseren Auslöser
überlappt,
ein Third-Person-Charakter. Wenn ja, dann
gibt es uns Zugriff auf seine Variablen,
Funktionen und Ereignisse. Wenn ich also von hier wegziehe
und zum Beispiel suche, kannst
du sehen, dass ich mein Beispielereignis
nennen kann. Und wir haben auch Zugriff auf
die Variable, die wir hinzugefügt haben. Und wenn ein Schauspieler
Überlappungen ausgelöst wird, würde dies überprüfen, ist es ein
ThirdPersonCharacter? Und wenn ja, dann rufen wir dieses Beispielereignis für
diesen ThirdPersonCharacter
Blueprint auf . Und wenn wir auf
dieses Ereignis doppelklicken
, gelangen wir tatsächlich zu
unserem Charakter-Blueprint. Und das bringt uns
direkt zu unserem Code sodass wir leicht finden können,
was wir gerade ausführen. Wir können auch
Ereignisse mit Timern verwenden. Wenn wir also die Verbindung trennen, fange
ich
hier an, Note zu spielen, und
verschiebe es einfach hier nach oben, um
etwas mehr Platz zu haben. Wenn wir aus meinem Begin
Play herausziehen und nach einem
Timer nach Ereignis suchen . Sie können sehen, dass
wir von ihnen eine Option
namens Timer einstellen haben . Und das gibt uns diesen Knoten. Wenn Sie jetzt eine Umfrage durchführen können, erhalten
Sie eine Fehlermeldung. Sie sich
darüber keine Sorgen, denn wir haben noch keine Veranstaltung
angeschlossen. Es gibt also ein paar
Möglichkeiten, wie wir das tun können. Wir können hier
unseren Event-Pin herausziehen und dann nach benutzerdefiniert suchen. Und wir können ein benutzerdefiniertes
Ereignis hinzufügen, wie wir es zuvor getan haben. Und das gibt uns
einen neuen Event-Knoten. Oder wir können einfach mit der rechten Maustaste klicken
und nach
benutzerdefiniertem
Ereignis suchen und wie zuvor ein benutzerdefiniertes Ereignis hinzufügen. Und wir können es hier mit
dem Event-Input verbinden. Beachten
Sie nun, dass
Sie
Ihr Ereignis nicht mit diesem Knoten
verbinden können, wenn es Eingaben hat . Wenn ich zum Beispiel hier einen Boolean
hinzugefügt habe und wir ziehen können, können
Sie sehen, ob ich hier
aus meiner Kundenentlüftung herausziehe, kann
ich
ihn nicht mit dem Eingang verbinden. Und das liegt daran, dass wir
eine Eingabevariable für unseren
Umzug haben und erneut kompilieren können.
Ich kann dieses Backup
verbinden. Das
Timer-Ereignis ermöglicht es uns jetzt, ein Ereignis
abhängig von seinen Einstellungen
auszuführen. Derzeit bei Begin Play möchten
wir, dass unser Timer
beispielsweise alle 1 Sekunde läuft, beispielsweise alle 1 Sekunde läuft, damit wir die Zeit auf eins setzen können
und wir das Looping einschalten können, wenn wir möchten, dass dieses Ereignis
jede einzelne ausgeführt wird Sekunde. Damit
wir das übernehmen können. Wenn wir das weglassen würden, würde
das Anfangsstück nicht laufen. Es würde die festgelegte
Zeit laufen, in der ich sie kaufe. Dies würde 1 Sekunde warten und unser Event würde einmal stattfinden, und dann wäre es das. Aber wenn wir Looping-Zecken haben, wird
es jede Sekunde ausgeführt. Jetzt sind Timer eine
wirklich gute Alternative zur Verwendung des Tick-Events. Wenn Sie sich also erinnern, wenn wir das Tick-Event
erstellen, wird jedes einzelne Frame ausgeführt , in dem unser Spiel gerendert wird. Und viele Anfänger neigen
dazu, viel Code
daran anzuhängen, nur weil er kontinuierlich
läuft. Das Problem dabei ist, dass meiste Code nicht in
jedem einzelnen Frame ausgeführt werden
muss und Sie dadurch die Leistung
Ihres Projekts
sehr leicht ruinieren können die Leistung
Ihres Projekts
sehr leicht ruinieren . Eine gute Alternative
ist also die Verwendung von Timern. Angenommen, Sie benötigen Code, der alle 1 Sekunde ausgeführt werden
muss können
Sie ihn so verbinden, anstatt beispielsweise eine
Technik zu verwenden. Jetzt können wir einen
Timer-Handler verwenden, um unseren Timer zu steuern. Wenn wir also hier aus
diesem Rückgabewert herausziehen, können
wir eine neue Variable mit der Option promotes
Variable erstellen, und das wird nur
eine neue Variable erstellen ist Typ ist Timer-Handle, und ich nenne
es einfach Timer. Diesmal ermöglicht
uns eine Variable die Steuerung unseres Timers. Nehmen wir zum Beispiel an, wir wollten
diesen Kunden dann
mehrmals ausführen und dann den Timer
stoppen. können wir machen. Also könnten wir,
sagen wir, eine neue Variable hinzufügen. Ich rufe einfach diese Nummer an. Ich setze es auf eine Ganzzahl. Wir bekommen unsere Ganzzahl
und sie wird nur prüfen, ist es gleich fünf bis fünf? Und wir werden einen F-Knoten machen. Wenn es also nicht fünf ist, wollen
wir eins hinzufügen. Das machen wir, wir kriegen es. Wir fügen eins hinzu und dann werden wir Sex der Zahlenwert liegt bei fünf. Wir wollen unseren Timer anhalten. Was wir also tun können, ist, dass
wir aus
R herausziehen können oder wir können unserer
Zeit hier eine Variable geben, daraus
ziehen
und nach Clip suchen und die klare und
ungültige Zeit verwenden, die ich kaufe. Dieser
Code würde jetzt funktionieren, wenn
das Spiel beginnt oder wenn der Charakter gespawnt
ist. Unser Timer läuft unseren
Kunden dann alle 1 Sekunde, wir stellen seine Timer-Referenz
auf die Timer-Griffvariable ein. Wenn unser
benutzerdefiniertes Ereignis jetzt ausgeführt wird, überprüfen
wir, ob die Zahl fünf
entspricht. Ist dies nicht der Fall, fügen wir
einen hinzu und legen ihn fest. Und wenn das nächste
Mal läuft, überprüfen wir es
nach einer Sekunde erneut. Und wenn es dann um fünf ist, sagen
wir diesem Timer, dass er anhalten soll. Jetzt wird die Verwendung von Clear und
Invalides des Timers nach Handled Node dieses Mal
vollständig gestoppt. Sie müssen
es erneut ausführen, um es zu starten. Aber wenn Sie in der Lage
sein möchten, diesen Timer fortzusetzen, können
wir tatsächlich
einen anderen Knoten verwenden. Also können wir uns hinziehen und nach sagen wir
, Pause suchen. Und wir können
den Timer-Griff pausieren. Also können wir das stattdessen ausführen. Dies erlaubt uns zu sagen, dass wir das
Timeout vielleicht später wieder aufnehmen
wollten. Wir könnten dann
den Un-Pausen-Knoten verwenden , der
unseren Timer wieder laufen lässt. Jetzt können wir
das testen und spielen. Also werde ich einfach die notierte Un-Pause
löschen. Und ich füge ein paar
Print-Strings damit wir sehen können, was läuft. Wir stecken unsere Nummer
zwei ein, ich drucke hier eine Zeichenfolge und füge eine Druckzeichenfolge
bis zu meiner Pausenzeit des Codes hinzu. Und ich setze das auf eine Auszeit. Wenn wir jetzt auf „Spielen“ klicken, sollte
das alles laufen,
wenn wir das Spiel starten. So können wir überprüfen, ob unsere
Zeit jede Sekunde läuft. Es erhöht
unseren Zahlenwert. Sobald es fünf ist, der Port, wird
das Timeout angehalten. Wenn Sie jetzt jemals
die Ereignisse finden möchten , die in die Engine
integriert sind, können
Sie dies tun, wenn wir hier zu
unserem ThirdPersonCharacter
Blueprint gehen hier zu
unserem ThirdPersonCharacter
Blueprint auf Nach Ereignis suchen
klicken. Du kannst eine Liste der
verschiedenen Ereignisse sehen , die in unseren Charakter
integriert sind. Da es sich um einen Charakter
handelt, gibt
es einige benutzerdefinierte Ereignisse
, die andere Schauspieler nicht haben. Wie zum Beispiel die Landed, wird
dies immer dann ausgeführt, wenn unser
Charakter nach einem Sprung landet. Sie können dies auch bei normalen Schauspielern wie zum
Beispiel unserem Auslöser tun. Wenn ich mit der rechten Maustaste auf „Nach Ereignis
suchen“ klicke, kannst
du sehen, dass es nicht viele Ereignisse gibt wie
der Charakter, aber es gibt einige
Built- und Events, mit denen du deinen Code ausführen kannst. Das war's für unsere Event-Lektion. Wir werden Ereignisse auch in
unseren zukünftigen Lektionen verwenden, nur weil sie ein
ziemlich zentraler Bestandteil von
Codierung und Blaupausen sind .
16. Grundlagen (Erbe des (Blueprint: Hallo zusammen. In dieser Lektion werden wir
ein
bisschen über die Blueprint-Vererbung sprechen . Nun, wir haben schon ein bisschen
darüber gesprochen, in den Schauspielern und Objekten
variieren das Video. Wenn Sie das noch nicht
gesehen haben, würde ich empfehlen, es sich anzusehen. Aber im Wesentlichen
ermöglicht uns die Vererbung von
Blaupausen , einen Blueprint
aus einem vorhandenen
Blueprint zu erstellen , der dann diesen vorhandenen
Blueprint als übergeordnetes Element
verwendet. Und was das bedeutet,
ist unser neuer Blueprint, bei dem das Kind
alle Funktionen,
Variablen und Code aus
dem übergeordneten Blueprint erbt . Also zuerst werde ich
hier ein Beispiel geben. Wenn wir nur einen Blueprint erstellen, klicke ich einfach mit der rechten Maustaste
und wähle Blueprint-Klasse aus. Sie können sehen, dass wir,
wenn wir hier tatsächlich eine dieser
Optionen
auswählen, tatsächlich
eine übergeordnete Klasse auswählen. Jetzt verwenden wir den Schauspieler
zum größten Teil, weil es nur
das
grundlegendste Objekt ist , das es auf der Welt geben kann. Also
wählen wir jetzt einfach wieder den Schauspieler aus. Und auf diese Weise erben wir hier
unsere neue Blaupause erben alle Funktionen, Variablen und Fähigkeiten,
die ein Akteur besitzt. Wenn wir jetzt
unseren neuen Plan öffnen, kann
ich Ihnen zeigen, was ich meine. Wenn wir das nur
in der obersten PEP haben, wenn wir hier unten zu unserer
Variablenoption gehen, sieht
es so aus, als hätten wir nur
unsere Standardroute gesehen, die mit unserem Akteur geliefert wird. Director enthält tatsächlich
eine Reihe anderer Variablen. Wir können sie einfach nicht sehen,
weil sie vererbt wurden. So wie wir das
einschalten können, wenn wir hier zu diesem
kleinen Zahnrad gehen, können
wir auf
Vererbte Variablen anzeigen klicken. Und Sie sehen, dass ich
jetzt eine
Menge Kategorien
habe , die gerade erschienen sind. Jetzt. Dies sind alles Variablen
, die meine neue Blaupause erbt
oder erbt, weil sie
ein Kind des Schauspielers sind. Alle diese Variablen
wurden im Akteur erstellt. Jetzt können wir diese
Variablen genauso verwenden wie mit Variablen, die
wir selbst erstellen. Wenn ich also hier zum
Event Graph gehe, kann
ich diese
hineinziehen, ich kann sie bekommen. Ich kann bestimmte nicht festlegen. So ist zum Beispiel nur relevant für Besitzer tatsächlich deaktiviert. Ich kann das nicht mit Code festlegen, aber andere, die ich zum Beispiel
kann, wenn wir nach unten scrollen,
können beschädigt werden, wenn ich sie ziehe und Sie können sehen,
dass ich diese Variable genau wie
unsere normalen Variablen bekommen kann . Und ich kann mich auch einrichten. Und das
gilt auch für Funktionen. Wir haben in der Lektion Funktionen ein wenig
darüber gesprochen, aber wenn wir mit der rechten Maustaste klicken
und nach set to transform suchen , dieser Set Actor Transformationsknoten ist
dieser Set Actor Transformationsknoten nur eine Funktion
, die in die Schauspielerklasse, auf die
wir Zugriff haben weil unsere neue Blaupause
ein Kind der Schauspielerklasse ist. Jetzt können wir nicht mehr zum
Content Browser gehen und den Akt der Blaupause
finden,
da er nicht hier ist. Es ist tatsächlich in
den Motor eingebaut und alle seine Variablen und Funktionen
sind alle in C plus plus codiert. Jetzt
zeige ich Ihnen, wie wir unser eigenes
Vererbungssystem
einrichten können , wie wir es vom Schauspieler erben. Wir könnten unsere neue Blaupause
haben, etwas Code darin haben, einige
Funktionen, Variablen. Dann könnten wir einen weiteren
neuen Blueprint von
unserem neuen Blueprint erben lassen und
Zugriff auf diese Variablen
und Funktionen haben . Also gehen wir hier zum
Inhaltsbrowser und ich
benenne einfach meinen Blueprint um. Ich
nenne es einfach den Master, ich nenne
es BP
Underscore Master. Um nun einen
untergeordneten Blueprint zu erstellen, gibt es mehrere
Möglichkeiten, dies zu tun. Wir können einfach mit der rechten Maustaste auf
unseren bp Master Blueprint klicken. Sie können sehen, dass
es
hier eine Option namens
Child Blueprint-Klasse erstellen gibt. Wenn wir darauf klicken, können
Sie sehen, dass es uns eine neue Blaupause
erstellt hat. Es gibt ihm den Namen BP
Master Underscore Child, und das ist jetzt eine untergeordnete
Blaupause unseres Meisters. Wenn wir es öffnen, werden
Sie sehen, dass anstelle der übergeordneten Klasse
, die der Schauspieler ist, wie sie
im Master-Blueprint ist , oder das
Master-Child die
Elternklasse ist, BP-Master ist. Jetzt gehe ich einfach zum Content Browser und benenne das in child um, damit wir
hier nicht so verwirrt werden. Eine weitere Möglichkeit, untergeordnete Blueprints zu
erstellen, ist die Option Blueprint erstellen. Wenn wir also zur Blueprint-Klasse gehen, können
Sie hier unten sehen,
dass es alle Klassen gibt. Und wenn wir nach
BP Underscore Master suchen, werden
Sie sehen, dass wir ihn tatsächlich finden. Es ist schwer zu erkennen, weil
es dort hervorgehoben ist. Aber das sagt BP-Meister. Wenn wir darauf klicken, können
wir auf Auswählen klicken. Und das wird
uns auch ein Kind der Maske machen. Sie können also sehen, dass ein neuer Blueprint
erstellt wurde. Wenn ich das öffne, wirst
du sehen, dass die Elternklasse auch BP Master
ist. Jetzt gehe ich zurück zu meinem Inhaltsbrowser und lösche einfach diesen neuen Blueprint,
da wir bereits
ein Kind haben , mit dem
wir arbeiten können. Wenn wir jetzt zu
unserem BP-Master zurückkehren und ich diese Knoten
vorerst löschen werde . Ich werde die
geerbten Variablen ausblenden. Jetzt sind wir wieder bei
unserer Standardansicht. Ich werde eine beliebige Variable erstellen und ich nenne
das einfach sagen, Beispielvariable wird auch
eine neue Funktion erstellen. Ich rufe diese Beispielfunktion auf. Diese Variable und
Funktion sind jetzt einzigartig
für unseren BP-Master. So sagen andere Kinder des
Zugangs zum Beispiel unseren Charakter, der eigentlich auch
ein Kind des Schauspielers ist . Es wird keinen
Zugriff auf diese Variablen haben da unser Charakter
kein Kind unseres BP-Masters ist, aber unser Kind tut mir leid. Bp Child Blueprint ist ein
Kind des BP-Meisters. Also wenn wir zum gehen
oder wenn wir hier zu
unserem Master zurückkehren und die
meisten kompilieren, speichern wir das auch. Dann gehen wir zurück zu unserem bp-Kind. Wir gehen in den Event Graph. Wir können das einschalten,
vererbte Variablen zeigen. Okay, im Drop-down sehen
Sie, dass wir alle aktiven Variablen
haben ,
denn obwohl der BP-Master unser Elternteil ist, der Elternteil des
BP-Masters der Schauspieler. Unser Kind hat also immer noch all
die Dinge, die Schauspieler tun, hat
immer noch alle seine Variablen
sind andere Funktionen. Aber dann fügen wir hinzu, was auch immer
unsere Eltern haben. Sie können also unsere
Beispielvariablen sehen , die wir verwenden können, als
hätten wir sie erstellt. Wir können es in unserem Kind BP in
Ordnung bringen. Wir können auch
die Funktion verwenden , die wir im Master
erstellt haben. Wenn ich also nur mit der rechten Maustaste klicke
und nach einer Beispielfunktion suche, kannst
du sehen,
dass ich die
Beispielfunktion
erstellen kann und jeder Code, den wir hier in
unserer Funktion hatten , würde genauso
laufen, als ob
wir hatten es in unserem Event Graph-Master-Blueprint , damit wir
in unserem Blueprint darauf zugreifen können. Und wenn Sie sich an
unser Funktionsvideo erinnern, können
wir Funktionen
aus unseren übergeordneten Blueprints überschreiben. Wenn wir also hier auf
der Registerkarte Funktionen zum Überschreiben gehen, können
Sie sehen, dass wir
all diese Funktionen haben, die wir von unserem Akteur
überschreiben können . Aber wir haben auch
den BP-Meister. Und Sie können sehen, dass wir hier
unsere Beispielfunktion haben. Wenn ich darauf klicke,
können wir übernehmen und ändern welcher Code
immer dann ausgeführt wird , wenn unsere
Beispielfunktion ausgeführt Wir haben auch diesen
zusätzlichen Hinweis hier, und das macht im Grunde den Code das ist im
Eltern-Blueprint-Lauf. Und dann könnten wir
zusätzlichen Code haben, wenn wir wollten. Wir könnten
diesen Knoten auch einfach löschen und unseren eigenen benutzerdefinierten Code vollständig ausführen wenn das Beispiel als RAM
funktioniert. Jetzt wird Code,
der im Master-Blueprint ausgeführt wird auch für
unseren Child Blueprint ausgeführt. Also gibt es dir ein Beispiel. Ich gehe zum
Event Graph und lösche diese Knoten einfach. Ich lösche auch diese. Sie kommen nur mit neuen
Schauspielern, die geschaffen werden. Sie können also sehen, dass unser Kind
jetzt keinen Code enthält. Wir können das löschen, einige
überschreiben, nur die
Beispielfunktion
hier auswählen , das löschen. Das
löscht die Funktion nicht wirklich. Wenn Sie sehen, kann ich immer noch auf
die Funktion zugreifen , die nur
löscht, Override of it sind. Also ist jeder benutzerdefinierte Code, den
wir möglicherweise
zur Außerkraftsetzung hinzugefügt haben jetzt weg und wir werden einfach das verwenden was unser Master-Blueprint, ähm, in dieser Funktion hat. Wenn ich das also lösche, können
Sie sehen, dass unser Kind überhaupt keinen
Code enthält. Bp wird das kompilieren und speichern. Wenn ich jetzt zu meinem BP-Meister gehe
und
eine Spielnotiz für den Anfang erstelle. Und dazu füge ich eine
Druckzeichenfolge hinzu. Also nur etwas Einfaches
, das uns hallo lässt. Jetzt ist der einzige Code
, den wir in
diesen beiden Blaupausen haben,
dieser Beginn des ist der einzige Code
, den wir in
diesen beiden Blaupausen Spiels und
dann eine Druckzeichenfolge. Wenn ich jetzt zur
Third-Person-Map gehe und mein BP-Kind hineinziehe, werde ich es einfach dort platzieren
. Denken Sie daran, dass unser Kind überhaupt
keinen Code enthält. Aber wenn ich auf Play klicke, wirst du
sehen, dass es Hallo druckt, obwohl es dort
keinen Code gibt. Das liegt daran, dass
das Kind immer noch den Code ausführt, der im übergeordneten Element
vorhanden ist. Also sagen unsere Eltern, wir sollen
anfangen, Drucksaiten zu spielen. Also werde ich das Kind dasselbe tun. Jetzt können
wir, wie unsere Funktionen, auch Ereignisse überschreiben. jetzt in meinem Kind Wenn ich jetzt in meinem Kind ein neues
Anfangsspiel von m erstelle, werde
ich mich mit
nichts bis zu diesem Thema verbinden. Ich würde es einfach so belassen. Ich kompiliere. Und jetzt, wenn ich auf Play klicke und sehe, dass No Print
String passiert. Und das liegt daran, dass wir der
Engine sagen, dass unser Kind die
übergeordneten Spielknoten überschreibt. Also wird das nicht mehr
für unser Kind laufen. Wir werden unseren eigenen
benutzerdefinierten Code ausführen, damit wir eine weitere Druckzeichenfolge hinzufügen
können,
und wir könnten
das sagen , das ist ein Test. Und jetzt wird dies ausgeführt,
anstatt dass dies ausgeführt wird. Wenn wir also auf Play klicken,
sehen Sie, dass dies ein Test ist. Und wieder, wenn ich das entferne,
beginne, von meinem Kind zu spielen, wirst
du sehen, dass es wieder anfängt, das Hallo zu
drucken. Jetzt fragen Sie sich vielleicht, was der Sinn der
Blueprint-Vererbung ist. Warum würdest du nicht
einfach all
diesen Code und jeden einzelnen
der Blaupausen haben . Nun, der Hauptgrund
ist, dass es schwieriger zu
warten ist, wenn Sie gesamten Code haben und
20 verschiedene Blaupausen sagen und
es einen Fehler mit diesem 20 verschiedene Blaupausen sagen und Code gab. Sie müssten 20 Blaupausen durchgehen
und ändern. Oder wenn Sie erneut
eine neue Funktion hinzufügen möchten, müssten
Sie all
diese 20 Blaupausen durchgehen und den Code ändern. Mit der Blueprint-Vererbung können
Sie jetzt einen
Master-Blueprint haben , der den gesamten
Code enthält, den Sie benötigen. Und dann Blaupausen für Kinder
, die dann diesen Code erben. Und wenn vielleicht einer
der untergeordneten Blaupausen etwas Besonderes tun
müsste, aber der größte Teil des Codes
immer noch derselbe sein müsste. Du könntest zu der Blaupause für
Kinder gehen. Sie könnten beispielsweise
eine Funktion oder ein Ereignis überschreiben und
benutzerdefinierten Code nur in
diesem untergeordneten Element ausführen lassen , ohne
alle anderen untergeordneten Elemente oder
den Master-Blueprint zu beeinflussen. Ein gutes Beispiel dafür
wären Dinge wie Waffen. Wenn Sie 20 verschiedene
Waffen in Ihrem Spiel hätten, würden
Sie nicht
den gesamten Code zum Schießen, Zielen und
Nachladen in jedem einzelnen
Waffenentwurf haben wollen den gesamten Code zum Schießen, Zielen , denn wenn Sie einen dieser Codes ändern möchten oder einen Fehler beheben oder eine Funktion hinzufügen, müssten
Sie
20 oder 30 Blaupausen durchgehen 20 oder 30 Blaupausen und immer
wieder dasselbe
tun. Wenn Sie jedoch nur
einen Master-Blueprint
hätten, der all Ihre
Zielbeschuhe hatte, laden Sie den Code neu. Alle Waffen sind Kinder
dieses Meisterplans. Sie können alles an
nur einer Stelle ändern , und das
wirkt sich auf alle
untergeordneten Blaupausen aus. Jetzt deckt
die Vererbung auch die
Master-Blueprints-Komponenten ab Wenn wir also hier eine neue Komponente
zu unserem Master-Blueprint hinzufügen , verwende
ich einfach eine
statische Mesh-Komponente. Sie werden sehen, dass wir
eine statische Mesh-Komponente haben. Jetzt können wir ein Mesh setzen. Ich setze meinen
zum Beispiel auf einen Würfel. Und ich setze einfach einen
Würfel und kompiliere. Jetzt haben wir also einen Würfel in
unserem Master-Blueprint. Wir gehen zum Child Blueprint. Sie können sehen, dass wir auch einen Würfel im Viewport
haben. Jetzt
finden Sie das Zustandsnetz auch im Bedienfeld „Komponenten“. Wenn wir das auswählen, können wir tatsächlich
unseren Würfel zerschlagen ändern. Also kann ich das ändern und
sagen, ein Kamm. Wenn ich also nach einem Kegel suche, kann
ich das auf einen Kegel setzen. Jetzt hat unser Kind ein
anderes Stack-Mesh unser Master-Blueprint. Wir könnten dasselbe mit mehreren untergeordneten Blaupausen
unserer Blaupause tun. Sagen Sie
zum Beispiel, ob Sie Meli-Waffen hatten , und fügen Sie eine Master-Nahkampfwaffe
mit dem gesamten Code hinzu. Und Sie könnten dann
Kinderpläne davon haben, zum Beispiel ein Messer und einen
Speer und so weiter. Und Sie könnten das
Stack-Mesh für jedes
dieser Elemente ändern und alle noch den Code aus
dem Master-Blueprint
haben. Das war's
für diese Lektion. Hoffentlich haben Sie ein besseres
Verständnis der Vererbung in der Engine und auch
darüber, was sie tatsächlich nützlich ist.
17. Grundlagen (Casting): Hallo zusammen, in dieser
Lektion werden
wir uns den Kostenknoten ansehen. Bevor wir beginnen, empfehle
ich dringend, wenn Sie sich die Lektion über
die
Variablen Schauspieler und Objekte
noch nicht angesehen haben. Und auch unsere vorherige Lektion über Vererbung
von
Blaupausen
als Casting verbindet sich mit diesen beiden
Systemen. Um loszulegen, werden wir
einfach
eine neue Blaupause erstellen , wie
wir es zuvor getan haben. Nur Blueprint Class,
wir verkaufen es an einen Schauspieler. Und ich
nenne einfach diesen Auslöser
, der eine grundlegende Box
einrichten wird die unser Charakter überlappen kann. Und wir werden diese
Überlappungs-Events verwenden , um einige Casting-Notizen auszuführen. Also öffnen wir unseren Auslöser. Und ich
füge einfach eine neue Komponente hinzu, und das wird eine
Box-Kollisionskomponente sein. Ich werde das einfach nach oben
verschieben, damit es, wenn es in der Welt
ist,
korrigierbar ist, es überlappen kann. Und ich bin auch mit
unserer Box ausgewählt. Ich suche nach „versteckt“. Und ich werde das
Hidden-End-Spiel hier deaktivieren, nur damit wir
unsere Box sehen können , während wir im Spiel
spielen. Dann werde ich im Ereignisdiagramm diese Knoten einfach
löschen, indem
ich mit der
rechten Maustaste klicke und nach beginne Überlappung
suche. Ich werde das
Ereignis verwenden, um sich zu überschneiden. Und wenn Sie sich nicht an unsere
vorherigen Lektionen erinnern, wird
dieser Knoten immer dann ausgeführt, wenn sich
ein Schauspieler mit unserem Schauspieler überschneidet. Überlappungen sind also Auslöser. Dies wird ablaufen und uns einen Hinweis
auf den Akteur über Laktose geben . Die Ausgabe
unseres Begin-Overlapp-Knotens
ist also ein Referenzakt. Und wenn Sie sich daran erinnern, können
wir dies verwenden, um auf jede
unserer Akteurfunktionen,
Variablen oder Ereignisse zuzugreifen . Aber vielleicht wollten wir
auf Informationen zugreifen, die
in unserem Charakter waren , wenn
Überlappungen ausgelöst werden. Um das zu tun, können wir die Kosten nutzen. Also, wenn ich mich von meinem
anderen Schauspieler hier zurückziehe und nach Kosten für die dritte Person
suche. Sie können sehen, dass wir den BP ThirdPersonCharacter verursachen
können . Also klicke ich darauf und das
schafft uns ein neues Auto, das geschneit ist. Und im Wesentlichen nimmt
ein Autoschnee ein Objekt auf
und prüft, ob es das Objekt
ist, das
wir zu kostümieren versuchen? Anhand unserer Schauspieler-Referenz,
die alles sein könnte
, was auf der Welt existiert, wird
dieser Kostenknoten überprüfen, ob es sich um die alles sein könnte
, was auf der Welt existiert, wird
dieser Kostenknoten überprüfen, ob einen Third-Person-Charakter
handelt? Wenn dies der Fall ist, wird unser oberster
Ausgangs-Ausführungs-Pin ausgeführt. Und wir können Code ausführen, sonst würden die
Kosten fehlschlagen, und wir können auch
anderen Code ausführen. Es gibt uns auch Zugriff auf einen
Zeichenvariablentyp für Dritte. Dies ist jetzt nur
gültig, wenn die Besetzung erfolgreich ist. Und was ich mit valid meine ist, dass
wir nur Informationen
über diese Variable erhalten können ,
wenn die Besetzung erfolgreich ist. Wenn du zum Beispiel
vielleicht ein Fahrzeug hättest, wenn das
Level, das über unseren Auslöser lief, wenn es kein
Third-Person-Charakter würden die Kosten fehlschlagen. Und wenn wir hier versuchen,
Informationen aus unserer
Variablenausgabe zu erhalten ,
indem wir Code verwenden, der von cost failed
ausgeführt wird, würden
wir tatsächlich Fehler bekommen,
weil die Kosten fehlgeschlagen sind. Wir können also eigentlich keine Informationen
aus dieser
ThirdPersonCharacter-Ausgabe
abrufen . Ein Beispiel dafür,
wie wir
mit dieser variablen Ausgabe auf
Informationen von unserem
ThirdPerson-Charakter zugreifen können Informationen von unserem
ThirdPerson-Charakter mit dieser variablen Ausgabe ,
ist, dass wir zu unserem
ThirdPersonCharacter gehen können. Und ich werde einfach eine neue Geschichte
erstellen , die ein Unfall war,
eine neue Variable. Und wir nennen das
aktuelle Gesundheit. Und wir setzen es auf eine Ganzzahl. Ich
lösche einfach dieses neue Makro. Und wir werden
das jetzt speichern und zu
unserem Trigger-Blueprint zurückkehren. Und wenn wir uns in die Länge ziehen, können wir jetzt nach aktueller Gesundheit suchen. Sie können sehen, dass
wir jetzt über
den Ausgangspin an
unserem Kostenknoten auf unsere aktuelle
Gesundheitsvariable zugreifen können über
den Ausgangspin an
unserem Kostenknoten auf unsere aktuelle
Gesundheitsvariable . Und wenn wir
sagen, eine Druckzeichenfolge hinzufügen die in einer
Druckzeichenfolge hier ist. Und beachte, dass ich
es mit dem Top-PIM verbinde weil wir nur diese
Druckzeichenfolge ausführen wollen. Wenn unsere Kosten erfolgreich sind, ziehen
wir uns aus dem
aktuellen Zustand heraus und verbinden das
einfach mit
unserem Druckstring hier. Und ich kehre zu meinem
ThirdPersonCharacter zurück und wähle meine aktuelle Gesundheit aus. Ich setze nur den
aktuellen Gesundheitszustand auf 50. Wenn wir jetzt spielen und
ich über meinen Auslöser renne, wird der Wert unserer Gesundheit ausgegeben. Also drück auf Spielen. Wir gehen über meinen
Auslöser und Sie können sehen , dass er den Wert 50 ausgibt. Wenn Sie sich an
unsere vorherigen Lektionen
zu Ereignissen und Funktionen erinnern , können
wir diese auch
über unseren Kostenknoten aufrufen. Wenn wir also den Flugzeug-Editor verlassen, kehren wir zu unserem Charakter zurück. Ich werde einfach
eine neue Funktion erstellen oder diese Beispielfunktion
cool machen. Und wir werden etwas hinzufügen,
wie den Sattel, die Schnur und das Haar
drucken, weil es leicht zu sehen und ein Spielbeispiel funktioniert. Das ist also eine Funktion in unserem ThirdPersonCharacter
Blueprint, wir
von unserem Trigger aus aufrufen können. Also werde ich einfach kompilieren, gehe zurück zu meinem Trigger hier, werde diesen Code vorerst löschen. Wir ziehen uns hier aus dem
ThirdPersonCharacter-Pin heraus und suchen zum Beispiel nach Funktion. Sie sehen, dass wir jetzt auf
unsere Funktion zugreifen können ,
obwohl sie sich im
ThirdPersonCharacter befindet. Und als wir auf „Spielen“ klicken,
haben wir unseren Abzug überschritten. Sie werden sehen, dass
der darin
enthaltene Code tatsächlich so ausgeführt wird, als ob diese Funktion innerhalb
von ThirdPersonCharacter ausgeführt worden wäre. Das Gleiche kann auch mit Ereignissen
gemacht werden. Wenn wir also zu unserem
ThirdPersonCharacter zurückkehren, gehen
Sie zum Event Graph
und erstellen Sie einen neuen Kunden. Dann zoome ich einfach heran
und nenne dieses Beispiel. Und wir fügen hier einfach eine weitere
Druckzeichenfolge hinzu. Und wir werden das
String-Zwei-Beispielereignis setzen. Jetzt, wenn wir
zu unserem Auslöser zurückkehren. Wir können die
Beispielfunktion löschen und ziehen sie heraus und wir können zum Beispiel
suchen. Sie sehen, dass ich jetzt
auf dieses Beispiel von ihnen zugreifen kann. Und wenn wir dann auf Play klicken und unseren Trigger
überfahren, werden
Sie sehen, dass
er jetzt den Beispiel-Event-Druckstring druckt. Jetzt möchte ich Ihnen auch ein Beispiel dafür
geben wann eine Besetzung fehlschlägt. Um das zu tun,
beenden wir das Spiel. Und ich werde gerade
eine neue Blueprint-Klasse erstellen, die sie an den Schauspieler sendet. Und ich nenne
es einfach ein Beispiel für einen EP-Unterstrich. Und wir werden das öffnen und
einfach kompilieren und speichern. Ich werde es ziehen. Es ist also
hier auf der oberen Registerkarte mit den
restlichen Blaupausen. Und ich
erstelle eine neue Variable. Und ich nenne
das einfach Test. Und wir werden kompilieren. Weiter. Wir gehen hier zu
unserem Auslöser und
entfernen diese Notizen. Die Kosten für den
Third-Person-Charakter, den wir aus Ausgabe
unseres anderen Schauspielers herausholen
, kosten unseren bp-Beispielentwurf. Und wir ziehen uns aus
der BP-Beispielvariable heraus. Und wir bekommen einen Test. Ich
führe nur eine Druckzeichenfolge aus. Und wir werden eine Zeichenfolge ausgeben, unabhängig davon, ob dieser Wert wahr ist
oder nicht. Wenn wir jetzt kompilieren
und unsere Box überfahren, werden
Sie sehen, dass
nichts passiert. Und der Grund dafür
ist, dass unser Charakter unsere Box überlappt
und es kein BP-Beispiel ist. Unsere Kosten scheitern also. Wenn wir jetzt beenden müssen,
kehren Sie zu unserem Auslöser zurück und fügen Sie den Kosten
einen neuen Druckstring hinzu. Sie werden sehen, dass der
Print String ausgedruckt wird. Wenn wir es jetzt durchgehen, können
Sie sehen, dass
es Hallo druckt,
und das liegt daran, dass der
Knorpel versagt. Das Eingabeobjekt für unseren
Kostenknoten ist kein BP-Beispiel. Die Kosten sind also gescheitert. Nun, wenn ich versuchen würde, Informationen von
unserem bp variablen Pin-Haar zu
erhalten ,
wenn der Cast fehlschlägt. Wir bekommen also tatsächlich einen Fehler und ich zeige Ihnen, wie das
aussieht, wenn wir versuchen, hier auf
unsere Testvariable zuzugreifen.
Wenn die Kosten fehlschlagen, Wenn die Kosten fehlschlagen, kompilieren
wir den
Hook-Compiler und wir fahren über die Box. Und schwul, Sie können sehen, dass der Druckzeichenfolgenknoten
immer noch läuft und falsch
läuft, weil das nur der
Standardwert für Variablen ist. Aber wenn wir jetzt gehen, können Sie sehen, dass ich jetzt einen Fehler
erhalte. Und im Grunde sagt
uns
das nur , dass unsere Kosten gescheitert sind. Wir versuchen immer noch, auf
Informationen von dort zuzugreifen ,
obwohl dies fehlgeschlagen ist. Wir wissen also, dass wir hier
auf unsere bp
Beispielvariable zugreifen, aber die Kosten sind gescheitert. Das ist also
etwas, das Sie bei der Arbeit
mit Kostennotizen
beachten sollten. Ich werde das einfach wieder in
unseren ThirdPersonCharacter
ändern , damit
wir noch ein paar Dinge tun können. Also die Kosten für die dritte Person, und wir verbinden es
so und wir werden es zusammenstellen. Jetzt möchten wir vielleicht einen
Verweis auf den Akt speichern, sich überschneidet, um
ihn später mit Code zu verwenden. Es gibt also ein paar Möglichkeiten
, dies zu tun. Wir könnten uns
von unserem anderen Akteur hier zurückziehen und eine Variable fördern. Und das wird
uns eine neue Variable schaffen. Und ich lasse es einfach
anderen Schauspieler nennen und es ist auf
einen Act zum Tippen eingestellt , weil das die Art von
Pin ist, die das ist. Wir könnten das hier einstellen. Und später
hatten wir vielleicht einen anderen Code
, den wir ausgeführt haben. Später könnten wir dann auf
unseren ThirdPersonCharacter zugreifen , indem wir einfach unsere andere
Akteurvariable abrufen Kostenrechnung
wieder
auf die dritte Person
ziehen, um den
ThirdPerson-Charakter zu kosten. Und wieder könnten wir auf
diese Variablen und Funktionen zugreifen und Dinge, die wir brauchen. Wir könnten aber auch einfach
den Hinweis auf unsere dritte
Person anstelle des Schauspielers speichern . Und der Grund
dafür ist, dass wir nicht wirklich jedes
Mal, wenn wir
Informationen davon benötigen, auf
unsere Blaupause eingehen wollen jedes
Mal, wenn wir
Informationen davon benötigen, auf
unsere Blaupause . Es ist ein- oder zweimal in Ordnung, aber sie können anfangen, sich zu addieren
und die Leistung zu beeinträchtigen. Was wir stattdessen
tun könnten, ist,
dass wir hier unsere andere
Akteurvariable loswerden könnten. Weil ich will, dass
mein Code ihn ausführt,
wenn es sowieso ein
Third-Person-Charakter ist. Es gibt also keinen wirklichen Grund, die eigentliche Referenz zu
speichern. Wir können einfach die
Zeichenreferenz speichern. Um das zu tun, können wir
unsere vorherige Variable löschen. Ich ziehe mich einfach aus
meinem ThirdPersonCharacter heraus, fördert variable. Und wir lassen es
ThirdPersonCharacter heißen und sehen, dass es auch auf
den
BP-Zeichenvariablentyp für Dritte gesetzt ist. Also speichern wir
das einfach und kompilieren. Jetzt können wir
mit dieser Variablen auf alle Variablen und Funktionen zugreifen . Jetzt müssen wir keine
weitere Zeit mehr kosten , um auf
diese Informationen zuzugreifen. So könnte ich mich in die Länge ziehen
und zum Beispiel
meinen aktuellen Gesundheitszustand abrufen , oder ich könnte auf diese
Beispielfunktion oder dieses Ereignis zugreifen. Bisher haben wir nur den ThirdPersonCharacter
Blueprint berechnet
, weil das unser Charakter ist. Aber aufgrund unseres
Charakterentwurfs gibt es auch ein untergeordnetes Element
der Charaktertypen, sodass die übergeordnete Klasse Charakter
hat. Wir könnten auch
den Charakter kosten. Wenn ich diese
Notizen hier also vorerst lösche, ziehen
wir uns von
unserem Gesamtdarsteller zurück und kosten den Charakter. Wird eine Kostenzeichennotiz verwenden. Und ich
füge
hier einfach eine weitere Druckzeichenfolge zum oberen Stift hinzu. Und das ist der Fall, wenn unsere
Kosten erfolgreich sind, also bin ich fertig. Also werde ich Bildschirm drucken dm wird
laufen, wenn unsere Kosten erfolgreich sind, und scheitern, wird laufen,
wenn unsere Autos ausfallen, und wenn wir über unsere Box fahren hat
jetzt die Welt Charakter. Du kannst sehen, dass Don läuft weil unser Charakter oder unser ThirdPersonCharacter auch ein Charakter
ist und seine Wände und unser
Charakter ebenfalls wichtig sind. Wir könnten also wieder zu unserem
Auslöser zurückkehren und
dies durch Kosten für **** ersetzen . Und genau wie zuvor
verbinde ich den erfolgreichen bis zu W1 und den ausgefallenen bis
zum File Print String. Und du wirst sehen, wenn wir die Box wieder
überfahren, dass sie immer noch erfolgreich
ist, weil unser Charakter ein Kind der **** ist. Wenn wir jetzt zu unserem
Auslöser zurückkehren und versuchen,
beispielsweise auf unsere Gesundheitsvariable
von den **** Kosten hier zuzugreifen . Also wenn ich rausziehe und nicht bekommen habe. Aktuelle Gesundheit, Sie können sehen, dass wir nicht
auf diese Variable zugreifen können ,
da diese Variable in der ****-Klasse nicht
existiert. Es existiert nur in unserem
Third-Person-Charakter. Wir können also auf nichts davon zugreifen, keine dieser Funktionen
oder Ereignisse oder Variablen, die wir dort über **** erstellt
haben. Und das gilt auch für
unsere Charakterkosten. Wenn ich also den Charakter erneut herausziehe und
kostete , können wir nur
auf Variablen,
Funktionen und Ereignisse zugreifen. Sie existieren in der
Charakterklasse, nicht in allem, was in
unserem ThirdPersonCharacter existiert. Und das ist nützlich,
weil du vielleicht
fünf verschiedene Charaktere
in deinem Spiel hattest und alle ihre eigenen
individuellen Blaupausen hatten. Sie wollten, dass Ihr
Auslöser nur überprüft,
ob der Charakter mich überlappt, anstatt
für
jeden einzelnen möglichen
Zeichenentwurf, der sich überlappt, Kosten verursachen zu müssen , können
Sie einfach einen Kostenknoten erstellen, sagen wir, ist es ein Charakter oder überschneidet uns
die Blaupause? Erbt es
von einem Charakter? Wenn ja, dann großartig, wir können es erfolgreich bestehen. Wir können variable setzen, und wenn wir später müssen, können
wir sogar diese Ausgabe verwenden. Wir könnten es auf eine
Zeichenvariable setzen. Und dann, später in unserem
Code, könnten wir, wenn
wir müssten , zu
einem spezifischeren Blueprint wechseln,
damit wir bis
zum ThirdPersonCharacter verursachen und
auf alle seine Informationen
zugreifen können hat vorher gemacht. Wir könnten also aktuell werden und das
mit unserer Druckzeichenfolge verbinden. Wenn wir jetzt eine Box überlappten, wird überprüft, ob das
Objekt ein Zeichen ist? Wenn ja, setzen wir
das als Variable. Dann überprüfen wir das
Zeichen, das wir überlappt haben. Ist es ein ThirdPersonCharacter? Und wenn es großartig ist,
drucken wir die Zeichenfolge mit ihrem
aktuellen Zustand. Wenn wir also die Box überlappen, würden
Sie erwarten, dass ihr
aktueller Gesundheitszustand ausgedruckt wird. Casting ermöglicht es uns also, Kinder zu
kosten oder zu haben .
Blueprints kosten für
ihren Elternentwurf und die Kosten werden weiterhin erfolgreich sein. Also kann ich Ihnen
ein Beispiel dafür geben. Wir könnten mit der rechten Maustaste auf unseren
ThirdPersonCharacter klicken und Child Blueprint Class erstellen Ich nenne
diese dritte Person einfach, behalte sie einfach so. Ich werde die
Show Blueprint Class öffnen. Ich wähle das
Charakternetz aus und
ändere es einfach, um zu sagen, das Geld einfach hier. So können wir den
Unterschied zwischen
den beiden verschiedenen
Zeichen erkennen oder kompilieren. Und wir können auch den
aktuellen Gesundheitswert ändern. Wenn ich also nach aktuell suche, ändere ich den aktuellen
Gesundheitswert auf 25. Und wir gehen hier in
unser Level und ich gehe zu den Fenstern. Und wir wollen die Schauplätze der Welt. Auf diese
Weise kann ich nur ändern , welchen Charakter wir im Spiel
verwenden. Also werde
ich es einfach von
ThirdPersonCharacter zu
ThirdPersonCharacter child ändern . Wenn wir jetzt auf „Spielen“
klicken, können Sie sehen, dass wir jetzt
den untergeordneten Charakter anstelle
des ursprünglichen Charakters verwenden . Und wenn ich diese Box überfahre, können
Sie sehen, dass die Gesundheit immer noch gedruckt
wird obwohl wir ThirdPersonCharacter nicht verwenden
. Und das liegt daran, dass unser
ThirdPersonCharacter child ein Kind des
ThirdPersonCharacter
ist. In unserem Auslöser, wenn es
auf unsere Kosten kommt ThirdPersonCharacter, wird
es erfolgreich sein, weil unser ThirdPersonCharacter
Kind immer noch ein ThirdPersonCharacter ist nur ein Kind davon
Third-Person-Charakter. Alle Kosten
werden also weiterhin erfolgreich sein. Und wenn wir wollten, könnten
wir sogar
benutzerdefinierten Code und Variablen
zu unserem Child Blueprint hinzufügen . Dann wollten wir auf diese zugreifen. Wir müssten dann casten. Oder wir könnten von
unserem anderen Akteur hier kosten, wir könnten
den Child-Blueprint kosten um auf diese Variablen zuzugreifen. Wenn ich zum Beispiel hier zu
meinem Third-Person-Kind gehe, füge
ich eine neue Variable hinzu, keine
Variable, kein Makro. Und wir setzen das auf, setzen es auf einen Float und
wir nennen das Schaden. Wenn wir jetzt kompilieren und zu unserem Auslöser
zurückkehren, wenn ich
diesen Code vorerst nur trenne, wenn ich mich von
meinem anderen Schauspieler ziehe und Cast
to ThirdPersonCharacter mache. Wir haben unsere ursprüngliche
ThirdPersonCharacter-Notiz hier. Wenn ich mich hinausziehe
und versuche, diese Schadenssammlung zu erreichen, können
Sie sehen, dass ich nicht darauf zugreifen
kann
, weil diese Variable nicht
im ThirdPersonCharacter existiert, sondern nur im
ThirdPersonCharacter Child. Wenn wir also
auf diese Variable zugreifen müssten, müssten
wir für unser Kind
ThirdPersonCharacter Kosten verursachen. Es wird also
ThirdPersonCharacter Kind kosten. Und dadurch können wir ein
beschädigtes Tal bekommen. Wir können auch auf diesen
aktuellen Gesundheitswert zugreifen, da unser Kind diesen Wert
von der
Third-Person-Charakter-Blaupause geerbt hat. Nun ein weiteres Merkmal der Kosten. Beachten Sie, dass wir
sie in rein ändern können. Wenn Sie sich also an
unsere Funktionsstunde erinnern, haben
wir unreine und
reine Funktionen. Und im Wesentlichen, wenn eine
reine Funktion ausgeführt wird, also das, tut mir leid, eine
unreine Funktion. Das ist eine unreine Funktion. Die Berechnung
wird nur durchgeführt, wenn sie ausgeführt wird, und dann speichert sie diese
Art von Referenz
im Stift, sodass wir mehrmals
darauf zugreifen können, und dieser Knoten wird nur
einmal ausgeführt , wenn wir sie
tatsächlich ausführen es Wenn ich jetzt diesen Knoten
von hier trenne und mit der rechten Maustaste klicke, konvertiere ich auf reine Kosten. Und Sie sehen, dass es zu
einem Knoten wird, der
keine Ausführungs-Pins, Plug-In oder anderen Akteuren hat. Jetzt, wann immer Informationen über diese Kosten gelangt sind, werden
diese Kosten erneut ausgeführt. Wenn ich eine Druckzeichenfolge machen würde, drucken
wir die
aktuelle Gesundheit, und wir drucken
den aktuellen Schaden. Dieser Kostenknoten
würde tatsächlich
zweimal für jeden Ausgangspin laufen , der mit ihm verbunden ist. Wenn wir dies jedoch wieder in
unreine Kosten
umwandeln , so. Jetzt läuft unsere Kostennotiz
nur noch einmal. Es wird einmal ausgeführt, wenn wir es über
die Ausführungs-Pins
ausführen. Und dann speichert es
diesen Verweis auf unser ThirdPersonCharacter
Kind in diesem Stift. Und obwohl wir
eine Druckzeichenfolge zweimal verwenden, wird
dieser Kostenknoten
nur einmal ausgeführt. Das ist also der Unterschied
zwischen reinen und unreinen Kosten. In den meisten Fällen verwenden
Sie NPR nur weil sie ein
bisschen optimaler sind. Und Sie
möchten nicht wirklich,
dass für jeden einzelnen Stift, an den Sie angeschlossen sind, Kosten für jeden einzelnen Stift entstehen. Vergessen Sie nicht, dass
Sie
Ihren Ausgangspin immer einfach auf eine Variable hochstufen können. Das bedeutet, dass es nur einmal ausgeführt
wird. Und dann können Sie in Zukunft
auf diese
Blueprints-Variablen zugreifen ,
ohne Kosten verursachen zu müssen. Das war's also für
unsere Casting-Lektion. Wir werden in zukünftigen Lektionen viel häufiger Ursachen verwenden,
nur weil es einen in zukünftigen Lektionen viel häufiger ziemlich coolen Teil
der Codierung und der Engine
gibt . In unserer nächsten Lektion werden
wir uns die Event-Dispatcher ansehen.
18. Grundlagen (Event: Hallo zusammen, in dieser
Lektion werden wir uns die
Event-Dispatcher ansehen. Wenn Sie also unsere letzte Lektion
mitverfolgt haben, hatte
ich einige
zusätzliche Blaupausen und ich habe einige
Dinge in den Einstellungen geändert. Also habe ich
für diese Lektion eine neue
Third-Person-Vorlage
erstellt. Wir haben also einen
Neuanfang für diese Lektion. Event
Dispatcher ermöglicht es also zunächst, Code auf
Blueprints zu kühlen , ohne den spezifischen Blueprint
kennen zu müssen den spezifischen Blueprint
kennen wir
das Ereignis aufrufen. Ich werde
hier ein Beispiel geben, damit wir das ausprobieren können. Also beginne ich mit der Erstellung
einer Blueprint-Klasse. Ich setze das auf einen Schauspieler und nenne
das Auslöser. Und wir werden auch
eine weitere Blueprint-Klasse erstellen, und ich nenne das einfach. Also öffnen wir unseren Auslöser. Und wie wir es zuvor getan haben, füge
ich einfach eine Collision Box-Komponente hinzu und wir werden kompilieren. Dann schiebe ich
meine Kollisionskiste
ein wenig nach oben , damit wir sie und das Spiel
überfahren können. Und ich werde nach
versteckt suchen und das Häkchen
im Spiel aufheben. Dann gehen wir
zum Event Graph. Und ich
lösche einfach diese Knoten, klicke rechten Maustaste und suche nach
Ereignissen, die sich überschneiden. Wie zuvor. Dieses Ereignis wird ausgeführt, wenn sich
etwas überschneidet. Also werde ich auslösen und
es gibt uns Zugang zu dem Schauspieler, der uns überlappt. Jetzt gehen wir zu unserem
Würfel, den wir gerade erstellt haben. Öffnen Sie also den Warteschlangen-Blueprint. Und hier füge ich
einfach eine neue Komponente hinzu und suche nur
nach Cube. Wir fügen einen Würfel hinzu. Ich werde es nur ein bisschen so nach
oben bewegen. Und wir gehen zu unserem
Event-Graphen und kompilieren einfach. Als Nächstes
erstellen wir eine neue Variable. Ich klicke einfach auf
die Schaltfläche „Neue Variable“. Ich nenne das Auslöser. Und wir setzen
den Variablentyp auf den Trigger-Blueprint,
den
wir gerade erstellt haben. Für mich ist das also die
Auslöseoption hier. Ich wähle das aus
und kompiliere sie. Wir
wählen unsere
Triggervariable aus und
übernehmen eine editierbare Instanz. Und wenn Sie sich erinnern, können
wir
diesen Wert ändern , wenn wir
unseren Würfel im Level auswählen. Also kompilieren wir erneut, gehen hier zu unserer Third-Person-Map. Ich
füge nur drei Würfel hinzu, also ziehe ich diese so ein. Und ich füge auch
einen Auslöser hinzu. Also lege ich das hier hin. Jetzt wähle ich jeden
meiner Cubes aus und du kannst sehen, dass wir hier
unsere Trigger-Option haben. Jetzt. liegt daran, dass wir bei der
Auswahl unseres Triggers editierbare Instanz angekreuzt
haben. Wenn Ihre also nicht so ist,
müssen Sie sicherstellen,
dass dies angekreuzt ist, und
dann kompilieren Sie. Jetzt können wir also einen Auslöser auswählen. Ich
klicke einfach auf das Drop-down und wähle hier unseren Auslöser aus. Das ist also der
Trigger-Blueprint hier. Ich mache das für jeden
unserer Würfel-Blaupausen. Und alles was wir tun ist
nur diese
Triggervariable in unseren Cubes auf
diesen speziellen Auslöser zu setzen . Jetzt kehren wir
zu unserem Auslöser zurück und erstellen
tatsächlich einen neuen
Event-Dispatcher. Wenn wir also hier runter gehen und
sie vielleicht ein Blueprints-Panel sehen, können
Sie sehen, dass wir
Event-Dispatcher haben und
wir können entweder hier auf
die
Schaltfläche Neuer Event Dispatcher klicken oder wir können Event hinzufügen und
auswählen Dispatcher. Also klicke ich einfach darauf. Ich nenne diesen
Beispiel-Dispatcher so. Und wir werden kompilieren. Jetzt rufen wir
unseren Event Dispatcher auf wenn sich ein Charakter
überlappt oder ausgelöst wird. Also werde ich mich von anderen Schauspielern zurückziehen. Ich werde nur den Charakter
kosten. diese Weise können wir
überprüfen, ob es sich um das
Eingabeobjekt oder Zeichen handelt. Wenn ja, können wir
den Rest unseres Codes ausführen. Und ich werde mich hier von
meinem Event Dispatcher zurückziehen. Sie sehen, dass wir
verschiedene Optionen haben. Ich werde
nachschauen und auf cool klicken. Und wenn wir darauf klicken, können
Sie sehen, dass wir
diesen Knoten bekommen und dies
unseren Event Dispatcher verursacht. Jetzt kompiliere ich und
gehe zu unserem Würfel hier drin. Ich werde diese beiden einfach
löschen, es
notieren und ich möchte nur
den beginnenden Play-Knoten behalten ,
weil wir ihn verwenden werden. Ich hole mir hier die
Trigger-Variable. Ich werde mich in die Länge ziehen. Ich mache ein Zeichen. Wir scrollen nach unten
und wollen
den Sinus-Beispiel-Dispatcher finden . Ich klicke darauf. Sie können sehen, dass dies
ein paar Knoten für uns schafft. Es erstellt also zuerst einen Knoten
und weist dann einen Knoten zu. Und es schafft
uns tatsächlich ein neues individuelles Ereignis. Und ich verbinde das mit
dem Anfang des Spiels. Was dies
im Wesentlichen bewirkt, ist
Begin Play, wir weisen zu, nun, wir verwenden hier unsere
Trigger-Referenz, um
unser Ereignis so zuzuweisen , dass es ausgeführt wird ,
wenn der
Beispiel-Dispatch aufgerufen wird. Und wenn Sie sich
in unserem Trigger erinnern, wenn sich ein Charakter
überlappt oder ausgelöst wird, nennen
wir das Event Dispatcher. Und was das
tun wird, sind jetzt unsere Cubes, alle drei führen
dieses Ereignis aus, wenn das Ereignis,
der Beispiel-Dispatcher
,
innerhalb des von uns ausgewählten Triggers aufgerufen wird . Also kann ich hier etwas Code ausführen. Nehmen wir an, wir könnten den
Standort festlegen, den Ort. Wir möchten, dass der
Sac-Standort Standort L
zuzüglich eines Wertes zugeordnet wird. Also werden wir ein Add machen. Jetzt würde ich sagen eine 100 in der Höhe und verbinde
mich mit dem Nachrichtenstandort. Jetzt geben wir
unseren Auslöser ein, weil wir dieses Ereignis gebunden haben. Zwei Beispiele, Dispatcher
oder Trigger, werden ein cooles und lustiges Beispiel mit dem Dispatcher und unsere Würfel bewegen sich nach
oben, also drücken wir auf Play. Wenn ich jetzt meinen Auslöser überfahre, können
Sie sehen, dass sich alle drei Würfel nach oben bewegt haben. Das ist jetzt hilfreich, da
unser Auslöser nicht jedem
dieser Cubes sagen
muss, dass er etwas tun soll. Unser Auslöser
ruft lediglich den Beispiel-Dispatcher auf. Und dann sind unsere Cubes tatsächlich so
eingerichtet, dass
sie etwas tun , wenn dieser spezifische Trigger den Beispiel-Dispatcher
ausführt. Das sind also die Grundlagen der Funktionsweise von
Event-Dispatchern. Wenn Sie sich erinnern, als wir hier in unserem Auslöser
waren und ich meinen
Beispiel-Dispatcher
hineingezogen habe, haben
wir ein paar
verschiedene Optionen. Also haben wir den coolen Knoten ausprobiert. Dadurch wird der
Event Dispatcher ausgeführt und
alle Ereignisse ausgeführt , die dem Beispiel-Dispatcher
zugewiesen sind. Wir haben auch Bindungen.
Wenn wir das also in C erstellen, ist
dies tatsächlich derselbe
Knoten, den wir in unserem Würfel hatten. Es hat
die Veranstaltung einfach nicht für uns geschaffen. Vielleicht hatten wir schon eine Kundenveranstaltung, die wir
einfach nur einbinden möchten. Wir können einen Bind-Knoten verwenden. Wenn ich es nochmal reinziehe, kannst
du sehen, dass wir unbind haben. Auf diese Weise können wir
eine Verbindung zu einem Ereignis herstellen und ihm tatsächlich
mitteilen, dass dieses Ereignis für unseren
Beispiel-Dispatcher nicht mehr ausgeführt werden soll . Also zum Beispiel, wenn wir
erneut kompilieren und ich auf Play klicke, wenn ich auf dieses Cubing stoße
und sehe, wie sie sich nach oben bewegen. Und wenn ich sie noch einmal treffe, kannst
du sehen, dass es die Höhe
erhöht. Vielleicht wollte ich,
dass das nur einmal läuft. Und danach, wenn der Spieler auf
die Puppe trifft, wird er nicht mehr aufsteigen. Und das kann ich machen. So
kann ich zu meinem Würfel gehen und aus meinem
Auslöser ziehen und die Bindung lösen. Wir wollen unbind alle
Ereignisse vom Event Dispatcher finden, oder wir können unbind-Ereignisse verwenden. Also werden wir die Unbindung von ihnen verwenden. Und wir können sagen, dass dieses Ereignis nicht von unserem
Beispiel-Dispatcher gebunden
sein soll. Jetzt
läuft das nur einmal und dann läuft es
nicht mehr. Wenn ich jetzt darauf stoße und
zurückgehe und zurücklaufe, können
Sie sehen, dass unser Ereignis
jetzt
nicht mehr an unseren
Beispiel-Dispatcher gebunden ist . Obwohl es
noch läuft, läuft dieses Ereignis nicht mehr. Wenn wir jetzt zu unserem Auslöser zurückkehren, können
wir uns wieder hinausziehen. Und es gibt auch eine Option zum
Auflösen aller. Das
macht so ziemlich dasselbe. Der einzige Unterschied besteht darin, dass
wir kein Ereignis angeben. Wenn ich also rausziehe und
alles losbinde, können
wir hier alle von unserem
Beispiel-Dispatcher lösen. Sie können sehen, dass
es keine Ereigniseingabe gibt. Dadurch werden einfach
alle Ereignisse in
allen Blueprints gelöst, die
an diesen Beispiel-Dispatcher gebunden sind. Event-Dispatcher
können jetzt auch
variable Eingaben haben , die Funktionen und Ereignissen ähneln. Wenn wir also hier zu unserem
Trigger-Blueprint zurückkehren und unseren
Beispiel-Dispatcher
im Bereich Details auswählen . Ich werde diese versteckte Suche einfach los
. Sie werden sehen, dass
wir Eingaben haben. Und wenn wir hier auf die Schaltfläche Neuer
Parameter klicken, können
wir neue Variablen hinzufügen. Wir könnten also Floats,
Booleans und jeden beliebigen
Variablentyp hinzufügen . Ich füge einfach
einen Float hinzu und setze diesen so, dass er aufgerufen wird, sagen wir float. Wir werden kompilieren. Sie können sehen, dass es hier einen Fehler gibt
und der
Variablenname nicht aktualisiert wurde. Manchmal kann dies bei
Event-Dispatchern passieren .
Mach dir nicht zu viele Sorgen. Sie können einfach mit
der rechten Maustaste auf den Knoten klicken und wir werden die Aktualisierungsknoten
durchführen. Und Sie sehen,
dass
der Name jetzt geändert wurde , wie er
sein sollte, und wir können einfach kompilieren. Und jetzt haben wir keine Fehler mehr. Nun, das hat
diese variable Eingabe
zu unserem coolen Dispatcher hinzugefügt . Wenn wir
jetzt zu unserem Cube gehen und kompilieren, können
Sie hier sehen, dass
diese float-Variable
tatsächlich automatisch
zu unserem Event hinzugefügt wurde . Was auch immer wir in
unserem Event Dispatcher
festlegen , wird hier in unserer Veranstaltung
ausgegeben. Also, wenn ich zum Beispiel
wollte, dass es fünf ist, und ich zu unserem Würfel ging, werde
ich einfach tun,
ich hatte eine Druckzeichenfolge. Also füge ich hier einfach eine
Druckzeichenfolge hinzu. Und wir verbinden die
Druckzeichenfolge mit dem float-Wert, wodurch diese
ein wenig verschoben werden. Wir haben also ein bisschen
mehr Platz wie diesen. Wenn dieses Ereignis nun ausgeführt wird, wird der
Wert ausgegeben, den unser Float-Wert hat,
und der wird von unserem
Event Dispatcher festgelegt. Wenn ich es also play kompiliere
und auf meinen Würfel stoße, können
Sie sehen, dass alle drei dieser Würfel den Code
ausführen,
sodass er 53 Mal Strings ausgibt . Das Coole an
Event-Dispatchern ist, dass
wir viele
andere Blaupausen haben könnten , die auch
diesen Event Dispatcher verwenden , den wir gerade eingerichtet haben. Wenn ein
Charakter einen Raum betritt, hat
man vielleicht einen Auslöser,
durch den er geht. Und vielleicht wolltest du, dass sich dieser
Raum in gewisser Weise ändert. Du wolltest, dass einige
Objekte verschwinden. Du wolltest, dass sich einige Objekte bewegen, vielleicht ein Geräusch zum Abspielen. Du könntest all diese
Dinge mit
nur einem Event-Dispatcher passieren lassen, der
ausgeführt wird, wenn dein Charakter eine Box
überlappt. Kehren wir nun zu
unserem Trigger-Blueprint zurück:
Wenn Sie sich erinnern, als wir hier
unseren Event Dispatcher auswählen, haben
wir auch eine Option
namens Signatur kopieren von. Und wenn ich darauf klicke, siehst du, dass wir ein paar
verschiedene Optionen haben. Im Wesentlichen können Sie auf diese Weise
nur
die Eingabevariablen eines
anderen Event-Dispatchers kopieren . Es gibt also eine große Liste von
ihnen hier, weil die Engine tatsächlich mit einer Reihe
von Event-Dispatchern ausgestattet ist . Das ist also nur nützlich,
wenn Sie möchten, anstatt manuell variable Eingaben
hinzufügen zu müssen. Angenommen, Sie hatten
bereits einen Event-Dispatcher mit denselben Eingaben
, die Sie verwenden möchten. Sie können Signatur kopieren
von verwenden und
diese einfach sofort hinzufügen. Um Ihnen ein
Beispiel zu geben, wie einige
der Event-Dispatcher
tatsächlich in die Engine integriert sind. Wir können mit der rechten Maustaste klicken
und nach bind suchen. Und wenn wir es durchblättern, können
Sie sehen, dass wir
einige eingebaute Bind-Ereignisse haben. Wir haben zum Beispiel
einige für Mauseingaben, einige für Schäden und wir haben auch
einige für Kollisionen. Sie können tatsächlich
sehen, dass es
ein Bind-Event gibt , bei dem sich ein
Akteur zu überlappen beginnt. Das ist das Gleiche wie bei
unserer Veranstaltung hier. Also könnten wir
das tatsächlich anders einrichten. Also wenn ich auch auf Bind-Ereignis klicke. Bei Akten oder Beginn der Überlappung
wird ein Spielknoten angezeigt. Verbinde das bis hier. Jetzt können wir
dieses Ereignis tatsächlich löschen und
unser eigenes benutzerdefiniertes Ereignis erstellen , das immer dann
ausgeführt wird , wenn sich ein Akteur überschneidet Ich werde es mit
diesem Event Dispatcher auslösen. Also kann ich mit der rechten Maustaste klicken
oder tatsächlich aus dem Event
hier
herausziehen und nach benutzerdefiniert suchen. Sie werden sehen, dass es gerade ein Ereignis für uns ist
und tatsächlich diese sich überschneidenden Schauspieler
und anderen Schauspieler hier
hinzugefügt wurden. Also kann ich das nennen, sagen wir. Und jetzt können wir das verbinden. Wir können den anderen Schauspieler-Pin nehmen diesen in unseren
Charaktercheck
stecken. Was
dieser Code jetzt im Wesentlichen tut, ist also auf
Begin Play,
wir binden ein Ereignis, wir binden ein Ereignis, das hier unser Überlappungsereignis ist, an den Zeitpunkt, an den ein Akteur beginnt, unseren Auslöser zu
überlappen. Und dann, wenn sich ein
Schauspieler überschneidet, werde
ich das
Ereignis auslösen oder überlappen. Es wird uns den anderen Schauspieler geben. Wir können überprüfen, ob der andere
Schauspieler, der sich überschneidet, einen Charakter auslöse. Wenn ja, dann nennen wir es
unseren Beispielversand. Wir können testen, ob das funktioniert, also kompilieren
und speichern wir einfach und klicken auf Play. Und jetzt, wenn wir unseren Auslöser
durchgehen, können
Sie sehen, dass dieser Code
tatsächlich noch wie zuvor
ausgeführt wird . Stattdessen verwenden wir jetzt einen Event Dispatcher
, der tatsächlich in die Engine
integriert ist. Bisher habe ich den Event Dispatcher nur
verwendet , um
Events auf einem anderen Blueprint zu kühlen. Ein Cube hier führt zum Beispiel
dieses Ereignis aus, wenn der
Beispiel-Dispatcher rum ist, aber wir können
unseren Event Dispatcher auch
innerhalb desselben Blueprints verwenden . Vielleicht wollte ich also, dass ein Ereignis ausgeführt wird, wenn ich meinen
Event Dispatcher aufrufe, tatsächlich in meinem Auslöser, das könnte
ich auch tun. Damit ich
meinen Event Dispatcher rausziehen konnte. Ich könnte tun, wenn wir hier
auf Assign klicken, es macht dasselbe
wie das Bind-Ereignis, aber es erstellt auch
unsere benutzerdefinierten Ereignisse. Wenn ich also auf Zuweisen klicke,
siehst du, dass
unser Bind-Ereignis und
der Kundenvent erstellt wurden . Wenn ich
hinausziehe und binde, können
Sie sehen, dass es
nur die Bindung erzeugt. Das ist also nur einen Klick entfernt und erstellt
im Grunde die beiden Knoten zusammen. Also können wir das machen. Ich kann das hier verbinden. Und ich werde dieses Ereignis
hier oben in c verschieben , das
uns eine Float-Ausgabe gibt. Denn wenn Sie sich erinnern, haben
wir einen Float-Eingang unserem Beispiel-Dispatcher. Cool Und wir könnten
Code in unserem Trigger ausführen, und das wird immer dann ausgeführt, wenn unser
Beispiel-Dispatcher aufgerufen wird. Also könnte ich hier einen
Druckbildschirm hinzufügen, sag Hallo. Wenn wir jetzt auf unseren Würfel stoßen, werden
Sie sehen, dass er
die fünf Werte für R in Würfel druckt. Und dann läuft es nur einmal. Hallo, denn wir
haben nur einen Trigger und dieser Code wird
in unserem Trigger ausgeführt. Bei
diesen Ereignissen ist Dispatches zu
beachten , wenn ich bereits ein benutzerdefiniertes
Ereignis habe,
sagen wir, ich erstelle ein
benutzerdefiniertes Ereignis von ihnen, und vielleicht hat es
verschiedene Eingaben. Also
füge ich einfach einen Float-Eingang hinzu. Wenn ich versucht habe, dies mit dem Event Dispatcher
für einen Schauspieler
zu verbinden , fange ich an, mich zu überlappen und sehe, dass ich es nicht wirklich anschließen
kann. Wenn ich die Verbindung trenne, können
Sie sehen, dass ich es
immer noch nicht anschließen kann. Und das liegt daran, dass dieses
benutzerdefinierte Ereignis weder die Eingaben
noch die Ausgaben hat. Dieser Binds-Knoten erfordert. Daher muss jedes Kundenereignis, an das wir uns anschließen,
diese beiden Variablen haben. Also kann ich das nicht damit verbinden. Ich kann es so mit unserem
Beispiel-Dispatcher verbinden, weil es einen
Float-Wert hat und das ist, was
erforderlich ist , zum
Beispiel Dispatcher. Normalerweise ist der einfachste Weg wenn Sie nur ein Bind-Ereignis haben, sagen wir so, einfach herauszuziehen und
nach Kunden zu
suchen. Und es wird ein
benutzerdefiniertes Ereignis für Sie erstellen. Und es fügt alle
Variablen hinzu, die Sie benötigen um eine Verbindung zu diesem Dispatcher
herstellen zu können. Wie Sie sich
wahrscheinlich vorstellen können, würden Sie, wenn
Sie viele davon hätten, diese langen Kabel überall
hin laufen und
es könnte ein bisschen unordentlich werden. Was Sie tun können,
anstatt den Draht zum Event hier verlegen zu müssen, kann
sie herausziehen und Sie können
nach Event erstellen suchen. Und Sie erhalten
hier diese kleine Notiz , mit der wir eine andere Veranstaltung
auswählen können. Wir können also darauf klicken und Sie können sehen, dass es mir nur die Option für den
Kundenereignisunterstrich 0
und das
Beispiel-Dispatcher-Unterstreichungsereignis
gibt Kundenereignisunterstrich 0 . Und es gibt mir nur diese
Optionen, weil sie
die einzigen Ereignisse sind , die unseren Float-Wert
haben. Und ich kann sagen,
dass select unseren
Beispiel-Dispatcher so auswählt. Jetzt können Sie sehen
, dass unser roter Draht nicht mehr mit
diesem Ereignis verbunden ist. Aber ich werde hallo string watch, sie laufen immer noch, weil diese Create Event Notiz hier im Grunde den Event Dispatcher mit
dem Event hier oben
verbindet , ohne
tatsächlich eine Leitung anzuschließen. Also wenn wir es spielen kompilieren, stoße
ich hier auf
unseren Auslöser. Sie können sehen, dass unsere
Hello-Druckzeichenfolge immer noch
läuft, obwohl sie nicht direkt mit diesem Bind-Knoten verbunden
ist. Jetzt, da wir einen
Event-Knoten erstellen, können wir Funktionen auch mit
Event-Dispatchern
verwenden. Wenn wir also hier auf die
Drop-down-Option klicken, können
Sie sehen, dass wir sie auf none setzen
können. Wir können auch eine
passende Funktion oder ein passendes Ereignis erstellen. Wenn Sie auf ein passendes Ereignis klicken, wird hier unten nur ein neues
benutzerdefiniertes Ereignis erstellt. Und es fügt die
entsprechenden Variablenausgaben , die der Event Dispatcher benötigt, und
setzt sie dann auch einfach automatisch auf dieses neue Ereignis. Also jetzt, wenn die Ereignisse Batchläufe an das Ereignis
gewöhnt sind, werden sie ausgeführt. Wir können aber auch
Funktionen erstellen, die es abkühlen. Stattdessen können wir auf Übereinstimmende Funktion erstellen
klicken und das
erstellt uns eine neue Funktion. Dies ist nur eine normale Funktion,
wie wir sie zuvor verwendet haben, nur dass diese
jetzt ausgeführt wird wenn unser
Beispiel-Dispatcher ausgeführt wird. Sie können also sehen, dass es automatisch
einen Float für uns hinzugefügt hat. Dies läuft wie eine
normale Funktion. Wir könnten also etwas Code
hinzufügen, wenn wir
wollten . Ich hatte einen Druckbildschirm. Um dies in Betrieb zu nehmen, wissen
wir, dass es diese
Druckzeichenfolge ist, die ausgeführt wird. Und jetzt, wenn wir auf „Spielen“ klicken, überfahre ich hier meinen Abzug. Sie können sehen, dass sie
beim Drucken
dieser fünf Werte in Bewegung bleiben . Und es ist auch eine
Druckfunktion
, da diese Funktion in unserem
Trigger jetzt
ausgeführt wird , weil sie an den Beispiel-Dispatcher
gebunden ist. Das war's also für die Lektion unserer
Event-Dispatcher. Es gibt ein großartiges Tool
, mit dem Sie ein Ereignis und einen
Blueprint
aufrufen und
viele andere Blaupausen und
verschiedene Arten bewirken können Ereignis und einen
Blueprint
aufrufen und
viele andere Blaupausen und
verschiedene Arten bewirken viele andere Blaupausen und , ohne jeden Blueprint angeben
zu müssen , den Sie bewirken möchten.
19. Grundlagen (Schnittstellen): Hallo zusammen. In dieser
Lektion werden wir über die
Blueprint Interfaces
sprechen. Blueprint-Schnittstellen ermöglichen es
uns , Funktionen und Ereignisse
auf anderen Blueprints aufzurufen ,
ohne dass wir für diesen Blueprint-Typ Kosten verursachen müssen. Jetzt haben Sie vielleicht bemerkt
, dass ich immer noch den Würfel habe und die Blaupausen
aus meiner vorherigen Lektion auslöse. Ich werde
diese einfach behalten, weil ich sie etwas später für
ein Beispiel
wiederverwenden werde . Um loszulegen, werden
wir also ein neues
Blueprint-Interface
erstellen. Wenn ich hier mit der rechten Maustaste klicke und
zu den Blaupausen
gehe, öffne sie und wir gehen runter
zum Blueprint-Interface. Ich werde einfach meinen BP auf der
Score-Beispielschnittstelle so
nennen . Und wir doppelklicken
darauf, um es zu öffnen. Und ich ziehe meine einfach und füge sie der Registerkarte hier oben hinzu. Wie Sie sehen können,
haben wir eine neue Benutzeroberfläche. Wir haben dieses große Ereignisdiagramm , das wir eigentlich nicht
wirklich verwenden werden. Wir können hier keine
Änderungen vornehmen oder Code hinzufügen .
Dies ist nur eine Vorschau
der Funktionen, die wir hinzufügen. Und Sie können sehen, dass wir
hier
unsere Registerkarte „Funktionen“ haben , auf der wir Funktionen erstellen
und löschen können. Und wenn wir eine
Funktion ausgewählt haben, können
wir Ein- und Ausgänge hinzufügen. Wir beginnen also damit,
die Standardfunktion umzubenennen , die
mit unserer Beispielschnittstelle geliefert wird . Also benenne ich meine einfach
um, um die Gesundheit auf diese Weise zu verringern. Und wir werden zusammenstellen und wir werden gleich wieder hierher
kommen. Aber ich möchte Ihnen zeigen, wie die Funktion „Gesundheit verringern in unserem
Charakter-Blueprint
aussieht. Also gehen wir zum
ThirdPersonCharacter. Ich klicke mit der rechten Maustaste und
suche nach verminderter Gesundheit. Und Sie können sehen, dass
dies der Nachrichtenknoten zum Hochfahren oder Verringern des Zustands führt. Da wir
dies nun in unserer Beispieloberfläche erstellt haben, wird es
in jedem Blueprint angezeigt wenn wir mit der rechten Maustaste klicken
und danach suchen. Wenn ich das also erstelle, sieht
man, dass es dem coolen Knoten sehr ähnlich sieht, den
wir mit den Events verwenden. Mit ein paar Unterschieden. Wir haben dieses Symbol in der
oberen rechten Ecke und wir haben auch
die Zieleingabe, aber es steht nicht „
self“ daneben. Wir müssen tatsächlich ein Ziel
angeben. Und das ist nur
die Blaupause oder der Verweis auf
die Blaupause, die wir
als unsere Abnahme bezeichnen wollen .
Wie funktioniert die Funktion an. Wenn ich diesen Knoten jetzt
ausführen würde, also wenn ich den Plano erhalte und dies verbinde, um
unsere Funktion zu verringern, würde
nichts passieren, weil wir kein Ziel angegeben
haben. Aber wenn wir uns selbst als Ziel hinausziehen und uns selbst als Ziel
tun, würde immer noch
nichts passieren, weil wir
diese Funktion nicht
wirklich in unseren
Third-Person-Charakter implementiert haben . Um das zu tun,
müssen wir zuerst kompilieren, wir gehen zu den Klasseneinstellungen. Und unter Implementierte
Schnittstellen heißt
es
derzeit keine Schnittstellen , aber wir
können eine neue hinzufügen. Also klicken wir auf Hinzufügen und
suchen zum Beispiel. Und wir wählen
dort die
Beispielschnittstelle aus. Und dann werden wir kompilieren. Wenn wir nun zur
Benutzeroberfläche gehen, ist Option a, können
Sie sehen, dass wir eine
geringere Gesundheit haben. Wenn wir jetzt darauf doppelklicken, wird tatsächlich
ein Ereignis zum Verringern der Gesundheit erzeugt. Jetzt, wenn wir rennen, wenn unser Begin Play
läuft und es läuft, wird dieser Cool-Knoten
mit uns selbst als Ziel reduziert. Diese Veranstaltung hier unten wird stattfinden. Ich werde es einfach näher
an unseren anfänglichen Spielknoten heranrücken , sich hier so nach oben bewegt. Wir können das also schnell testen. Ich führe einfach eine
Druckzeichenfolge aus und wir drücken auf Play und sehen,
dass der Druckbildschirm, den wir
gerade hinzugefügt haben, ausgeführt wird. Jetzt können wir unseren Schnittstellenfunktionen auch
Ein- und Ausgänge
hinzufügen . Wenn wir also zur
Beispieloberfläche zurückkehren, wählen Sie unsere Gesundheit verringern aus. Ich füge zuerst eine Eingabe hinzu, also füge ich eine neue Eingabe hinzu. Ich belasse es als Boolean. Und ich sage einfach, das ist, wir nennen es vorerst einfach
einen Test. Sie können sehen, dass die
Vorschau aktualisiert wurde. Es heißt, dass der Test
kompiliert wird und zu
unserem ThirdPersonCharacter zurückkehrt. Und Sie können jetzt sehen, dass
unser cooler Hinweis hier, der Rückrufknoten der
Schnittstellenfunktion zum Verringern des
Zustands, jetzt eine Testeingabe und unser
Ereignis eine Testausgabe hat. Was auch immer unsere Testeingabe ist, das wird die Ausgabe
für unseren Event-Knoten sein. Wenn ich das übernehme und es hier in unsere Saite stecke
,
wenn wir auf Play klicken, werden
Sie sehen, dass Zeichenfolge true, true ausgegeben
wird. Jetzt können wir unserer
Beispiel-Interface-Funktion auch Ausgaben
hinzufügen . Wenn wir also dazu gehen, drücke ich einfach
Escape, um zu
akzeptieren, dass der Plan-Editor Gesundheit verringern
auswählt. Und hier unten können wir eine neue Ausgabe
hinzufügen. Also füge ich eine Ausgabe hinzu. Es gibt gerade einen Bug, bei dem
jetzt alles
ausgegraut ist. Ich muss kompilieren und dann erneut die Funktion verkleinern
, Sie können sehen, dass ich sie jetzt umbenennen
und auf diese Informationen zugreifen
kann . Vielleicht ist das behoben, wenn
Sie diese Lektion befolgen. Aber im Moment
müssen Sie das tun. Vier Ausgänge. Ich werde diese
aktuelle Gesundheit einfach so nennen. Und wir setzen es auf eine Ganzzahl
und wir werden das kompilieren. Das Hinzufügen von Ausgaben zu einer Schnittstellenfunktion
führt tatsächlich zu einigen Änderungen in unserem
Charakter-Blueprint. Wenn wir also
zu unserem Charakter zurückkehren, können
Sie sehen, dass auf unserem
Event-Node jetzt
eine Warnung angezeigt wird
und er sich tatsächlich
in einen Kunden umgewandelt hat auf unserem
Event-Node jetzt
eine Warnung angezeigt wird
und er sich tatsächlich , dann ist er keine
Schnittstelle mehr Ereignisse,
soweit Sie auf Jetzt spielen klicken. Und Sie können sehen, dass
unser Druckstring
nicht mehr läuft ,
weil dieses Ereignis nicht wirklich gekühlt wird. Und wenn wir zu unserer
Gesundheitsversorgung gehen und darauf doppelklicken, können
Sie sehen,
dass
wir tatsächlich zu einer Funktion geführt wurden , die
wie eine Funktion aussieht. Jetzt hat es
unseren Ausgabeknoten nicht hinzugefügt. Wir können das hinzufügen, indem wir einfach mit der
rechten Maustaste klicken und Return ausführen. Wir wollen einen Rückgabeknoten hinzufügen. Und Sie sehen, dass
es uns jetzt
einen Ausgangsausführungsstift mit
unserem Ausgangsstromzustand gibt . variabel. müssen Sie vielleicht nicht tun. Es könnte einfach automatisch den zurückgegebenen Knoten für Sie
hinzufügen, aber manchmal tut es das nicht. Wenn dies nicht der Fall ist,
können Sie es selbst starten. Jetzt wird diese Funktion
tatsächlich auf Begin place ausgeführt da wir immer noch die
Schnittstellenfunktion
zum Verringern der Gesundheit aufrufen . Wenn wir das
jetzt mit unserem Ausgang verbinden, möchte ich vielleicht, dass es
einen aktuellen Gesundheitswert ausgibt. Also werden wir einen
neuen Gesundheitswert schaffen. Gesundheit. Wir ändern
dies in eine Ganzzahl. Ich kompiliere,
setze das auf 100. Nun, da dies eine
Verringerung ist, wird die Funktion, die ich
genannt habe , sie um einen gewissen Betrag
verringern. Wir subtrahieren und
wir machen Set Health. Jetzt. Wir subtrahieren fünf von unserer Gesundheit und geben dann den aktuellen Gesundheitswert aus. Wie Sie sehen können, können
Sie hier einfach
Code wie
eine normale Funktion schreiben . Es verhält sich genauso wie Funktionen
, die wir zuvor verwendet haben. Wenn wir jetzt zu
unserem Ereignisdiagramm gehen, wenn Sie sich an Begin
Play erinnern oder die Gesundheit verringern, wird die
Interface-Funktion gekühlt. Wir haben Tests aktiviert, aber wir machen
nichts damit und verringern die Funktion,
wie Sie sehen können, ist es
nicht angeschlossen. Und dann wollen wir, dass es
einen aktuellen Gesundheitswert zurückgibt. Und ich kann eine
Einschränkung hinzufügen, die hier die Druckzeichenfolge gestartet hat. Jetzt sind verminderte
Gesundheitsfunktionen, die wir früher hatten. Das macht
nichts mehr. Es wurde gerade in
einen normalen Kunden umgewandelt, dann können wir das jetzt
einfach löschen. Und wenn ich ziehen kann
und auf „Spielen“ klicke, kannst
du sehen, dass
unser aktueller Gesundheitszustand fünf
gesunken ist. Es begann bei 100
und das sind jetzt 95. Sie fragen sich vielleicht, was
der Sinn der Schnittstelle ist. Wir verwenden nur diese
normalen Ereignisse und Funktionen. Das Coole an
ihnen ist, dass wir sie in
anderen Blaupausen verwenden können ,
ohne dass Charakter
aus der
ersten Person sagen müssen. Also was ich tun werde ist hier zu meinem Abzug zu gehen. Und ich gehe jetzt zum
Event Graph, dieser Code stammt aus
der vorherigen Lektion, also werde ich ihn einfach
hervorheben und löschen. Ich werde auch
diese Funktion
löschen . Und wir werden einfach kompilieren. Normalerweise, wenn ich
meinen Gesundheitswert und meinen
ThirdPersonCharacter verringern möchte , würden
wir normalerweise ein Ereignis erstellen, eine Überlappung
beginnen oder die Überlappung von Schauspielern
beginnen. Und das läuft immer dann, wenn sich
etwas überschneidet, ich werde es auslösen und es
gibt uns Zugriff auf den Schauspieler hat
sich mit unserem Auslöser überlappt und wir würden
den ThirdPersonCharacter kosten , wie wir es in unserem getan haben Casting-Video. Dann würden wir entweder unsere Funktionen
bekommen, sagen wir, ich würde die Gesundheitsfunktion verringern, oder wir würden unsere
Gesundheitsvariable bekommen. Dann würden wir es
verringern und
den neuen Wert festlegen , indem wir
unser Auto schneit. Aber was
uns Blueprint
Interfaces ermöglichen , ist, dass
wir,
anstatt casten zu müssen, uns
einfach von anderen Akteuren entfernen und
nach
einer
Schnittstellenfunktion suchen können , die die Gesundheit verringert und das erstellen und
das wird unser Ziel sein, egal welche Überschneidungen ich auslöse, wir werden die Funktion
Gesundheit verringern in
diesem Blueprint nennen . Und das wird nur dann tatsächlich in diesem Blueprint
laufen, wenn wir die
Schnittstelle wie in unserem ThirdPersonCharacter
implementiert haben. Sie erinnern sich, wir setzen
die Schnittstelle und hier, wenn sich ein Objekt, das keine RPP-Beispielschnittstelle
verwendet, überlappt, also auslöse ich, wird dieser
Code trotzdem ausgeführt, aber es wird einfach nichts passieren. Wir werden keine Fehler bekommen, wir
werden keine Probleme haben. Dies wird einfach ignoriert und dann wird der Rest
des Codes ausgeführt. Nun, da unser
ThirdPersonCharacter eine decrease
how-Funktion verwendet , wenn wir
unseren Trigger überlappen, wird er ausgeführt. Wenn wir also hier zu
unserem Third-Person-Charakter gehen, öffne
ich einfach die verminderte Zellfunktion und füge hinzu, oder wir kehren hier
zu unserem Auslöser zurück. Wir werden stattdessen einen Druckstring hinzufügen
und hier, also musste ich einen String drucken und wir drucken
unseren aktuellen Gesundheitszustand aus. Und weil sich unsere Charaktere überschneiden oder
auslösen, überschneiden oder wird ihre Gesundheit in
unserem Charakter
verringert , und dann erhalten wir aktuelle Gesundheit
unserer Charaktere,
damit wir sie zusammenstellen können. Wenn wir jetzt unseren Auslöser
überfahren, können
Sie sehen, dass unsere
Gesundheit abnimmt. Das Gute daran
ist, dass wir uns nicht
darauf beschränken , dies nur in unserem
ThirdPersonCharacter zu tun. Wenn wir andere Blaupausen
wollen, zum Beispiel ein Fahrzeug, wenn es diesen Auslöser trifft, wollen
wir auch
seine Gesundheit reduzieren. können wir machen. Wenn wir also
zum Beispiel unseren
Cube-Blueprint hier öffnen , lösche ich
einfach diesen Code aus unserer
vorherigen Lektion. Wir fügen eine Gesundheitsvariable hinzu. Wir sagen es auch zu einer
Ganzzahl. Und wir setzen den
Wert auf 50. Nun, jetzt, wenn
unser Würfel unser Triggerhaar
überlappen würde , würde
nichts passieren, weil in
unserem Würfel
die Beispielschnittstelle nicht implementiert ist.
Also machen wir das jetzt. Wir fügen die
Beispielschnittstelle hinzu und wir werden kompilieren. Wie Sie sehen können, befindet sich die verminderte Gesundheitsfunktion jetzt auf
der Registerkarte Interfaces hier. Aber wenn ich ein Würfel wäre, der unseren Auslöser
überlappen würde, würde
er immer noch
nichts tun , weil wir der
Funktion zum Verringern der Gesundheit in unserem Würfel
tatsächlich
keinen Code hinzugefügt haben . Wenn wir das öffnen, indem wir einfach
nach oben doppelklicken, können
Sie sehen, dass wir unseren Rückgabeknoten
und R-Hinweis hier
haben . Und wir können Code ausführen. Also wenn ich wollte, könnte
ich gesund werden. Wir machen Minus. Und wir sagen, naja minus fünf. Und dann werden wir loslegen und die
aktuelle Gesundheit hier zurückgeben. Jetzt, wenn unsere
Würfelüberlappungen ausgelöst werden, wird
diese Funktion ausgeführt. Es nimmt den aktuellen
Gesundheitswert minus fünf,
legt den aktuellen
Gesundheitswert fest und gibt ihn dann zurück. Wenn wir also auf „Spielen“ klicken ich es
mit meinem Charakter überfahre, können
Sie sehen, dass es unseren Gesundheitswert immer noch
verringert. Aber wenn ich F8 drücke, hindert
mich
das im Grunde daran, meinen Charakter zu kontrollieren und mir
erlaubt, mich frei zu bewegen. Aber das Spiel läuft immer noch. Ich kann meinen Würfel auswählen, wenn ich
ihn in den Auslöser schiebe Sie können sehen,
dass
er beim Betreten des Auslösers tatsächlich
seinen Gesundheitswert ausgibt und
ihn auch verringert. Hoffentlich erhalten Sie dadurch eine Vorstellung davon, wie Blueprint
Interfaces funktionieren. Sie ermöglichen es uns im Wesentlichen, Funktionen zu
erstellen, die in verschiedenen
Blaupausen
ausgeführt werden können ,
ohne dass
diese Blaupausen kosten müssen. Und das ist nützlich in Anwendungsfällen wie unserem Trigger hier,
wo Sie möchten eine Triggerbox dass
eine Triggerbox alles
beschädigt, was sich
darin befindet und Gesundheit hat, Sie dies
mithilfe von Blueprint-Interfaces einrichten können.
20. Grundlagen (Komponenten): Hallo zusammen. In dieser Lektion werden wir
uns die Bauteil-Blueprints
ansehen . Wenn Sie nun die vorherige Lektion verfolgen, habe ich hier
nur
eine neue Third-Person-Vorlage erstellt . Wir haben also einen
Neuanfang für diese Lektion. Um loszulegen,
verwenden wir Komponenten, um Akteur-Blueprints um
neue Funktionen zu erweitern. ich zum Beispiel in
unserer Ebene hier Wenn ich zum Beispiel in
unserer Ebene hier den
Boden auswähle,
und im Bereich Details, haben
wir die Registerkarte Komponenten, die uns zeigt
, welche
Komponenten dieser Akteur hat. Wir können also sehen, dass es
eine statische Mesh-Komponente hat. Und das ist es, was es
uns ermöglicht, tatsächlich
ein statisches Netz zu setzen ,
das für diesen Schauspieler in der Welt angezeigt wird. Mittlerweile gibt es viele
verschiedene Arten von Komponenten. Also, wenn ich zum Beispiel zu meinem Character
Blueprint gehe
und wir zum Viewport gehen. Sie können im Bedienfeld „
Komponenten“ sehen, dass wir auch hier einige verschiedene Arten von
Komponenten haben . Zunächst einmal
hat unser Charakter eine Kapselkomponente,
nämlich diesen
kapselförmigen Kollisionsbereich. Und das ist es, was
unseren Charakter davon abhält, einfach durch den Boden
zu
fallen oder durch Wände gehen zu können. Dann haben wir eine
Pfeilkomponente, die im Grunde nur so eingerichtet
ist, dass für unseren Charakter in die
Vorwärtsrichtung zeigt. Wir haben die Mesh-Komponente, die eine
Skelett-Mesh-Komponente ist. Und das ermöglicht es uns, ein Skelettnetz zu
setzen. Und das Skelett Mesh ist nur ein Mesh, das animiert werden
kann. Dann haben wir unseren Kameraausleger
und die Kamera, die am Kameragearm befestigt
ist. Und so funktioniert es, wenn zwischen dem Ende des Kameraauslegers und dem
Beginn der gemeinsamen Krempe, Es gibt ein Objekt,
das blockiert, dass es kürzer wird. Und weil unsere Kamera
am Ende der Kamera
befestigt ist ,
Boom, bringt das unsere
Kamera näher an den Charakter heran. Wenn ein Objekt unsere Kamera
blockiert, bumm. Dann haben wir unsere Kamera. Und unsere Kamera ermöglicht es uns,
die Perspektive zu wählen , die unser Spieler sieht, wenn er diesen Charakter
kontrolliert. Jetzt
sehen alle Komponenten von bisher
erklärten Komponenten. Dies sind Komponenten, die auf der Welt existieren
können. Sie haben einen Ort
und manchmal
haben sie sichtbare Objekte. Wir haben aber auch eine
andere Art von Komponente, die
rein nur Code ist. Sie haben keinen Standort. Dann zum Beispiel, wenn dies
unsere
Charakterbewegungskomponente hier ist , die
in die Engine integriert und in unseren
Charakter-Blueprint integriert ist. Und wenn wir wollten, könnten
wir diese Komponente auch
zu anderen Blaupausen hinzufügen. Und das ist es, was die Bewegung
unseres Charakters regelt. Der wichtige Unterschied zwischen einer Senkenkomponente und
einer Standardkomponente besteht darin, dass eine Standardkomponente auf der Welt nicht
existiert, keinen Standort hat und den Spieler nicht sichtbar sein
kann. Wohingegen das Sehen von Komponenten auf der Welt existieren
kann. Sie haben eine Position
in einer Rotation. Und einige von ihnen, wie zum Beispiel unsere
Mesh-Komponente, haben ein physisches
Objekt auf der Welt. Der Grund, warum
wir Komponenten verwenden anstatt den gesamten Code und die
gesamte Funktionalität direkt in
einen Blueprint-Aktoren-Blueprint zu integrieren liegt darin, dass wir Komponenten auf
mehreren Blueprints
wiederverwenden können , die dies können sparen Sie uns viel Zeit, Code immer
wieder
schreiben zu müssen oder ihn zu kopieren und einzufügen, wenn wir es nur einmal in einer Komponente
tun könnten, diese Komponente
dann
in mehreren Blueprints wiederverwenden. Ähnlich wie
Funktionen nützlich sind, da wir den
Code an einem Ort ändern können und es sich an allen Stellen auswirkt , an denen
die
Funktion verwendet wird. Wenn wir den Code in
unserem Komponenten-Blueprint ändern, wird
auch
der Blueprint, der diese Komponente
verwendet , aktualisiert und
erhält diese Änderungen. Wir können unsere eigenen
Blueprint-Komponenten erstellen. Alle, die wir uns
bisher angesehen haben , sind
in den Motor eingebaut. Wenn Sie auf „raus“ klicken,
können Sie durchgehen und alle Komponenten
sehen, die
tatsächlich mit dem Motor geliefert werden. Aber wenn wir unsere eigenen
erstellen wollen, müssen
wir zum
Content Browser gehen. Wir klicken mit der rechten Maustaste und
gehen zur Blueprint-Klasse. Und dann können Sie hier
unten sehen, dass wir die
aktive Komponente
und die Senkenkomponente haben . Wenn Sie sich an eine vollständige
Szene erinnern , können Komponenten auf der Welt
existieren. Sie haben einen Standort, aktive Komponenten
dagegen nicht. Sie sind rein Code. Wir beginnen mit der Erstellung
einer aktiven Komponente. Ich nenne
diesen VP einfach, um eine solche
Schauspielerkomponente zu unterstreichen . Und wir doppelklicken darauf, um
es zu öffnen. Dann ziehe ich einfach
den Tab hier
nach oben in die obere Leiste mit
den Blaupausen. Vielleicht haben Sie bemerkt, dass
diese Benutzeroberfläche ein bisschen
anders aussieht als unser
normaler Blueprint-Editor. Und wie Sie sehen, haben
wir kein
Bedienfeld „Komponenten“, da Komponenten ihre eigenen
Komponenten haben
können. Das können nur Schauspieler. Wir haben auch kein Darstellungsfenster da es sich um eine
aktive Komponente handelt. Es enthält keine Komponenten
von sichtbaren Teilen. Es ist also reiner Code. Wir haben also nur Zugriff
auf die code-relevante Benutzeroberfläche. Überwinde diese Unterschiede. Es gibt kaum einen
Unterschied zum Codieren und einer Komponente als das Rechnen
und Codieren in einer Blaupause. Wir haben
zum Beispiel unseren anfänglichen
Play-Knoten oder -Knoten, diese sind standardmäßig
nur hier, aber wir können auf
die meisten Ereignisse und Funktionen zugreifen , die wir in unserem normalen aktiven
Blueprint innerhalb einer Komponente ausführen
können. Da dies
eine aktive Komponente ist, kann
ich etwas
wie get location nicht tun und wir können den
getLocation-Knoten nicht finden, weil
dieser Schauspieler , diese leider Komponente,
keinen Standort hat. Also kann ich Ihnen ein Beispiel geben wie wir Code
und I-Komponenten ausführen können. Nun, wenn ich hier aus
meinem großen In-Play herausziehe, füge
ich einfach eine Druckzeichenfolge hinzu. Also habe ich meiner Komponente etwas
Code hinzugefügt. Und wenn ich eine Umfrage durchführen und auf „Spielen“ klicken kann, werden
Sie sehen, dass nichts passiert. Das liegt daran, dass ich
meine neue aktive Komponente nicht wirklich
zu Blaupausen hinzugefügt
habe meine neue aktive Komponente nicht wirklich
zu , die in meinem Level
existieren. Der Code wird also nicht ausgeführt. Aber wenn ich
hier zu meinem
ThirdPersonCharacter gehe und hinzufüge, suche ich nach
Akteurkomponente. Sie können sehen, dass wir
unser BPR haben, seine Komponente
, zu dem wir das gerade
erstellt oder hinzugefügt haben. Und Sie können sehen, dass es zusammen mit
der Charakterbewegung
tatsächlich zu
dieser zweiten Hälfte
des Panels hinzugefügt dieser zweiten Hälfte
des wurde. liegt daran, dass
beide nur aktive Komponenten sind und keine sichtbaren Komponenten. Aber jetzt, wenn ich kompiliere und wir zum Play und Editor
zurückkehren , können
Sie sehen, dass der Code in
unserer Komponente jetzt tatsächlich
ausgeführt wird, weil er
jetzt an
ThirdPersonCharacter angehängt ist jetzt an
ThirdPersonCharacter angehängt und sein Spielbeginn wird ausgeführt, wenn der
Third-Person-Charakter gespawnt
wird oder wenn
das Spiel beginnt. Jetzt können wir auch auf
Funktionen, Ereignisse
und Variablen von
unserer aktiven Komponente aus
innerhalb des Blueprints zugreifen und Variablen von
unserer aktiven Komponente aus , zu dem wir sie hinzugefügt haben. Wenn wir also einen Editor
aus dem Spiel beenden und ich hier zu meiner
aktiven Komponente zurückkehre. Ich füge
einfach, sagen wir, eine neue Variable hinzu. Wir nennen das einfach Test. Ich erstelle auch eine neue
Funktion und wir nennen diese
Beispielfunktion. Und ich erstelle auch ein
Ereignis oder ein Ereignis, ich nenne dieses Beispiel. Jetzt haben wir also unser Ereignis, unsere Funktion und unsere Variable,
und diese befinden sich alle in unserer Akteurkomponente. Wenn ich jetzt hier zu meinem
Third-Person-Charakter zurückkehre, kann
ich ganz einfach auf diese Variablen
und Funktionen zugreifen indem ich
einfach meine BPS-Komponente aus
dem Bedienfeld „Komponenten“ ziehe. Ziehen Sie heraus. Und ich kann zum Beispiel einfach
nach Tests suchen. Und ich kann diese
Testvariable einstellen, wenn ich will. Ich kann auch auf
die Funktionen zugreifen, um zum Beispiel herauszuziehen und zu
suchen. Und Sie können sehen, dass ich
auf meine
Beispielfunktion und mein Beispielereignis zugreifen kann . Einfach so. Ein gutes Beispiel für ein
System, das Sie vielleicht in eine Komponente einbauen
möchten , ist so
etwas wie ein Gesundheitssystem. Und der Grund dafür ist
, dass Sie möglicherweise mehrere Schauspieler in
Ihrem Spiel
haben und ein Gesundheitssystem haben
wollten. Anstatt nun jedem dieser Akteure eine Variable und
Funktionen hinzufügen
zu müssen , die
sich auf ihre Gesundheit auswirken . Wir könnten einfach
eine Gesundheitskomponente erstellen und diese Gesundheitskomponente
den verschiedenen Akteuren hinzufügen. Dann, weil wir dem wir sie hinzufügen, einfach auf die Funktionen
und Variablen
unserer Komponente
zugreifen in
jedem Blueprint, dem wir sie hinzufügen, einfach auf die Funktionen
und Variablen
unserer Komponente
zugreifen können. Wir könnten dann dieses
Gesundheitssystem nutzen, ohne alle Funktionen und
Variablen innerhalb der Blaupause
neu erstellen zu müssen. Jetzt können wir auch auf Komponenten
anderer Blaupausen zugreifen und diese
aktorisieren. Wenn ich also schnell
einen Trigger-Blueprint zusammenstelle, erstelle
ich einfach eine neue Blaupause. Es wird einen Schauspieler geben. Ich nenne es einfach
Trigger wird das öffnen. Ich füge eine
Box-Kollisionskomponente hinzu. Box-Kollision. Wir gehen, ich schiebe das ein bisschen nach
oben. Und ich schalte
versteckt im Spiel aus. Und dann gehen wir
zum Event Graph und löschen diese Knoten. Und ich erstelle eine
Über-Runde. Wenn Sie sich erinnern, wird dieser Knoten immer dann
ausgeführt, wenn sich
etwas überschneidet Ich löse
ihn aus und er gibt uns
Zugriff auf den Akteur, der uns überlappt. So können wir über
unseren ThirdPersonCharacter
und auf verschiedene Arten auf unsere Komponente zugreifen unseren ThirdPersonCharacter
und auf verschiedene Arten auf unsere Komponente . Wenn ich mich von einem anderen
Schauspieler herausziehe und die Suche für die Person kostet. Wir haben jetzt unseren Kostenknoten, wir
, falls Sie sich erinnern, eine separate Lektion
durchgeführt haben. Und wenn wir uns in die Länge ziehen, können
wir darauf zugreifen. Oder ich werde Charaktere,
Variablen und Funktionen aus der dritten Person verwenden. Wir können aber auch auf
seine Komponenten zugreifen. Wenn ich also nach einer
Akteurkomponente suche, scrollen
wir nach unten. Normalerweise sehen Sie
hier unten, dass ich
unsere aktive Komponente erhalten kann , mit
der wir auf alle Funktionen und Variablen zugreifen
können der wir auf alle Funktionen und Variablen zugreifen unsere X-Komponente durch
unseren ThirdPersonCharacter. Wenn ich bei
der Suche nach Tests herausziehe, zum Beispiel
Test bekommt, geht es los. Ich kann auf diese Variable zugreifen. Ich kann auch darauf zugreifen, wenn ich
suche.
Sie können beispielsweise sagen, dass ich auf
mein Beispielereignis und
meine Beispielfunktion zugreifen kann . Jetzt gibt es eine andere
Möglichkeit, auf die Komponenten
unserer Schauspieler zuzugreifen ,
ohne ein Casting durchführen zu müssen. Und das können wir mit einem Knoten tun , wenn wir ihn
aus unserem Akteur herausziehen, durch Zusammenstöße nach
Komponenten sucht. Sehen Sie hier nach, ob ich diesen Knoten
erstelle. Im Wesentlichen
benötigt
dies eine Akteureingabe und wir
legen eine Komponentenklasse fest, damit ich nach einer Aktor-Komponente
suchen kann . Und ich werde das auf
die BP-Act-Komponente setzen. Das ist der, den wir geschaffen haben. Dies wird überprüfen, hat unser Akteur-Input
diese Komponente? Ist dies der Fall, wird hier ein Verweis auf
diese Komponente
ausgegeben. Und wenn ich in die Länge ziehe, kann ich nur von
meiner Testvariablen aus
erneut suchen . Ich kann auch auf die Ereignisse
und Funktionen zugreifen, die wir erstellt haben. Wenn r jetzt keine
aktive Komponente hat, ist diese Referenz
nicht gültig. Was wir also tun, wenn wir diesen Knoten
verwenden, ist nur
sicherzustellen , dass wir einen solchen
gültigen Knoten verwenden. Wenn nun ein Objekt überlappt , wird dieses
Ereignis ausgeführt. Es wird überprüft, hat dieser Akteur
unsere BP-Act-Komponente? Wenn dies der Fall ist, geben wir
eine gültige Referenz aus. Also ist R gültig, würde gültig laufen. Und wenn nicht, dann ist gültiger Knoten
ausgeführt, ist nicht gültig. Jetzt können
wir tatsächlich mehrere derselben Komponente
in denselben Blaupausen haben. Also, wenn ich hier zu meinem
Third-Person-Charakter gehe und
die
BP-Unterstrich-App zur Komponente hinzufüge . Sie werden wieder sehen,
dass ich jetzt zwei dieser
Komponenten in meinem
ThirdPersonCharacter habe . Jetzt möchten wir vielleicht auf
diejenigen zugreifen, die einen Knoten wie diesen verwenden. Damit wir stattdessen
diesen Knoten löschen können, können
wir die
Get-Komponente nach Klasse verwenden. Und das ist ein Knoten, der
ziemlich genau so
funktioniert wie unser vorheriger Knoten, aber statt einer einzelnen
Variablenausgabe ist es ein Array. Wenn wir nun nach einer unschulischen
BP-Schauspielerkomponente suchen würden , würde
dies
jede einzelne Komponente,
die unserer
Komponentenklasse entspricht, von unserem Charakter zurückgeben . Und es gibt es in einem Array zurück. Und wenn Sie sich
an unser Array-Video erinnern und uns nur erlauben mehrere
Variablentypen
desselben Typs in einer Variablen zu
speichern . Und wenn wir auf eine
dieser Variablen
aus unserem Array zugreifen wollten , müssten
wir den Knoten
ziehen und den Benutzer abrufen. Wir müssen einen Index liefern. Das ist also die Variable in unserem Array, auf die
wir zugreifen möchten. Und dann können wir von unserem
Get-Knoten aus einfach
herausziehen und
beispielsweise nach Tests suchen. Und weil dieser Stift hier ein BP-Act-Komponentenstift
ist, können
wir unsere
Testvariable abrufen oder wir können
die Beispielfunktion und das
Ereignis erhalten , die wir zuvor erstellt haben. Das sind nur ein paar
Möglichkeiten, wie Sie
mithilfe dieser Knoten auf die Komponenten
eines Akteurs zugreifen können . Eine weitere coole Funktion von Komponenten ist, dass wir
ihre Variablen tatsächlich
für jeden Blueprint festlegen
können ihre Variablen tatsächlich
für jeden Blueprint zu dem
wir die Komponente hinzufügen. Wenn wir also hier zu unserem
App-Komponenten-Blueprint gehen, erstelle
ich
einfach eine neue Variable und nenne das sagen max health. So wie das. Wir setzen es auf eine Ganzzahl. Wenn wir nun
diesen Blueprint kompilieren und zu unserem
ThirdPersonCharacter Blueprint
zurückkehren. Ich werde einfach
diese extra aktive Komponente löschen und fügte hinzu, war
wie die erste. Und Sie können
im Detailbereich sehen, dass
wir eine Standardkategorie haben. Und dann
haben wir hier unsere Testvariable. Das ist der Boolean, den wir am Anfang
erstellt haben. Und wir haben auch unsere
maximale Gesundheitsvariable, und wir können diese verwenden, um festzulegen die Startwerte für unsere App-Komponente gelten. Also könnte ich
das auf 100 setzen. Und vielleicht hatte ich eine Blaupause für einen zweiten
Charakter. Ich verwende nur den
Auslöser als Beispiel. Wenn wir also eine weitere
BP-Unterstrich-,
BP- und BP-Act-Komponente hinzufügen , müssen
Sie keine Unterstriche
verwenden. Und hier siehst du, ob
ich einen Unterstrich verwende, er findet ihn nicht. Also, wenn ich BP x Komponente mache und wir diesen Sucher loswerden, wähle ich diese Komponente aus. Sie können sehen, dass wir hier wieder unsere Test- und
Max-Gesundheitsvariablen und
die Standardkategorie haben . Und Sie sehen, dass es
standardmäßig auf 0 ist
, weil es in unserer x-Komponente
darauf gesetzt ist . Dann könnten wir hier drin sagen, tausend. Wenn wir jetzt Begin Play einrichten, drucken
wir unsere maximale Gesundheit aus. Zum Beispiel. Wir drücken unseren Auslöser und das
Level und drücken auf Play. Sie können sehen, dass es
tausend druckt und das ist unser Auslöser, 100 zu erhöhen, und das ist die
Act-Komponente unserer Charaktere, die das tut. Als Nächstes wollte ich Ihnen nur
zeigen, wie wir
schnell eine Senkenkomponente erstellen können . Also verlassen wir einfach
die Planeten, um mit der rechten Maustaste zu klicken
und eine neue Blaupause zu erstellen. Und statt der aktiven Komponente klicken
wir auf
gesehene Komponente. Ich nenne das einfach als
BP-Unterstrich gesehene Komponente. Und wir doppelklicken
darauf, um es zu öffnen. Wie Sie sehen können, ist
es so ziemlich
dasselbe wie unser Blueprint für aktive
Komponenten. Der einzige Unterschied besteht
in unserem Klassenstandard. Sie können also sehen, dass
wir tatsächlich
einen Standort, eine Drehung und einen Maßstab haben . Und wenn wir hier zu unserem
ThirdPersonCharacter gehen, fügen Sie eine neue Komponente hinzu
und dann fügen wir unsere bp seen Komponente hinzu. Sie werden sehen, dass wir
einen Standort in der, im Viewport hier haben. Wir können es bewegen. Wenn wir die
Komponente dort auswählen, sehen
Sie, dass ich sie bewegen kann, ich kann sie positionieren, wir können sie
drehen und skalieren. Und wenn wir zu
unserer Senkenkomponente zurückkehren, weil es sich um dieselbe Komponente handelt, können
wir auf ihren
Standort zugreifen, damit wir nach dem Standort
suchen können , der wild ist. Sie können sehen, dass wir unseren „
Get World Location“ -Knoten haben. Wir haben auch die Weltrotation unserer
Get. Wenn ich es richtig buchstabiere, bekommen
wir eine Weltrotation. Und diese funktionieren genauso wie unsere Knoten in unseren
aktiven Blaupausen. Es wird nur der Ort und Rotation unserer Sündenkomponente ermittelt. Bisher haben wir hier
nur
Komponenten über das Bedienfeld „
Komponenten“ hinzugefügt , aber wir können auch Komponenten
während des Spiels mithilfe von Code hinzufügen . Wenn ich also mit der rechten Maustaste hier und meinem ThirdPersonCharacter
Blueprint
klicke, suche ich nach start play. Wenn wir uns von den Eltern entfernen, suchen Sie nach add und dann nach dem
Namen unserer Komponenten. BP, Sie können also sehen, dass
ich Optionen für die BP x Komponente und unsere
BPC und Komponente habe. Wenn ich also hier auf unsere
x-Komponente klicke, kommen
wir zu diesem Knoten. Und das
bedeutet im Wesentlichen, dass bei Begin Play oder wenn
unser Charakter
spawnt, unserem Charakter eine neue
BP-Act-Komponente hinzufügt. Wir können den Rückgabewert
hier verwenden, wie wir es könnten ,
wenn wir eine
Referenz wie diese einziehen, wir können einfach herausziehen und zum Beispiel nach get,
test
suchen , wir können
auf unsere Variable zugreifen. Wir können auch auf
diese Beispielfunktion und
das Ereignis zugreifen diese Beispielfunktion und , das wir zuvor
erstellt haben. Und wenn wir wollten, könnten wir eine Variable
erstellen, um diese Referenz zu
speichern. Wenn wir also später in
unserem Code auf
diese neue Variable zugreifen wollten , könnten wir das tun. Wir fördern nur eine
Variable, die uns eine neue Variable erstellt , die
einen BP-Acts-Komponententyp festlegt. Wir können das nennen, um
„neuer Computer“ zu sagen. Und so können wir jetzt auf
die neue Komponente zugreifen , die wir
später erstellt haben, und sie dann verwenden. Es erhält also einen Maximalwert. Wenn Sie
dieses BP-Aktin hinzufügen auswählen, kann
HE tatsächlich sehen, dass wir
Zugriff auf die Startvariablen erhalten . So konnten wir unser maximales Selbst
auf das setzen , was wir sagen wollten 99. Und jetzt, wo diese Handlung ihr Maximum an Hilfreicher, Gutartiger
geschaffen hat . Und schließlich können wir auch Komponenten
während des Spiels
zerstören. Wenn ich also meine aktive
Komponentenreferenz hier herausziehe, lösche
einfach diesen Code. Um die Komponente zu zerstören, müssen
wir jetzt herausziehen, danach
suchen, zerstören. Sie können den
Destroy-Komponentenknoten verwenden, wodurch die Komponente
während des Spiels
vollständig
aus dem Blueprint entfernt wird. Natürlich
wirkt es sich hier nicht wirklich auf die Blaupause aus. Es ist also nicht so, dass
du es gelöscht hast, es zerstört nur die Komponente während dieser Spielsitzung. Das ist also so ziemlich
alles für Komponenten. Hoffentlich haben Sie ein besseres
Verständnis dafür, wie sie funktionieren und wofür
sie derzeit verwendet werden.
21. Grundlagen (Player: Hallo zusammen. In dieser Lektion werden wir
uns den
Spieler-Controller-Blueprint
ansehen . Jetzt bei Play Controller wird eine
Blaupause
erstellt, wenn wir auf „Spielen“ klicken
und das Spiel starten. Und es wird für jeden Spieler erstellt , der im Level existiert. Und der Zweck eines
Player-Controllers besteht darin, die Kontrolle über
Blaupausen wie
Charaktere oder Fahrzeuge zu übernehmen Blaupausen wie
Charaktere oder Fahrzeuge und ihnen die Eingaben zu geben , die der Spieler drückt. Jetzt
bleibt der Spielercontroller für
jeden Spieler gleich , es sei denn,
ein
neues Level wird geöffnet In diesem Fall wird der alte
Controller zerstört und ein neuer erstellt, wenn
das neue Level geöffnet wird. In der
Third-Person-Charaktervorlage, die
wir hier geöffnet haben, enthält
sie jetzt Third-Person-Charaktervorlage, die
wir hier geöffnet haben, eigentlich
keinen Blueprint-Controller. Und das liegt daran, dass
standardmäßig nur
der eingebaute Player-Controller verwendet der eingebaute Player-Controller , der mit der Engine geliefert wird und in C plus plus codiert ist. Sie werden
den Player-Controller also nicht in
unserem Blueprints-Panel finden . Wenn wir unseren Spielmodus öffnen, können
wir sehen, wo wir unseren Spieler-Controller tatsächlich
einstellen können . Wenn wir also runtergehen
und die Klassen, können
Sie sehen, dass wir
derzeit die
Pest-Controller-Klasse haben , die
auf Controller eingestellt ist. Und das ist unser C plus Player-Controller, der in die Engine
eingebaut ist. Sie können auch sehen, dass wir hier unten
die
Standardbauerklasse haben , die auf unseren bp
ThirdPersonCharacter eingestellt ist. Und im Wesentlichen teilt
ein Spielmodus der Engine mit, dass wir jeden Spieler im Spiel mit diesem
Player-Controller starten möchten jeden Spieler im Spiel mit diesem
Player-Controller starten ,
der derzeit
der C
plus Plus-Spieler-Controller ist. Und dieser Charakter, der
unser ThirdPersonCharacter
ist , an dem wir in früheren Lektionen
gearbeitet haben . Aber wir können tatsächlich
unsere eigenen
Player-Controller-Blueprints erstellen . Um das zu tun,
schließe ich vorerst meinen Spielmodus und wir klicken mit der rechten Maustaste auf den Inhaltsbrowser und
gehen zu den Blaupausen. Und wir wählen den
Player-Controller aus. Und wir nennen dieses
BP-Beispiel, Kontrolle so. Und wir doppelklicken
darauf, um es zu öffnen. Und ich ziehe einfach die Spitze hier nach oben
mit unseren anderen Blaupausen. Jetzt spiele ich Controller. Blueprint sieht ziemlich aus
wie ein Akt von Blueprint. Und das liegt daran, dass es
sich tatsächlich um einen Schauspieler handelt auch
nur ein Kind des
Player-Controllers ist. Im Viewport
hier können Sie das sehen, aber wir haben
keine sichtbaren Objekte. Normalerweise fügen Sie keine
Dinge wie ein Mesh oder
ähnliches zum Viewport eines
Player-Controllers hinzu. Wir haben auch eine Kamera hier. Diese Kamera wird nur verwendet, wenn wir keinen
weiteren Blueprint besitzen. Wenn wir also
zum Beispiel einen
Third-Person-Charakter besitzen ,
verwenden wir tatsächlich die Kamera, die darin
enthalten ist. Wenn wir Blaupausen
besitzen wollen, dann wird diese Kamera benutzt. Es gibt auch einige
zusätzliche Einstellungen in den Klassenstandardwerten, die ausschließlich für
den Player-Controller gelten. Wir haben also Dinge, die sich auf
den Mauszeiger und
Berührungsereignisse für Mobilgeräte beziehen , sowie einige
Tools zur Kameraverwaltung hier oben. Und wenn wir
zum Event Graph gehen, können
Sie sehen, dass
wir so ziemlich
das Standardlayout haben , das Sie erwarten würden. Was fragst du dich vielleicht, was ist es, dass wir eigentlich unser Player-Controller-Forum
benutzen, was würden wir hier
einprogrammieren, anstatt nur innerhalb
unseres Charakters zu codieren? Nun, da ich
Controller spielen werde, die
gleich bleiben , egal welchen
Charakter wir kontrollieren, können
wir
hier Informationen speichern, die wir für
die Steuerung
verschiedener Dinge gleich behalten wollen . Wenn du zum Beispiel
ein Missionssystem hättest und möchtest
, dass deine Missionen jederzeit
verfügbar sind, egal ob du
einen Charakter, ein Fahrzeug
oder etwas von dem Ding besitzt , würdest
du es wahrscheinlich tun möchte diese Informationen in
Ihrem Controller speichern,
entweder direkt, indem Sie den Code innerhalb
des Controllers
erstellen oder indem Komponenten
zu diesem Controller
hinzufügen. Eine weitere Sache, für die Controller nützlich
sind, ist das Hinzufügen von Eingaben, die unabhängig davon, welchen Charakter
Sie kontrollieren,
gleich bleiben sollen . Ein Beispiel dafür
wäre, wenn Sie beispielsweise
ein Escape-Menü in Ihrem Spiel hätten, in
dem alle Ihre Einstellungen und Steuerelemente enthalten sind, oder wenn Sie wahrscheinlich
möchten, dass diese Schaltfläche funktioniert, unabhängig davon, welcher Charakter
Sie sind Controlling. Anstatt also diesen
Code zu jedem einzelnen
Charakter-Blueprint hinzuzufügen , können
wir sofort
den Controller hinzufügen, und auf diese Weise steht dem Spieler immer Eingaben zur Verfügung egal welchen Charakter
sie kontrollieren. Um Ihnen ein
Beispiel zu geben, was ich mit den
Informationen
meine, bleibt gleich, egal welchen
Charakter wir kontrollieren, wird eine neue Variable
erstellt. Und ich nenne
diese Mission einfach erledigt. Und wir belassen es als Boolean. Und ich kompiliere. Jetzt gehe ich zurück
zum Inhaltsbrowser und
wir erstellen einen Auslöser. Dieser Auslöser setzt die
Mission einen Boolean auf true. Also erstellen wir einfach einen Schauspieler. Ich nenne es Missionsauslöser. So wie das. Das machen wir auf. Ich füge eine
Box-Kollision hinzu, nur damit wir unseren Schauspieler überlappen können. Ich schiebe es hoch. Jetzt setze es ist versteckt im Spiel
auf false, damit wir uns setzen können. Und dann verwende
ich in unserem Event-Diagramm die Überlappung des
Schauspielers begin. Und wenn Sie sich erinnern, wird
dies ausgeführt, wenn sich
etwas mit
unserem Auslöser überschneidet , und es wird
uns sagen , welcher Akteur ihn überlappt. Also wird es von hier aus in die Länge ziehen, ich werde dem Charakter etwas
kosten. Und daraus können wir
herausziehen und den Controller bekommen. Und das gibt uns
Zugriff auf den
Controller, der
diesen Charakter kontrolliert. Dies ist nun
entweder gültig oder nicht gültig. Wenn also ein Zeichen nicht gesteuert
wird, gibt
dies einen ungültigen Stift zurück
. Wir wollen also
einen „ist validen“ Knoten erstellen. Auf diese Weise erhalten wir keine Fehler, wenn ein Charakter
, der
nicht kontrolliert wird ,
Überlappungen ausgelöst werden. Dann müssen
wir von unserem Controller aus unsere
Mission variabel erledigen. Wenn wir uns also in die Länge ziehen
und die Forschung die Mission
erledigen würde , wird
sie nicht funktionieren, da dies
nur eine
Controller-Objektreferenz ist , keine Referenz auf unseren
eigentlichen Beispiel-Controller. Was wir also tun können, ist, weil
unser Beispiel-Controller
ein Kind des
Controller-Typs ist , den
wir herausziehen können , wir können in example umwandeln, Controller verbindet
dies bis ist gültig. Und dann können wir uns
zurückziehen und Mission
festlegen, eine erledigt. Und wir können das auf wahr setzen. Also nur um das zu besprechen, wenn sich ein Schauspieler überschneidet. Also unser Auslöser, wir überprüfen
, ist der Act wo ein Charakter, wenn es ist, dann bekommen wir als Controller und
prüfen, ob es gültig ist? Also überprüfen wir im
Grunde, ob dieser Charakter tatsächlich von etwas kontrolliert
wird? Wenn ja, dann prüfen wir, ob dieser Controller ein
BP-Beispielcontroller
ist? Wenn ja, dann setzen wir die BP-Beispiel-Controller Mission
One done Variable auf true. Jetzt möchten wir auf
Informationen zugreifen können, um zu sehen, ob unsere
Mission erfüllt wurde. Also gehen wir zu unserem ThirdPersonCharacter und
dann zum Event Graph. Ich füge neue Eingaben , die nach dem ersten Eingabeereignis
suchen. Und das läuft einfach immer dann, wenn ich eine auf meiner Tastatur drücke. Jetzt können wir
unseren Controller
genauso bekommen wie beim
Missionsauslöser. Also suche ich
danach, hol mir den Controller. Und mit diesem Knoten wird
es selbst
nach einem Controller suchen. Wir sind also im
ThirdPersonCharacter, der Selbstständige als ****
und unser Charakter ist ein Gedicht. So können wir
uns selbst überprüfen, ob wir
einen Controller haben , der die Kosten für den
BP-Unterstrich-Beispielcontroller verursacht. Und davon können wir
unsere Mission eins erledigen. Und wir geben einfach eine Zeichenfolge aus,
unabhängig davon, ob sie fertig ist oder nicht. Wir verwenden einen Print-String-Knoten und verbinden diesen
mit in-string. So wie das. Ich werde das
einfach zusammenstellen. Jetzt kehren wir zu
unserer Third-Person-Map zurück und ich füge einfach den Missionsauslöser
in unser Level ein. Ich mache es ein
bisschen größer, also benutze ich einfach das Tool zum
erneuten Skalieren. Und es gibt noch eine letzte Sache, die wir tun
müssen, bevor
wir das testen, und das ist,
unseren Controller zu ändern. jetzt im
Third-Person-Spielmodus öffne, Wenn ich das jetzt im
Third-Person-Spielmodus öffne, können
Sie sehen, dass der
Player-Controller
immer noch auf den Spieler-Controller eingestellt ist . Wir müssen dies jetzt auf
unseren bp-Beispiel-Controller ändern. Da dieser Controller
ein untergeordnetes Element des
Player-Controllers ist , wird er standardmäßig alles tun
, was dieser Player-Controller
tut. Bell hat jetzt auch unsere neue
Variable, die wir hinzugefügt haben. Wenn ich also die
Wiedergabetaste drücke und eine drücke, können
Sie sehen, dass es falsch
ausgedruckt wird. Aber wenn ich jetzt auf
meinen Abzug stoße, wenn ich einen drücke, können Sie
sehen, dass er wahr ist. Auf diese Weise
können wir
Informationen vom
OCT-Spielercontroller einstellen und abrufen . Als Nächstes zeige ich dir,
wie wir tatsächlich
ändern können , welchen Charakter
wir kontrollieren. Dazu erstelle
ich einen zweiten Trigger-Blueprint. Also klicken wir mit der rechten Maustaste und machen Blueprint-Klasse
würde einen Schauspieler machen, ich nenne
das Karottenwechsel. Charakter. Auslösen. Macht das auf und
wir machen das Gleiche. Wir werden eine neue
Kollisionsbox hinzufügen und diese nach oben verschieben. Ich habe das auf „
Versteckt im Spiel“ auf „false“ gesetzt. Und wir werden es kompilieren und zum Event Graph
gehen. Ich werde hier die
Anfänger-Schauspieler-Überlappung verwenden. Zunächst kontrollieren wir also
einen anderen Charakter, den
ich in einem Level platziert habe. Ich gehe hier zur
ThirdPerson-Map und ziehe einfach einen
ThirdPersonCharacter hinein. Ich bin hier drüben. Dann kehren wir hier zu unserem Auslöser für
Charakterwechsel zurück. Und wir ziehen uns
von anderen Schauspielern zurück und werden wieder zum
Charakter wechseln. Von dem wollen wir
bekommen, dass sein Controller bekommen wird , bekommt Controller. Dann ziehen wir uns aus Get Controller
heraus und suchen nach besitzenund
verwenden den Prozessknoten. Jetzt merken Sie, dass ich nicht
auf meinen BP-Beispiel-Controller caste . Und das liegt daran, dass
wir das nicht müssen, denn dieses
besitze-Ereignis existiert im Player-Controller,
der unserem
Beispiel-Controller übergeordnet ist . Es besteht also keine Notwendigkeit
, darauf zu reagieren. Wir können bereits darauf zugreifen. Und wir verbinden das
mit unserem Kostenknoten. Auf diese Weise können wir jetzt die Kontrolle über eine Pumpe
übernehmen. Was wir also tun, ist,
uns aus der
Eingabe zu ziehen und Variablen zu fördern. Dadurch wird eine neue
****-Variable für uns erstellt. Und wenn diese
Punktvariable ausgewählt
ist, werden Sie den Suchenden einfach los
. Und wir nehmen ein
Beispiel editierbar an. Auf diese Weise können wir, wenn wir
unseren Charakter auswählen, ihn
ändern, den Charakter-Trigger ändern und
dann Level eine Punktsteuerung
auswählen.
Also wird es einfach das tun. Jetzt ziehe ich meinen
Wechselkarotten-Auslöser hinein. Ich lege es hier hin und mache es auch so ein bisschen
größer. Jetzt, in meinem Detailbereich hier
drüben, können
Sie standardmäßig in **** sehen, ich ein
Punktsteuerelement auswählen kann und ich würde einfach unseren
ThirdPersonCharacter auswählen. Das ist also der Charakter hier
drüben, so. Und jetzt können wir zu unserem Change-Charakter
zurückkehren und sicherstellen, dass das kompiliert ist. Jetzt können wir das testen, also klicken wir auf „Spielen“. Wir haben also unseren
normalen Charakter wie bevor wir herumlaufen können. Wenn ich auf meinen
Missionsauslöser stoße und einen drücke, können
Sie sehen, dass dies jetzt wieder wahr
wird. Aber wenn ich auf meinen
Change-Charakter stoße, wirst
du sehen, dass wir jetzt die
Kontrolle über diesen anderen
Charakter hier übernommen haben . Du siehst unseren alten Charakter da
drüben immer noch rumrennen. Wenn ich eine drücke, wirst du
sehen, dass unsere
Missionsvariable immer
noch wahr ist , obwohl wir
einen anderen Charakter kontrollieren. liegt daran, dass unser
Player-Controller immer noch dieselbe Blaupause
ist. War es. Wenn wir den Charakter
darüber kontrollieren. Jetzt können wir auch die Kontrolle über
Charaktere übernehmen, die während des Spiels
gespawnt wurden. Und um das zu tun, werden wir, wenn wir hier zu unserem
Trigger zum Ändern des Charakters gehen, diese
Gedicht-Variable vorerst löschen, weil wir ein Neugeborenes erstellen
werden den Spawn active
from class node
verwenden. Jetzt werden wir uns in
Zukunft näher mit der Verwendung dieses
Knotens befassen. Aber im Wesentlichen
ermöglicht es Ihnen,
neue Schauspieler und das
Level während des Spiels zu erstellen , wir kommen zum Unterricht. Das ist also die Blaupause
, die wir spawnen wollen. Für uns wird das also
der ThirdPersonCharacter sein. Und wir bekommen, sagen wir,
einen Spawn-Standort. Also ziehe ich mich raus und
suche nach Marke. Das wollen wir nicht, tut mir leid, wir wollen
eine solche Transformation
machen. Und das ermöglicht es uns,
einen Standort und eine Rotation festzulegen. Wir müssen einen Ort
angeben an dem unsere Charaktere spawnen können. Also gehe ich jetzt einfach
zurück zum Standort. Wir ziehen uns daraus heraus und erstellen einen
Add-Node, nur um gewissen Abstand zwischen
unserem
Charakter-Spawn und dem auszulösenden
Änderungscode zu erhöhen. Also füge ich sagen wir 200 und das Z und vielleicht 400
und das X so hinzu. Das sagt unserem Charakter , wo wir es erzeugen wollen. Und dann haben wir diesen
Rückgabewert und das gibt uns einen Hinweis auf den neuen Charakter, den
wir gerade erzeugt haben. Nun, weil unser Charakter
ein Kind eines Charaktertyps ist und Charaktere
Kinder des Bauertyps sind. Wir können das direkt in
die wichtige Option hier einbinden. Wenn ich jetzt kompiliere
und auf „Spielen“
klicke, können wir auf unseren Auslöser zum Ändern des
Charakters stoßen und
Sie werden sehen, dass er,
ich sage, ein neuer Charakter
an seinem Standort erscheint . Wir sagten, wir haben die
Kontrolle über diesen Charakter übernommen. diese Weise kannst du neue Charaktere
spawnen und sie
mit deinem Spieler-Controller kontrollieren. Nun, was willst du vielleicht zerstören
, um den übrig gebliebenen Charakter zu zerstören, ich nicht mehr kontrolliere. Was wir also tun können, ist zum
Charakter-Trigger zurückzukehren , einem inhärenten. Wir müssen noch ein paar Dinge tun. Also müssen wir zuerst
eine Controller-Variablenreferenz speichern . Und der Grund dafür
ist, dass, wenn Sie sich erinnern, dies eine reine Funktion ist. Reine Funktionen führen
jede Verbindung aus, die sie haben. Nun, wenn wir versuchen,
unseren Charakter zu zerstören , bevor wir
einen neuen spawnen und ihn besitzen, was passieren wird, wenn wir
versuchen, ihn zu besitzen oder Controller-Knoten laufen zu lassen und er wird das
Ziel eines Charakter. Aber wenn wir
diesen Charakter zerstört haben, wird er keinen Controller mehr
haben wir benutzen können, um
den neuen Charakter zu besitzen. Es ist ein bisschen schwierig, sie
zu verstehen,
aber wir werden, wir ziehen uns aus dem
Get Controller heraus und werden es zu einer Variablen
befördern. Wir nennen es
Überlappungscontroller, wie dieser, der sich bis hier
verbindet. Jetzt
speichern wir nur noch einen Verweis auf den Controller,
sobald wir ihn überlappen. Und wir können
das Ziel jetzt tatsächlich von hier drüben trennen . Dann können
wir von unserem Überlappungscontroller einfach herausziehen und kontrolliert werden****. Dieser Hinweis ermöglicht es
uns nur, einen Hinweis auf
den Bauern zu erhalten , den unser
Controller kontrolliert. Also können wir uns davon lösen und wir werden es zerstören. Weil dies
immer noch ein Hinweis auf
unseren alten Charakter ist , den
wir nicht mehr haben. Also können wir das machen. Dann nehmen wir unsere
Überlappungsregler-Variable und stecken sie in
das Ziel unseres Besitzes ein. Also sollte dein Code so
aussehen. Und das können wir zusammenstellen. Wenn wir jetzt in
das Level springen und auf „Spielen“ klicken und ich jetzt auf meinen
Auslöser stoße, kannst du sehen, dass ich
einen neuen Charakter gespawnt habe. Ich habe die Kontrolle darüber, aber der alte Charakter, den wir
in die Boxbreite laufen, ist weg. Und wenn wir es
noch einmal machen, kannst du sehen dass wir einen anderen Charakter spawnen. Dieser alte Charakter
ist wieder weg. Das sind also die
Grundlagen, wie du neue Charaktere
spawnen
und alte zerstören kannst . Jetzt gibt es noch eine weitere
Notiz, über die ich mit Ihnen
sprechen möchte , und das sind
die unbearbeiteten Notizen. Wenn du also hier zum
Change Character Trigger zurückkehrst, werde
ich diesen Code
jetzt einfach
löschen , weil wir ihn nicht mehr
brauchen. Und wir können
diesen Überlappungscontroller tatsächlich loswerden , weil wir ihn auch nicht brauchen. Wenn wir jetzt
aus dem Controller ziehen, erinnern
Sie sich an diesen Knoten
Der besitzen-Knoten. Es gibt auch den
unbearbeiteten Knoten. Wenn wir also einen
unbearbeiteten Knoten erstellen, wird der Controller
im Wesentlichen nur
angewiesen, die Kontrolle über jeden Charakter
, jedes
Fahrzeug oder jedes ****, das
er kontrolliert, aufzuhören . Wenn wir das jetzt verbinden, wenn wir die Kollisionskiste treffen, verlieren
wir die
Kontrolle über unseren Charakter. Wenn ich also
darauf stoße, sieht man, dass meine Charaktere auf der
Stelle stecken geblieben sind. Ich kann es nicht kontrollieren. Ich
kann meine Kamera nicht bewegen. Und das liegt daran, dass
wir diesen Charakter
oder einen Charakter in unserem Level nicht mehr kontrollieren. Das war's für unsere
Spieler-Controller-Lektion. Hoffentlich haben Sie ein bisschen besseres Verständnis dafür
, wie sie funktionieren.
22. Grundlagen (GameMode): Hallo zusammen. In dieser Lektion werden
wir uns Bauplan für den
Spielmodus genauer ansehen. Im Wesentlichen sagt der Spielmodus
der Engine
, mit welchem Controller
jeder Spieler beginnen soll und mit welchem
Charakter jeder Spieler in unserem Level beginnen
soll. Wenn wir also in den
Third-Person-Spielmodus gehen, wir in unserem
Inhaltsbrowser haben, öffnen wir ihn. Sie können sehen, dass wir
die Klassenstandardwerte hier geöffnet haben, und es gibt uns einige verschiedene Optionen unter den Klassen. Jetzt werden wir uns in dieser Lektion nur auf
den Controller und die
Standardbauern-Klasse konzentrieren ,
da dies die
wichtigsten sind, die Sie ändern werden. Wir werden in einer zukünftigen Lektion auf
die anderen Einstellungen eingehen. Aber für die
Player-Controller-Klasse ist
dies der
Player-Controller-Blueprint, der für jeden Spieler, der dem Spiel beitritt
, gespawnt wird . Derzeit ist es auf den
BP-Beispielcontroller
aus unserer letzten Lektion eingestellt . Aber wenn wir wollten,
könnten wir darauf klicken und
dies auf einen anderen Controller ändern .
Wenn wir wollten. Dann haben wir die
Default Pawn Class. Derzeit ist es auf den BP
Third-Person-Charakter
eingestellt , da dies der Standardwert ist. Dies ist die
Third-Person-Vorlage. Aber wenn wir wollen, wenn
wir einen weiteren Charakter hinzufügen, sagen wir zum Beispiel ein Fahrzeug
, mit dem wir beginnen wollten. Stattdessen könnten wir
das hier im Dropdown auswählen. Nun, da diese Blaupause eigentlich
keinen Code enthält, sie uns diese Ansicht gegeben. Wenn Sie jedoch zum vollständigen
Haupt-Blueprint-Editor gelangen möchten, können
Sie
hier oben
auf diese Option klicken , um den
Hauptfoto-Editor zu öffnen. Und das gibt uns Zugriff auf alle Einstellungen, die
Sie erwarten würden, die Komponenten, das
Event Graph und so weiter. Jetzt
existiert der Spielmodus im Level, ist ein Kind der Schauspielertypen, sodass er Komponenten haben kann. Wir können auch Code
wie jede andere Blaupause hineinschreiben. Wir können auch
unseren eigenen Spielmodus erstellen. Wenn wir also zum
Inhaltsbrowser gehen und einfach mit der rechten Maustaste klicken, gehen Sie zur Blueprint-Klasse. Und wir haben hier eine Option
für den Spielmodus, aber das ist eher eine reduzierte Version
des Spielmodus. Wenn wir also in allen Klassen
nach dem Spielmodus suchen, können
Sie sehen, dass es hier
eine Spielmodus-Option gibt. Ich bevorzuge es, diese zu verwenden,
nur weil sie mit etwas mehr
Funktionen
ausgestattet ist. Wir klicken also auf Auswählen, um Spielmodus einen neuen Blueprint
zu
erstellen. Und ich nenne
dieses BP-Beispiel-Spielmodus. Wenn wir
darauf doppelklicken, können wir es öffnen. Und ich ziehe
den Tab hier einfach nach oben. Abgesehen davon, dass wir die
Blaupause sind, in der wir
unsere Startcontroller
- und Pfandklassen festlegen können , können
wir unserem Spielmodus tatsächlich
Code hinzufügen. In der Regel fügen
Sie
dem Spielmodus Code hinzu ,
der das Spiel auf irgendeine Weise bewegt. Wenn
ich zum Beispiel mit dem Spielen beginne, möchtest du einen Timer zum
Countdown und dann das Spiel beenden oder
eine neue Map öffnen. Normalerweise würden Sie das in Ihrem Spielmodus-Blueprint tun. Eine nützliche Sache an
der Tarnvorlage
ist , dass Sie fast überall
darauf zugreifen können. Ein Beispiel dafür
ist, wenn wir
zu unserer ThirdPersonCharacter-Hüfte gehen würden . Jetzt habe ich noch Code
aus unseren vorherigen Lektionen, also löschen wir diesen einfach. Und wenn wir mit der rechten Maustaste klicken und danach
suchen, wird der Spielmodus angezeigt. Wir können diesen Knoten verwenden, um einen Verweis auf unseren
aktuellen Spielmodus zu erhalten. Und derzeit ist es eine
Spielmodus-Basisausgabe. Was wir also tun können, ist, dass wir die
Kosten einfach in unseren Beispielspielmodus ziehen
können . Und der Grund, warum wir das
tun können, ist, dass unser Beispiel-Spielmodus
ein Kind des Spielmodus ist. Und der Spielmodus ist ein Kind
der Spielmodus-Basis. Wir können also diesen
Kostenknoten verwenden, um von
unserem Beispielspielmodus
aus auf unsere Funktionen und Variablen zuzugreifen . Wenn ich also
hier in meinen Spielmodus zurückkehre und
eine neue Variable erstelle, nenne
ich diesen Spielnamen. Und ich setze
meinen auf einen Namenstyp. Und ich werde das zum Beispiel so einstellen, dass es
def viel sagt. Wir können das durchziehen. Wenn wir zu unserem
ThirdPersonCharacter zurückkehren, können
wir herausziehen und
suchen, den Spielnamen vergessen. Wir können auf diese Variable zugreifen. Wenn ich einfüge, sagen wir print string, können
wir diese einfach ausdrucken
, wenn wir eine auf unserer Tastatur drücken. Und wir werden kompilieren. Wenn wir jetzt auf Play
klicken würden, würde
das nicht funktionieren und
es gibt ein paar flache Gründe. Wir haben
unser Spiel noch nicht so eingestellt , dass es unseren
Beispiel-Spielmodus verwendet. Außerdem haben wir
unseren Spielmodus nicht so eingestellt , dass er unseren
Third-Person-Charakter verwendet. Wenn wir also zu unserem
Beispiel-Spielmotor zurückkehren und dann die Kostenstandardwerte festlegen, können
wir unsere
Standard-Controller-Klasse und unsere Standardklasse **** festlegen. Also werde ich
das Standard****
auf den BP ThirdPersonCharacter setzen. Und wir legen die
Controller-Klasse fest. Wir können dies von
unserer letzten Lektion an auf
unseren Controller ändern oder
es einfach als Spieler-Controller belassen. Ich werde meinen vorerst als
Spieler-Controller verlassen. Wir kompilieren einfach. Dann müssen wir zu den
Projekteinstellungen gehen. Wenn ich also hier oben zur Bearbeitung gehe und wir zu
den
Projekteinstellungen gehen, ziehe
ich das einfach
von meinem anderen Bildschirm weg. Dann müssen wir
zu Maps und Modi gehen. Nun, auch Karten und Modi, können
wir den
Standardspielmodus für unsere Bande festlegen, und dies ist
der Spielmodus für jede Karte, die wir erstellen. Derzeit ist es also auf den
Third-Person-Spielmodus eingestellt. Wenn ich das hier ändere, möchte
ich meinen
BP-Beispiel-Spielmodus auswählen. Wenn wir jetzt ein
neues Level erstellen oder auf Play
und unser aktuelles Level klicken, wird der
Beispielspielmodus
anstelle eines
Third-Person-Spielmodus verwendet . hier aus können
wir jetzt auch
unsere Standardklasse **** und
unseren Standard-Controller festlegen unsere Standardklasse **** und ,
wenn wir persönlich lieber zum Blueprint selbst
gehen möchten. Gehen Sie also zu unserem
Beispiel-Spielmodus und ändern Sie ihn dort. Aber wenn Sie möchten, können Sie diese Einstellungen
ändern
und auch hier. Jetzt gibt es einen anderen
Ort, an dem wir
den Spielmodus einstellen können , und das ist
in unseren Weltumgebungen. Wenn wir also unsere
Projekteinstellungen schließen und zur Third-Person-Map gehen, gehe ich zu
Windows und kreuze
die Welt-Einstellungen an. Deiner ist
vielleicht schon angekreuzt, meins
aber nicht. Also übernehme ich das einfach
. Und dann gibt es hier Einstellungen
für dieses spezielle Level. Sie können sehen, dass wir eine Spielmodus-Kategorie
haben und einen Spielmodus überschreiben können. Und
das besagt im Grunde nur, dass
wir nur für dieses Level einen
anderen Spielmodus verwenden möchten als
unseren Standardmodus , den wir gerade in unseren Projekteinstellungen
festgelegt haben. Sie können sehen, dass
dies tatsächlich auf unseren
Third-Person-Spielmodus
eingestellt ist. Wenn ich also auf „Spielen“ klicken würde, obwohl wir in den
Projekteinstellungen unseren
Beispiel-Spielmodus
festgelegt haben , würde dieses Level für
sich genommen immer noch den
Third-Person-Spielmodus verwenden. Diese Einstellung ist nützlich,
da Sie möglicherweise einen Modus
erhalten möchten , der die Verwendung von Levels
zulässt, abgesehen von einigen
, bei denen Sie möglicherweise
einen bestimmten Spielmodus haben , Sie
für diese Level verwenden möchten. Sie würden diese
Einstellung also verwenden, um die Kontrolle über
den Spielmodus zu übernehmen und
ihn für dieses spezielle Level an alles zu verkaufen, was Sie wollen. Im Moment setze ich das einfach
auf none, oder wir können einfach
darauf klicken und keine auswählen. Und das wird die
Spielmodus-Überschreibung aufheben. Wenn wir jetzt auf „
Spielen“ klicken und eins drücken, können
Sie sehen, dass es Death Match
ausdruckt, die Variable, die wir in unserem
Beispiel-Spielmodus
festgelegt haben . Aber wir können ganz einfach darauf zugreifen indem wir
einfach
das Get Game Mode Node Casting in unseren Spielmodus Node Casting in unseren Spielmodus verwenden
und dann
auf diese Variable zugreifen können. Und das wird auch Arbeit für
Events und Veranstaltungen zeigen. Abschließend
möchte ich nur einige der integrierten Funktionen behandeln, die mit dem Erhalten der meisten Funktionen
einhergehen. Wenn wir also zu unserem
Beispiel-Spielmodus gehen, können
wir, wenn Sie sich an Funktionen erinnern, Funktionen wenn Sie sich an Funktionen erinnern, Funktionen
aus unseren übergeordneten Blaupausen überschreiben. Wenn wir also hier auf diese Option zum
Überschreiben klicken, können
Sie sehen, dass wir hier einige Funktionen haben, von denen die
meisten aus
unserer Spielmodusbasis stammen. Wenn Sie sich an
unsere Funktionsstunde erinnern, beim Überschreiben einer Funktion der Engine im
Grunde gesagt, dass der Code
, der sich in dieser Funktion
in der Spielmodus-Basis befindet, nicht ausgeführt werden soll Sie möchten Ihren eigenen Code verwenden. Als Warnung sollten Sie
vorsichtig sein, wenn Sie
diese Funktionen außer da das Überschreiben von Funktionen Ihr Projekt
beschädigen kann. Wenn
ich zum Beispiel überschreiben, Default, Pawn
that transform spawnen
würde, wenn ich darauf klicke,
können Sie sehen, dass wir
diese Funktion haben , die
in die Spielmodusbasis integriert ist. Und diese Funktion
ist dafür verantwortlich der Charakter
tatsächlich spawnt
. Wenn ich das also kompiliere
und auf „Jetzt spielen“ klicke, kannst
du sehen, dass
ich
keinen Charakter mehr habe und nichts
mehr kontrolliert habe. Und das ist alles, weil
ich es einfach außer Kraft gesetzt habe. Funktion, die tatsächlich unseren
Charakter hervorbringt. Also werde ich nicht
all diese Funktionen durchgehen. Es gibt ziemlich viele. Einige von ihnen sind
selbsterklärend, andere
etwas komplexer, aber seien Sie sich bewusst, wenn Sie diese Funktionen überschreiben. Wenn Sie sich
dafür entscheiden, seien Sie vorsichtig. Sie können dein Projekt ziemlich leicht zerstören, da
dies
Kernfunktionen sind , um sicherzustellen, dass das Spiel
tatsächlich funktioniert. Wenn Sie den Mauszeiger
über diese Funktionen bewegen, können Sie sehen, dass Sie tatsächlich
einigermaßen anständige Tooltips erhalten dass Sie tatsächlich
einigermaßen anständige Tooltips Ihnen genau
sagen,
was jede
dieser Funktionen tut und wofür sie verantwortlich
sind. Das war's also für
unsere Spielmodus-Lektion. Hoffentlich
verstehst du jetzt ein bisschen mehr darüber, was
Spielmodi tatsächlich in der Engine
tun und wie du sie
in deinen Projekten verwenden kannst.
23. Grundlagen (Utility: Hallo zusammen. In dieser Lektion werden wir
uns die Utility-Knoten genauer ansehen
. Utility-Knoten sind
für verschiedene Dinge nützlich. Sie ermöglichen uns zu wählen, welcher
Code ausgeführt werden soll wie oft dieser Code ausgeführt wird. Und sie können uns auch helfen, den Code unseres Projekts
aufzuräumen. Wie Sie aus
unserer letzten Lektion sehen können, habe
ich tatsächlich nur mit
einer brandneuen
Third-Person-Vorlage
neu gestartet . Vielleicht möchten Sie das auch
tun. Und dann öffne
ich einfach
den ThirdPersonCharacter. Und ich habe
hier einige der
am häufigsten verwendeten Utility-Knoten hinzugefügt am häufigsten verwendeten Utility-Knoten , die wir in dieser Lektion kurz
durchgehen werden. Also schauen
wir uns zunächst die Sequenznotiz an. Wenn wir dies
also vorerst hierher verschieben, nimmt eine Sequenznotiz
jetzt eine Ausführungseingabe auf und hat
mehrere Ausführungsausgaben. Wir können neue Ausgaben hinzufügen,
indem wir hier auf die Schaltfläche
Pin hinzufügen klicken. Und wir können sie
einfach entfernen, indem wir mit der rechten Maustaste klicken und die Option
Ausführungs-Pin entfernen
auswählen. Der
Sequenzknoten funktioniert so, dass er
eine Eingabe wie zum Beispiel
ein beginnendes Spiel benötigt . Hinweis.
Das können wir hier verbinden. Und es wird jeden Code ausführen, der mit der dann 0 Uhr
verbunden ist. Sobald der gesamte
Code ausgeführt wurde, führt
er den
als einen Code und dann den nächsten Code und den nächsten Code usw. aus, bis
alle Pins ausgeführt sind. Die Hauptanwendung für
den Sequenzknoten
besteht nun darin, den Code ein
bisschen übersichtlicher zu halten. Mit Blaupausen. Wenn Sie viel Code haben, können
Sie dazu neigen, diese
wirklich langen Codezeilen zu haben. Mit einem Sequenzknoten können Sie das
einfach aufteilen,
sodass Sie
mehrere Zeilen haben und die
Dinge ein bisschen
besser organisieren können mehrere Zeilen haben und die . Sie können den
Sequenzknoten auch innerhalb einer Funktion verwenden. Wenn ich also eine neue Funktion erstelle, ziehe
ich heraus, wenn ich eine
kurze Sequenz in C suche, kann
ich einen Sequenzknoten erstellen. Die Art und Weise, wie es
innerhalb einer Funktion funktioniert, nur etwas, das
Sie beachten sollten. Es heißt, ich hätte hier oben etwas Code,
sagen wir, ich drucke String
und dann if node, und wenn ich dann von
haaren einen Rückkehrknoten hätte. Denken Sie jetzt daran, dass beim
Ausführen eines Rückgabeknotens die Funktion beendet wird. Wenn also dieser Rückgabeknoten, in dem Code ausgeführt werden
soll, den Sie dieser anderen Pins
in Ihrer Funktion verbunden
haben , nicht ausgeführt werden
würde. Das ist also nur etwas, das
Sie beachten sollten, wenn Sie Sequenzen
innerhalb einer Funktion verwenden. Jetzt kehren wir zu
unserem Event-Graphen zurück und schauen uns den Gate-Knoten an. Wenn wir also auf
diesen Uppit löschen,
können Sie erneut Code ausführen
, der mit
dem Ausgang verbunden ist , mit einer Frequenz
von allen Eingängen
an das Internodium. Was ich damit meine ist
, wenn ich hier
einen Tick mit dem Internodium verbinde , dann
wird unser Exit-Code jede Technik ausführen. Und das Tor ermöglicht es
uns, diesen Ausgang PM im Wesentlichen zu öffnen und zu schließen. Wenn ich also ein hinzufüge, wenn ich mit der rechten Maustaste klicke
und welche
Eingabe, Eingabe von ihnen, eins, können wir eine Eingabe von ihnen
erstellen, eine. Verbinde das, um das zu öffnen, kopieren und einzufügen. Wählen Sie nun die Note hier aus, dieses kleine
Tastatursymbol und drücken Sie zwei, und ändern Sie
diese jetzt einfach in eine 2-Eingabe. Und ich verbinde das und füge hier
einfach eine Druckzeichenfolge , dass wir das alles
innerhalb des
First-Person-Dritte-Person-Zeichens tun . Es tut uns leid Wir kompilieren und
gehen zur Map. Es spielt. Jetzt kannst du sehen, dass mein
Druckstring nicht läuft. Und wenn ich zum
Third-Person-Charakter
zurückkehre hier zum
Third-Person-Charakter
zurückkehre und die Debug-Option verwende. Sie können sehen, dass der Code
für mein Häkchen läuft. Es geht ins Tor,
aber der Ausgang läuft nicht. Wenn ich jetzt zu meinem
Level zurückkehre, drücke ich eins. Sie können sehen, dass die
Druckzeichenfolge jetzt ausgeführt wird. Und wenn wir noch einmal zu unserer
dritten Person gehen, können
Sie sehen, dass der
Exit-Code jetzt läuft. Und das liegt daran, dass ich
einen gedrückt und das Tor geöffnet habe. Wenn ich die Zwei drücke, kann ich
jetzt das Tor schließen. Wenn ich zurückgehe, können Sie sehen
, dass der Code nicht mehr
läuft und dass die
Druckzeichenfolge auch nicht läuft. Jetzt gibt es noch ein
paar andere Optionen auf unserem Gate-Knoten.
Wir können Toggle benutzen. Das wird also im Grunde
nur die Tore öffnen und wir wollen
umschalten, es wird es schließen. Wenn die Tore derzeit
geschlossen sind und wir Toggle,
Toggle ausführen ,
öffnet es sich und wir haben die
Möglichkeit, mit dem Schließen zu beginnen. Also momentan fängt es geschlossen an. Aber wenn ich
das absetze, klicken wir auf „Spielen Sie werden sehen, dass es stattdessen
einfach anfängt zu laufen. Jetzt habe ich
das Gate mit einem Techno geleitet. Wenn ich also hier einfach
aus dem Spiel gehe, könnten
wir einen Timer
anstelle eines Tech-Knotens verwenden, was wahrscheinlich
besser für die Leistung ist. Also machen wir einfach
ein Plug-and-Play
, schließen einen Timer an. Wenn Sie sich also an den Knoten
setTimeout by event erinnern, ziehen
wir uns aus diesem heraus und erstellen ein benutzerdefiniertes Ereignis, das einen Timer
aufgerufen hat. Wir können das mit
unserem Gate verbinden, anstatt mit einer Technologie
, also 0,5. Also wird jedes 2,5.
Mal laufen, wird Looping annehmen. Wenn wir jetzt auf Play klicken, können
Sie sehen, dass unser
Hello-Druckstring nur alle 2,5
läuft,
weil dieser Timer unsere Exit-Ausgabe
steuert. Als Nächstes gehen wir also
zu unserem nächsten Knoten über. Also verlassen wir einfach
den Flugzeug-Editor dort. Und wir verwenden die „einmal machen“ -Notiz. Nun will das D so
ziemlich genau wissen, was es sagt. Es nimmt eine Eingabe auf, führt eine komplette aus und
wenn sie erneut ausgeführt wird, wird nicht der gesamte
Code ausgeführt. Also können wir das ausprobieren. Wenn ich nur meine Gate-Notiz lösche, wird
sie mit unserem Timer verbunden, den wir gerade verwendet haben, und
diese in abgeschlossen einstecken. Also sollten wir unseren
Druckstring eins sehen. Hallo einmal und dann passiert
nichts anderes. Also klicke ich auf „Spielen“ und
sehe, dass das passiert. Und selbst wenn ich hier zu meinem
ThirdPersonCharacter gehe, kannst
du sehen, dass meine Zeit läuft, aber das D blockiert es einmal. Jetzt können wir
diesen do once Knoten zurücksetzen. Wenn ich den einen Pin hier nehme
und ihn zum Zurücksetzen einschließe, kann ich ihn herausziehen und auf Play klicken. Sie können Hellos ausgedruckt sehen, aber es wird nicht mehr gedruckt. Wenn ich eine drücke, kann man sehen,
dass sie wieder ausgedruckt ist, aber jetzt hat sie es wieder gestoppt. Also müsste ich weiter eine
drücken, um weiter zu öffnen und zurückzusetzen
, die schneien wollen. Wie unser Gate-Knoten
hat er eine Option für geschlossene Aktien. Wenn ich das also übernehme und wir
auf „Play“ klicken, werden
Sie sehen, dass wir
keine Druckzeichenfolge erhalten ,
bis ich eine drücke, wodurch dieser Knoten zurückgesetzt wird. Wenn wir jetzt den Plan-Editor verlassen, gehen
wir zum nächsten Knoten über, dem do n. Und n macht im Grunde
dasselbe, was ich schneien möchte. Es ermöglicht uns jedoch zu steuern wie oft dieser Knoten ausgeführt
wird, bevor er den Code
blockiert. Also wenn ich das lösche, stecke ich den Enter Two Timer hier und den Ausgang zu unserer
Druckzeichenfolge ein und sage, wir wollen, dass dieser Code
fünfmal ausgeführt wird und dann wollen
wir, dass er stoppt. Also können wir den Zähler hier
in unseren Druckstring stecken, und das gibt nur aus,
wie oft dieser ausgeführt wird. Wenn wir ziehen können, drücken wir Play. Sie können sehen, dass es die Zahlen
ausdruckt, aber sobald es fünf erreicht hat, wird es
gestoppt, weil ARRA dies tut, blockiert
ein Knoten den Ausgang. Und wir können
diesen Knoten auch zurücksetzen. Wenn ich also den Reset-Pin nehme, in einen
einstecke, auf „Play , können
wir den Reset zurücksetzen oder leider bis zehn oder fünf
zählen, sorry, dann drücken wir einen und du wirst sehen, dass ich ihn wieder zurücksetzen
kann. Jetzt kehren wir zu
unserem ThirdPersonCharacter zurück unserem ThirdPersonCharacter und werfen einen
Blick auf den nächsten Knoten
, den Flipflop-Knoten. Wenn dieser Knoten dann erneut ausgeführt
wird, wird er ausgeführt. Wenn dieser Knoten
dann erneut
ausgeführt wird, wird er ausgeführt B. Und er wird jedes
Mal, wenn Sie ihn ausführen, zwischen
diesen beiden Pins
weiterlaufen . Also, wenn ich das hier mit
unserem einen Eingabeereignis verbinde und eine Zeichenfolge
aus einem ausdrucke, können wir das tun, ich setze das einfach auf eine Kopie und füge das ein und setze es auf. Wir werden kompilieren und spielen. Sie können sehen, dass unser Timer
dort noch läuft. Aber wenn ich eins drücke und
Sie a, B, a B sehen können Sie
dies verwenden, um
zwischen zwei Teilen des Codes zu wechseln. Als Randnotiz
werden
Sie das Flipflop wahrscheinlich nicht verwenden, wenn Sie ein bisschen
sicherer mit der Codierung sind. Aber es kann praktisch sein, wenn Sie einen schnellen
Prototyp
erstellen oder so. Aber normalerweise
möchten Sie sagen,
einen Zweig, einen Knoten und einen booleschen Wert verwenden . Und das würde
Ihnen viel mehr Kontrolle
darüber geben , wie dieser Code funktionieren würde. Und wenn wir zum Schluss weitermachen, haben
wir unsere latenten Knoten. Und wenn Sie sich erinnern, ist
das latent, weil sie
diese kleinen
Uhrensymbole und die Ecken haben . Jetzt haben wir den
Delay-Knoten schon einmal verwendet, der
es uns ermöglicht, den Code im Wesentlichen für eine
bestimmte Zeit
hochzuhalten. Also, wenn wir diesen
Code mit delete this löschen würden, werde ich das auch entfernen. Wenn wir also eins drücken, könnten
wir eine Verzögerung haben und
dann könnten wir einige Dinge tun. Also könnte ich sagen, nenne
den Sprung von ihnen. Das wird
unseren Charakter tatsächlich zum Springen bringen. Ich stelle die Verzögerung
auf zwei Sekunden ein. Wenn ich jetzt auf „Spielen“ klicke und
12 Sekunden später drücke, siehst
du, dass der
Charakter springt. Jetzt gibt es einen anderen
Typ dieses Knotens. Also, wenn wir hier
aus dem Spiel
aussteigen und zum
ThirdPersonCharacter zurückkehren. Wir können den erneuten Auslöser verwenden, um
beide zu verzögern. Der Unterschied
hier ist, wenn ich sagen würde, drücken
Sie einfach weiter während mein Delay-Knoten herunterzählt,
dass die Dauer, , während mein Delay-Knoten
herunterzählt,
dass die Dauer,
dieser Knoten
die Eingabe einfach ignorieren würde und es würde zählen
zwei und dann würde Jump rennen. Jetzt
wird ein erneuter Trigger oder eine Verzögerung jedes
Mal zurückgesetzt, wenn er eine Eingabe empfängt. Wenn ich also das Wort Trigger
delay anstelle des
Verzögerungsknotens verwende , sie und
ich auf Play und drücken einen. Du hast gesehen, dass meine Karotten auch nach
zwei Sekunden
nicht springen , weil ich den Timer immer
wieder zurücksetze. Wenn ich aufhöre,
es zu drücken , wird es jetzt zwei Sekunden warten
und unser Charakter springt. Jetzt gibt es noch eine letzte Notiz
, die ich Ihnen zeigen wollte, und das ist die Verzögerung
bis zum nächsten Tick-Knoten. Wenn ich das also hierher ziehe, können
Sie sehen, dass dies auch ein latenter Knoten
ist, und dies ist im Wesentlichen nur
Codeblöcke für einen Frame oder lässt den Code einen Frame gewichten bevor die fertige
Pinna dann ausgeführt wird. Wenn wir das also mit
der One- und
Ich-Jump-Funktion hier verwenden würden , werden Sie keinen
Unterschied bemerken, denn ich drücke eins, es scheint, als wäre es sofort, aber es
wartet tatsächlich auf einen Frame bevor es die
Sprungfunktion anweist, zu funktionieren. Nun, dies wird
manchmal in Blaupausen verwendet. Möglicherweise müssen
Sie einen Frame
warten, bevor eine Variable gesetzt wird oder
so ähnlich. Dieser Knoten kann also
für solche Dinge nützlich sein. Das ist alles für unsere
Utilitys-Node-Lektion Die meisten davon werden
wir in zukünftigen Lektionen
wieder verwenden, damit Sie die Möglichkeit haben, sich mit ihnen
vertraut zu machen.
24. Grundlagen (Game: Hallo zusammen. In dieser Lektion werfen wir
einen Blick auf die Blaupause der Spielinstanz. Jetzt
wird der Spielinstanz-Blueprint erstellt, wenn unser Spiel zum ersten Mal gestartet wird, und bleibt dort,
bis wir das Spiel beenden. Und im Gegensatz zu anderen Blaupausen ,
wenn wir das Level ändern unsere Spielinstanz
nicht zerstört,
wenn wir das Level ändern. Es ist dauerhaft,
solange wir das Spiel ausführen. Und das macht es zu einer wirklich
nützlichen Blaupause für das Speichern von Informationen, die Sie auf andere Ebenen
übertragen müssen. Sie können zum Beispiel
Variablen haben , die Sie
von Ihrer Hauptmenüebene
in Ihre Spielwelt übertragen
möchten . Nun, dafür kannst du eine
Spielinstanz verwenden. Also werden
wir zunächst eine neue Blaupause erstellen. Und diese Blaupause
wird
unseren Charakter auf eine
andere Ebene bringen. Also klicken wir mit der rechten Maustaste, gehen zur Blueprint-Klasse,
erstellen einen Schauspieler. Ich rufe
meinen
DP-Unterstrich-Teleport . teleportiert. Da haben wir's. Und das öffnen wir. Ich ziehe meine
hier einfach in die obere Leiste. Das wird
die Blaupause sein, die unseren Spieler
tatsächlich
auf ein anderes Level bringt. Also fügen wir eine
Box-Kollision hinzu, nur damit wir wissen, wenn sie diesen Schauspieler
betreten, ich werde meinen einfach so ein bisschen nach
oben bewegen. Dann gehen wir
zum Event Graph. Und wir werden nur
den Aktor-Begin Overlap-Knoten verwenden . Es werden also
diese beiden gelöscht und wir ziehen uns von anderen
Akteuren aus und kosten nur Charakter, um
sicherzustellen, dass wir
diesen Code nur ausführen , wenn der überlappende
Schauspieler ein Charakter ist, dann verwenden wir
die Notizen der offenen Ebene. Also ziehen wir heraus und
suchen nach offener Ebene, und wir werden
Open Level mit Namen verwenden. Auf diese Weise können wir
dem Motor einfach sagen , dass er ein neues Level eröffnen soll. Und es öffnet das Level
, für das wir den Namen festgelegt haben. Das werde ich einfach
rausziehen und Variablen erstellen. Also werden wir die
Variable befördern und sie
als Ebenennamen und einen solchen
Namensvariablentyp belassen . Ich werde auch eine editierbare
Instanz übernehmen , und
dann werden wir kompilieren. Als Nächstes müssen wir
ein neues Level erstellen , auf das
wir uns teleportieren werden. Wir gehen also zum
Content Browser dann zu Third-Person-Maps. Und hier haben wir
unsere Third-Person-Karten, also werden wir das einfach
duplizieren. Jetzt. Ich kann mit der rechten Maustaste klicken und aus irgendeinem Grund
Duplizieren drücken Aber was wir tun können, ist das einfach über den Maps-Ordner zu
ziehen. Sie können sehen, dass wir Copy hier machen können. Erstellen Sie uns jetzt tatsächlich eine
Kopie unserer aktuellen Map. Jetzt öffnen wir unseren Unterstrich für die dritte
Person, um ihn zuzuordnen. Ich
wähle nur Schauspieler speichern aus. Jetzt sind wir in der zweiten
Map und ich werde nur ein paar Dinge
löschen, damit wir den Unterschied
zwischen den beiden
erkennen können . Also wählen wir einfach all diese Dinge
hier aus, löschen sie. Wir wissen also, dass
wir uns in unserer zweiten Map befinden, wenn
wir diese Map betreten . Jetzt kehren wir zu
unserer Third-Person-Karte zurück. Also doppelklicken wir
, um das zu öffnen. Ich wähle,
Speichern, wähle es aus. Und jetzt sind wir wieder in unserer
ersten Ego-Karte. Und wir werden
unseren Teleport zu dieser Karte hinzufügen. Also gehen wir zu Blaupausen
und ziehen einen hinein. Ich mache meins
ein bisschen größer. Wir können auch zu unserem
Teleport-Blueprint gehen, die Box
auswählen und einfach versteckt im
Spiel
ausschalten , damit wir
die Kollision tatsächlich so sehen können. Und jetzt müssen wir die
Variable, die wir auf
unserem Teleport erstellt haben, verwenden , um ihr mitzuteilen , auf welche Ebene wir uns teleportieren
wollen. Also gehen wir zu Details und du siehst, dass wir hier unseren
Levelnamen haben. Was wir also
tun werden, ist zu Maps zu gehen, einfach mit der rechten Maustaste zu klicken oder die
dritte Person zwei zu unterstreichen, wir machen Umbenennen, dann
Control C und klicken weg. Und dann fügen wir diesen Namen hier
in unseren Levelnamen ein. Und dann können wir das testen. Also drücke ich auf „Spielen“ oder
renne in die Kiste. Und Sie können sehen, dass
wir jetzt
auf unsere neue zweite Ebene transportiert wurden . Wenn wir jetzt ein neues Level eröffnen, wird
alles im vorherigen
Level zerstört. Unsere
Spieler-Controller-Spielmodi sind alle zerstört. Und wenn dann das neue
Level geöffnet wird, wird
unser Charakter gespawnt. Ein neuer Controller
und ein neuer Spielmodus wurden ebenfalls für unser neues Level erstellt. Das bedeutet also,
dass alle Variablen, die du in
deinem Charakter gesetzt hast, bevor wir auf dieses neue Level übergegangen sind, alle verloren gehen und wir wieder mit einem
neuen Charakter
beginnen. Und um nur
ein Beispiel dafür zu geben, dass der Flugzeug-Editor verlassen
wird,
Gehen Sie der Flugzeug-Editor verlassen
wird, zu unseren Blaupausen als
Third-Person-Charakter. Ich werde gerade einen neuen booleschen Wert
erstellen. Wir nennen es Beispiel und verwenden einen Tick-Knoten. Also klicke ich einfach mit der rechten Maustaste
und suche nach Technik. der Technik werden wir nur
ausdrucken, ob unsere
Beispielvariable wahr ist
oder nicht. Also verwenden wir einen Druckstring. Wir verbinden das mit hier, so. Und jetzt füge ich
eine Eingabe hinzu, also nennen wir dieses
Eingabeereignis eins. Wenn wir also eins drücken, möchte
ich diese
Variable auf true setzen. Also machen wir das und
dann kompilieren wir. Wenn ich jetzt auf „Spielen“ klicke, kannst
du sehen, dass
wir uns gerade unserer ersten Third-Person-Map befinden. Wenn ich eine drücke, können Sie sehen , dass unsere Variable wahr wird. Aber wenn ich in unsere Box renne
und wir auf ein neues Level gehen, können
Sie sehen, dass diese
Variable jetzt auf
falsch umgestellt wird , weil wir einen
neuen Charakter-Blueprint haben. Jetzt können wir unsere
Spielinstanz verwenden, um
diese Variable tatsächlich für uns zu speichern und auf das nächste Level zu
übertragen. Was wir also tun werden, ist auszusteigen. Wir werden eine
neue Blueprint-Instanz erstellen. Wir klicken mit der rechten Maustaste und
gehen zu den Blaupausen. Wir wollen den Blueprint-Kurs. Und in den Optionen hier gibt es tatsächlich keine
Spielinstanzklasse. Also gehen wir zu allen Klassen und
suchen zum Beispiel. Und dann wählen wir
die Spielinstanz
hier unten aus und klicken auf Auswählen. Und das hat uns jetzt einen
neuen Spielinstanz-Blueprint erstellt. Also nennen wir dieses Beispiel für einen
BP-Unterstrich, solche
Spielinstanz. Dann können wir das öffnen. Und Sie können sehen, dass dies nur eine grundlegende Blaupause
ist. Es hat nicht einmal
eingebaute Variablen. Sie können sehen, ob ich
auf Klassenstandardwerte klicke, hier
gibt es keine Variablen. Dies ist nur eine ziemlich
einfache Blaupause
, mit der wir Variablen
speichern können. Wir können Funktionen erstellen, Makros wie andere
Blaupausen auch. Es gibt hier einige
Override-Double-Funktionen, sodass Sie die Init überschreiben können. Dies ist im Grunde die
Funktion, die
ausgeführt wird , wenn wir
unsere Spielinstanz zum ersten Mal erstellen, wir haben einen Netzwerkfehler was ich in dieser Lektion nicht
behandeln werde. Wir wurden heruntergefahren und
dies wird ausgeführt, wenn wir unser Spiel
tatsächlich beenden. Dann haben wir einen Reisefehler. Und das wird funktionieren, wenn
wir
Probleme beim Transport
auf ein neues Level haben. Im Moment möchten wir, dass
unsere Spielinstanz tatsächlich
eine Variable für uns speichert. Also werden wir diese Variable
erstellen. Ich nenne
dieses Beispiel noch einmal. Und wir werden kompilieren. Bevor wir jetzt unser neues Level
öffnen, müssen
wir diese Variable tatsächlich
setzen. Also wird es
hier zu unserem
ThirdPersonCharacter gehen und wir werden
eine neue Funktion erstellen. Ich
nenne diese Update
Gain-Instanz einfach so. Das Coole an
Spielinstanzen ist, dass Sie von
jedem Blueprint aus auf sie zugreifen können von
jedem Blueprint aus auf sie zugreifen ,
genauso wie im Spielmodus. Wir können also einfach mit der rechten Maustaste
nach Game Instance suchen. Und Sie können sehen, dass wir die
get Game Instance verwenden können und dies gibt
nur einen Verweis
auf unsere Spielinstanz zurück. Da wir nun unseren
eigenen Spielinstanz-Blueprint erstellt
haben, müssen wir diesen übertragen, um auf seine Variablen
zugreifen zu können. Oder Sie könnten
ein Blueprint-Interface einrichten ,
wenn Sie möchten. Aber wir bleiben einfach beim Casting. Also werde ich
ein Cost-to-Beispiel verwenden, und dann wollen wir ein Beispiel, solche
Spielinstanz. Jetzt werden wir
diese Knoten einfach hierher verschieben und sie mit dem
Eingang unserer Funktion verbinden. Dann wollen wir set die
Beispielvariable verwenden , die
wir genug erstellt haben. Also geben wir ein Beispiel,
verbinden das hier oben. Und dann nehmen wir unsere
Beispielvariable aus unserem Charakter und fügen sie in set ein. Der gesetzte Knoten wird kompiliert. Jetzt müssen wir
diese Funktion also tatsächlich ausführen , bevor wir unser neues Level
öffnen. Also werden wir uns teleportieren und wir werden erben, diese Funktion ausführen. Also müssen wir
unsere Kostennotiz hier in die Kosten
einer dritten Person ändern . Also werden wir uns hinziehen und Kosten tragen. Drittens wollen wir den
ThirdPersonCharacter ,
da dies die
Blaupause
ist, die unsere neue Funktion
herauszieht und nach der Aktualisierungsspielinstanz sucht. Und das wird
unsere Variable innerhalb
unserer Spielinstanz auf das setzen , was
auch immer von unserem Charakter stammt. Und dann
verbinden wir das so mit
unserer offenen Ebene. Wenn unser
Charakter jetzt spawnt, brauchen
wir ihn, um die Beispielvariable, die
wir in der
Beispiel-Spielinstanz erstellt haben, tatsächlich zu
lesen . Um das zu tun, was zum Event Graph
gehen kann, wird ein Startplaneten erstellt. So wird das Spiel erneut beginnen, was die
Instanz bekommen kann oder Entschuldigung, die Spielinstanz
erhalten. Und das wird uns
Zugriff auf die Blaupause geben, die
Beispiel-Spielinstanz kosten
wird. Und dann bekommen wir
die Beispielvariable. Also ziehen wir uns hin
und holen uns ein Beispiel. Und das verwenden wir, um die Beispielvariable für
unsere Charaktere festzulegen . Also stellen wir das so ein. Und wir führen das
auf Begin Place durch. Also, wann immer unser
Charakter es spawnt, lies die
Beispielvariable in unserer Spielinstanz und setze sie dann auf
ihre Beispielvariable. Jetzt
müssen wir noch ein
paar Dinge tun, bevor wir das testen
können. Das Erste ist, dass wir der Engine nicht wirklich gesagt
haben , dass sie unsere neue
Beispiel-Spielinstanz verwenden soll. Jetzt machen wir das nicht wirklich
im Spielmodus wie die
meisten Dinge, wir tun dies tatsächlich in
unseren Projekteinstellungen. Also müssen wir
dann die Projekteinstellungen bearbeiten. Und wir werden nach Game Instance
suchen. Und Sie möchten die
Spielinstanzklasse hier haben, und wir ändern dies in die
BP-Beispiel-Spielinstanz. Jetzt weiß die Engine, dass sie diese Spielinstanz
verwenden muss. Und zweitens kehren
wir zu
unserer zweiten Map zurück , die wir erstellt haben. Also öffne ich das einfach und wir klicken hier auf Speichern. Und hier drin werde
ich auch
hier
unseren Teleport-Blueprint hinzufügen . Also ziehe ich das einfach rein und skaliere es auf ein bisschen größer. Ich füge das hinzu,
nur damit wir zwischen
unseren beiden Ebenen
hin und her wechseln können . Wir müssen einen Ebenennamen festlegen. Das ist also der Name
unserer ersten Map, die Third-Person-Map ist. Ich klicke einfach mit der
rechten Maustaste auf select, renne um ,
kopiere das und füge es dann so
in unsere Level-Variable
ein. Dann kehren wir zu
unserer ersten Third-Person-Karte zurück . Also öffnen wir
das einfach und
klicken dann auf Auswählen, speichern und wählen es aus. Und dann sind wir bereit, das tatsächlich zu testen. Also klicke ich auf „Spielen“. Sie können sehen, dass der
Wert derzeit falsch ist weil wir gerade erst angefangen haben
und ich den Wert nicht festgelegt habe. Aber wenn ich eins drücke, wird
es wahr. Wenn wir jetzt
in den Teleport gehen, wird
es auch dann wahr bleiben, wenn
wir in unserer zweiten Ebene sind. Und das liegt daran, dass unser Charakter
diese Variable
aus unserer
Beispiel-Spielinstanz liest und dann einrichtet. Und es spielt keine Rolle,
wie oft wir zwischen den Levels wechseln, es wird immer diesen Wert lesen, weil unsere Spielinstanz im Gegensatz zu unserem
Charakter und Controller nicht zerstört
wird. Dies ist natürlich ein
ziemlich einfaches Beispiel, bei dem eine Variable
in unserer Spielinstanz gespeichert wird. dann den Charakter lesen, können
Sie so viele
Variablen in Ihrem
Spielinstanz-Blueprint speichern,
wie Sie möchten. Und Sie können auf
diese Variablen so
ziemlich von allen Blaupausen aus zugreifen . Also haben wir unseren
ThirdPersonCharacter benutzt, aber wenn wir
wollten, konnten wir
im Teleport auf
unsere Spielinstanz zugreifen . Also könnten wir eine
Spielinstanz bekommen. Wir können auch hier auf unsere
Spielinstanz zugreifen. Das war's also für diese Lektion. Hoffentlich
verstehst du jetzt die Verwendung
der Spielinstanz
und wie du sie in deinen zukünftigen Projekten
verwenden kannst .
25. Zusätzliche Kursinhalte (Spuren): Hallo zusammen. In dieser Lektion
werden wir uns die Spuren ansehen. Spuren ermöglichen es
uns, eine Start- und
Endposition zu ermitteln und dann zu überprüfen was zwischen diesen
beiden Orten liegt. Um loszulegen, erstellen wir
einige Beispiel-Blueprints. Ich klicke einfach mit der
rechten Maustaste und erstelle eine neue Blueprint-Klasse. Es wird ein Schauspieler sein, ich werde
das
einfach als BP-Trace Cubed bezeichnen. Das machen wir auf. Und ich ziehe
die Lasche einfach nach oben auf das oberste Paar. Und wir fügen eine neue Komponente hinzu. Ich
füge einfach eine Cube-Komponente , die das kompiliert. Und wir gehen zum Event Graph. Also werden wir diesen
Würfel so einrichten, dass er in jedem Frame
eine Spur zu einem anderen
Würfel macht . Es beginnt also damit, dass diese
Start-Wiedergabe gelöscht werden, und der Schauspieler
beginnt mit Überlappungsknoten. Verwenden Sie tatsächlich den
Tech-Knoten und wir erstellen eine neue Variable und rufen diesen Würfel
einfach auf. Und ich setze seinen Typ auf BP Underscore Trace, Trace Cube. Und wir werden dann im
Detail-Panel kompilieren , das eine Instanz annehmen
wird , die so bearbeitet werden kann. Und wir werden wieder kompilieren. Dann ziehen wir
uns raus und holen unseren anderen Würfel. Wir wollen überprüfen, ob es gesetzt ist, also verwenden wir einen israelischen Knoten nur um sicherzustellen, dass wir
keine Fehler bekommen. Und dann, wenn r gültig ist, ziehen
wir uns heraus und suchen nach Spuren. Wenn wir hier nach oben scrollen, können
Sie sehen, dass wir ziemlich viele
verschiedene Trace-Knoten haben . Sie stehen hier alle unter
Kollision. Wir beginnen mit einer
einfachen Zeilenverfolgung pro Kanal. Also erstelle ich das. Jetzt. Eine Linienspur ist im Wesentlichen eine einzelne Pixellinie, die
von der Start- zur
Endposition verläuft und
überprüft, ob sie auf dem Weg
etwas trifft. Nun gibt es noch ein paar andere
Optionen auf diesem Knoten, aber wir werden
zuerst unser Beispiel einrichten und dann
erkläre ich diese. Also
ziehen wir uns aus unserem anderen Würfel heraus. Wir wollen zum Standort kommen. Und wir werden das an die Endposition anschließen
. Und dann verwenden
wir für den Startort einfach unseren
aktuellen Cube-Standort. Also hol dir den Standort des Schauspielers. Unsere Verfolgung
beginnt also an diesem
Ort der Aufbewahrung und bewegt sich
zum anderen Würfelstandort. Wenn ich jetzt Reisen sage, passiert die
Spur in einem Bild, es ist nicht so, als würde es
sich langsam bewegen. Es passiert alles in einem Frame
und prüft im Wesentlichen nur, ob es ein Objekt zwischen
den Start- und Endpositionen gibt? Ich werde auch den Draw Debug hier
einschalten. Ich setze es auf ein Bild, und das
ermöglicht uns im Wesentlichen, die Spur in unserem Spiel zu sehen Normalerweise sind Spuren unsichtbar, aber diese Option ermöglicht es uns,
eine Spur zu sehen , während wir im Spiel
spielen. Ein Frame bedeutet
, dass die Spur nur für einen Frame sichtbar ist. Dauer bedeutet, dass
die Ablaufverfolgung so lange
sichtbar ist, auf
die die Schubladenzeit eingestellt ist Sie beträgt
also standardmäßig fünf Sekunden. Und dann bedeutet persistent, dass die Spur für immer
sichtbar sein wird. Da wir also bei jedem Frame
unsere Spur zeichnen, können
wir
dies einfach für einen Frame festlegen. Jetzt werden wir einfach
diesen Blueprint zusammenstellen und auf unser Level
gehen. Ich
ziehe es einfach in einen Würfel. Und wir ziehen einen zweiten Würfel hinein. Und ich werde, wenn
mein zweiter Würfel ausgewählt ist, einfach
die andere Würfeloption hier
unten in den Details verwenden . Und wir wählen R eines Würfels. Und ich werde sie einfach beide nach oben
bewegen, damit wir sie ein bisschen
besser sehen können, wenn wir auf „Spielen“ klicken. Wenn ich also auf „Spielen“
klicke, kannst du sehen, dass wir diese einzelne Pixellinie
haben diese einzelne Pixellinie
haben , die von diesem Würfel zu
dem Würfel führt
, den wir ausgewählt haben. Wenn ich F1 drücke, um
in den Drahtgittermodus zu wechseln, können
Sie sehen, dass
die Ablaufverfolgung
in der Mitte unseres
Schlüsselpaars beginnt und gelesen wird. Und wenn es dann
auf den anderen Würfel trifft, bekommen
wir dieses rote Quadrat und
dann wird die Linie grün. Und das bedeutet im Wesentlichen
, dass bis zu diesem roten Quadrat die Spur nichts getroffen hat. Dann zeigt das rote Quadrat an,
dass es etwas getroffen hat, und dann wird das Licht
grün, weil die Tracer etwas über diesen Punkt
hinaus treffen. Jetzt
wundern Sie sich vielleicht, warum der Würfel, aus dem er stammt
,
verfolgt und getroffen werden. Und wenn wir den
Ebenen-Editor-Modus verlassen und zu unserem Ablaufverfolgungswürfel
zurückkehren, können
Sie sehen, dass es hier
tatsächlich eine Option gibt sich selbst ignorieren
auf der Linienspur
heißt. Und das bedeutet, dass
die Spur im Wesentlichen nur den Schauspieler
ignoriert
, der die Spur gemacht hat. Da wir also in unserem Würfel sind ich das Häkchen entferne und
kompiliere und dann auf Play klicke, kannst
du sehen, dass die
Linie bereits grün ist. Und wenn wir F1 treffen, können Sie sehen, dass unsere Spur
tatsächlich auf
unseren Würfel trifft , sobald sie beginnt, und dann wird
der Rest der Linie grün. Siehst du, es
trifft nicht wirklich unseren zweiten Würfel. Das liegt daran, dass es
sich um eine einzelne Linienverfolgung handelt. Es trifft ein Objekt und danach kümmert
es sich nicht mehr um
den Rest. nun zu
unserem Trace Keep zurückzukehren, gibt es noch ein paar andere
Optionen, damit wir die Schauspieler ignorieren
können. Auf diese Weise können wir
im Wesentlichen nur Akteure
festlegen, die unsere Linie
vollständig ignorieren soll. Wenn ich also herausziehen
und ein Make-Array erstellen sollte, können wir einfach
einzelne Akteure zu einem Array hinzufügen und
das dann zu unserer Linienverfolgung hinzufügen. Wenn ich also
meinen anderen Kubaner hier einstecken und das
in das Array einstecken würde, würde
ich wieder auf
Ignoriere self klicken , weil
wir wollen, dass unsere Spur den Würfel
ignoriert,
der die Ablaufverfolgung ausführt kompilieren,
wenn ich auf Play klicke, kannst
du sehen, ob ich F1 drücke
oder trace
nichts mehr trifft , weil wir
gesagt haben , dass wir es nicht
wollen oder es tut uns leid, wir wollen, dass es
unseren zweiten Würfel ignoriert. nun zu unserem
Ablaufverfolgungswürfel-Blueprint zurückkehren, gibt es
hier eine weitere Option namens Trace Channel. Jetzt
sind Trace-Kanäle wie Schichten, für die wir unsere Spuren
verwenden können. Der Grund, warum wir das haben ist, dass Sie möglicherweise ein
Objekt haben, das Sie eine Art von
Ablaufverfolgung blockieren
möchten, aber nicht für eine andere. Jetzt
können Sie also sehen, dass wir es auf Sichtbarkeit eingestellt
haben. Dies ist ein Ablaufverfolgungskanal
, der in die Engine eingebaut ist. Wenn ich
hier im Level zu meinem Würfel gehe und ihn auswähle, ich
die Cube-Komponente aus. Ich werde das nur ein bisschen vergrößern, damit wir sehen können,
was ich zur
Kollisionskategorie
herunterscrollen werde . Unter Kollisions-Voreinstellungen können
Sie sehen, dass derzeit alle
Dynamiken blockiert werden. Wir klicken hier auf das Drop-down. Sie können sehen, dass wir diese Optionen
hier
haben , dass sie ausgegraut sind. Das liegt daran, dass wir ein Preset ausgewählt
haben. Wenn wir also hier auf das
Dropdown klicken und auf Benutzerdefiniert klicken
, können wir die Einstellungen
anpassen. Sie können also sehen, dass
wir
für Rückverfolgungsantworten Sichtbarkeit
und Kamera haben. Wenn ich jetzt unser Schlüsselpaar so einstelle, dass den
Sichtbarkeits-Trace-Kanal
ignoriert, gehe ich zurück zu meinem Würfel. Ich werde einfach
den anderen Würfel hier
von unserem make-Array trennen . Also werde ich jetzt verfolgen, werde den anderen Würfel treffen. Ich klicke auf „
Kompilieren“ und dann auf „Spielen“. Sie können sehen, wenn ich F1 drücke, trifft
die Spur immer noch nicht auf den Würfel muss
daher
mit unserem hier ausgewählten Würfel zurückkehren. Wählen Sie unseren Würfel aus und stellen Sie ihn so , dass er die Sichtbarkeit
erneut
blockiert. Klicken Sie dann auf Spielen Sie sehen, dass es jetzt
auf diesen Würfel trifft. Und das liegt daran, dass wir diesem Würfelnetz
sagen, diese Art von Verfolgung
entweder ignorieren oder blockieren soll. Jetzt werden die Spuren für
alle möglichen Dinge
in der Spieleentwicklung verwendet . Sie verwendeten für die Interaktion , um zu bestimmen, was der
Charakter betrachtet. Sie können sie für Dinge wie
Footprints-Systeme verwenden , um zu erkennen auf
welcher Art von Boden die
Charaktere stehen. Du kannst sie für Waffen benutzen. Also klick Waffen scannen,
du verwendest Spuren. Also jedes Spiel, bei dem es
keine Geschosslaufzeit gibt, das normalerweise Spuren für
die Geschossberechnungen verwendet. Spuren haben also eine
sehr große Vielfalt an Verwendungsmöglichkeiten in der Spieleentwicklung. Aber das
Wichtigste an Spuren ist, wir tatsächlich Informationen
über das Objekt erhalten können , das sie getroffen haben. Wenn ich also
unseren Plan-Editor hier verlasse, kehren
wir zu unserem Ablaufverfolgungswürfel zurück. Sie können sehen, dass wir
einige Ergebnisse haben. Wenn ich jetzt hier aus meinem
Outfit rausziehe, können wir es kaputt machen. Und das liegt daran, dass es
eigentlich nur eine Struktur ist. Sie können die
Struktur der Ergebnisse der Hüften sehen. Damit wir das brechen können. Und das gibt uns diesen
Knoten hier mit allen Informationen über welches
Objekt, den Spurkopf. Jetzt haben wir hier auch einen
Rückgabewert, und das sagt im Grunde
nur, ob die Ablaufverfolgung tatsächlich
auf etwas trifft oder nicht. Normalerweise möchten Sie also
wahrscheinlich und if
node hier tun und nur dann
Informationen über
das Objekt erhalten nur dann
Informationen über
das Objekt wenn die Ablaufverfolgung tatsächlich etwas
trifft. Jetzt werde ich
einige dieser Variablen durchgehen. Ich werde nicht alle behandeln,
weil es einige gibt, aber ich werde
die am häufigsten
verwendeten oben durchgehen . Hier haben wir eine Blockierung. Dies macht im Grunde
dasselbe wie ein Rückgabewert. Es sagt, ob die Linienverfolgung auf etwas
gestoßen ist oder
nicht , und
das ist ein boolescher Wert. dann nach unten gehen, haben
wir Abstand. So weit vom Stern entfernt trifft
die
Linienspur auf etwas. Wenn also der Abstand zwischen
Start und Ende beispielsweise 500 Zentimeter beträgt und die Spur
100 Zentimeter vom Start entfernt auf etwas trifft , dann wäre dieser
Entfernungswert 100. Als Nächstes haben wir den
Standort und den Aufprallpunkt. Für eine Linienverfolgung haben
diese tatsächlich genau
den gleichen Wert,
aber sie werden sich für einige
unserer anderen Trace-Knoten
unterscheiden, die
wir uns gleich diese tatsächlich genau
den gleichen Wert, aber sie werden sich für einige
unserer anderen Trace-Knoten
unterscheiden ansehen werden. Als nächstes haben wir einen
der wichtigsten Pins,
nämlich unseren Hit Actor. Dies gibt uns einen Hinweis auf die Schauspieler- oder
Line-Trace-Treffer. Und es ist sehr nützlich für Dinge wie zum Beispiel, wenn Sie eine Waffe,
diese Pfizer-Linienspur oder
ein Interaktionssystem erstellen , wissen
möchten, welchen Schauspieler
die Linienspur tatsächlich getroffen hat, und den Hit Actor-Pin verwenden so würden Sie das machen. Wir haben auch Zugang
zur Hüftkomponente. Das wird also die Komponente
innerhalb des Schauspielers sein, die wir getroffen haben. Also würden
wir zum Beispiel unseren Würfel auf
die Würfelkomponente treffen. Diese Trefferkomponente
wäre also eine Referenz auf den Würfel innerhalb unseres Würfelaktors. Diese Pins funktionieren so, wie wir es zuvor mit Schauspielern und
Komponentenstiften getan haben. Wir könnten uns davon lösen, wir könnten Kosten verwenden, um
festzustellen, ob es Cast to ThirdPersonCharacter handelt. Und wenn die Spur einen
Third-Person-Charakter trifft, könnten
wir über unsere Kostenknoten auf
diese Informationen
zugreifen . Wir können auch unsere
Schnittstellenknoten verwenden und Informationen
vom Akteur erhalten. Also könnten wir so etwas
wie GetLocation machen. Und wir können diesen Akt der Anstecknadel verwenden, wie wir es
bei früheren
aktabhängigen Typen getan haben . Wir haben auch Zugriff auf den Namen des
Knochens, auf den die Spur trifft. Wenn ich also Spuren auf
ein Skelettnetz treffe, ist das ein animiertes
Maskennetz, das ein Skelett hat. Dadurch wird der
tatsächliche Bone-Name
des Kollisionsteils zurückgegeben , auf den
die Spur trifft. Sie können diese also verwenden
, um auf Bone-Namen zuzugreifen. Und dann haben wir hier unten
unsere Spur, Start und Trace. Und das wären
genau die gleichen wie unsere Eingaben hier oben
für Anfang und Ende. Bisher haben wir uns
nur die Linienverfolgung nach Kanälen angesehen. Jetzt gibt es einen weiteren
Line Trace-Knoten. Wenn wir also nach Lügenspuren suchen, können
Sie sehen, dass wir
auch eine Linienspur nach
Profil und eine Ausrichtungsspur
für Objekte haben . Wenn ich also eine
Linienspur für Objekte erstelle, ist
dies im Wesentlichen
derselbe Knoten. Es macht das Gleiche, was
wir hier draußen haben. Wir haben den Anfang und das Ende. Wir haben die gleichen Einstellungen, aber anstelle eines Trace-Kanals haben
wir diesen Array-Eingang
, der ein Objekttyp ist. Wenn ich von
hier wegziehe und sie verwende erstelle ein Array, mit dem wir tatsächlich
festlegen
können , welche Werte in diesem Eingabe-Array sein werden. Sie können also sehen, dass es hier
standardmäßig
eine Welt-Statik gibt. Ich
klicke auf das Drop-down. Sie können sehen, dass es
uns einige Objekttypen gibt. Wenn wir nun zu
unserem Würfel zurückkehren, wobei unser
Würfel hier ausgewählt ist, und zur Würfelkomponente gehen. Dies bezieht sich auf den hier aufgeführten
Objekttyp. Sie können also sehen, dass dies auf world to dynamic
gesetzt ist, was bedeutet, dass dieser Würfel
nur von
Spuren gehalten wird , die einen
Input der Weltdynamik haben. Diese Linienverfolgung hier
mit world static würde diesen Würfel tatsächlich komplett
ignorieren. Darauf beziehen sich die
Eingabeobjekttypen. Es ist dieser Objekttyp in
unseren Kollisions-Presets. Wir könnten das schnell
anschließen, um zu sehen ob ich das nur als gültig
in meine Ich werde unseren
vorherigen Line Trace-Knoten löschen. Wir stecken das in unseren
Stern und hören uns unser Ende an. Und wir werden das verbinden. können wir vorerst belassen. Wir setzen einfach den
Draw-Debug-Typ auf zwei damit ein Frame kompiliert wird,
und dann klicken wir auf Play. Sie können sehen, dass diese Spur den Würfel vollständig
ignoriert,
wenn ich F1 drücke . Aber wenn wir zur Spur zurückkehren,
dem Ablaufverfolgungswürfel , ändern wir
dies in die Weltdynamik. Drücken Sie Kompilieren und dann auf Wiedergabe Sie können sehen, dass die Spur
jetzt auf einen Würfel trifft, weil sie dieses Q trifft, weil
es sich um denselben Objekttyp handelt. Und das Coole
dabei ist, dass wir
tatsächlich mehrere Typen festlegen können . Wir können also einfach
einen neuen Stift hinzufügen und wir könnten auch wilde statische Aufladung hinzufügen. Wir könnten eine weitere Eingabe hinzufügen. Wir könnten dies zum Beispiel auf
**** setzen. Wir könnten so viele hinzufügen, wie wir
möchten, dass diese Spur hip wird. Die letzte
Notiz, die wir uns ansehen werden ist die Linienverfolgung nach Profilen. Wenn ich also nach
Linienverfolgung nach Profil suche, sind die Eingaben
jetzt dieselben
wie bei unseren vorherigen Knoten, aber wir haben diesen Profilnamen. Das bezieht sich
auf die
Objektantworten , die das Objekt hat, das
wir versuchen zu treffen. Also kehren wir
hier zu unserer Map zurück, wählen unseren Würfel aus
und in den
Kollisionseinstellungen können Sie
sehen, und in den
Kollisionseinstellungen können Sie dass wir Objektreaktionen haben. Jetzt verwende ich ****
als Beispiel. Sie können also sehen, dass **** auf Block gesetzt
ist. Wenn ich also zu meinem Tracer zurückkehre, lege ich den Profilnamen fest um das zu verbinden, wie
wir es zuvor getan haben. Verbinden Sie den Start, um den
aktiven Standort zu erhalten, und enden Sie zu unseren anderen
Würfeln, dem Standort des Wir schalten den Draw Debug
Type zwei für einen Frame ein. Wir klicken auf Kompilieren. Und wenn wir auf „Spielen“ klicken, können
Sie sehen, dass unsere Linienspur
die eines Würfels dort drüben trifft. Aber wenn wir akzeptieren und ich den Würfel
auswähle und
unsere Cube-Komponente auswähle , dann setzen wir unser **** Objekt als Reaktion
auf Ignorieren. Dann drücke ich auf „Spielen“. Sie können sehen, dass unsere Ablaufverfolgung
den Würfel nicht mehr trifft , da unsere Verfolgung in der
Objektantwort dieses Profils
erfolgt . Und unser Würfel
blockiert diese Spur nicht mehr. Als Nächstes werfen wir
einen Blick auf Multi-Traces. Wenn Sie sich jetzt erinnern, wenn unsere Spur gerade
auf etwas trifft, kümmert
sie sich nicht mehr um
irgendetwas anderes auf ihrem Weg, sie wird grün und
trifft keine anderen Objekte. Aber mit Multi-Trace,
da es uns ermöglicht,
mehrere Objekte in einer Spur zu treffen . Wenn wir also jetzt zu unserem
Ablaufverfolgungswürfel zurückkehren, werde ich diesen Trace-Hinweis, den
wir verwendet haben,
löschen und Miete. Wenn ich nach einer Linienverfolgung suche, können
Sie sehen, dass wir
mehrzeilige Trace-Versionen
der Knoten haben mehrzeilige Trace-Versionen
der , die wir uns angesehen haben. Wir können also eine mehrzeilige
Verfolgung nach Kanälen durchführen. Und Sie können sehen, dass alle Eingaben gleich sind, aber statt einer
einzelnen Eingabe haben
wir hier ein Array von Ausgaben. Und das funktioniert wie
ein übliches Array. Wir können sagen, dass Sie das
Getter-Ergebnis bei einem bestimmten Index erhalten. Wir könnten also die
get-Knoten-Eingabe verwenden , einen Index, auf den
wir vom Array
aus zugreifen möchten , und die
Ausgabe sind Trefferergebnisse. Wenn wir also aus unserem
Get-Knoten herausziehen, machen wir eine Pause. Sie können sehen, dass wir dieselbe Pausennotiz
haben wie zuvor. Und jetzt greifen wir auf das erste Treffergebnis
unserer Outfits zu. Jetzt können wir auch
diese Ergebnisse durchgehen. Wir können also für jede Schleifennote
einen Schleifenknoten a verwenden ,
und wenn Sie sich erinnern, durchläuft das alle Ergebnisse oder alle
Einträge in unserem Array. Und es wird
uns über
unsere Array-Elemente Zugriff auf jeden
einzelnen von ihnen geben. Wir können also wieder einen
Bremskit-Ergebnisknoten verwenden, auf all diese
Informationen über jedes
der Objekte zuzugreifen , auf die
unsere Linienspuren treffen. Abgesehen davon, dass mehrere Ausgänge für
unsere Hüftergebnisse haben, funktioniert
die mehrzeilige Spur genau so wie eine normale Linienverfolgung
nach Kanalknoten Wir bieten eine
Startposition und Endposition. Wir können einen Kanal sagen, auf dem
wir die Verfolgung durchführen möchten. Derzeit ist es also
auf eine gewisse Sichtbarkeit eingestellt. Wir können festlegen, ob
wir die Ablaufverfolgung sehen können oder nicht. Ich setze
meins nur auf, für einen Frame. Wenn wir jetzt kompilieren
und auf Play klicken, können
Sie sehen, dass unser
Trace funktioniert. Aber das Coole an mehrzeiligen Spuren ist, dass
wir mehrere Treffer haben können. Um das zu tun, ziehe
ich hier einen neuen Würfel hinein. Ich werde stattdessen meinen ersten Würfel so einstellen , dass er zu diesem zurückverfolgt wird. Wenn ich jetzt auf „Spielen“ klicke,
kannst du sehen, dass wir immer noch Wireframe mit F1 betreten. Du siehst, dass ich immer noch nur
einen unserer Würfel treffe. Wenn ich zu unserem Code zurückkehre und tatsächlich aus Outfits
ziehen kann, werde
ich diese Länge löschen, den
Loop-Knoten vorerst. Dies wird uns tatsächlich sagen,
wie viele Ergebnisse sich in
unserem Treffergebnis-Array befinden . Wenn wir also kompilieren und auf „Play“ klicken, sehen
Sie, dass es nur
ein Objekt trifft , obwohl
es zu diesem Würfel zurückverfolgt wird. Der Grund dafür ist
, dass dieser Würfel immer noch die
Sichtbarkeitsspur blockiert, was bedeutet, dass die Spur nicht durch andere Objekte
wandern und diese
treffen kann . Um das zu ermöglichen, müssen wir
unseren Würfel so einstellen , dass er sich tatsächlich überlappt. Die Spur. Also gehen wir hier zur Sichtbarkeit,
wobei unser Würfel ausgewählt ist, und ich
stelle ihn so ein, dass er sich überlappt. Wenn wir jetzt auf „Spielen“ klicken, können Sie sehen, dass wir zwei Objekte
treffen. Wenn wir unser Drahtmodell betreten, können
Sie sehen, dass wir
diesen ersten Würfel treffen und dann
unseren zweiten Würfel sehen. Das sollten Sie also beachten
, wenn Sie mit
mehrzeiligen Leiterbahnen arbeiten. Und die Zukunft ist, wenn
die Spur in der Lage sein soll, sich durch ein Objekt zu bewegen und
trotzdem andere Objekte zu treffen. Das Objekt muss auf Überlappung statt
auf Block gesetzt werden. Wenn es auf block gesetzt ist,
werden alle Objekte an der Ablaufverfolgung nach
diesem Objekt nicht der Ablaufverfolgung nach
diesem Objekt nicht in unseren Ergebnissen
von unserem mehrzeiligen Verfolgungsknoten ausgegeben . Jetzt gibt es andere
Arten von Ablaufverfolgungsknoten. Bisher haben wir nur die Linienverfolgung
verwendet. Wenn wir mit der rechten Maustaste klicken und
nach Trace suchen, scrollen
wir hier hoch. Sie können sehen, dass wir
einen Box-Trace nach Kanal,
Multicast, Trace für Kanal haben . Wir haben die Sphäre
Trace nach Kanal. Und im Grunde werden diese
dasselbe tun wie unser Kanal. Linienverfolgung für Kanal, Linienverfolgung für Profil und
Linienverfolgung durch Objekte, Knoten. Aber statt nur
einer einzigen Pixellinie gibt uns
tatsächlich eine Form. Wenn wir also zum Beispiel
die quadratische Spur nach Kanal auswählen, können
Sie sehen, dass wir
die gleiche Art von Eingaben haben. Der einzige Unterschied
ist, dass wir einen Radius haben. Dies ist die Größe der Kugel
, die ein rückführbares Bit ist. Wenn ich also unseren
mehrzeiligen Tracer lösche, können
wir unseren
Sphere-Trace-Kanal hochspielen. Ich verbinde das einfach mit Ende, Anfang und Ende. Und wir setzen den
Radius auf zehn. Das ist die Größe
der Kugel, die von der Start-
zur Endposition gehen
wird . Also setzen wir den Draw D Bucket zwei für einen Frame, der kompiliert wird,
und dann drücken wir Play. Sie können sehen, dass
es sich jetzt
anstelle einer einzelnen Linie um diese kugelförmige Leiterbahn handelt. Jetzt können Sie
nur noch einen größeren Bereich verfolgen. Angenommen, Sie
wollten nicht, dass eine Kugel ein Pixel groß ist,
wenn eine Waffe sie abfeuert, vielleicht wollten Sie, dass es eine Kugel Durchmesser von
55 Zentimetern ist, dann könnten Sie das stattdessen tun. Jetzt
gibt es, wie bei unserer Linienverfolgung, eine Multiversion
dieses Knotens. Wenn ich also mit der rechten Maustaste klicke und nach einer Kugelspur
suche, können
Sie sehen, dass wir eine
multiskalare Spur nach Kanal,
Maltesisch, faire Spur
nach Profil und
Multisphärenspur für Objekte haben Maltesisch, faire Spur
nach Profil und . Wir könnten also eine
Multisphären-Version dieses Knotens erstellen. Sie können sehen, dass es
genau dasselbe ist, aber wir haben unsere Radiuseingabe und können
mehrere Hüftergebnisse ausgeben. Jetzt werde ich nicht
jeden einzelnen Ablaufverfolgungsknoten durchgehen da die
meisten gleich sind. Es sind nur verschiedene Versionen
für die Mehrfachspur und dann die verschiedenen Spuren nach Typen und dann die
verschiedenen Formen. Aber wenn Sie
sie finden möchten, können Sie immer nach Spuren
suchen und beispielsweise nach einer
Box suchen, mit der Sie
auf die gesamte Box zugreifen können. Verfolgen Sie diese Top-Traces hier mit einer einzigen Spur und dann haben
Sie die Multi-Traces. Sie können auch nach
sphere suchen. Dadurch haben Sie Zugriff auf
alle Kugelspuren. Sie können nach
Linie, Spur, Linie suchen. Dadurch erhalten Sie Zugriff
auf andere Leitungsbahnen. Und dann hast du
endlich die Kapsel. Dadurch erhalten Sie
Zugriff auf alle Kapselspurtypen. Zum Schluss sagte ich, ich
würde Ihnen jetzt den
Unterschied zwischen
dem Aufprallpunkt und dem
Ort unserer Pause erklären , also wenn wir hier auf den
Abwärtspfeil klicken und ihn öffnen. Jetzt auf einer Linienspur sowohl die Position der
Aufprallpunkt
genau gleich, aber mit einer Kugel, beispielsweise dem Aufprallpunkt und der
Position an unterschiedlichen Stellen, wird
der Aufprallpunkt
sei der genaue Punkt, an dem die Kugel auf die
Oberfläche des Würfels trifft. Wenn Sie sich also
direkt am Rand der
Kugel vorstellen , wo sich die roten Kästchen befinden, ist
das der Aufprallpunkt. Der Punkt, an dem die
Kugel den Quader überlappt. Wohingegen der Positionsstift hier die Position
dieser Kugel ist. Unsere Sphäre, der Mittelpunkt davon,
ist also tatsächlich weiter von
der Oberfläche des Würfels entfernt. Das ist also der Unterschied
zwischen dem Aufprallpunkt. Das ist genau der Punkt
, an dem sich die Kugel überlappt, der Würfel und die
Position ist der Mittelpunkt des Würfels, wenn diese
Überlappung auftritt. Nun, das ist es für unsere Spuren
weniger als im Moment werden
wir jedoch
wieder Spuren verwenden In einigen unserer
zukünftigen Lektionen werden
wir jedoch
wieder Spuren verwenden.
26. Zusätzliche Kurse (Daten-Tabellen): Hallo zusammen. In dieser
Lektion werden
wir uns Datentabellen ansehen. Wir verwenden Datentabellen, um
Informationen zu speichern , die wir während des Spiels nicht ändern
müssen, aber wir können diese
Informationen mithilfe von Blaupausen abrufen. Ein Beispiel, wann Sie eine Datentabelle
verwenden könnten, ist zum Beispiel, wenn Sie ein Rollenspiel oder ein
Überlebensspiel erstellen , in dem Sie
Hunderte oder vielleicht
sogar Tausende
verschiedener Arten von
Gegenständen hatten Hunderte oder vielleicht
sogar Tausende und jedes
dieser Gegenstände zu bekommen, wird eine Art
von Informationen enthalten, die sich
während des Spiels
nicht wirklich ändern, wie zum Beispiel Name, Gegenstand, Beschreibung und Gewicht. Diese Werte
ändern sich möglicherweise während des Spiels nicht. Eine Datentabelle
wäre also eine gute Möglichkeit, diese Informationen zu speichern
und sie dann einfach im
Code abzurufen. Also lass uns anfangen. Wir müssen
eine neue Struktur schaffen. Und das liegt daran, dass
Datentabellen eine Struktur verwenden , um zu bestimmen, welche
Informationen sie stoppen können. Also klicken wir mit der rechten Maustaste und
gehen zu den Blaupausen, springen heraus und gehen zur Struktur. Ich nenne meinen
S-Unterstrich und das ist die Struktur des Beispiels struct. Wir machen das auf.
Und wenn Sie sich erinnern, haben
wir bereits eine
Lektion über Strukturen. Wenn Sie das also nicht gesehen haben, würde
ich empfehlen, es sich anzusehen. Aber wir werden
nur ein paar
neue Variablen hinzufügen und ihnen Namen
geben. Also unser erster Artikelname. Und wir setzen dies auf
einen Textvariablentyp. Wir rufen den zweiten an, warte. Und wir setzen das auf einen Float. Wir nennen den nächsten Schaden. Und wir setzen dies auf eine Ganzzahl und verursachen die Gesundheit des
letzten. Und wir setzen dies auch auf
eine Ganzzahl. Und dann speichern wir diese Struktur. Jetzt können wir unsere Datentabelle
erstellen. Wir kehren also zum Inhaltsbrowser zurück,
klicken mit
der rechten Maustaste und wählen die Kategorie
Verschiedenes aus. Und dann
wollen wir hier Datentabelle auswählen. Hier wählen
wir aus, welche Struktur unsere
Datentabelle verwenden soll. Also klicke ich auf das
Drop-down-Menü und suche nach S-Unterstrich-Beispielstruktur. Ich wähle das aus und klicke auf „Okay“. Jetzt benennen wir unsere Datentabelle. Also nenne ich meine
Beispieldatentabelle. Und wir doppelklicken
darauf, um es zu öffnen. Und ich werde
meinen einfach auf den obersten Pip ziehen. Jetzt haben wir ein neues
UI-Layout hier oben. Wir haben unsere Datentabelle. Dies sind die
aktuellen Informationen , die diese Tabellen speichern. Wie Sie sehen können, ist es
derzeit leer. Und dann
haben wir hier unten den Zeileneditor. Wenn wir also Informationen
in unserer Datentabelle haben , können
wir eine Zeile auswählen, und dieser Zeileneditor ermöglicht
es uns, die Informationen zu ändern, die in dieser bestimmten Zeile
gespeichert sind. Erstellen Sie also eine neue Zeile oder gehen Sie
zur Schaltfläche Hinzufügen
und drücken Sie diese. Jetzt können Sie sehen, dass wir eine
neue Zeile in der Datentabelle haben. Und wenn das ausgewählt ist, kann ich jede der
Variablen
ändern, die wir in unserer Struktur
für diese bestimmte Zeile
erstellt haben . Jetzt haben wir auch den Zeilennamen. Dies ist der Name, den wir verwenden werden um auf die Informationen zuzugreifen, die
in dieser bestimmten Zeile gespeichert sind, wenn
wir codieren und Blaupausen erstellen. Sie sollten also immer
sicherstellen, dass Sie
Ihren Zeilennamen und Ihren
Basistabellen benutzerfreundliche Namen geben . Also könnten wir
das umbenennen, um Acts zu sagen. Nehmen wir zum Beispiel an, wir haben eine Datentabelle
für Gegenstände
erstellt , die in unserem RPG-Spiel enthalten sein werden. Sie hätten also Einträge in der Tabelle states oder neue
Zeilen für jedes Element. Hier würden Sie zum Beispiel den Namen des
Artikels festlegen, damit wir unseren Namen so einstellen können, dass er aktiv wird. Wie gesagt, das Gewicht zehn, der Schaden an 20 zum Beispiel. Und jetzt haben wir diese Daten
in diesem speziellen Seil festgelegt. Und wenn wir wollten,
könnten wir eine weitere Zeile erstellen. Wir könnten also auf Hinzufügen klicken. Und jetzt haben wir eine neue Reihe. Vielleicht wollten wir
Informationen über Sortierungen speichern,
damit wir in C eine Schwertreihe erstellen können . Ich habe
den Zeilennamen in sort umbenannt und setze den Namen auf sort. Wer hat
zum Beispiel das Gewicht auf fünf und
unseren Schaden auf zehn gesetzt . Jetzt gibt es hier oben noch ein paar andere
Schaltflächen, mit denen wir unsere Reihen steuern können. Wir haben also Kopieren und Einfügen. Auf diese Weise können Sie
den Datensatz in eine Zeile kopieren und in eine andere
einfügen. Also, wenn ich zum Beispiel meine
AKS auswähle, und ich kopiere, und ich wähle mein Schwert geschrieben und ich mache Einfügen. Sie können sehen, dass
jetzt die Daten in
meiner Schwertreihe durch
die Informationen ersetzt meiner Schwertreihe wurden,
die in meiner AKS-Zeile festgelegt wurden.
Sie können sehen, dass der
Zeilenname nicht geändert wurde, dass immer noch gesetztes Schwert ist. Das liegt daran, dass Ihre
Zeilennamen eindeutig sein müssen. Wir konnten
zum Beispiel keine neue Zeile erstellen und sie acts nennen. Sie können sehen, dass
wir dadurch einen Fehler erhalten, da jede Zeile einen eindeutigen Namen
haben muss. Jetzt können wir auch Zeilen löschen. Wenn meine neue Zeile hier
ausgewählt ist, kann
ich auf Entfernen klicken,
um die Zeile zu entfernen. Und wir können auch Zeilen duplizieren. Wir können also eine Zeile auswählen, auf Duplizieren klicken und diese Zeile
wird dupliziert. Sie können sehen, dass es
einen neuen Namen namens
Schwert-Unterstrich 0 gibt . Wenn ich jetzt einfach
den
Schwert-Unterstrich 0 entferne, werde ich meine Informationen wieder
auf das setzen was es für
unsere SolidWorks war. Also wähle ich Sortieren und
setze das auf Schwert. Und wir setzen das auf, ich glaube, es war weißer
F5 und hat ihn beschädigt. Jetzt zeige ich Ihnen, wie wir
tatsächlich auf diese
Informationen zugreifen können , die wir in unserer
Datentabelle in einem Blueprint festlegen. Wir beginnen also unserem ThirdPersonCharacter
Blueprint. Ich mach das einfach auf. Und wenn wir mit der rechten Maustaste klicken, können
wir nach
Get Data Table Zeile suchen. Sie können sehen, dass wir hier zwei Optionen
haben. Ich werde hier den Tabellenzeilenknoten zum Abrufen von
Daten auswählen und sehen,
dass wir diesen neuen Knoten bekommen, den wir noch nie zuvor verwendet haben. Wenn wir unsere Datentabelle auswählen, legen wir auf
diese Weise fest, aus
welcher Datentabelle wir auf
Informationen zugreifen möchten. Wir haben also nur die
Beispieldatentabelle, die ich erstellt habe. Also werden wir das auswählen. Sie können sehen, dass sich unser
Rollenname tatsächlich automatisch in
eine kleine Dropdownoption
geändert hat . Und wir können sehen, dass wir sowohl unsere Acts als auch unsere
Schwertreihen
haben , die wir
in unserem Beispiel DataTable erstellt haben. Das sind nur
variable Eingaben. Nehmen wir an, ich hätte eine Zeilennamenvariable, in die ich mich hier einbinden
wollte. Ich könnte, wenn ich von hier
wegziehe, können
wir variable fördern. Und wenn Sie sich daran erinnern
, dass nur
eine neue Variable des Typs erstellt wird
, aus dem wir gezogen haben. Also werde ich einfach
eine neue Variable erstellen und sehen , dass sie einen
Namensvariablentyp verwendet. Es hat nur
für uns den Zeilennamen benannt, aber dies ist nur eine
Standardnamenvariable , die wir in
unsere Datentabelle einfügen können , um uns mitzuteilen, welche Zeile wir
aus unserer Datentabelle erhalten möchten. Aber jetzt lösche ich das einfach und wir verwenden das Auswahlmenü hier. Also wähle ich einfach
das Schwert aus. Jetzt haben wir zwei Ausgaben. Wir haben eine Reihe gefunden
und rho nichts gefunden. Dies wird jetzt häufiger
verwendet, wenn Sie eine Variable verwenden
, die in den Zeilennamen eingefügt wird. Denn wenn wir eine dieser
Auswahlen verwenden, erhalten wir die Zeilen, die in unserer Datentabelle
vorhanden sind. Es wird
also immer diese Zeilen finden. Aber wenn wir unsere
Zeilennamenvariable
verbunden hätten und sagen, dass
dies auf gesetzt war, wenn wir ziehen können, um
den Standardwert anzuzeigen,
sagen wir, dass dies auf
etwas wie Rucksack gesetzt wurde. gibt es jetzt keine Backpack-Zeile In unserer Beispieldatentabelle gibt es jetzt keine Backpack-Zeile. Also ist es, dieser Knoten würde rho naught found
ausführen,
weil er diese Zeile nicht findet. Wenn es zum Beispiel auf
etwas wie acts gesetzt wäre, dann wäre rho found fett, würde ausgeführt werden, weil es
diese Zeile in unserer Datentabelle gefunden hat . Jetzt haben wir
hier eine Ausgabe namens Outgrowth. Und wenn wir rausziehen,
können wir einen Break-Knoten machen. Und Sie können sehen, dass
es sich tatsächlich um
einen Break-Knoten für die Struktur handelt, die wir verwendet oder erstellt haben und die wir in unserer Datentabelle
verwenden. Damit wir diese Struktur durchbrechen können. Sie können sehen, dass
wir jetzt auf alle Informationen zugreifen können , die wir in unserer Datentabelle
festgelegt haben. Wenn ich also
zum Beispiel ein Startspiel
erstellen sollte, fügen wir dies
in unsere Datentabellenzeile ein. diese Weise wird sichergestellt, dass
der Zeilenname auf ax gesetzt ist, Auf diese Weise wird sichergestellt, dass
der Zeilenname auf ax gesetzt ist,
was dann
einfach aus der gefundenen Zeile gemacht wird. Wir ziehen
uns heraus und drucken eine Zeichenfolge. Und wir können, sagen wir,
den Namen mit unserer Druckzeichenfolge verbinden . Und wir werden es kompilieren
und auf „Spielen“ klicken. Und du wirst sehen, dass die
Axt ausgedruckt wird. Wenn wir zu unserem
ThirdPersonCharacter zurückkehren und
unseren Zeilennamen in
so etwas ändern , denke ich, wurde er verkauft. Wir können uns stapeln. Und wenn wir auf Play klicken, werden
Sie sehen, dass die Datentabelle innerhalb des ThirdPersonCharacter
diese Schwertreihe findet und die Informationen
zurückgibt, die
wir in dieser Zeile speichern. Wenn wir wollten,
könnten wir diese Daten ändern. Wenn ich also zur
Beispieldatentabelle gehe und den Namen
in unserer Schwertreihe
ändere, etwas anderes, sagen wir Apple. Wenn wir dies speichern und auf „Spielen“ klicken, werden
Sie sehen, dass es
jetzt Apple ausdruckt, obwohl wir die Schwertreihe
auswählen, und das ist nur der Zeilenname. Wir verwenden die Informationen,
die wir
in dieser Zeile gespeichert haben , und
das ist jetzt Apple. Jetzt gibt es eine andere
Möglichkeit,
unseren Get-Daten, Tabellenzeilen, Knoten mitzuteilen , welche Zeile wir ein bisschen
benutzerfreundlicher
machen möchten , als
nur eine Namensvariable zu verwenden. Wenn wir also hier unsere
Namensvariable aus dem
Ereignisgraphen entfernen , erstellen
wir eine neue Variable. Ich nenne
diese Zeile auswählen. Selektor setzt den Typ auf Handle des
Datentabellenzeilenhandlers, sorry. Wir werden das erstellen,
kompilieren und erhalten einen Fehler von diesem Knoten, nur weil wir keine Zeile in gesetzt haben. Also stelle ich das einfach auf Sortierung ein. Und wenn wir erneut kompilieren, können Sie sehen, dass der Fehler behoben ist. Jetzt können wir in unserer Zeile
eine Variable wie diese auswählen. Das ist im Grunde
nur eine Struktur , die in den Motor eingebaut ist. Wenn wir also herausziehen,
können Sie sehen, dass wir
einen
Zeilen-Handle-Knoten für die Break-Datentabelle haben , mit dem wir
auf die beiden Variablen zugreifen können ,
die innerhalb der Zeilenselektivstruktur
und im Klassenstandard festgelegt sind . Wenn unsere
Zeilenauswahlvariablen ausgewählt sind, können
Sie sehen, dass wir
Datentabelle und einen Zeilennamen sagen können. Jetzt momentan, wenn ich
Umbenennen auswähle und ich denke , dass wir keine Datentabelle
festgelegt haben. Also setze ich das hier auf unsere
Beispieldatentabelle. Wenn ich jetzt den Zeilennamen auswähle, können
Sie sehen, dass wir
damit auf
beide Zeilen zugreifen können, die in
unserer Beispieldatentabelle existieren. Ich könnte das auf Axt setzen. nun den Zeilennamen
auf unserem Break-Knoten verwenden, können
wir diesen direkt in unsere Zeile Get Data Table einbinden. Beachten Sie, dass wir jetzt eine
viel benutzerfreundlichere
Methode erhalten haben ,
diesem Knoten mitzuteilen , über welches Element wir Informationen
aus unserer Datentabelle
erhalten möchten . Also, wenn ich kompiliere, und jetzt würden wir erwarten, dass
unser Druckstring den Namen druckt, weil wir ihm so sagen, dass
er darauf zugreifen soll. Wenn wir zurückgehen, können wir das in das Schwert
ändern. Und jetzt sehen wir, wie es
den Apple-Namen ausdruckt , in den
wir ihn geändert haben. Nun, nur als Randnotiz: Wenn wir Planeten verlassen, können
Sie diese Variable auch in die
Zeile der Get-Data-Tabelle, den Knoten, einfügen. Aber ich
empfehle das nicht, denn wenn
Sie das anschließen und die Datentabelle in Datentabelle
ändern, die eine andere Struktur
verwendet
als die, die wir hier verwenden, können
Sie Fehler verursachen und
Probleme in Ihren Projekten. Normalerweise würde ich empfehlen, diese Verbindung einfach nicht verbunden oder getrennt zu lassen und dann die
Datentabelle, die Sie hier verwenden,
manuell einzustellen. Jetzt gibt es andere
Datentabellennotizen Wenn wir
also mit der rechten Maustaste klicken und
nach Datentabelle suchen
und nach
Zeile in C suchen, ist das eine. Existiert eine Datentabellenzeile? Dies macht im Wesentlichen dasselbe wie unsere Zeile „Datentabelle
abrufen“, gibt uns
jedoch nicht die in dieser Zeile gespeicherten
Informationen. Es wird lediglich überprüft der Zeilenname
in der DataTable existiert. Also könnten wir diese Knoten wieder kopieren
und einfügen. Ich gebe meinen Zeilennamen und setze die Datentabelle
auf eine Beispieldatentabelle. Jetzt und fange an, damit zu spielen. Wir drucken einfach „true“ oder „false“. Wenn die von
uns ausgewählte Datentabelle existiert. Jetzt, da wir
unsere Zeile verwenden, wählen Sie eine Variable aus. Wir können sowieso nur
Datentabellen auswählen, die
in dieser Datentabelle existieren . Es wird also immer true
zurückgegeben, wenn wir
diesen Knoten verwenden , um zu steuern, welche
Zeile wir auswählen möchten. Aber vielleicht haben wir stattdessen
eine Namensvariable verwendet. Und so könnten wir hier
einen Namen setzen, sagen wir Rucksack. Und diese Zeile
existiert nicht in unserer Datentabelle. Wenn wir also auf „Spielen“ klicken, werden Sie
feststellen, dass es falsch gedruckt wird. Wenn ich zurückgehe und
das ändere, um zu sagen, dass das so ist, können wir auf Play klicken. Sie werden sehen, dass es
true zurückgibt, weil diese Zeile in unserem
Beispiel DataTable
existiert. Ein weiterer Knoten ist der, wenn wir diesen Code
hier löschen, nur um ein bisschen mehr Platz zu schaffen, verschiebe
ich
ihn hier hoch. Wenn wir mit der rechten Maustaste klicken und
nach Datentabellen suchen, können
Sie sehen, dass wir
Zeilennamen für Datentabellen benötigen. Wenn ich diesen Knoten erstelle, sehen
Sie, dass wir eine Datentabelle festlegen. Wir setzen die
Beispieldatentabelle, und dann ist ihre Ausgabe
tatsächlich ein Array von Namen. Dadurch wird ein
Array ausgegeben, das alle Namen
der Zeilen enthält , die in unserer
Beispieldatentabelle
existieren. Wenn ich das also verbinde,
um mit dem Spielen zu beginnen, werden
wir
diese Ergebnisse durchgehen. Dieser Knoten wird also für
jede Zeile ausgeführt , die
in unserem Array existiert. Wir können einfach eine solche
Druckzeichenfolge machen. Jetzt werden alle Namen der
Zeilen gedruckt , wenn das Spiel beginnt. Wenn wir also auf „Spielen“ klicken, können Sie
sehen, dass es Wachs und Schwert
ausdruckt. Jetzt. Abschließend möchte ich nur erklären, wie zusammengesetzte Datentabellen funktionieren. Zusammengesetzte Datentabellen
ermöglichen es uns,
mehrere Datentabellen
zu kombinieren, sodass wir auf mehrere Datentabellen zugreifen
können wenn wir eine
bestimmte Datumstabelle auswählen. Damit meine ich, wenn wir eine weitere Datentabelle erstellen, müssen diese Datentabellen
jetzt dieselbe Struktur verwenden voice. Wir können sie nicht
miteinander kombinieren. Wir erstellen also eine
neue Datentabelle. Wir werden erneut die Beispielstruktur
S-Unterstrich verwenden. Und ich drücke Okay, ich
werde das benennen. Wir nennen das Waffen Items. Sie könnten zum Beispiel
verschiedene
Datentabellen für Waffen,
Verbrauchsmaterialien, Medikamente und
ähnliches haben verschiedene
Datentabellen für Waffen, ,
wenn Sie beispielsweise Gegenstände
für ein RPG-Spiel herstellen möchten. Also öffne Waffen IPython-Gegenstände. Und ich werde nur ein paar neue Reihen cooler
Schrotflinten
erstellen . Und das nenne ich Gewehr. Setze den Namen auf Gewehr. Rifle auch. Und auch die Schrotflinte
zur Schrotflinte. Stellen Sie nun das Gewicht für ein,
für die Schrotflinte und sechs für das Gewehr wird der
Schaden auf 30 gesetzt, und Schokolade wird mehr Schaden auf zehn
gesetzt. Jetzt haben wir diese Zeilen in unserer Datentabelle für
Waffengegenstände. Wenn wir nun zu
unserem ThirdPersonCharacter zurückkehren und zu dem Code
zurückkehren, den
wir zuvor erstellt haben. Diese Zeilen befinden sich jetzt in
einer anderen Datentabelle. Wenn wir also hier unseren
Zeilenwähler auswählen, sehen
Sie, dass ich
diese Zeilen nicht auswählen kann, da wir
derzeit
die Beispieldatentabelle verwenden. Und wenn wir zum Beispiel einen Zeilennamen einstecken einen Zeilennamen und diesen anschließen
und den Zeilennamen manuell so einstellen
würden , dass er Schusswaffe sagt. Wenn dieser Code ausgeführt
wird, würde er
dieses Seil tatsächlich nicht finden, da
diese Zeile wiederum in
unseren Waffengegenständen vorhanden ist, nicht in unserer
Beispieldatentabelle. Es würde also nicht gefunden werden. Nun, weil die
Beispieldatentabelle und die Waffen-Item-Datentabelle dieselbe Struktur
verwenden. Wir können sie
mithilfe einer Konzertdatentabelle miteinander kombinieren. Wir gehen also zum
Inhaltsbrowser, klicken mit der rechten Maustaste, gehen zu Verschiedenes und möchten eine
zusammengesetzte Datentabelle erstellen. Auch hier müssen wir eine Struktur
auswählen. Dies muss nun dieselbe
Struktur sein, die wir sowohl für die Datentabelle als auch
für die Datentabelle für
Waffengegenstände verwenden . Wählen Sie also den
Beispiel-Struct-Hit aus, okay? Und wir nennen das zum Beispiel die
Hauptartikelliste. Wir öffnen das und
haben einen neuen Editor. In einer zusammengesetzten Datentabelle können Sie eigentlich nicht
viel tun . Wir können neue Zeilen
oder ähnliches erstellen. Was wir jedoch tun können,
ist übergeordnete Tabellen hinzuzufügen. Also fügen wir ein neues Element hinzu. Und wir werden das auf
unsere Waffen einstellen, die Gegenstände nicht sehen sollten. Danach können wir jetzt
unsere Waffengegenstände in
unserer zusammengesetzten Datentabelle sehen . Und wir werden ein weiteres Element
hinzufügen. Und wir werden dies
auf unsere Beispieldatentabelle setzen. Sie können sehen, wenn ich das mache, die Elemente, die sich in
unserer Beispieldatentabelle befinden auch in unserer
Master-Artikelliste hinzugefügt wurden. Jetzt können wir
diese hier nicht bearbeiten, oder wir können im Grunde genommen neue Datentabellen
hinzufügen und die Zeilen in
einer zusammengesetzten Datentabelle
kombinieren. Jetzt, wo wir all
diese Elemente in unserer
zusammengesetzten Datentabelle haben , werde
ich, wenn wir zu unserem
Third-Person-Charakter zurückkehren, anstatt hier die
Beispieldatentabelle zu verwenden, wenn wir zu unserem
Third-Person-Charakter zurückkehren,
anstatt hier die
Beispieldatentabelle zu verwenden, einfach
die Verbindung trennen Zeilenname für den Moment. Wir können dies auf
die Hauptartikelliste setzen. Das ist unsere zusammengesetzte Datentabelle. Und jetzt, wenn Sie
zum Zeilennamen gehen, können
wir tatsächlich unsere Schrotflinte, unser
Gewehr und diese
Pfeile
auswählen , die
in der Datentabelle für Waffengegenstände vorhanden sind . Oder wir können die Handlungen und
Schwertreihen auswählen , die
in unserer Beispieldatentabelle vorhanden sind. Auf diese Weise können wir
mehrere Datentabellen kombinieren, sofern sie
dieselbe Struktur verwenden, in einer Big-Data-Tabelle, auf die wir dann
in unserem Blueprint zugreifen
können. Das ist hilfreich für die Organisation. Wenn Sie viele Daten haben
, die Sie in
Datentabellen speichern
werden. Und wenn wir
unsere
Tabelle mit dem Status von Waffengegenständen angeben und ich neue Reihen hinzufüge, nenne
ich das ein solches
Messer. Und wir sparen. Wenn wir zum ThirdPersonCharacter
Blueprint zurückkehren, können
wir
hier auf das Drop-down-Menü klicken und Sie können sehen, dass das Messer jetzt angezeigt wird
und es
automatisch aktualisiert wird, wenn wir die Informationen hinzufügen oder bearbeiten und
Eva sind unsere Waffengegenstände, Datumstabelle oder die
Beispieldatentabelle. Wenn wir hier zu
unserer Zeilenauswahl gehen, können
wir auch hier die zusammengesetzte
Datentabelle verwenden. Wenn ich also zur Option
Datentabelle gehe, können
wir dies auf die
Master-Elementliste setzen. Und wenn wir jetzt kompilieren und
unseren Zeilennamen betrachten, können
Sie sehen, dass wir auch hier auf
alle Waffen zugreifen können,
sowohl aus unserer Beispieldatentabelle als auch aus der
Datentabelle für ganze Waffengegenstände. Dann können wir einfach
den richtigen Namen eintragen. Und jetzt können wir ganz einfach
unsere Zeilenauswahl verwenden,
um eine dieser Zeilen aus
einer unserer Datentabellen auszuwählen . sich auch hier keine Sorgen
über diesen Fehler. Das liegt daran, dass wir
keinen Zeilennamen festgelegt hatten. Wenn ich kompiliere, können Sie sehen
, dass der Fehler behoben ist. Zusammenfassend lässt sich sagen, Datentabellen sehr
gut darin sind, viele
Informationen
zu speichern, die während des Spiels nicht geändert werden müssen . Wenn du Informationen hast, die
geändert werden
müssen, kannst du diese nicht in
einer Datentabelle speichern, da du die Daten der Tabelle
während des Spiels nicht ändern kannst.
27. Zusätzliche Kurseinheiten (Overlap: Hallo zusammen. In dieser
Lektion werden wir über
die überlappenden Knoten sprechen. Overlap Notes sind eine wirklich
gute Alternative zur Verwendung von Box- oder
Kugelkollisionskomponenten. Eine sehr häufige Sache, die ich
bei Anfängern sehe , ist, dass
Sie dazu neigen,
ihre Level zu öffnen und
sie sind mit
Box- und
Sphere-Kollisionskomponenten gefüllt . Diese können jetzt funktionieren und ziemlich
einfach, mit
ihnen zu arbeiten. Aber das Problem ist später
in Ihrem Projekt, wenn Sie
möglicherweise Projektile oder Spuren
oder Fahrzeuge haben möglicherweise Projektile oder Spuren
oder , die versuchen, sich
zu bewegen, können
diese Kollisionskästen
und Kugeln die Funktionsweise dieser
Systeme
beeinträchtigen. korrekt, müssen Sie
möglicherweise umrunden
und die
Kollisionseinstellungen in
Hunderten von verschiedenen Quader
- und Kugelkollisionskomponenten ändern Hunderten von verschiedenen Quader . Überlappungsknoten bieten uns also eine nützliche Alternative zur Verwendung von
Box- und Kugelkomponenten. Manchmal können wir zu
unserem ThirdPersonCharacter gehen und ich
werde ein Beispiel aufstellen. Rechtsklicken wir und
suchen nach Eingaben. Eins. Dies ist ein Hinweis, der,
wie wir ihn zuvor verwendet haben, ausgeführt
wird, wenn wir
einen auf unserer Tastatur drücken. Wenn wir mit der rechten Maustaste klicken,
können wir nach Überlappungen suchen. Sie sehen, dass wir hier
verschiedene Überlappungsnotizen haben. Ich beginne mit der
Box-Überlappung für Schauspieler. Also werden wir diese Funktion erstellen. Jetzt haben wir einige
Eingaben für diesen Knoten. Wir haben eine Kastenposition. Dies ist der Ort, an dem das
Kontrollkästchen aktiviert wird. Wir haben einen Box-Umfang, der angibt
, wie groß die Boxen sind. Wir haben Objekttypen. Das sind also die
Arten von Objekten , die Quaderüberlappungen erkennen
werden. Wenn Sie sich an
unsere Line Trace-Lektion erinnern, suchen
wir nach make array. Wir können festlegen, welche
Objekttypen dieser Knoten erkennt. Wir können auch mehrere
Eingaben hinzufügen. Also wollten wir statische Weltdynamik erkennen . Wenn Sie sich erinnern, wenn
wir zu einem Objekt gehen, sagen wir in einer Welt wie
dieser Rampe hier drüben, wenn wir die Netzkomponente auswählen, wird zu den
Kollisionseinstellungen gescrollt und Sie sehen,
dass sie derzeit auf Standard gesetzt ist, aber ich werde es an Brauch
verkaufen. Und wenn Sie
den Objekttyp überprüfen, können
Sie sehen, dass dieser derzeit auf wild static
gesetzt ist. Unsere überlappende Box
würde also dieses
Objekt erkennen, weil wir ihm
sagen, dass
wir statische Objekttypen
der Welt erkennen wollen . Als nächstes haben wir unseren
Schauspieler-Klassenfilter. Dies zeigt der
Box-Überlappung
an, dass wir nur einen Schauspielertyp so
schnell finden wollen , dass dies so eingestellt ist, dass er einen solchen
Third-Person-Charakter sagt. Unser Buchüberschneidungsknoten würde jetzt nur
ThirdPersonCharacter Blueprint zurückgeben. Vergiss nicht, das zu löschen, sonst funktioniert unser Beispiel
später nicht mehr. Stellen Sie also sicher, dass Sie dies auf none
setzen. Schließlich müssen wir
Schauspieler ignorieren. Dies ist nur eine Reihe von
Akteuren, die wir eingeben können, um zu
sagen, dass sich unsere Bücher überschneiden, dass
wir sie ignorieren wollen. Also könnten wir uns
daraus ziehen und ein make-Array erstellen. Wir könnten aus
dieser Make-Rate herausziehen und
nach uns selbst suchen. Und jetzt teilen wir
der Box-Überlappung , dass wir
unseren ThirdPersonCharacter
und die Ausgaben
dieses Node oder Out-Actors ignorieren sollen unseren ThirdPersonCharacter
und die Ausgaben . Dies ist eine Reihe von Akteuren, die die Box überlappen, überlappt. Und dann haben wir einen Rückgabewert. Und das ist nur ein boolescher Wert , der entweder wahr oder falsch wenn der Box-Overlap-Knoten irgendetwas
überlappt. Lassen Sie uns nun ein Beispiel geben. Wir werden den Standort des Schauspielers ermitteln und hier werden
wir unsere Box-Überlappungsprüfungen durchführen. Also verbinden wir das bis
zur Box-Position und setzen die Box-Ausdehnung auf
200 mal 200 mal 200. Wir legen die Objekttypen fest. Wir belassen das als
statisch und dynamisch. Stellen Sie sicher, dass der
Klassenfilter für Schauspieler auf none gesetzt ist. Andernfalls kann
es keine anderen Akteure erkennen. Und wir werden das selbst in den Zugriff
stecken
lassen ,
um es auch hier zu ignorieren. Wir könnten das einfach
in unsere Notizen hier einfügen. Aber etwas, das ich gerne verwende,
wenn ich
Box-Überlappungsaktoren-Knoten verwende , ist ein Debug-Knoten. Wenn wir also mit der rechten Maustaste klicken
und nach Debug suchen
, zeichnen Sie das Debug-Feld. Dieser Knoten ermöglicht es uns,
eine visuelle Box in der Welt zu erstellen , die
wir zum Debuggen verwenden können. Also werde ich das
in unsere Draw Debug-Box stecken. Und ich werde das
in Boxen überlappen. Und für den Mittelpunkt verwenden
wir einfach den
Standort des Schauspielers und
stellen ihn auf das gleiche Maß ein, in dem
sich unsere Box überschneidet. Saucen zu zweihundert, zweihundert, zweihundert. Ich setze die Dauer auf drei Sekunden und die
Dicke auf eins. Auf diese Weise erstellen wir
einfach eine visuelle Box und das Level für drei Sekunden an derselben Stelle
und Größe, in
der sich unsere Box überlappt. So können wir uns ein
Bild von der Größe des Bereichs machen,
den wir auf
überlappende Akteure überprüfen. Jetzt werde
ich mich einfach von Vergewaltigung
unserer Schauspieler zurückziehen und nach Länge suchen. Und wir werden
dies nur verwenden, um festzustellen, wie viele Akteure sich
tatsächlich überschnitten haben. Wenn wir unsere Bücher laufen
überlappen Schauspieler Knoten. Also füge ich das in einen Druckstring wie
diesen ein und wir kompilieren. Jetzt können wir das testen. Wenn ich also auf Play drücke
und eins drücke, können
Sie sehen, dass wir diese
große Box haben und Sie können sehen , dass unser Text eine
ausdruckt. Und das liegt daran, dass sich
unsere Bücher derzeit überschneiden. Die Anmerkung des Schauspielers gilt
nur für das Stillen eines Schauspielers. Das ist der Boden. Und der Grund dafür ist
, dass wir
ihm sagen , dass er unseren Charakter ignorieren soll. Wenn ich hier rüber renne
und eins drücke, kannst
du sehen, dass es auf drei
gestiegen ist weil wir auf die Rampe,
dieses Quadrat und den Boden treffen . Dies ist nur eine einfache Methode, um zu
erkennen, welche Akteure
einen bestimmten Bereich überlappen ,
ohne
eine neue Box- oder
Kugelkollisionskomponente erstellen zu müssen . Jetzt gibt es andere
Versionen dieses Knotens. Wenn wir auf Escape klicken und zu unserer dritten Karotte
zurückkehren, ThirdPersonCharacter
Blueprint, klicken wir mit der rechten Maustaste und suchen nach Überlappung. Sie können sehen, dass wir eine
Box überlappende Komponenten haben. Das funktioniert genauso
wie unsere Box-Overlay-Schauspieler. Stattdessen wird nur nach
Komponenten gesucht. Anstatt also die Schauspieler
zurückzugeben, werden die
Komponenten zurückgegeben, die es überlappt. Wenn sich beispielsweise unser
Boden überlappte, überprüft
unser Feld überlappte
Komponenten. Es würde anstelle
des Cube-Acts zur Referenz zurückkehren, es wird den Stapel
Mesh Component Restaurants anstatt aus den
Out-Komponenten zu vergewaltigen. Abgesehen davon
ist bei diesem Knoten alles gleich. Sie können die Positionsgröße,
Objekttypen usw. festlegen . Jetzt haben wir auch verschiedene Formen für diese Überlappungsknoten. So können wir beispielsweise
eine Kugelüberlappung erzeugen. Sie können sehen, dass wir
unsere Kugelüberlappungsaktoren
und Knoten für
Kugelüberlappungskomponenten haben . Und schließlich gibt es auch die
Kapselüberlappungsknoten. Sie können also sehen, dass wir
Kapselüberlappungsaktoren haben und Überlappungskomponenten erfassen. Und das sind nur
verschiedene Formen, die wir auf überlappende
Akzeptoren oder Komponenten prüfen würden. Das war's also für diese Lektion. Es ist eine kurze, die
ich nur auf
diesen Knoten machen wollte , weil ich sie wirklich nützlich
finde. Und hoffentlich können sie die Anzahl der
Quader- und Kugelkomponenten
reduzieren , die Sie in Ihren Levels haben.
28. Zusätzliche Unterrichtsstunden (Eingaben): Hallo zusammen, in dieser
Lektion werde ich Sie durch
das Eingabesystem führen. In Unreal Engine five haben
wir jetzt zwei Eingabesysteme. Wir haben das Original
von Unreal Engine four und wir haben das neue
verbesserte Eingabesystem , das jetzt in
Unreal Engine fünf enthalten ist. In dieser Sitzung
werde ich Sie durch das ursprüngliche
Eingabesystem führen. Und der Grund, warum ich
das mache, sind viele Projekte, zumindest zum Zeitpunkt
der Dreharbeiten,
immer noch dieses ursprüngliche System verwenden. In unserer nächsten Lektion werde
ich Sie dann durch das neue verbesserte Eingabesystem führen. Was meine ich jetzt
mit Eingabesystem? Und das Eingabesystem ist,
wie wir Spieler dazu bringen eine
Taste
auf meiner Tastatur ihrer Maus oder einem Gamepad zu drücken, das
tatsächlich in
Code übersetzen , der in
unseren Blaupausen ausgeführt wird. haben wir bereits
einige Eingabeknoten verwendet In
unseren vorherigen Lektionen haben wir bereits
einige Eingabeknoten verwendet. Wenn wir zum
ThirdPersonCharacter gehen und ich mit der rechten Maustaste klicke und nach Eingaben
suche. Zum Beispiel können
Sie sehen, dass
wir das eine Eingabeereignis verwendet haben, und das ist das
Ereignis, das ausgeführt wird, wenn wir die eine
Taste auf unserer Tastatur drücken. Wenn wir
zum Detail-Panel gehen, können
wir diese
eine Eingabe tatsächlich so ändern , dass sie für uns funktioniert Wir können diese Schaltfläche hier drücken und dann die
Taste auswählen, die sie verwenden soll. So könnte ich zum Beispiel L drücken. Jetzt wird dieser Knoten
immer dann ausgeführt, wenn er immer gedrückt wird. Oder wir können
hier auf dieses Dropdown klicken und uns all
die verschiedenen wichtigen Eingaben
ansehen , die
der Motor eingebaut hat. Nun sind diese Arten von Knoten
sehr hilfreich, um Dinge zu
testen, debuggen und einfach schnell eine Eingabe
in einen Blueprint zu erhalten . Sie sind jedoch nicht
besonders nützlich für vollständige Spiele oder
fertige Spiele. Der Grund dafür ist, dass die
meisten modernen Spiele
ein Tastenbindungsmenü haben , in dem der Spieler Tasten
an vier
verschiedene Aktionen erneut binden kann . Wenn Sie diese
Knoten und ein fertiges Spiel verwenden, können
Sie das nicht tun. Und hier kommt ein
Eingabesystem ins Spiel. In dieser Lektion werde
ich jetzt mit Ihnen über
das Eingabesystem
von Ihnen
sprechen . Und der Grund
dafür sind viele Projekte, die Sie möglicherweise eröffnen. Wir werden weiterhin das
Eingabesystem von UE für verwenden. Es ist also eine gute Idee, sich mit der Funktionsweise vertraut zu machen. In unserer nächsten Lektion werden
wir uns dann das
neue verbesserte Eingabesystem ansehen , das mit
Unreal Engine five geliefert wird. Um loszulegen, schauen
wir uns eine der wichtigsten Eingaben an ,
die
mit einem Third-Person-Charakter einhergehen. Wenn wir hier nach unten scrollen und die Sprungeingabeaktion
finden, können
Sie sehen, dass
anstatt einen Schlüsselnamen zu sagen, es Eingabeaktionssprung heißt. Das liegt daran, dass
diese Eingabeaktion tatsächlich
in unserem Eingabesystem definiert
ist. Und dann weisen wir im
Eingabesystem Schlüssel zu. Um dieses System zu finden, können
wir zu
Projekteinstellungen bearbeiten gehen. Und dann gehen wir hier runter
zum Eingangsbereich, und das ist unter der
Motorenkategorie. Hier sehen Sie, dass wir
Aktionszuordnungen und
Zugriffszuordnungen haben . Meins ist bereits geöffnet, aber deins könnte
ein bisschen so aussehen. Wir klicken auf den Pfeil
neben Aktionszuordnungen. Sie können sehen, dass wir
die Sprungeingabeaktion haben. Und wenn Sie dann darunter
auf den Pfeil daneben klicken, können
Sie sehen, dass die
Standardtastenbindung dafür die Leertaste ist. Und wir haben auch hier ein wichtiges Buy-In für das Gamepad. Das
sagt der Engine im Wesentlichen dass wir
ein Action-Mapping erstellen wollen. Jetzt
ähnelt ein Action-Mapping
unseren Eingabeereignissen, die
wir zuvor verwendet haben. Es kann entweder
gedrückt oder losgelassen werden. Und wir erzählen
es, dass wir
ein neues Action-Mapping
namens Jump erstellen . Und wir wollen, dass diese beiden Schlüssel
an diese Aktion gebunden sind. Und das ist der Grund, warum,
wenn wir
in der Third-Person-Map spielen ich die Leertaste drücke, diese
Sprungeingabeaktion gedrückt ausgeführt
wird. Und wenn ich dann den Weltraum loslasse, wird
freigegeben laufen
und es wird
die Jump- und
Stop-Jumping-Events ausführen . Jetzt können wir hier auch unsere
eigenen Eingabeaktionen erstellen. Wenn Sie also zu
den Projekteinstellungen zurückkehren, können
wir
hier einfach auf diesen
kleinen Plus-Button klicken , um eine
neue Eingabeaktion zu erstellen. Ich kann es
so nennen wie shoot zum Beispiel wird den Schlüssel auf
setzen. Sie können den Schlüssel also auf
verschiedene Arten festlegen und hier auf
diese Schaltfläche klicken
und dann auf den gewünschten
Schlüssel klicken. Also kann ich einfach die linke
Maustaste drücken und du wirst sehen, dass es automatisch für mich
abgeholt wird. Oder Sie können
die verschiedenen
Tastenkombinationen durchsehen , indem Sie einfach auf
diesen Abwärtspfeil klicken und die Optionen
durchgehen. Jetzt haben wir
einen neuen Action-Input erstellt und sein Name ist shoot. Und wenn wir die
linke Maustaste drücken, wird
das Schuh-Event ausgeführt. Wenn wir zu unserem
ThirdPersonCharacter zurückkehren, klicken
wir mit der rechten Maustaste und
suchen nach Eingaben. Action-Shooting in C, das unter Auswirkungen, die wir haben, ist
jetzt Shoot-Event. Und das wird immer dann ausgeführt, wenn wir unsere linke Maustaste drücken. Also kann ich hier eine
Druckzeichenfolge hinzufügen. Und ich werde einfach drücken. Ich kopiere und füge
das ein und lege es so ein. Wenn wir jetzt auf Play klicken, können
Sie sehen, dass die Registrierung
gedrückt
wird, wenn
ich die Maustaste drücke , und wenn ich loslasse, wird die
Registrierung freigegeben. Das Gute an
diesem System ist, dass Sie mehrere Schlüssel
hinzufügen können , um an dasselbe Ereignis
gebunden zu werden. Angenommen, Ihr Spiel wurde auf dem Desktop funktioniert und es hat auch auf
Konsole und VR funktioniert. Sie können Eingaben
für die VR, die Sprungtaste und
das Gamepad-Ki haben , und das könnte alles unter der Shoot-Kategorie liegen, wenn wir neue Eingaben hinzufügen
möchten. Also können wir einfach auf
das kleine Plus in C klicken, ich kann jetzt einen neuen Schlüssel hinzufügen. Ich könnte zum Beispiel sagen, drücken Sie K. Jetzt wird k auch
dieses Shoe-Event
sowie die linke Maustaste ausführen . Wenn Sie eines davon
entfernen möchten, klicken
wir einfach hier auf das
kleine Mülleimersymbol. Wenn Sie ein
ganzes Aktions-Mapping entfernen möchten, klicken
Sie einfach auf
den Papierkorb neben dem Namen des
Aktions-Mappings. Denken Sie jetzt daran, wenn
Sie das tun und immer noch das Ereignis haben und
die Sache, wenn wir eine Umfrage durchführen können, werden
Sie sehen, dass wir eine Warnung erhalten. Und das sagt uns nur das. Mapping ist
in unseren Projekteinstellungen nicht mehr vorhanden. Also werden wir dies
vorerst löschen, weil wir es nicht mehr verwenden, und wir werden kompilieren,
um diesen Mangel zu beseitigen. Als Nächstes haben wir Zugriffszuordnungen. Wenn wir also zu den
Projekteinstellungen zurückkehren, können
Sie sehen, dass wir Zugriffszuordnungen
haben. Ich klicke hier auf das kleine
Dropdown. Sie können sehen, dass
wir Optionen
für die Vorwärts- und Rückwärtsstimmung haben . Bewege dich nach rechts und links. Und dann haben wir
die gleichen Optionen für Gamepad und Gamepad
nach oben und unten sowie für die Maussuche unten hier. Access-Mappings
funktionieren jetzt etwas anders. Sie laufen in jedem Frame. Also was ich damit meine ist
, wenn ich
mich vorwärts und rückwärts bewege und
einfach eine Druckzeichenfolge hinzufüge. Also fügen wir hier einfach einen
Druckstring hinzu. Du wirst sehen, wenn ich auf „Spielen“
klicke, wird jedes Bild ausgedruckt. Ich drücke keine Knöpfe, ich mache überhaupt nichts. Dieses Zugriffs-Mapping wird in jedem einzelnen Frame
ausgeführt. Und das gilt für alle
Zugriffszuordnungen. Das ist also dasselbe für
unsere Bewegung nach rechts und links und auch für unser Gamepad, schauen Sie auf und ab sowie für
unsere Maus nach oben und unten. Zugriffszuordnungen
bieten auch einen Zugriffswert. Dies ist nun im Wesentlichen, wie viel oder wie viel von der Eingabe empfangen
wird. Wenn ich also meinen Achsenwert hier nehme, und ich war es tatsächlich, werden
wir die
Druckzeichenfolge hier löschen, und wir verbinden eine neue
Druckzeichenfolge bis zu unserer Reihe, rechts und links für die
Maus, die Sim. Und ich füge den x-Wert in meine Druckzeichenfolge ein
und kompiliere. Jetzt können Sie sehen, dass ich meine Maus
nicht bewege, also ist der Achsenwert 0. Aber wenn ich langsam anfange,
meine Maus zu bewegen, sieht
man, dass sich der
Zugriffsumfang erhöht. Das sagt
dem Motor
im Wesentlichen, wie stark
ich meine Maus bewege, wie schnell ich sie bewege, und dann erhöht es diesen Wert für
den Bogen, die Drehung der Kamera. Wenn ich also sehr schnell anfange,
meine Maus zu bewegen sieht
man, dass
der Wert viel höher steigt. Dies ermöglicht also im
Wesentlichen
Zugriffszuordnungen , um unsere Kamera,
die Richtung, in die
sie sich bewegt,
sowie unseren Charakter zu steuern die Richtung, in die
sie sich bewegt, . Wenn wir zu unserem Entwurf zurückkehren, können
Sie sehen, dass unser Achsenwert für die
Vorwärts- und Rückwärtsbewegung ein Achsenwert ist. Und wenn ich hier eine Druckzeichenfolge mache, verbinden
wir das mit ihm. Kompilieren. Und ich entferne diese
Druckzeichenfolge,
damit wir den Wert nur
von unserer Vorwärts
- und Rückwärtsbewegung sehen können . Drücken Sie Play und sehen Sie, dass es
derzeit 0 ist. Aber wenn ich anfange, mich vorwärts zu bewegen, der Achsenwert direkt auf eins
gestiegen. Und wenn ich rückwärts gehe, sieht
man, dass es tatsächlich auf minus eins gegangen ist. Und das sagt
dem Motor, ob wir uns rückwärts oder vorwärts
bewegen. Wenn wir den Ebenen-Editor verlassen
und zu den Projekteinstellungen gehen, öffnen wir eines
dieser Access-Mappings. Sagen wir zum Beispiel, die
Suche hat die Maus heruntergeschlitzt. Sie können sehen, dass es
derzeit nicht auf eingestellt ist. Eine Taste ist tatsächlich
auf Mausrichtung eingestellt. Es ist also auf Maus Y eingestellt. Die Skala ist minus eins. Der Grund dafür ist, dass die
Kamera
einfach auf der Schiene arbeitet. Wenn ich das auf eine
Skala einstellen und auf Play drücken würde. Wenn ich jetzt die Maus nach oben bewege, schaue ich nach unten und meine Steuerung
ist tatsächlich invertiert. Normalerweise verwenden
wir bei
Auf- und Abbewegungen der Maus eine
Skala von minus eins, verwenden
wir bei
Auf- und Abbewegungen der Maus eine
Skala von minus eins um diese
umgekehrte Kamerabewegung zu beseitigen. Aber wenn wir uns beispielsweise vorwärts und rückwärts
bewegen, können
Sie sehen, dass
wir W und S haben.
Nun gibt w uns eine Skala von
eins, die dem Charakter sagt,
wann er sich vorwärts bewegt. S gibt eine Skala von minus eins, und das sagt dem Charakter, dass wir uns rückwärts
bewegen. Und dann haben wir hier ein paar
zusätzliche Tastenkombinationen. Das sind die beiden
Pfeiltasten auf deiner Tastatur, und dann haben wir auch den Thumbstick
auf einem Gamepad. Eine wichtige Sache
, die Sie bei
Eingabeereignissen beachten sollten , ist der
Grund, warum diese
in unserem ThirdPersonCharacter
ausgeführt werden , weil unser ThirdPerson-Charakter von unserem
Player-Controller
gesteuert wird . Wenn wir anfangen würden,
diese Knoten in Blaupausen zu verwenden, die von unserem
Controller gesteuert werden, würden sie nicht laufen. Jetzt ist ein Blueprint, in
dem wir
diese Eingabeereignisse verwenden können , unser Controller. In der
Third-Person-Vorlage
gibt es jetzt kein Steuerelement. Mit einer Blaupause wird schnell
eine neue erstellt. Ich werde gerade
eine Blueprint-Klasse erstellen Player-Controller
auswählen. Ich nenne dieses
Beispiel einfach Controller. So wie das. Und wenn du dich erinnerst, müssen
wir
unseren Controller und
unseren Spielmodus einstellen . Also gehe ich in den
Third-Person-Spielmodus und suche die
Player-Controller-Klasse. Hier ändern wir das einfach in
unseren Beispielcontroller, werden kompilieren und speichern. Wenn wir jetzt auf „Spielen“ klicken,
verwenden wir unseren Beispiel-Controller. Und ich öffne den
Controller. Ich ziehe
das
hier einfach nach oben , gehe zum Event Graph. Und jetzt, wenn ich zum Beispiel nach jump suche, kannst
du sehen,
dass ich
die Sprungeingabeaktion erstellen kann die Sprungeingabeaktion und das wird tatsächlich gut
laufen. Und das liegt daran, dass wir uns
im Controller befinden und Eingabeaktionen innerhalb
unseres Player-Controllers
einwandfrei funktionieren , weil der
Player-Controller Eingabeaktionen sind. Als Nächstes wollte ich nur mit Ihnen über einige der Einstellungen
sprechen ,
die Sie finden,
wenn Sie einen Eingabeknoten auswählen.
Wir haben Eingabe konsumieren, ausführen, wenn sie angehalten werden, und
übergeordnete Bindung außer Kraft setzen. Die erste
Eingabe konsumieren bedeutet, dass wir, wenn dies angekreuzt
ist,
eine Eingabeaktion innerhalb
unseres Controllers verwenden . Und wir hatten dasselbe Ereignis
in unserem Spielercharakter. Die Sprungaktion in unserem
Charakter wird nicht wirklich ausgeführt. Und das liegt daran, dass
unser Controller im Wesentlichen verbraucht diese Eingabe im Wesentlichen verbraucht und
keine andere Blaupause hochfahren lässt . Also wenn ich
hier eine Zeichenfolge von unserem Jump-Event drucken würde. Wenn wir jetzt kompilieren
und auf Play klicken, Leertaste drücke, wenn ich hier zu meinem
Third-Person-Charakter zurückkehre, werden
wir einfach diese
Druckzeichenfolgen entfernen , damit wir sehen
können, was wir so
machen,
die das kompilieren. Und wenn wir jetzt auf
Play klicken und ich die Leertaste drücke, kannst
du sehen, dass
es Hallo druckt, aber meine Charaktere, kein
Glück beim Springen. Das liegt daran, dass
wir in
unserem Beispiel-Controller diese Eingabe verbrauchen. Aber wenn ich das nicht ankreuze, kann
ich Pop und Play drücken. Wenn ich jetzt die Leertaste drücke, kannst
du sehen, dass
sowohl mein Hallo-Text läuft als auch der
Charakter springt. Also diese beiden Ereignisse
in meinem Controller und der
Charakter-Blueprint oder laufen jetzt. Eine weitere Einstellung, wenn wir hier die
Sprungproduktion auswählen, ist die Ausführung einer Pause. Sie können die Engine anhalten, oder wenn Sie beispielsweise ein
Menü öffnen, wenn dies angekreuzt ist, kann
die Eingabe
auch
dann ausgeführt werden , wenn das
Spiel angehalten wird. Und dann
überschreiben Sie zuletzt die übergeordnete Bindung. Angenommen, unser
Beispiel-Controller hatte einen übergeordneten Blueprint, der sich vom
Player-Controller unterschied. Wenn wir dann diese
Option aktiviert hätten und dieser übergeordnete Blueprint
auch die Eingabeaktion verwendet. Dann
sagen wir im Grunde, dass die Engine die Eingabe
ignoriert hat und
unser Eltern-Blueprint den Code
verwendet, der mit uns
verbunden ist. Wenn wir das Häkchen entfernen, würde
dieser Knoten nicht ausgeführt werden. Der Knoten in unserem übergeordneten
Blueprint würde ausgeführt. Schließlich haben wir
diesen anderen Pin hier, und dies gibt uns nur
einen Hinweis auf die Taste
, die gedrückt wurde, um dieses Ereignis ausgeführt zu haben. Vielleicht haben Sie mehrere Tasten , die einen Sprung ermöglichen würden,
und Sie wollten, dass etwas
anderes passiert je nachdem, welche Taste
die Person gedrückt Wir könnten sie herausziehen und
nach Gleichem suchen. Und mit diesem Hinweis können
Sie überprüfen, ob
die
gedrückte Taste einer anderen Taste entspricht. Wir könnten also sagen, ist
gleich Raum. Und dieser Knoten würde überprüfen die Taste
gedrückt wurde Leertaste. Wenn ja,
würde es true zurückgeben. Wir können auch den
Namen des Schlüssels ermitteln, sodass wir mit Display suchen können. Wir können den Anzeigenamen für den
getc-Key verwenden. Und das wird uns nur im Text
sagen, wie der Name der Taste lautet
, die
gedrückt wurde den Produktionssprung zu ermöglichen. Das
war's also für diese Lektion. In unserer nächsten Lektion werden
wir uns mit
dem neuen verbesserten Eingabesystem befassen dem neuen verbesserten Eingabesystem , das mit dem
nicht festgemachten Motor fünf ausgestattet ist.
29. Zusätzliche Unterrichtsstunden (Verbesserte Eingaben): Hallo zusammen. In dieser Lektion werfen wir
einen Blick auf das verbesserte Eingabesystem , das mit
Unreal Engine five geliefert wird. Zunächst
zeige ich Ihnen, wie Sie es aktivieren können. In dieser aktuellen Engine-Version muss
ich tatsächlich ein Plug-In
aktivieren. Also gehe ich zu
Plugins bearbeiten und suche
nach Enhance. Sie können erweiterte Eingaben sehen,
die ich übernehmen kann. Wenn Ihre bereits angekreuzt ist, müssen Sie dies nicht tun. Aber für mich
werde ich es übernehmen. Sie können
mir hier eine Warnung geben und mir
nur sagen, dass
es sich noch in der Beta befindet. Also drücke ich einfach Ja. Und wir müssen den Motor
neu starten, also mache ich das jetzt. Jetzt habe ich die
Engine neu gestartet und wenn wir
das Plugin-Menü überprüfen und
nach erweiterten suchen, können
wir sehen, dass es angekreuzt ist. Dann gehen wir zu Bearbeiten
und gehen zu den Projekteinstellungen. Und dann verwenden wir hier eine Suche und suchen nach Eingabe
oder Entschuldigung, Standardeingabe. Jetzt können Sie sehen, dass
meine standardmäßig auf Spielereingabe
und Eingabekomponente
eingestellt ist . Ich werde diese auf
die erweiterte Spielereingabe umstellen. Und die erweiterte
Eingabekomponente. Wenn Ihre bereits auf diese
eingestellt ist, müssen Sie dies nicht tun. Das Eingabesystem ermöglicht
es uns, Code auszuführen, wenn
der Spieler sagt, eine Taste auf meiner Tastatur
oder eine Taste auf meinem Gamepad
drückt oder seine Maus
auf eine bestimmte Weise bewegt. In unserer letzten
Lektion haben wir uns nun
das Eingabesystem angesehen , das
von Unreal Engine four stammt. Dies ist
in Unreal Engine five immer noch vorhanden. Also haben wir diese
in unserer letzten Lektion
durchgesehen, wenn du das überprüfen willst. Aber in dieser Lektion werden
wir uns das neue System
ansehen , das es in
Unreal Engine five implementiert
hat. Das Gute an
diesem neuen, verbesserten System ist, dass es tatsächlich
abwärtskompatibel ist. Also, wenn wir hier zu unserem
Third-Person-Charakter zurückkehren, all diese Ereignisse, diese verwenden immer noch das
ältere Eingabesystem von
irgendwoher , die Engine für diese
Ereignisse wird immer noch funktionieren. Wenn ich also auf „Spielen“ klicke,
verwende ich jetzt das verbesserte Eingabesystem, kann mich
aber trotzdem bewegen. Ich kann mir immer noch ansehen, dass diese
Eingaben immer noch funktionieren werden. Aber jetzt können wir tatsächlich
die neuen erweiterten Eingaben erstellen, was wir jetzt tun werden, wir
beenden das Spiel eines Editors. Und wir klicken zunächst mit der rechten Maustaste auf
den Inhaltsbrowser. Und wir gehen hier zur
Eingabeoption und erstellen eine
neue Eingabeaktion. Dies ist das Äquivalent zu, wenn Sie sich an unsere
letzte Lektion erinnern, hier zur Eingabeoption gegangen zu
sein und ein neues Action-Mapping zu
erstellen. Dies entspricht dem, aber jetzt haben wir eine
eigene Blaupause. Was auch immer wir genannt haben, das
wird der Name unserer Veranstaltung sein. Also
nenne ich dieses Beispiel einfach input. Keine Leerzeichen. Also
Beispieleingabe wie diese. Wenn wir das jetzt öffnen, ziehe
ich das hier nach oben. Hier können wir nun
die Einstellungen für unser
Beispieleingabeereignis festlegen . Zunächst
haben wir also den Wertetyp. Dies ist im Wesentlichen der Wert, mit dem der Schlüssel unseren Code
liefert. Wenn es auf Boolean gesetzt ist,
wird unsere Taste entweder gedrückt oder nicht gedrückt. Aber wir können das ändern, um eines Tages
eine Achse zu sagen . Das ist also ein einzelner Float , der einen
Zustand unserer Eingabe darstellt. Wenn sich unsere Maus zum Beispiel entlang der X-Achse bewegt, ist das Seite an Seite. Dieser Float-Wert ist
entweder negativ oder positiv abhängig von der
Richtung, in die wir uns auf
ihn bewegen , und der Geschwindigkeit
, in die wir ihn bewegen,
definieren Sie, wie groß die Zahl ist. Jetzt gibt es auch ein 2D und ein 3D. Ich werde
das 2D etwas später erklären. Das 3D ist
etwas weiter fortgeschritten, daher werden wir in dieser Lektion nicht
darauf eingehen. Dann haben wir als Nächstes Auslöser. Trigger definieren, was unsere Beispieleingabe tatsächlich zum Ausführen
bringt. Wenn ich also eine neue Eingabe erstelle, können
Sie sehen, dass ich
jetzt einen neuen Index habe, und hier kann ich aus
verschiedenen Optionen wählen. Diese teilen
der Engine im Wesentlichen mit, was wir mit diesen Tastenkombinationen
tun müssen ,
damit diese Beispieleingabe ausgeführt wird. Wenn
wir zum Beispiel tippen, müssen
wir auf die Taste tippen. Dieses Ereignis ist verpflichtet
, es zum Laufen zu bringen. Und wenn wir hier auf den
Abwärtspfeil klicken, haben
wir ein paar Einstellungen
für den Tipptyp. Wir haben den Schwellenwert für die
Release-Zeit. Das bedeutet im Grunde, dass
unser
Beispieleingabeereignis ausgeführt wird,
solange ich eine Taste drücke und
sie schneller als 0,2 Sekunden loslasse ich eine Taste drücke und
sie schneller als 0,2 Sekunden . Weiter. Wir werden in unserem Third-Person-Charakter ein Beispiel einrichten, damit wir unsere Beispieleingabe aufrufen
können. Aber zuerst
müssen wir tatsächlich eine weitere Blaupause erstellen. Nun haben Sie vielleicht
bemerkt, dass wir in diesem Blueprint tatsächlich
einen Schlüssel festlegen
können , mit dem wir
unsere Beispieleingabe ausführen möchten. Nun gibt es eine weitere Blaupause , die das tatsächlich definiert. Das werden wir schaffen müssen. Also klicken wir mit der rechten Maustaste
und gehen zur Eingabe. Dann wollen wir
Input-Mapping-Kontexte. Ich nenne meinen
Beispiel-Mapping-Kontext . Und das machen
wir auf. Hier definieren
wir jetzt unsere Eingaben. Also zum Beispiel
unsere Beispieleingabe. Was wir also tun können, ist hier auf
den kleinen Plus-Button zu klicken. Sie sehen, dass wir diese Optionen
haben. Wir können einen Input setzen. Also werden wir
unser Beispiel verwenden und pumpen. Wir sagen es also, dass dieses Mapping für die Beispieleingabe gedacht
ist. Und dann können wir hier
festlegen, welche Tasten wir diese Eingabe tatsächlich ausführen
möchten. Also können wir
hier auf das
kleine Tastatursymbol klicken und ich kann
sagen, L auf meiner Tastatur drücken. Oder Sie klicken hier auf das
Drop-down und
wählen hier einen Schlüssel und
die Optionen aus. Jetzt haben wir der Engine mitgeteilt
, dass beim Drücken von out das
Beispieleingabeereignis ausgeführt werden soll. Jetzt können wir zu unserem
ThirdPersonCharacter gehen und ein neues Event erstellen. Wir können zum Beispiel suchen. Sie können sehen, dass wir Beispieleingaben
haben. Wenn ich das erstelle,
können Sie sehen, dass wir
diesen neuen Eingabeknoten bekommen . Dieser Eingangsknoten wird
nun anders aussehen oder unterschiedliche Ausgaben
haben abhängig von den Triggern , die wir in
unserer Beispieleingabe eingerichtet haben. Derzeit haben wir also Tippen Sie auf Setup. Die Eingaben werden also für die Spitze relevant
sein. Aber wenn ich das verschieben würde und wir zu unserem
ThirdPersonCharacter zurückkehren. Sie können sehen, dass die Ergebnisse
unserer Notiz der Veränderung. Diese Ausgaben werden nun
abhängig von den Triggern, die Sie in Ihrer Eingabe festgelegt
haben,
unterschiedliche Aufgaben ausführen . Also werden wir unseren
Tippeingang oder -Trigger wieder hinzufügen, sorry, und das
ist der unten hier. Und wir behalten die
Einstellungen als Standard bei. Also speichern wir das und wir können
zurück zu ThirdPersonCharacter werden hier
ausgelöst, wenn
wir zum ersten Mal die Antipptaste drücken. Für uns ist das also da draußen. Ich habe es in unseren
Mapping-Kontexten auf eingestellt. Und das Fertiggestellte wird laufen
, wenn wir den Schlüssel hochheben. Was wir also tun können, ist, dass wir hier eine Druckzeichenfolge
hinzufügen können. Wir haben dies auf „trigger“ gesetzt. Buchstabiere es richtig. Da haben wir's. Und ich kopiere das und füge es ein. Wir schließen das an, vervollständigen es und ich mache es so
komplett. Buchstabiere es falsch, aber los geht's. Wenn ich jetzt kompiliere, würden
wir erwarten, dass
diese gedruckt werden, wenn ich
schneller als 0,2 Sekunden tippe , aber das waren
sie eigentlich nicht. Und wir können
das sehen, wenn ich auf „
Abspielen“ drücke , passiert nichts. Das liegt daran, dass
wir auch
einige Codeänderungen
in unserem Charakter vornehmen müssen. Um das zu tun, werde
ich eine Veranstaltung besitzen. Und wenn du dich an unsere Event-Lektion erinnerst
, wird
dieses Ereignis immer dann ausgeführt, wenn ein Controller die Kontrolle über
diesen Charakter übernimmt. Also werden wir uns von unserem
neuen Controller
zurückziehen, das wird auch kosten. Spieler-Controller. Und dann müssen
wir das erweiterte Subsystem
der lokalen
Spieler erhalten . Daraus müssen wir dann einen Mapping-Kontext
hinzufügen. Dies sagt
dem Player-Controller im Wesentlichen , dass wir diesen Beispiel-Mapping-Kontext
verwenden möchten , den wir über Kopf eingerichtet haben. Daher müssen wir
unsere Mapping-Kontexte
auf den Beispiel-Mapping-Kontext festlegen . Wenn wir
es jetzt kompilieren und auf „Play“ klicken und ich darauf tippe, können Sie sehen, dass dies abgeschlossen ist und
unser Ausdruck ausgelöst wurde. Der Zweck, die Mapping-Kontexte festzulegen,
ermöglicht es Ihnen nun ,
verschiedene Kontrollschemata zu verwenden,
je nachdem, was Sie tun möchten. So kannst du zum Beispiel
einen Charakter in deinem
Spiel und ein Fahrzeug haben . Jetzt möchten Sie vielleicht, dass die Steuerelemente
der
Charaktere und die Fahrzeugsteuerung völlig
unterschiedlich sind. Was du also tun könntest, ist
einen Mapping-Kontext für deinen Charakter und dann ein
zweites Kraftstofffahrzeug zu haben. Dann könnten Sie in Ihrem
Charakter die Mapping-Kontexte
mithilfe des
Knotens „Mapping-Kontexte hinzufügen“ zu Ihrem
Charakter-Mapping-Kontext
festlegen mithilfe des
Knotens „Mapping-Kontexte hinzufügen , der
alle Ihre Eingaben
enthalten könnte wenn Ihr Spieler, die den Charakter
kontrollieren. Dann können
Sie in Ihrem Fahrzeug,
einer Blaupause, denselben Code haben, aber das könnte stattdessen einen
Fahrzeug-Mapping-Kontexte festlegen. Und dann in diesem Mapping-Kontext könnten
Sie
verschiedene Steuerelemente haben, vielleicht zum Gangwechsel
und solche
Dinge, die Sie
in einem Charakter-Blueprint nicht benötigen würden. Das ist jetzt etwas
komplizierter als beispielsweise
das vorherige Eingabesystem, das ich für die Verwendung arrangiere. Aber dieses System ist
viel
umfassender ausgestattet und wenn Sie
erst einmal den Dreh raus haben, können
Sie noch viel mehr damit tun. Aber wissen Sie
vorerst, dass Sie, wenn Sie das erweiterte
Eingabesystem verwenden möchten, diesen Code
in Ihrem Charakter benötigen, um
dem Player-Controller
genau mitzuteilen , welche Mapping-Kontexte
Sie verwenden möchten. Und denken Sie daran, dass Sie
im Mapping-Kontext
den Eingabeereignissen tatsächlich mitteilen,
wie Schlüssel sie aufrufen können. Jetzt haben Sie vielleicht bemerkt, dass
wir
in unseren Mapping-Kontexten mehrere Schlüssel hinzufügen können. Wenn Sie also sagen möchten,
haben Sie L und einen anderen Schlüssel, führen Sie unser Beispiel aus und
setzen Sie, wir könnten das tun. Also könnte ich das auf x setzen. Wenn ich
jetzt auf „Play“ drücke und auf X tippe, siehst
du, dass das
auch ausgedruckt wird. Wenn ich drücke, sieht man, dass das auch
ausgedruckt wird. Wenn wir zu unseren
Mapping-Kontexten zurückkehren, können
Sie sehen, dass
wir hier auch
für jeden der Schlüssel
eine Trigger-Option haben . Wenn wir nun einen Trigger
in unserer Beispieleingabe hinzufügen, wirkt sich
dies auf alle Schlüssel aus
, die wir haben. Alle Schlüssel, die wir unter unserem
Beispiel hinzufügen,
müssen die Triggerregeln befolgen , die wir in
unserer Beispieleingabe festgelegt haben. Aber vielleicht wollen wir das nicht in unserer Beispieleingabe haben . Wir wollten, dass bestimmte Schlüssel bestimmte Dinge tun
müssen. Vielleicht
möchten Sie zum Beispiel,
damit L damit arbeiten kann, darauf tippen müssen. Aber damit X funktioniert, müssen wir
vielleicht die Taste
gedrückt halten. Und wenn wir gehen, klicken wir hier auf die
Drop-down-Option und sehen, dass wir
Einstellungen zum Halten
dieses Schlüsseldamms haben . Der wichtigste ist also der Schwellenwert für die
Haltezeit. Das bedeutet, dass ich die Taste
1 Sekunde lang
gedrückt halten muss, bevor
der Code ausgeführt wird. Wenn wir jetzt auf „Jetzt spielen X drücken,
passiert nichts bis. Eine Sekunde ist passiert, und jetzt
läuft mein Trigger tatsächlich ununterbrochen,
bis ich x loslasse. Sie können sehen, dass es abgeschlossen ist, es wird gerade ausgeführt und ausgelöst, hat
aufgehört zu laufen. Aber wenn ich versuche, auf
mein X zu tippen, passiert nichts. Wenn ich meine Eule gedrückt halte, passiert
nichts, denn
wenn Sie sich erinnern, haben wir die Tippregel für mein L eingerichtet Wenn ich
also tippe, können Sie das Ereignis
sehen, das gerade ausgeführt
wurde. Um es
für die Auslöser zusammenzufassen Wenn wir den Ebeneneditor verlassen und Trigger alle
Tasten beeinflussen
sollen, Trigger alle
Tasten beeinflussen
sollen die ein Ereignis aufrufen
können, möchten
Sie diese
innerhalb des Ereignisses hinzufügen. Hier legen Sie also die
Auslöser fest, die sich auf alle Schlüssel auswirken, die
Sie diesem Ereignis zugewiesen haben. Im Mapping-Kontext. Wenn Sie möchten, dass einzelne Schlüssel unterschiedliche Auslöserregeln
haben, können
Sie dies innerhalb
der Mapping-Kontexte
unter dem bestimmten Schlüssel tun . Und natürlich, wenn Sie einen Trigger hinzufügen
möchten, klicken
Sie hier auf die Schaltfläche Hinzufügen. Sie möchten einen Auslöser entfernen. Sie klicken einfach auf das
Papierkorbsymbol, um es zu entfernen. Jetzt entfernen wir vorerst
die x-Eingabe. Sie können auch
mehrere Trigger einrichten. Wenn wir also einen Auslöser hinzufügen
und ich sage, dass er tippt, kann
ich auch einen zweiten hinzufügen, und ich könnte diesen auf Halten setzen. Jetzt
funktioniert unsere L-Taste, wenn ich
schnell darauf tippe oder wenn ich sie
länger als 1 Sekunde gedrückt halte. Und das können wir testen. Ich kann auf „Spielen“ klicken. Und wenn ich schnell L drücke oder
tippe, sieht
man, dass es funktioniert. Oder wenn ich es gedrückt halte
und 1 Sekunde warte, können
Sie sehen, dass jetzt ausgelöst jedes Frame ausgeführt
wird. Und wenn ich loslasse, kannst du
sehen, wie sie abgeschlossen sind. Jetzt werde ich nicht
alle Arten von Auslösern durchgehen , da
es einige gibt. Und wenn Sie jemals
herausfinden möchten, was sie tun, dies tun, indem Sie in
diesem Dropdown-Menü einfach mit der Maus über sie fahren. Und es gibt Ihnen tatsächlich eine
einigermaßen anständige Erklärung dafür was jeder einzelne tut. Nun haben Sie vielleicht in
unserer Veranstaltungsnotiz hier bemerkt , dass
wir einen Aktionswert haben. Abhängig davon,
welche Art von Eingabe Sie in den
Mapping-Kontexten verwendet haben, erhalten wir dadurch
einen Wert, den wir zur Codekontrolle verwenden
können. Da wir also nur ein Alken
verwenden, wird es nur
eines ausführen, wenn die Taste
gedrückt wird , und 0, wenn
die Taste nicht gedrückt wird. Wir können diesen Wert aber auch
in unserer Beispieleingabe
ändern . Hier können wir dies so einstellen
, dass in C Boolean steht , dass wir diese Benachrichtigung
jedes Mal erhalten , wenn wir etwas ändern. Wenn wir zum
Third-Person-Charakter zurückkehren, können
Sie sehen, dass er jetzt in einen booleschen Charakter
geändert wurde. Und das wäre einfach wahr,
wenn unsere Taste
gedrückt wird , und false, wenn
sie losgelassen wird. Jetzt können wir
diesen Wert auch verwenden, um
Dinge wie die
Blickrichtung und unsere
Bewegungsrichtung zu steuern Dinge wie die
Blickrichtung . Ähnlich wie
der Achsenwert des älteren Eingabesystems
unsere Controller steuert , Ihre und Tonhöhe. Das sind die Richtungen, in die unsere Kamera schauen wird
. Jetzt gibt es ein paar
verschiedene Möglichkeiten, dies mit dem neuen System zu tun. Ich zeige Ihnen jetzt ein paar
Möglichkeiten, wie Sie das machen können. Wir werden also damit beginnen,
dieses Ereignis zu löschen , da wir es nicht mehr verwenden
werden. Und wir gehen zum
Inhaltsbrowser. Ich werde unsere Beispieleingabe tatsächlich
umbenennen. Ich benenne
es einfach um, sagen Sie Maus hoch, runter. Wir können das öffnen. Und ich werde
den Wertetyp auf
eine Achse eins ändern D, also ein Float. Der Ausgabewert
unseres Ereignisses in
unserem ThirdPersonCharacter
ist also ein Float. Dann gehen wir zu unseren
Beispiel-Mapping-Kontexten über. Jetzt werden wir unsere aktuellen Mappings los und ich
erstelle einfach eine neue. Und wir stellen das auf
unsere Maus auf und ab. Und ich setze
diese Eingabe auf Maus Y. Und Maus Y ist unsere
Mausbewegung auf und ab. Also werden wir das auswählen. Jetzt haben wir unsere Maus auf
und ab auf einen Float-Wert eingestellt. Wir haben unsere Maus Y so eingestellt, dass dieses Maus-Auf
- und Ab-Ereignis aufgerufen wird. Gehen wir also zu unserem
ThirdPersonCharacter und wir finden den
Blick nach oben und unten. Und ich werde das
löschen
, weil das das alte Ereignis ist. Und wir werden die
Tonhöhennote hier wiederverwenden. Also machen wir die
Maus hoch oder runter. Sie können unter
erweiterten Aktionsereignissen sehen, dass
wir unsere Maus nach oben gedrückt haben. Von hier aus. Wir ziehen den Trigger
auf unseren Add Controller
Pitch Eingang. Und das läuft nur
, wenn ich meine Maus bewege. Und es wird den
Aktionswert nehmen und das
einstecken und wir werden kompilieren. Denken Sie daran,
das funktioniert nur weil ich diesen
Code hier oben auf
dem Besitz habe , der
unserem Charakter mitteilt, dass wir unsere
Beispiel-Mapping-Kontexte verwenden möchten, was wir gewohnt sind weisen Sie unserer Veranstaltung unsere
Mausbewegung zu. Was wir
jetzt tun, ist „
Spielen“ zu drücken und ich bewege
meine Maus auf und ab. Sie können sehen, dass es funktioniert, aber meine Steuerelemente sind
tatsächlich invertiert. Also muss ich die Minus- und positiven Werte
,
die
von meiner Maus geliefert werden, invertieren Minus- und positiven Werte
,
die . Und wir können das auf die Art und Weise tun,
dass wir Modifikatoren verwenden können. Also wird es hier zu unserem Maus-Auf
- und Ab-Ereignis gehen. Und hier haben wir
eine Option für Modifikatoren. Modifikatoren sind jetzt
etwas weiter fortgeschritten. Machen Sie sich
also keine Sorgen, wenn Sie sie nicht sofort erhalten. Sie ermöglichen es uns jedoch, den Wert zu ändern, der durch unseren Tastendruck
oder unsere Mausbewegung geliefert wird beispielsweise durch unseren Tastendruck
oder unsere Mausbewegung geliefert wird. Also fügen wir einen neuen Modifikator hinzu. Wenn wir hier auf die
Option klicken,
haben wir ein paar verschiedene. Aber was wir tun wollen, ist unsere Wertausgabe
umzukehren. Und das Negate hier
war das, was das tun wird. Also setzen wir es auf negieren. Wenn ich jetzt auf „Spielen Maus nach oben bewege, schaue ich nach oben und wenn ich meine
Maus nach unten bewege, schaue ich nach unten. Das wiederum bedeutet im Grunde
, dass negate, wenn die Maus
einen positiven Wert ausgibt
, die Maus
einen positiven Wert ausgibt
, diesen
in einen negativen Wert umwandelt. Und
umgekehrt, wenn die Maus einen Minuswert
liefert, verwandelt das Gate ihn
in einen positiven Wert, und das gibt meiner
Kamera die richtige Bewegung. Jetzt brauchen wir also eine Site-to-Site. Jetzt funktioniert meine
Seite-zu-Seite-Bewegung immer noch, weil ich hier immer noch diese alte Eingabe
verwende. Aber wenn ich das lösche
und auf Jetzt spielen klicke, kann
ich nur nach oben und unten schauen. Ich kann überhaupt nicht von einer Seite
zur anderen schauen. Wir müssen also eine
Seite-zu-Seite-Bewegung einrichten. Also machen wir das,
indem wir mit der rechten Maustaste klicken. Geht zu Blaupausen oder
tut mir leid, wir gehen zu Eingabe, Eingabeaktion, und wir nennen
diese Maus links, rechts. Und das machen wir auf. Wir wollen den Wert des
Typs eines Tages auf die Achse setzen. Und dann müssen wir zu
unserem Beispiel-Mapping-Kontext gehen. Und hier
müssen wir ein neues Mapping hinzufügen. Deshalb fügen wir eine neue Veranstaltung hinzu. Im Wesentlichen. Wir wollen das nach
links und rechts setzen. Wir müssen dort eine
Taste oder eine
Mausbewegung setzen ,
damit dieses Ereignis ausgeführt wird. Also wollen wir Maus x, also ist das unsere
Mausbewegung von Seite zu Seite. Also wählen wir das aus. Jetzt in unserer Maus auf und ab
haben wir ein Negate verwendet, um
die Werte zu invertieren , die es uns
liefert. Wir müssen das nicht
mit links und rechts machen. Jetzt kehren wir einfach zu
unserem ThirdPersonCharacter zurück. Und wieder klicken wir mit der rechten Maustaste
und machen Ihre Maus links, rechts oder war es links rechts. Wir haben die Maus links, rechts, unter erweiterten Aktionsereignissen. Und wir verbinden unseren Trigger,
um den Controller hinzuzufügen. Und wir nehmen unseren
Aktionswert und stecken das ein und kompilieren. Wenn ich jetzt zu meiner
Third-Person-Map gehe und auf „Spielen“ klicke, kann
ich von einer Seite zur anderen schauen und
sie bewegt sich korrekt. Ich kann rauf und
runter schauen. Wir verwenden jetzt das neue verbesserte Eingabesystem um unsere Kamerabewegungen zu steuern. Jetzt hat das erweiterte Eingabesystem tatsächlich eine andere Möglichkeit
, diese
Achseneingabebewegung nach oben einzustellen. Anstatt dafür
einzelne Knoten zu haben, könnten
wir es tatsächlich mit einem
machen. Wir könnten
dies tun, indem in unserer Veranstaltung
einen 2D-Float verwenden. Was wir jetzt tun werden, ist das Maus-Auf - und Ab-Ereignis hier zu
löschen. Wir benutzen einfach die
Maus links und rechts. Ich werde das tatsächlich in nur Mausbewegung umbenennen
. Jetzt können wir also nur eine
Eingabeaktion zur Steuerung verwenden. Beide schauen von einer
Seite zur anderen und nach oben und unten. In unserer Mausbewegung haben
wir also unsere Achse festgelegt, wir stellen unseren Zugriff auf 2D ein. Das bedeutet also, dass anstelle
eines einzelnen Float-Werts ein X- und ein Y-Wert vorhanden sein
muss. Dann müssen wir zu unserem
Beispiel-Mapping-Kontext gehen. Und wir werden
den besten hier los. Wir haben hier bereits unsere
Mausbewegung weil wir sie
früher gerade
umbenannt haben und wir
haben unsere Maus X hier. Aber ich werde das
löschen, indem ich
einfach ein neues Mapping
erstellt habe. Also bewegen wir sie mit der Maus. Jetzt müssen wir also
die Mausbewegungen auswählen , mit
denen
dieses Mausbewegungsereignis ausgeführt wird . Also gehen wir hier zur Option. Wir suchen nach der ersten Maus Y. Nun, wenn Sie sich an unser
Mausweiß als Auf und Ab erinnern, müssen wir diesen Wert
invertieren. Wir brauchen also einen Modifikator, und wir müssen
diesen Modifikator auf
Negation setzen ,
der das Auf- und Abwärtstal invertiert. Dann brauchen wir einen neuen Input. Also füge eine neue Eingabe hinzu. Das wird Maus x sein. Wenn Sie sich erinnern,
bevor wir
einzelne Ereignisse für
mouse white und mouse x hatten , machen wir
jetzt
beide im selben Event. Jetzt haben wir
sowohl unsere
weißen Mauseingaben als auch X-Eingaben für die Maus hinzugefügt . Vier von ihnen werden hier zum
ThirdPersonCharacter gehen. Und wir werden
diese Ereignisse löschen , die wir zuvor
hatten. Anstatt also
zwei separate Ereignisse
für jeden
dieser Knoten zu haben, die die Auf- und Abbewegung sowie die Bewegung von einer Seite
zur anderen steuern , klicken
wir mit der rechten Maustaste und
suchen nach Mausbewegungen. Mausbewegung wie diese. Und wir haben unser neues
Mausbewegungsereignis eingerichtet. Also werden wir jetzt ausgelöst, wir werden das in die
Kontrolle des Tonhöhens einstecken. Und wir werden das so
in dein stecken. Jetzt können Sie sehen, dass wir einen Aktionswert
haben, und das ist nur ein 2D-Vektor. Wenn wir also herausziehen, können wir einen
Break-Knoten
erstellen, und das
gibt uns nur Zugriff auf diese
X- und Y-Flusswerte. Daher werden diese
Werte verwendet, um
unsere Auf- und Abwärts- und Seite-zu-Side-Kamerabewegung
zu steuern . Unser x ist also immer
unsere Seite zu Seite. Also stecken wir das in
deinen Controller-Eingang. Und das y ist hoch und runter. Also stecken wir das in unseren
Controller-Pitch-Eingang. Und jetzt können wir kompilieren. Und wir sind bereit, das zu testen
, damit wir auf Play klicken können. Und wenn ich meine Maus bewege,
entscheide ich, dass das gut funktioniert. Aber wenn ich es auf und ab bewege, bewegt
es sich immer noch von einer Seite zur anderen. Wir können die
Kamera nach oben oder unten bewegen. Der Grund
dafür ist, dass wir, wenn wir zu unserem
Beispiel-Mapping-Kontext
zurückkehren , die Maus weiß und
MouseX uns beide nur einen
einzigen Float-Wert
liefern. Wenn wir jetzt zu unserer Veranstaltung gehen, können
Sie sehen, dass wir
zwei Durchflussausgänge haben. Nun versuchen diese beiden Eingaben für unsere Maus auf und
ab und von Seite zu Seite, für unsere Maus auf und
ab und von Seite zu Seite,
oder beide, diesen x-Wert zu
verwenden. Aber sie können es nicht beide benutzen. Wir müssen einem von ihnen sagen , dass er die y-Ausgabe
verwenden muss. In unserem Mapping-Kontext,
in den Modifikatoren
für unser Maus-Y, fügen
wir also in den Modifikatoren
für unser Maus-Y, einen neuen Modifikator hinzu. Und wir werden dies auf die Eingabeachsenwerte
der Schweiz festlegen . Und wenn Sie den Tooltip lesen, erklärt er tatsächlich, was er bewirkt. Es ist nützlich, einen 1D-Eingang zuzuordnen, was unsere Maus Y ist, es ist eine 1D-Eingabe auf die
Y-Achse einer 2D-Aktion. Wenn Sie sich erinnern, ist die
Mausbewegung eine 2D-Achse. Also wird
unser Switch den Achsenwert unserer Y-Maus Y
diesem zweiten Y-Wert zuordnen. Also werden wir das benutzen. Jetzt
wird unsere Seite-zu-Seite-Bewegung hier den X-Wert verwenden. Und unsere Auf- und
Abbewegung wird jetzt aufgrund
des
Modifikators, den wir gerade hinzugefügt haben, den y-Wert verwenden . Wenn ich die Wiedergabetaste drücke, bewege ich meine Maus von einer
Seite zur anderen auf
und ab, und alles funktioniert ordnungsgemäß. Das sind nur ein paar
Beispiele dafür, wie Sie
Access-Eingaben mit dem neuen
verbesserten Eingabesystem verwenden können . Jetzt gibt es andere Arten
von Modifikatoren, die Sie auf Ihre
Tasteneingaben
anwenden können , wenn Sie möchten Sie können sie
dort hinzufügen, wo wir an
einem Gate und Schweizer oder
Eingabeachsenwerte hinzugefügt haben . Ich werde
sie in dieser Lektion nicht behandeln , da es einige gibt. Aber wenn Sie jemals
herausfinden möchten, was sie tun, können
Sie einfach mit der Maus darüber fahren und
es gibt Ihnen eine kurze Beschreibung der
einzelnen Funktionen. Jetzt können wir Modifikatoren
auf eine Einzelspieler-Eingabe anwenden, wie wir es hier
mit unserer Maus-Y-Eingabe getan haben. Wir haben den Negat
- und den Switch-Eingang hinzugefügt. Sie können
diese Modifikatoren auch innerhalb
unserer Mausbewegung anwenden . Jetzt
wirken sich alle Modifikatoren, die
wir hier hinzufügen , auf alle Tasten aus, die wir zu dieser Mausbewegung
in unseren Mapping-Kontexten hinzufügen . Es ist also wichtig
, daran zu denken , dass
Sie manchmal
Änderungen nur zu einer Eingabe hinzufügen möchten Änderungen nur zu einer Eingabe wie wir es
mit der Maus Y getan haben, anstatt
sie nur auf den Eingabetyp anzuwenden denn das
wirkt sich auf alle Schlüssel aus , die Sie an diesen Typ binden. Zusammenfassend lässt sich sagen, dass das erweiterte Eingabesystem
es uns ermöglicht,
Eingabeaktionen wie
unsere Mausbewegung zu erstellen . Wir können dann einen
Mapping-Kontext erstellen, in dem wir festlegen
können, welche Schlüssel wir unsere neuen
Eingabeaktionen nennen. Dann können wir
diese Eingabeaktionen
innerhalb unseres Charakters erstellen oder die Blaupausen
kontrollieren. Dann können wir mithilfe von Triggern
auswählen, wie diese Taste gedrückt werden muss ,
damit das
Ereignis aktiviert wird Mit Modifikationen können wir
den Aktionswert ändern , der von diesem Ereignis
bereitgestellt wird. Damit diese Ereignisse funktionieren, müssen
wir sicherstellen, dass wir den Add Mapping-Kontext
verwenden. Und wir können das nutzen, indem wir
den Player-Controller
bekommen, um das erweiterte Subsystem der
lokalen Spieler zu erhalten. Und das ermöglicht es uns, einen Mapping-Kontext
hinzuzufügen. Dann legen wir fest, welche
Mapping-Kontexte wir verwenden möchten. Wir haben also den
Beispiel-Mapping-Kontext verwendet. Das ist es also, was hier eingestellt ist. Wenn wir diesen Code nicht
haben, funktionieren die Eingabeereignisse, die
wir verwendet haben, nicht. Das
war's also für diese Lektion. Hoffentlich haben Sie ein besseres
Verständnis dafür, wie das erweiterte Eingabesystem
jetzt funktioniert , und wir werden es in unseren zukünftigen Lektionen
etwas häufiger
verwenden .
30. Zusätzliche Unterrichtsstunden (Schlagwörter): Hallo zusammen. In dieser Lektion werfen wir
einen Blick auf Schauspieler- und Komponenten-Tags. Wenn Sie unsere vorherige Lektion befolgt
haben, habe ich hier
nur
eine neue Third-Person-Vorlage erstellt ,
damit wir neu anfangen können. Es beginnt also mit Tags, die
im Grunde nur ein Array von
Namensvariablen sind , die
sowohl Achsen als auch Komponenten eingebaut haben. Und aus diesem Grund bedeutet es, dass wir als Tags oder
Komponenten-Tags fungieren
können , ohne einen anderen Blueprint kosten
zu müssen . Verwenden Sie Blueprint-Schnittstellen. Dann können wir einige der
Knoten verwenden, die in
die Engine eingebaut sind , um einen
Akteur zu überprüfen, ob er ein Tag hat. Oder wir können
so etwas tun, wie alle Schauspieler
auf der Welt zu bekommen , die ein bestimmtes Tag haben. Wir gehen zunächst zum
ThirdPersonCharacter und ich zeige dir, wo
du neue Tags hinzufügen kannst. Ich werde das hier einfach nach oben ziehen
. Und dann
suchen unsere
Klassenstandardwerte einfach nach Tag. Und hier sehen
Sie, dass wir
eine Tags-Option haben und es ist ein Array, und es ist nur ein Array von
Namen, wie wir es zuvor verwendet haben. Wenn wir also hier auf die
Plus-Schaltfläche klicken, können
wir einen neuen Eintrag hinzufügen. Ich kann es so einstellen, dass Spieler gesagt wird. Wir können auch neue
Einträge hinzufügen, wenn wir einfach auf
die Plus-Schaltfläche klicken Wenn wir Einträge entfernen möchten, können
wir einfach auf den Abwärtspfeil
neben dem Textfeld klicken und auf Löschen klicken. Jetzt haben wir
unserem ThirdPersonCharacter ein Tag hinzugefügt und dieses Ziel ist plan. Jetzt brauchen wir eine Blaupause, die diese Texte lesen
wird. Also werde ich
einen neuen Blueprint
und den Inhaltsbrowser erstellen . Und wir wählen Actor und
ich rufe
diesen Auslöser auf , öffne ihn. Ich füge eine
Box-Kollisionskomponente hinzu. Ich verschiebe das hier nur ein bisschen nach
oben. Wir gehen zu Details wie
versteckt und untick, versteckt und Spiel, nur damit wir uns setzen und kompilieren
können. Jetzt, wie wir es zuvor getan haben, gehen
wir zum Event Graph. Ich werde den Anfang
des
Spiels und die Tick-Knoten löschen , und wir werden tatsächlich den Schauspieler
verwenden, um den Knoten zu überlappen
, der bereits hier ist. Wenn Sie sich erinnern, wird
dieser Knoten
immer dann ausgeführt , wenn
sich etwas mit unserem Trigger überschneidet, und gibt uns Zugriff auf den anderen Akteur, der den Auslöser
überlappt. Normalerweise müsste ich, wenn ich
Informationen in meinem
ThirdPersonCharacter erhalten möchte, etwas herausziehen und ich habe Kosten für meinen
Third-Person-Charakter oder eine Blueprint-Schnittstelle
zum Abrufen einrichten . diese Information. Da unsere Tags
tatsächlich in unseren Schauspieler eingebaut sind, müssen
wir das nicht tun,
da dies bereits ein Schauspieler-Pin ist. So können wir uns in die Länge ziehen
und auf
unsere Tags zugreifen , damit ich nach Steuern
suchen kann. Und du siehst, dass ich auf
mein Tag-Array zugreifen kann. Dann verhält sich
das wie ein normales Array. Wir können uns in die Länge ziehen. Wir können damit einen get-Knoten
verwenden. Alles was wir herausziehen können und
wir können
alle Tags durchgehen , die auf unserem Schauspieler zu finden
sind. Jetzt hat act tatsächlich
einige Tags, spezifische Funktionen
eingebaut, damit wir herausziehen und nach has tag
suchen können. Wir können den actor
has tag node verwenden und dies überprüft nur das
Tag, das wir hier gesetzt haben. Oder hat dieses Accessoire
das Etikett, das wir hier gesetzt haben? Wenn dies der Fall ist,
wird true zurückgegeben, und wenn nicht,
wird falsch zurückgegeben. Also können wir das testen. Jetzt kann ich mich von hier aus in die Länge ziehen. Es wird tatsächlich mit der rechten Maustaste klicken
und nach Druckstring suchen. Wir verbinden das mit
unserem Anfang der Überlappung, und ich werde es in
unsere boolesche Ausgabe einbinden, kompilieren, eines
davon in die Map hier drüben werfen,
wodurch es ein
bisschen größer
wird . Um das Tool neu zu skalieren oder das Re-Scale-Tool
aufzurufen, mache ich es ein
bisschen größer.
Drücke „Spielen“ Wenn ich jetzt hier auf meinen
Würfel stoße, können
Sie sehen, dass er false zurückgibt weil ich das Typekit eigentlich nicht gesetzt
habe. Also stellen wir das auf
Kompilieren ein und klicken auf „Spielen“. Und jetzt, wenn ich
in die Festung renne und sehe, dass sie wieder wahr wird, weil unser Spielercharakter diesen Spieler-Tag
hat. Nun, da unser Tag
nur aus einer Reihe von Namen besteht ,
können wir ihm auch während des
Spiels hinzufügen. Wenn wir also wollten, könnten wir
rausziehen und Tags bekommen. Und mit diesem Array-PIM könnten
wir den Add Node herausziehen und
verwenden. Und wir könnten unserem Plan ein
neues Tag hinzufügen. Also könnten wir sagen auf Feuer Tag hinzufügen. Und dann werden wir diese
Notizen vorerst hier unten löschen. Dann könnten wir wieder aus
unseren Tags ziehen und eine Schleife ausführen. Wir durchlaufen also alle aktuellen Tags und
drucken
die Zeichenfolge, die aktuellen Tags des Spielers. Also verbinden wir das mit dem Druckstring und das Array-Element mit
der
Zeichenkette wird kompiliert. Drücke Abspielen. Wenn ich jetzt
in die Box renne, wird
sie unserer Handlung ein
neues Tag hinzufügen. Und dann werden diese Tag-Namen
ausgedruckt. Einfach so. Jetzt können wir Komponenten
auch Tags hinzufügen. Wenn wir also das Flugzeug verlassen, fühle
ich mich einfach verletzt und gehe zu
unserem ThirdPersonCharacter. Wir werden diese
Suche für den Moment loswerden und ich wähle hier so etwas wie die Kapselkomponente aus. Das ist also eine Komponente und es ist die Kapselform, die sich hier
in unserem Sichtfenster befindet. Und wenn ich damit im
Detailbereich in C nach Tag
suche , haben
wir Komponenten-Tags. Jetzt funktionieren diese genau
so wie unsere Nachsteuern , nur
dass diese Tags für diese Komponente
spezifisch sind. Also können wir ein neues Tag hinzufügen, oh cool, diese Kollision. Und ich kompiliere. Wenn
wir jetzt zu unserem Auslöser zurückkehren, muss
ich auf
einen Charakter übertragen , indem ich hier meinen
anderen Schauspieler-Pin verwende. Denn wenn Sie sich erinnern, enthält
der Schauspieler die
Kapselkomponenten nicht wirklich, sodass ich sie nicht finden kann. Aber wenn ich zum Charakter komme. So wie das. Und wir werden den
Rest dieses Codes löschen. Dann wollen
wir von unserem Charakter aus die
Kapselkomponente bekommen. Und das ist
hier unten. Jetzt können wir
herausziehen und nach has tag suchen. Sie können sehen, dass wir hier eine
Komponente mit einem Tag versehen haben, und das funktioniert
genauso, wie unser Tag oder Schauspieler
einen Knoten markiert hat. Wir setzen ein Tag, nach dem wir suchen
möchten. Kollision. Es wird true oder false zurückgegeben, wenn Capsule-Komponente
dieses Charakters über dieses Kollisions-Tag verfügt. Also zieht es heraus und andere Druckzeichenfolgen und verbindet
sich bis hier, klicken Sie auf Kompilieren. Und jetzt, wenn wir unsere Box hier
überfahren, können
Sie sagen, dass sie wieder wahr ist. Tags sind also eine sehr praktische
Möglichkeit, um jedem Schauspieler
ein paar zusätzliche
Informationen hinzuzufügen . Also alles, was
im Level oder in
irgendeiner Komponente dieser Schauspieler ist. Ein gutes Beispiel dafür, wie nützlich
Tags sein können, ist vielleicht, dass Sie in Zukunft ein KI-System
erstellen. Und Sie möchten, dass die KI
erkennen kann, ob ein Schauspieler
freundlich oder ein Feind ist. Sie können das mit Hilfe von Tags tun. Da alle Schauspieler und Ihr Level über integrierte Tags verfügen, können
Sie diese Tags zu
jedem Objekt hinzufügen und sie
können es lesen. Panzer sind jetzt auch nützlich,
um Schauspieler oder Komponenten zu erhalten. Wenn wir also unseren Plan akzeptieren, da es ihre Haare sind, und zu unserem Auslöser
zurückkehren. Ich werde diese Knoten einfach
löschen. Wenn Sie sich erinnern, haben wir die get-Komponente
nach Klassennotizen. Wenn ich also danach suche und Komponente für Klasse
erhalte, können
Sie sehen, dass wir
diesen Knoten schon einmal verwendet haben und das ermöglicht es uns eine Komponente aus
einem bestimmten Blueprint
zu erhalten. Jetzt haben wir auch den Knoten
Komponenten nach Tag abrufen. Wenn wir das also hier erstellen, können
wir alle
Komponenten, die sich in einem Blueprint
befinden ,
mit einem bestimmten Tag erhalten. Wenn Sie sich erinnern, wenn wir
unser Tag in unserer
Capsule Component setzen unser Tag in unserer
Capsule Component , werden
diese Tags überprüft. Dann werden alle Komponenten ausgegeben,
die das von uns festgelegte
spezifische Tag haben. Zum Beispiel könnte ich
das auf eine solche Kollision einstellen. Wir ziehen uns heraus und wir erhalten
die Länge dieses Arrays. Und wir drucken die
Zeichenfolge, die Länge, ziehen uns von hier heraus und
drucken die Zeichenfolge so. Wenn wir jetzt den Auslöser
überfahren, sollten
wir sehen, wie er einen ausdruckt. Jetzt können wir auch die
Schauspieler kriegen, die angegriffen werden. Also, wenn wir zu unserem
Auslöser zurückkehren und mit der rechten Maustaste klicken und so was für ein Schauspieler mit Tag. Sie können sehen, dass
wir den Knoten
Alle Schauspieler mit Tag abrufen haben . Damit wir das schaffen können.
Und das wird alle Schauspieler in unserem Level erreichen
, die ein bestimmtes Tag haben. Als Warnung ist dies ein ziemlich leistungsstarker Knoten, sodass Sie ihn beispielsweise nicht für technische Zwecke verwenden
möchten. Es gibt auch eine andere Möglichkeit, alle
Schauspieler zu erhalten, die wir jetzt markiert haben, wenn wir mit der rechten Maustaste klicken und alle Schauspieler mit Tag
erhalten. Sie können sehen, dass
es ein Ghetto Schauspieler der Klasse mit Tags gibt. Wenn wir das also erstellen, wird dies dasselbe
tun wie
der Knoten hier oben, aber es beschränkt seine Auswahl auf einen
bestimmten Typ. Vielleicht hatten wir
zum Beispiel viele
Schauspieler mit einem feindlichen Tag, aber wir wollten
nur diejenigen bekommen ,
die
ThirdPersonCharacter waren. Vielleicht hattest du schon
viele Charaktere , die das feindliche Tag hatten, aber wir bekommen nur einen, um
unseren ThirdPersonCharacter zu bekommen, wir könnten das hier setzen. Jetzt werden nur noch
Third-Person-Charakter-Blaupausen zurückgegeben , die das feindliche Tag
haben. Tags sind also eine sehr praktische Methode
, um jedem Objekt auf
der Welt oder jeder Komponente ein wenig
Information hinzuzufügen . Das war's also für diese Lektion. Hoffentlich verstehst du
jetzt, wofür Tags verwendet
werden und wie sie in der Engine
funktionieren.
31. Zusätzliche Lektionen (Spawning: Hallo zusammen. In dieser
Lektion werde ich Sie durch das
Laichen von Schauspielern
sprechen. Durch die Unterstützung von Schauspielern
erschaffen wir während des Spiels
neue Objekte in der
Welt. Es beginnt also damit,
einen neuen Schauspieler zu erstellen , den
wir spawnen werden. Ich werde gerade
eine Blueprint-Klasse erstellen. Ich setze es auf einen Schauspieler und
nenne dieses Beispiel einfach Kugel. Und das öffnen wir. Ich werde das hier einfach nach oben ziehen
. Und ich füge eine neue
Komponente hinzu oder suche nach Kugel und wir
erstellen eine Kugelform. Ich werde auch ermöglichen,
wenn wir hier zur Physik gehen, Physik zu simulieren. Das ist nur so,
dass, wenn wir sie in der Welt
platzieren, sie anfängt,
sich zu rollen und Physik zu haben. Jetzt kehren wir zur Karte zurück. Ich
lösche diesen Auslöser einfach. Dies ist nur aus
unserer vorherigen Lektion. müssen Sie sich keine Sorgen machen
, wenn Sie es nicht haben. Und wir gehen zu unserem
ThirdPersonCharacter. Und dann werde ich hier ein neues Eingabeereignis
erstellen. Also suchen wir nach dem ersten
Eingabeereignis. Und wenn Sie sich erinnern,
wird dieser Knoten immer dann
ausgeführt, wenn ich
einen auf meiner Tastatur drücke. Um nun Schauspieler
in der Welt zu spawnen, verwenden
wir den Spoon-Schauspieler
vom Klassenknoten. Jetzt haben wir das schon
ein bisschen benutzt, aber in dieser Lektion werden
wir detailliert
darauf eingehen , wie es funktioniert. Also von oben beginnend, haben
wir die Klasse. Das ist die Art von Blaupause, die wir in der Welt
spawnen. Wird in der Lage sein, einen
unserer Blaupausen in
unserem Inhaltsbrowser auszuwählen . Wenn wir die Hüfte runter klicken, nette Suche, zum
Beispiel Kugel. In C haben wir unsere
Beispielsphäre gefunden. Es ist ein bisschen schwierig
zu sehen, weil das Highlight, aber
wenn ich darauf klicke, können
Sie sehen, dass unsere Klasse jetzt Beispielschwimmen
ist. Sie können sehen, dass sich der Name
des Knotens tatsächlich in eine
Spawn-Actor-Beispielkugel
geändert hat . Und das ändert tatsächlich den Typ
des Rückgabewerts. Wenn wir also den Mauszeiger darüber bewegen, können
Sie sehen, dass dies jetzt
ein Beispiel für eine
Kugelobjektreferenz ist , was bedeutet, wenn wir Variablen hätten, sagen wir in unserem Beispiel dort, werde
ich schnell eine neue
Variable erstellen, was dieses Beispiel nannte. Ich kann eine Umfrage machen. Wenn ich jetzt aus
dem Rückgabewert herausziehe, kann
ich einfach diese
Beispielvariable abrufen. Ich muss meine Kugel nicht aus
diesem Rückgabewert
umwandeln , da wir dem Knoten bereits mitgeteilt
haben , dass wir diesen Typ spawnen
, und er
den Rückgabewert auf diese
Beispielkugelreferenz gesetzt hat . Das kann also praktisch sein
, wenn Sie Funktionen oder
Ereignisse hatten , die Sie abkühlen lassen
möchten,
sobald der Blueprint
erscheint. Dann haben wir als Nächstes
die Spawn-Transformation. Dies ist der Ort auf der Welt, an dem der
Schauspieler gespawnt wird. Wenn wir herausziehen, können wir hier die
Make-Transformationsnotiz
verwenden , mit der
wir den Ort, die
Drehung und auch die
Skala des Schauspielers festlegen können . Jetzt können wir auch, wenn
wir diese Verbindung trennen, rechten Maustaste auf die
Spawn-Transformation hier mit der
rechten Maustaste auf die
Spawn-Transformation klicken und Struct Pin teilen ausführen. Und Sie können sehen,
dass wir auf die Position,
Rotation und Skalierung direkt
am Knoten zugreifen können ,
Rotation und Skalierung direkt ,
wenn wir möchten. Oder wir können
erneut mit der rechten Maustaste klicken und eine Rekombination durchführen, und das wird
sie wieder zu diesem Transformationsstift
zusammenfügen . Wenn du jetzt einen Schauspieler
spawnst, könnte
er kollidieren oder etwas anderes auf der Welt, während
er versucht zu spawnen. Wir haben also Einstellungen für die
Kollisionsbehandlung. Standardmäßig sind jetzt die Standardeinstellungen des
Projekts , die in
den Projekteinstellungen festgelegt sind. Dann müssen wir immer
Kollisionen ignorieren. Das bedeutet, dass es sich nicht
um Kollisionen kümmert. Sie werden an
dem Ort spawnen, an dem Sie SAP. Wir haben versucht, die
Position anzupassen, aber immer stoßen. Das heißt, wenn es
versucht, an
einem Ort zu spawnen , der sich überlappt, ist etwas anderes eine Kollision. Es wird versucht,
die Position ein
wenig anzupassen , damit sie diese Kollision nicht überlappt
. Dann haben wir
versucht, die Position anzupassen, spawnen
nicht, wenn wir noch gleiten. Das macht also dasselbe. Es wird versucht, die
Position anzupassen, die erscheint wenn eine
Kollision interferiert. Aber wenn es keinen Ort findet
, an dem es
ohne Kollision spawnen kann , wird es diesen Schauspieler nicht spawnen. Und dann haben wir nicht spawnen, was bedeutet, dass der
Schauspieler einfach nicht spawnt, wenn er
mit irgendetwas kollidiert. Dafür möchte ich immer, dass
meine Sphäre spawnt. Also werde ich einfach immer
spawnen, Kollisionen ignorieren. Jetzt
ist der Anstifterstift ein Pfandrecht. Wir müssen das eigentlich nicht
einstecken, damit unser Schauspieler spawnen kann,
aber das erlaubt uns, dem Schauspieler im Wesentlichen zu sagen , welche Spieler gespawnt sind. Das kann nützlich sein, sagen wir, vielleicht spawnen Sie
Projektile aus einer Waffe. Dann möchten Sie
den Projektilen mitteilen , welcher Spieler
sie spawnt , damit, wenn diese
Projektile
beispielsweise einen anderen Spieler treffen , das
eines Spielers sehen kann , wer sie beschädigt hat. Es gibt natürlich andere Verwendungszwecke
dafür, nicht nur für Projektile, aber das ist nur ein Beispiel. Wenn wir dann hier auf den
Abwärtspfeil klicken, haben wir den Besitzer. Auch dies ist ein Stift, Sie nicht anschließen müssen und der
normalerweise für Replikation
und Multiplayer-Codierung verwendet wird . Aber es erlaubt uns tatsächlich, eine Variable innerhalb des Schauspielers
festzulegen. Und wenn wir hier in unsere Sphäre gehen, können
Sie nach einem Besitzer suchen. Und das gibt uns das
Eigentum an der Blaupause. Wenn wir dies nun festgelegt haben, als wir den
Blueprint spawnen, wird es,
dieser Knoten wird überall dort
zurückkehren, wo wir beim Spawnen in den
Besitzer-Pin
gesteckt
haben, wir können tatsächlich auch auf
den Anstifter zugreifen. Wenn ich also auf
meine Beispiele für sie zurückkehre, können
wir einen Anstifter bekommen
und wir können auch diese
Variable bekommen. Und das wird
überall dort zurückkehren, wo wir in den Anstifter-Pin stecken, wenn
wir diese Blaupause spawnen. Das sind alle
Standardeingaben , die mit diesem Knoten geliefert werden. Aber wir können tatsächlich unsere eigenen hinzufügen wenn wir zu unserem
Beispiel zurückkehren, also hier, und ich wähle meine
Beispielvariable in diesen
Einstellungen dafür aus, wir können die Option exponiert
beim Spawn verwenden. Bevor wir das in Angriff nahmen, müssen
wir eine editierbare
Instanz übernehmen. Dann können wir vor Ort Ausstellungen machen
. Und wenn wir kompilieren und zum ThirdPersonCharacter Blueprint
zurückkehren, werden wir auch diesen kompilieren. Wir sollten die Stecknadel sehen. Jetzt ist es für mich nicht erschienen. Also klicke ich mit
der rechten Maustaste auf den Knoten und aktualisiere den Knoten. Sie können sehen, dass
die Pins aufgetaucht sind. Manchmal passiert das und Sie müssen nur den Knoten
aktualisieren. Manchmal erscheint der Stift
beim erneuten Kompilieren einfach. Es ist einfach, es ist irgendwie zufällig. Aber wie Sie
sehen können, haben wir jetzt die Beispielvariableneingabe. Also können wir dies
auf true oder false setzen. Und das wird tatsächlich
festgelegt, wenn die Schauspieler diesen variablen
Startwert
spawnen. Und wir haben das
mit einem booleschen Wert gemacht, aber Sie können dies mit
jeder beliebigen Variablen tun. Wenn wir sagen wollten, dass wir über Wasser sind und wir wollten, dass dies
beispielsweise Schaden genannt wird. Wir könnten das tun und wir könnten dies auf Incent
setzen, der besagt, dass die
Spule auf der Spawn-Komponente nicht belichtet ist. Geh zurück zu unserem
Third-Person-Charakter. Sie können sehen, ob ich eine Umfrage durchführen kann,
sie wird immer noch nicht angezeigt, aber ich klicke mit der rechten Maustaste auf
Aktualisieren. Jetzt. Sie sehen, dass wir jetzt auch
einen schädlichen Put-Stift haben. Jetzt sind wir also
bereit, unsere Sphäre zu spawnen. Also werde ich das
Gedrängte hier mit unserem Beispiel
verbinden . Und jetzt müssen wir
einen Ort festlegen , an dem wir ihn aufteilen
möchten. Jetzt möchte ich meine Kugel
in die Richtung spawnen , in die
meine Kamera schaut, zum Beispiel drei Meter
vor meinem Charakter. Was wir also tun, ist
, mit der rechten Maustaste zu klicken und Kontrollrotation zu erhalten. Das ist die
Drehung unserer Kamera. Ich ziehe es heraus und
mache die Drehung,
Drehung x Vektor, und das gibt
die Vorwärtsrichtung für uns, für unsere Kamera. Dann multipliziert man das mit, wir wollen
diesen Stift in einen Float verwandeln. Wenn Sie sich erinnern, klicken
wir mit der rechten Maustaste darauf. Wir konvertieren sie und
wir ändern sie in einen Float. Ich mache
doppelte Präzision. Hier
legen wir fest, wie weit unsere Objekte nach vorne stoßen
sollen. Also mache ich 300. Und das ist in Zentimetern, was das ein bisschen
zurückbewegt. Wir haben also etwas mehr Platz. Und dann müssen wir wieder
rausziehen und etwas hinzufügen. Jetzt müssen wir den aktuellen
Standort unseres Schauspielers hinzufügen, da
wir gerade
eine Richtung bewegen 300
Zentimeter Ford, aber wir haben keinen
Startort. Also werden wir den Standort des Schauspielers ermitteln. Wir schließen das hier an. Nun ist dieser Standort, der von
unserem Add Node
ausgegeben wird,
unser Zugangsstandort. Aber Ford 300 Zentimeter in welche Richtung
unsere Kameras schauen. Also können wir das jetzt
an unseren Standort hier oben anschließen. Jetzt muss ich die
Rotation nicht mehr machen, weil es fair ist. Und ich
lasse die Skala vorerst einfach bei eins, damit sie kompiliert wird. Und jetzt können wir es ausprobieren. Ich springe ins Level. Ich drücke auf „Spielen“. Und wenn ich eins drücke, können
Sie sehen, dass
wir in
unserer Sphäre laichen , wohin ich auch schaue, aber 300 Zentimeter vor uns. So
spawnt man also so ziemlich neue Schauspieler
in eine Welt. Als Nächstes zeige ich Ihnen,
wie man Schauspieler zerstört. Dafür
werde ich unseren Auslöser
aus unserer letzten Lektion tatsächlich wiederverwenden. Wenn Sie dies nicht haben oder
dies ein ist, können
wir diese
Knoten und den Code löschen. Und hier, das alles ist,
ist eine Kollisionskiste,
die wir hier aufstellen, ich habe gesagt, dass versteckt
abgehakt ist, und das war's. Wir haben hier also eine Überschneidung des
Ereignisbeginns. Was wir tun werden, ist
zu überprüfen, ob der überlappende
Schauspieler ein Beispiel hat. Wenn ja, werden wir es zerstören. Also können wir uns herausziehen und
wir können entweder Kosten für
ein Beispiel machen , eine Kugel wie diese. Jetzt kostet es viel nützlicher wenn wir tatsächlich
Informationen aus einer Blaupause benötigen . Da wir
eigentlich
keine Informationen
aus diesem Blueprint benötigen keine Informationen
aus diesem Blueprint die wir nur überprüfen möchten, ist es ein Beispiel, wo wir tatsächlich eine Klasse wie diese ziehen
können . Und das verschafft den Schauspielern Klasse. Es wird also von
unserem Inhaltsbrowser abgerufen, welche Art von
Blaupause das ist. Und daraus
können wir herausziehen, wann tatsächlich Gleiches tun
können. Und wir können überprüfen, ob es der Beispielkugel
entspricht. Und wenn ja, dann
wollen wir es zerstören. Also verwenden wir einen solchen
F-Knoten. Und wir werden uns von
anderen Schauspielern zurückziehen und zerstören. Und es gibt einen Knoten namens
Destroy Actor, der unseren Schauspieler in
der Welt so tötet oder zerstört. Das erspart uns also Casting. Es sind ein paar zusätzliche Knoten, aber das Casting erfordert ein
bisschen Leistung. Wenn wir also nicht müssen, dann wollen wir idealerweise
nicht casten. Also wollen wir das jetzt ausprobieren. Ich gehe zur
Third-Person-Map und
füge unseren Auslöser hinzu. Ich lege es hier hin und mache es
einfach ein bisschen größer. Skaliere es ein bisschen. Und wir drücken auf „Spielen“. Und ich wurde in einer Sphäre geboren. Also laichen hier drüben. Und ich kann es rumwerfen , weil wir
Physik aktiviert haben. Schieben Sie es einfach in die
Kiste und Sie werden sehen , dass es sofort
zerstört wird. Jetzt gibt es eine andere
Möglichkeit, Schauspieler zu vernichten. Wenn wir zu unserem Auslöser zurückkehren, können
wir diesen
Destroy Actor-Knoten löschen. Wir können uns in die Länge ziehen und
wir können die Lebensdauer so festlegen. Jetzt können wir mit dem eingestellten
Lebensdauerknoten
einem Schauspieler mitteilen , dass er
nach einer bestimmten Zeit zerstört werden
soll . Also kann ich das so einstellen, dass es eins sagt. Jetzt, 1 Sekunde nachdem die Kugel den Auslöser
überlappt, wird
sie zerstört. Also können wir das
ausprobieren und auf Play klicken. Ich kann in einer Sphäre spawnen. Ich schiebe das in unsere
Box und du wirst sehen, dass es noch nicht zerstört wurde und dann zerstört
es nach einer Sekunde. Wir könnten
diesen Wert auf
drei ändern , nur damit es ein
bisschen offensichtlicher wird. Drücken Sie erneut eine, drücken Sie diese rein. Sie können sehen, dass es auf der anderen Seite tatsächlich
ausgegangen ist. Und dann zerstört es Weil
gebeten wurde, drei Sekunden zu warten. Das war's also für diese Lektion. Hoffentlich
verstehst du jetzt, wie man Schauspieler in der Welt
spawnt und zerstört.
32. Zusätzliche Kurse (Code: Hallo zusammen, in dieser Lektion
werde ich Sie
durch einige der Funktionen der Codeorganisation führen, die in die Engine integriert
sind. Jetzt habe ich gerade etwas Code
zusammengestellt. Es ist nur ein Beispiel, du musst das nicht selbst kopieren
. Es ist nur so, dass ich
die verschiedenen Funktionen demonstrieren kann , mit
denen wir unseren Code organisieren können. Zunächst
haben wir also Knoten umgeleitet. Wenn ich jetzt hier auf
eine weiße Linie doppelklicke, können
wir diese
Umleitungsknoten erstellen. Mit diesen können wir jetzt steuern, wohin
der Stift tatsächlich gehen
soll . Und sie haben keinen
funktionalen Zweck. Sie haben keinen Einfluss darauf, wie
Code ausgeführt wird. Sie helfen Ihnen
lediglich dabei, Ihren Code aufzuräumen. Sie können also entweder auf
eine weiße Linie oder ein
variables Licht
doppelklicken . Also zum Beispiel eine
gelbe Linie hier unten. Ich kann darauf doppelklicken und dafür
Umleitungsknoten erstellen. Oder Sie können mit der rechten Maustaste klicken, hier nach unten
scrollen und
hier den Hinweis zur
AD-Umleitung verwenden , der auch einen
neuen Umleitungsstift erstellt. Diese können also
nützlich sein, wenn Sie Code umgehen
möchten , der Ihnen im Weg steht. So
könnte ich zum Beispiel ein F ohne Trinkgeld hinzufügen. Und vielleicht wollte ich, dass dieser Code ausgeführt wird, wenn
etwas wahr ist, aber ich wollte einen Code hier drüben , um ihn auszuführen, wenn er nicht wahr ist. Damit ich das kopieren und einfügen kann
und du legst ein C dort hin. Stattdessen könnte
ich von
false zu meinem
Spawn-Act ziehen , um es zu notieren, doppelklicken Sie auf diese weiße
Linie und ziehen Sie diese nach unten. Jetzt haben wir schönen,
sauber aussehenden Code. Dieser Code wird ausgeführt, wenn er wahr ist, dann werden wir ihn einfach im Zickzack umrunden und
diesen Code ausführen, wenn er falsch ist. Als nächstes haben wir Kommentare. Kommentare sind jetzt
sehr wichtig , um den Code sauber zu halten. Und auch wenn Sie mit
anderen Personen zusammenarbeiten ,
sind Kommentare wichtig, damit diese
Ihren Code einfach und
schnell ansehen und sehen können ,
welche Teile davon funktionieren. Um einen Kommentar zu erstellen, können
wir
einige Knoten hervorheben und die
C-Taste auf Ihrer Tastatur drücken. Und das wird
einen neuen Kommentar erstellen. Wir können etwas Text
hinzufügen, damit ich create player, HUD,
schreiben kann . Jetzt kann ich mir diesen Kommentar
ansehen. Ich weiß, dass diese Knoten
hier die Spielerhütte schaffen. Jetzt können wir steuern, welche
Farbe die Kommentarfelder haben. Also kann ich das ändern und rot sagen. Ich kann die Schriftgröße
mit diesem Wert hier vergrößern oder verkleinern, ich kann eine Blase zeigen. Wenn wir also herauszoomen, kann es etwas schwierig
sein,
den Text mit den
sprudelnden Texten der Show zu sehen . Sie können sehen, dass wir
hier
diese kleine Blase bekommen , die sich neu skaliert,
wenn wir die Ansicht verkleinern. Und wenn wir das
Kommentarfeld erneut auswählen, können
Sie sehen, dass wir hier die
Farbblase haben, mit der
wir nur die Farbe
der Blase ändern können . Dann haben wir den
Bewegungsmodus. Wenn wir nun die Box
mit Knoten darin bewegen, bringt
es diese Knoten mit sich. Aber wenn wir das ausschalten wollen, können
wir dies in einen Kommentar ändern. Und jetzt bewegt sich nur noch das
Kommentarfeld. Wenn Sie den Text jemals bearbeiten
möchten, können
Sie jederzeit einfach
auf diese Weise darauf doppelklicken. Oder wenn Sie es auswählen, können
Sie den
Kommentartext auch hier ändern. Eine andere Möglichkeit, Kommentare
zu erstellen, als ob Sie mit der rechten Maustaste
ganz nach unten scrollen würden. gibt es eine Option zum Hinzufügen von Kommentaren Hier gibt es eine Option zum Hinzufügen von Kommentaren, auf die Sie klicken können und die uns
nur einen
neuen Kommentarknoten erstellt. Wir können die Größe des
Kommentarknotens auch ändern,
indem Sie die Kante einfach in eine beliebige Richtung ziehen,
und Sie können die Größe ändern. Sie können auch gängige
Boxen innerhalb von Boxen verwenden. Wenn ich das also ein
bisschen größer mache, wenn ich nur diese Knoten auswähle , kann ich
einen neuen Kommentar hinzufügen. Und ich kann einige
Texte hinzufügen, damit
ich ein Widget erstellen kann , zum Beispiel. Eine weitere gute Sache bei
Kommentaren ist,
dass wir, wenn ich Control F mache, die Blaupause
nach Schlüsselphrasen
durchsuchen können . Wenn ich beispielsweise nach einem
Player-HUD suche, was in meinem Kommentar steht, können
Sie sehen, dass
tatsächlich das
gemeinsame gefunden wird und es mir sagt,
was in diesem Kommentar enthalten ist. Wenn ich darauf doppelklicke,
gelange ich zu diesem Kommentarfeld. Als Nächstes werfen wir einen
Blick auf die zusammengeklappte Notiz. Wenn wir also hier herauszoomen
und diesen Code auswählen, z.
B. wenn ich mit der rechten Maustaste auf
einen der Knoten klicke, kann
ich Knoten reduzieren auswählen. Wenn ich darauf klicke, bekommen
wir
hier diese neue Notiz, die ich benennen kann. Es ist also cool, dieses
Feuer zum Beispiel. Jetzt müssen wir nur noch die Notizen machen, die wir
ausgewählt haben , und sie
hier zu einem Knoten komprimieren. Wenn ich also
darauf doppelklicke, kannst du sehen , dass alle unsere
Knoten noch existieren. Sie sind hier drin und sie werden immer noch funktionieren, wenn wir eins drücken, es war immer noch Spawn eine Kugel. Es ist nur so, dass jetzt alle diese Knoten
in diesem einen Knoten enthalten sind. Jetzt können wir unserem
Collapse-Knoten Eingaben und
Ausgaben hinzufügen , wenn wir möchten, ähnlich einer
Funktion oder einem Makro. Wir könnten also einen Eingang,
sagen wir einen Ausführungs-Pin-Ausgang,
und einen Ausführungsausgang hinzufügen sagen wir einen Ausführungs-Pin-Ausgang, . Wir könnten zum Beispiel auch eine boolesche
Ausgabe hinzufügen. Und wenn wir
unseren Zusammenbruch öffnen, wissen
Sie, dass der Eingabeknoten jetzt diese Ausführungseingabe hat. Wir haben auch diese
Ausführungsausgabe und unseren booleschen Stift. Im Gegensatz zu einem Makro
oder einer Funktion müssen
wir diese Pins jetzt nicht mehr
ausführen, damit der
Code innerhalb des Collapse-Knotens ausgeführt wird. Weil sich unsere Presse eine Notiz hier in unserem Kollaps-Knoten
befindet. Es wird immer noch laufen,
ohne dass wir
diese Pins außerhalb
des Kollaps-Knotens ausführen . Ich persönlich verwende
diese gerne, um Code zu gruppieren. Also haben wir zum Beispiel den
ganzen Code hier. Das ist so ziemlich nur für
die Bewegung des Charakters. Also könnten wir mit der rechten Maustaste klicken, einen zusammengeklappten Knoten
machen, und dann könnte ich
das eine Bewegung nennen. Jetzt ist mein
ganzer Bewegungscode an einem Ort, an den ich gehen kann,
das ist alles hier drin. Und vielleicht hätte ich
einen Kollapsknoten für meine Schießmechanik und Klettern und verschiedene
andere Dinge. Auf diese Weise haben Sie nicht
nur jede
Menge Code und Ihr Event-Diagramm. Wenn Sie jemals rückgängig machen möchten dass Ihr Code in
einem Kollapsdiagramm enthalten ist, können
wir immer einfach mit
der rechten Maustaste auf das reduzierte Diagramm klicken und
wir können den
Erweiterungsknoten erstellen, der unsere Klatschen tatsächlich
löscht und bringen unseren gesamten
Code zurück zum Event Graph. Jetzt haben Sie vielleicht
die andere Kollapsoption bemerkt. Wenn wir also mit der rechten Maustaste klicken
, wird die Funktion reduziert
und in Makro reduziert. Denken Sie nun daran
, dass diese Ereignisse hier nicht innerhalb
einer Funktion oder eines Makros existieren können. Wenn ich also mit der rechten Maustaste
darauf klicken und die Collapse-Funktion ausführen würde, werden
Sie sehen, dass wir einen Fehler erhalten, aber der Code hier könnte tatsächlich in einer Funktion
existieren. Wenn ich das also auswähle und
die zusammengebrochene Funktion mache, können
Sie sehen, dass es diese neue Funktion
erstellt tatsächlich automatisch
die Eingabe für uns hinzufügt. Wenn wir das öffnen, sehen Sie,
dass unser Code da drin ist. Wenn wir hier zu unserem
Ereignisdiagramm zurückkehren, gibt es auch die Option
für mehrere Ereignisdiagramme. Sie sehen also, dass
wir nur einen haben. Und wenn wir hier auf den
Abwärtspfeil klicken, können
wir tatsächlich unseren
Brandkollaps-Hinweis sehen, der
uns auch eine Liste aller
aktuellen Ereignisse
im Ereignisdiagramm gibt der
uns auch eine Liste aller . Wir können neue
Event-Graphen erstellen und ein neues erstellen. Ich könnte diese
Se-Bewegung zum Beispiel nennen. In unserem neuen Bewegungsereignisdiagramm könnten
wir einfach kopieren und einfügen oder ich schneide aus, ebenso Control X. Und ich füge das in
unseren Bewegungsgraph ein. Und jetzt
befinden sich alle diese Knoten in unserem Bewegungsgraphen. Sie funktionieren immer noch genauso als ob sie sich
im Ereignisdiagramm befinden würden, aber jetzt befinden sie sich
in einem neuen Diagramm. Wir können diese verwenden, um Ihren Code
erneut zu organisieren. Jetzt können wir hier auch unser
My Blueprint-Panel organisieren. Wir beginnen also mit Variablen. Wenn wir hier auf eine
unserer Variablen klicken, haben
wir einige Optionen. Diese Variable enthält also
tatsächlich einen Tooltip, da sie mit der
Third-Person-Vorlage
geliefert wird. Wenn ich meine Gesundheitsvariable auswähle, zum Beispiel in C, können
wir eine Beschreibung festlegen. Also kann ich das so einstellen, dass
die Spieler aktuell sind, wie das kompiliert wird. Wenn ich jetzt mit der Maus
über meine Variable fahre, heißt
es, dass die aktuelle Gesundheit des
Spielers ist. Und wenn ich zu den Standardeinstellungen gehe
und meinen Gesundheitsbereich finde, der
aber, wie Sie sehen können, wenn ich den Mauszeiger darüber bewege,
die aktuelle Gesundheit des Spielers anzeigt. Wir können
unsere Variablen auch kategorisieren. Wenn ich also hier erneut meine
Gesundheitsvariable auswähle und zur Kategorie runtergehe, können
wir eine neue Kategorie festlegen. Derzeit können wir also Standardkamera oder
den Standardcharakter
verwenden, aber wir können neue erstellen. Wenn ich also einfach den Text auswähle und lösche,
können wir ihm einen Namen geben. Also nenne ich das
die Gesundheitskategorie. Drücken Sie Enter. Sie werden sehen, dass sich unsere Variable jetzt in ihrer eigenen Gesundheitskategorie
befindet. Und wir können
andere Variablen in
diese Gesundheitskategorie ziehen ,
indem wir sie einfach so ziehen. Oder wenn ich es wieder herausziehe, können
wir die Kategorie
hier jetzt ändern, um zu helfen. Und es steigt für uns einfach variabel
in diese Kategorie auf. Wenn wir jetzt zu
unseren Standardkosten gehen, werden
Sie sehen, dass wir
eine neue Kategorie für Gesundheit haben werden. Also werden wir zuerst kompilieren. Dann gehen wir zu den Klassenstandardwerten. Sie können sehen, dass wir jetzt eine Gesundheitskategorie
haben. Wir haben unsere
Startgesundheit und unsere Gesundheitsvariable
beide drin. Jetzt können wir auch Unterkategorien
hinzufügen. Wenn ich also hier meine
Gesundheitsvariable auswähle und gehe und auf den Text klicke, dann
haben wir dort immer noch Gesundheit. Aber ich füge
eine vertikale Linie hinzu. Dies ist der Schlüssel in der
unteren linken Ecke über der Windows-Taste. Es mag sich an einem
anderen Ort für andere Tastaturbelegungen
befinden, aber genau dort ist es für mich. Wenn ich die Umschalttaste gedrückt halte und eine vertikale Linie
mache, kann
ich jetzt einen anderen Namen für die
Unterkategorie schreiben. Könnte
zum Beispiel starten, wenn ich die Eingabetaste drücke, sehen
Sie, dass sich
unsere Gesundheitsvariable jetzt in der Gesundheitskategorie
innerhalb der Startkategorie
befindet . Wir haben jetzt also eine Unterkategorie. Jetzt können wir
dasselbe auch für Funktionen tun. Also, wenn ich
hier meine neue
Funktion auswähle , die
ich beim Zusammenklappen und Knoten erstellt habe. Wir können eine Beschreibung
für diese Funktion sagen. Also könnte ich das nennen,
das ist eine Testfunktion. Funktion. Wenn
ich jetzt mit der Maus darüber fahre, können
Sie sehen, dass es
dies als Testfunktion liest. Wir haben also einen Tooltip.
Wir können eine Cap-Kategorie festlegen. Sie können also sehen, dass es tatsächlich
Zugriff auf unsere
variablen Kategorien hat . Also könnte ich dies
auf die Kategorie Gesundheit setzen. Jetzt haben wir es in
einer Gesundheitskategorie. Und
dasselbe können wir mit Makros machen. Wenn ich also ein neues
Makro erstelle und es auswähle, können
Sie sehen, dass ich Kategorie sagen kann, sagen wir zum Beispiel die
Kamerakategorie, wir können auch die Farbe ändern. Wenn ich also zum Event
Graph gehe, ziehen wir das rein. Ich füge einfach schnell ein paar Eingaben hinzu, damit
es ein bisschen größer wird. Fügen Sie also ein paar Eingaben hinzu. Jetzt können wir die Farbe tatsächlich
ändern. Wenn ich das auswähle, können
wir es in Rot ändern. Sie können jetzt sehen, dass
wir einen roten Titel haben, aber wir können
auch eine Beschreibung festlegen, wenn wir möchten. Das ist also ein Test, richtig? Nicht korrekt. Wenn ich mit der Maus darüber fahre, sehen Sie,
dass dies ein Testmakro ist. Diese sind jetzt
hilfreich, insbesondere wenn Sie
mit anderen Menschen zusammenarbeiten. Sie können detailliert
beschreiben, was Funktionen und Variablen tun. Es kann auch hilfreich sein, wenn Sie alleine an einem großen
Projekt arbeiten, da Sie möglicherweise Hunderte oder sogar Tausende von Variablen
in vielen Blueprints haben. Und vielleicht vergisst du, was eine Variable bewirkt oder wie sie funktioniert. Es ist also immer gut,
eine kurze Beschreibung der
Funktionsweise Ihrer Variablen zu haben . Schließlich können wir die Beschreibung der
Blaupause sagen. Wenn wir also zu den Kosteneinstellungen gehen, können
wir die aktuelle
Blueprint-Beschreibung festlegen. Sie können also
im Moment sehen, dass
Character Blueprint steht , der Bewegungslogik
enthält. Wenn wir zum Inhaltsbrowser gehen
und den Mauszeiger über unseren Blueprint bewegen, können
Sie sehen,
dass wir diese Beschreibung erhalten, wenn wir den Mauszeiger darüber
und den Inhaltsbrowser bewegen.
Wir können dies ändern, was wir wollten. Wir könnten das ändern, um zu sagen, dies die Hauptfigur ist. Wenn ich jetzt kompiliere, bewege den
Mauszeiger darüber und den Inhaltsbrowser, du kannst sehen, dass dies
die Hauptfigur ist. Das sind also so ziemlich
alle Hauptmethoden, wie Sie Code
in Unreal Engine organisieren
können.
Es ist wirklich wichtig
, dass Sie Ihren Code
aufgeräumt halten , da dies den Zeitaufwand für die
Behebung erheblich verkürzen kann Zeitaufwand für die
Behebung erheblich einen Bug oder
füge deinem Projekt eine neue Funktion hinzu. Und gerade wenn du mit anderen Leuten
zusammenarbeitest, Kommentare und Tooltips für sind
Kommentare und Tooltips für
deine Funktionen und Variablen sehr wichtig. Das
war's also für diese Lektion. Hoffentlich haben Sie ein
bisschen mehr darüber gelernt, wie Sie Ihren
Blueprint-Code sauber und ordentlich halten
können.
33. Zusätzliche Kurse (Debug: Hallo zusammen. In dieser Lektion
werden wir uns einige der
Blueprint-Debugging-Tools ansehen , die mit der Engine geliefert werden. Bevor wir also anfangen, habe ich ein neues
Third-Person-Vorlagenprojekt
erstellt, damit wir einen
Neuanfang für diese Lektion haben. Eines der Dinge, die Blueprints wirklich
mächtig
machen, ist die Geschwindigkeit, mit der
sie debuggen können. Weil wir in Echtzeit sehen können,
welcher Code läuft. Wir können Variablenwerte
einfach überprüfen , während das Spiel noch
läuft. Und wir können
Breakpoints auch verwenden, um das Spiel praktisch anzuhalten, wenn ein
bestimmter Code ausgeführt wird. Zunächst
zeige ich Ihnen, wie wir sehen können , welcher Code ausgeführt wird, während
wir im Editor spielen. Also klicke ich auf „Spielen“, um
den Plan-Editor aufzurufen. Wenn wir F8 drücken, können Sie sehen dass ich jetzt die
Kontrolle über meine Maus habe und Dinge in
meinem Inhaltsbrowser oder
im Editor auswählen
kann . Also werde ich hier meinen
ThirdPersonCharacter öffnen. Sie können sehen, dass wir den Editor geöffnet
haben, aber er zeigt uns nicht , welcher Code
gerade ausgeführt wird. Das liegt daran, dass
wir ihr sagen müssen , welche Blaupause
wir überprüfen möchten. Hier oben im
Drop-Down-Menü haben
wir also die verschiedenen Blaupausen
, die im Level existieren. Es gibt also nur einen
ThirdPersonCharacter und ich werde level. Wir haben also nur eine Option. Also wähle ich das aus. Jetzt. Wenn deine Fenster kleiner sind, wenn ich meine so etwas
kleiner mache, kannst
du sehen, dass ich
das Dropdown nicht habe. Das ist in Ordnung. Du kannst einfach auf diesen
kleinen Pfeil hier klicken. Und das gibt
Ihnen die Optionen , die nicht in die Werkzeugleiste passen. Ihr seht, dass wir
unseren Charakter auch hier auswählen können . Jetzt, wo unser
Charakter ausgewählt ist, kannst
du sehen, dass die
Ausführungszeilen auf mehreren
unserer Knoten beleuchtet sind
, und das liegt daran, dass sie
gerade laufen. Jetzt. Derzeit können wir
sehen, dass mehrere Knoten in unserem
ThirdPersonCharacter laufen. Und der Grund dafür ist, dass
dies
Zugriffs-Eingabeknoten sind , die jeden Frame ausführen. Jetzt können wir nicht nur
sehen, welcher Code ausgeführt wird, wir können auch
Variablenwerte überprüfen, wenn wir hier zu den Mauseingaben gehen
und ich mir
die
geschlitzte Mauseingabe ansehe . Wir haben einen Achsenwert. Und wenn ich mit der Maus
darüber fahre, können wir
den aktuellen Wert sehen , der
im Moment 0 ist. Und das liegt daran, dass
ich
meine Kamera im Spiel im Moment nicht bewege . Aber vielleicht möchte ich
sehen, was dieser Wert ist, während ich meine Kamera tatsächlich
bewege. Was ich also tun kann, ist mit der rechten Maustaste zu klicken
und diesen Wert zu beobachten. Und wir bekommen diese kleine
Sprechblase,
die den aktuellen
Wert dieses Stifts anzeigt. Wenn ich also die Kontrolle über
meinen Charakter übernehme ,
indem ich einfach das Ansichtsfenster auswähle, bewege
ich meine Kamera. Sie können sehen, dass der Wert in dieser
Sprechblase aktualisiert wird. Das ist also ein wirklich hilfreiches
Tool, um zu sehen welche Variablen es gibt, während
wir das Spiel spielen. Jetzt gibt es
einige Einschränkungen. Normalerweise funktioniert es
innerhalb einer Funktion nicht. Wenn Sie also
innerhalb einer Funktion arbeiten, der Wert der Uhr
normalerweise funktioniert der Wert der Uhr
normalerweise
nicht innerhalb dieser Funktion. Es funktioniert nur innerhalb
eines Ereignisgraphen oder Makros. Jetzt können Sie auch mehrere
derselben Blueprints und
Ihres Levels haben und
möchten sehen, welcher Code in jedem
dieser Blueprints ausgeführt
wird. Also wenn ich X jetzt aus dem
Spiel habe und einen ThirdPersonCharacter
hineinziehe und ihn einfach hier drüben platziere. Dann drücke ich auf Play und sehe, dass es uns gerade zeigt,
welcher Code gerade ausgeführt wird, aber nur innerhalb des Charakters , den wir gerade
kontrollieren. Was wäre, wenn wir den Code sehen wollten , der in
unserem Alpha-Charakter ausgeführt wird? Nun, wenn wir
jetzt
zum Drop-Down-Menü gehen , können Sie sehen, dass wir hier auf
unserer Liste der Blaupausen
einen weiteren Charakter haben . Jetzt haben Sie möglicherweise Hunderte von
Blaupausen in Ihrem Level, daher ist es schwierig zu
wissen, welcher in dieser Liste der Blueprint ist, den
Sie überprüfen möchten. Was wir also tun können, ist, während
wir ausgeworfen werden, wir können auswählen, oder wenn wir F8 drücken, können wir einen anderen Blueprint
wie unseren Charakter hier
auswählen. Kehren Sie zu unserem ThirdPersonCharacter zurück und
klicken Sie auf das Drop Sie können sehen, dass wir dieses
Handy
tatsächlich in Klammern ausgewählt haben , und das sagt uns, welches in der Liste wir in der Ebene
ausgewählt haben. Also können wir das auswählen und
dann können wir uns den Code ansehen , der für diesen
ThirdPersonCharacter ausgeführt wird. Da dieses Zeichen
nicht kontrolliert wird, läuft derzeit
keiner seiner Codes. Jetzt wollen wir uns die Breakpoints
ansehen. Nun, wenn ich hier im
Drop-down-Menü zu
meinem gespawnten Charakter zurückkehre hier im
Drop-down-Menü zu
meinem gespawnten Charakter ,
können wir sehen, dass der
Code läuft. Wir wissen, dass wir die
richtigen Blaupausen ausgewählt haben. Was wir tun werden ist, dass wir Planeten
verlassen, herauskommen und ich werde
meinen Charakter hier löschen ,
also lösche ich ihn. Jetzt. Wir erstellen
eine Begin Play-Note. Und ich ziehe mich einfach
raus und mache eine Druckzeichenfolge. Und wenn wir mit der rechten Maustaste auf diesen Knoten klicken, können
Sie sehen, dass wir einen Breakpoint
hinzufügen können. Und wenn wir das in C machen, bekommen
wir
hier dieses kleine
Ausrufezeichen und wir werden kompilieren, einfach dieses
Ausrufezeichen los. Dieses rote Symbol bedeutet also, dass
dieser Knoten einen Breakpoint hat. Jetzt stoppen Breakpoints den Code oder das Spiel, wenn
der Knoten ausgeführt wird. Wenn ich also auf Jetzt spielen klicke, kannst
du sehen, dass die
Spiele derzeit angehalten wurden. Und es sagt uns, Hey, dieser Knoten mit dem
Breakpoint wird ausgeführt. Dies ist ein sehr praktisches
Tool, wenn Sie
überprüfen möchten , ob ein Teil
des Codes ausgeführt wird. Wenn wir das
Spielen und den Editor fortsetzen wollen, können
wir einfach auf diesen
kleinen Play-Button hier oben klicken und wir können wie gewohnt die Kontrolle über
unseren Charakter übernehmen. Jetzt
haben unsere Breakpoints auch einige andere Funktionen
, die wir verwenden können. Wenn wir also jetzt das Flugzeug verlassen, füge
ich einfach einige Knoten hinzu, um Zeichenfolge
zu drucken, oder füge ein F Und wir fügen einen Flipflop-Knoten hinzu. Und daraus fügen wir zum Beispiel ein paar Print-Strings auf jeder der Ausgaben hinzu, so. Wenn wir jetzt einen Editor spielen, können
Sie sehen, dass unser
Breakpoint läuft. Jetzt. Wir können weitermachen
wie zuvor. Wir können nur den
nächsten Frame-Button verwenden, und das führt uns durch
jeden Knoten unseres Codes. Also wenn ich das drücke, kannst du sehen, dass es
den Zweigknoten ausführt. Wenn ich es erneut drücke,
gelangen wir zum Flip-Flop-Knoten. Und der Grund, warum der echte
Stift läuft, ist, dass unser Zustand auf unserem
Zweigknoten aktiviert ist. Also ist es wahr. Jetzt,
wo die
Flip-Flop-Knoten ausgewählt ich erneut auf die Schaltfläche „Nächstes
Bild“ klicke, können
Sie sehen, dass
wir tatsächlich zu einer ganz neuen Blaupause gelangen . Wir haben diese Codes hier
, die wir eigentlich nicht geschrieben haben. Der Grund dafür
ist unser Flipflop-Knoten als
in die Engine eingebautes Makro. Also wird es uns in seinem eigenen Code durch seine Knoten führen. Also gehen wir das durch und können für
jedes davon auswählen. Wenn wir jetzt
am Ende sind und ich es erneut drücke, bringt
es uns zurück zu unserem
ThirdPersonCharacter aus dem a-Eingang des Flipflop-Knotens und führt den Print-String-Knoten aus. Dies ist eine weitere sehr hilfreiche
Funktion von Breakpoints. Wir können unseren
Code Knoten für Knoten durchgehen während das Spiel läuft, um zu
sehen, welcher Code ausgeführt wird. Jetzt gibt es einige andere
Steuerelemente für unsere Breakpoints. Wenn wir unser Fenster hier
etwas vergrößern,
können Sie sehen, dass wir einige
zusätzliche Optionen haben. Also werde ich unseren Plan-Editor
neu starten. Jetzt sind wir zu
unserem ursprünglichen Breakpoint zurückgekehrt. Jetzt haben wir ein paar
verschiedene Optionen, also müssen wir einen Schritt in den
nächsten Knoten ausführen. Das funktioniert ziemlich genauso wie unser fortschrittlicher Einzelrahmen. Wenn wir diese Taste drücken und Sie sehen, dass wir
zum nächsten Knoten gelangen. Wenn ich das jetzt noch einmal drücke, können
Sie sehen, dass wir
zu unserem Flipflop-Knoten gelangen. Vielleicht ist es mir egal
, was in diesem Knoten
vor sich geht in diesem Knoten
vor sich geht ein Knoten, der
in die Engine eingebaut ist. Ich weiß, dass es funktioniert. Vielleicht
möchte ich
diesen Knoten und den darin enthaltenen
Code einfach überspringen . Was wir tun können, ist, dass wir
diesen nächsten Knopf drücken können , und das
wird uns einfach überspringen , den Code
innerhalb dieses Knotens durchzugehen. Wir können also einfach
darauf klicken und sehen, dass es uns
nicht zu
den Standardmakros führt. Wir überspringen das einfach und können dies auch mit
Funktionen verwenden. Wenn Sie also eine Funktion
in Ihrem Code haben und nicht jeden Knoten
innerhalb der Funktion durchgehen
möchten, können
Sie einfach diese
Schaltfläche verwenden, um
sie zu überspringen und das Ergebnis zu sehen. Wir können diese
kleine Lupe auch verwenden , um uns zu den
aktuell ausgewählten Knoten zu führen. Wenn ich mich also in
meinem Code umsehe und sehen
wollte, wo ich bin, könnte
ich einfach darauf klicken
und es bringt uns dorthin. So können wir also navigieren während wir unsere Breakpoints verwenden. Und wenn Ihr Fenster kleiner ist, also Ihre Fenster wie dieses, vergessen Sie
nicht, dass Sie diese Einstellungen
immer
im Dropdown-Menü
hier drüben finden im Dropdown-Menü
hier drüben , wenn Ihre Taskleiste zu klein
ist. Als Nächstes werfen wir einen Blick auf das Blueprint-Debugger-Fenster. Wenn wir also zum
Debug-Dropdown gehen und hier auf den Blueprint-Debugger
klicken, können Sie sehen, dass wir dieses
Panel haben, das uns
einige Informationen
über den Blueprint gibt einige Informationen
über den Blueprint wir derzeit ausgewählt haben. Sie können also sehen, wenn ich hier neben
dem Namen meines Blueprints auf
den Abwärtspfeil klicke , können
Sie sehen, dass die Variable
, die wir beobachten sollen, wenn wir hier nach unten gehen, auch
dieser Achsenwert hier aufgeführt ist. Wenn Sie also viele
verschiedene Werte hatten, die
Sie sich angesehen haben, könnten
Sie vielleicht verschiedene Werte hatten, die
Sie sich angesehen haben, dieses Fenster öffnen und sehen, dass alle hier unten
angezeigt werden. Wir können auch die Breakpoints sehen. Hier haben wir also Breakpoints im Code
, der uns den Knoten mitteilt. Und wenn wir darauf klicken,
werden wir tatsächlich zu diesem Knoten weitergeleitet. Wenn Sie also
einen Breakpoint in
Ihrem Code haben und
vergessen haben, wo Sie ihn abgelegt haben, können
Sie immer einfach darauf klicken, um zu dem Punkt
zu gelangen
, an dem sich dieser Breakpoint befindet. Schließlich haben wir den
Ausführungs-Trace. Dies sagt uns jetzt, was derzeit
in unserem Blueprint läuft. Im Moment
können Sie also sehen, dass
das Event mit dem Spielen beginnt
und die Zeichenfolge druckt. Das liegt daran, dass der
Breakpoint ausgeführt wird. Daher ist unser gesamter Code
derzeit eingefroren. Aber wenn ich auf die Schaltfläche „
Fortsetzen“ klicke, werden
Sie sehen, dass wir jetzt
unsere Eingabeachsen-Events haben, und diese werden in jedem Frame
ausgeführt, sodass diese kontinuierlich
aktualisiert werden. Wenn wir jetzt unseren
Plan-Editor verlassen und erneut auf Play klicken, wird jetzt ein
Breakpoint ausgelöst. Und wenn wir hier
zum Call-Stack gehen, können
wir tatsächlich sehen, was genau diesen
Breakpoint-Auslöser ausgelöst hat. Jetzt
laufen wir gerade aus und fangen an. Es ist also ziemlich einfach zu erkennen. Sie können sehen, dass es uns
im ThirdPersonCharacter mitteilt , der Spielbeginn
des Ereignisses im Ereignisdiagramm unseren Breakpoint
auslöst. Möglicherweise haben Sie jedoch eine
Situation , in der Sie möglicherweise ein
benutzerdefiniertes Ereignis haben, das Code ausführt und der
Kunde dann an vielen
verschiedenen Orten ausgeführt
werden kann . Vielleicht auch noch
eine Blaupause. Und vielleicht wird dieser Code ausgeführt wenn Sie das
nicht möchten, aber Sie wissen nicht, in welchem Ereignis in welchem Blueprint
er ausgeführt werden soll. Hier
kann der Call Stack sehr hilfreich sein. Wenn wir also vorerst den
Flugzeugeditor verlassen, werde
ich ein Beispiel aufstellen. Wenn ich also eine
neue Kundenveranstaltung erstelle, erstelle ich eine benutzerdefinierte Veranstaltung, nenne ich dieses Beispiel. Ich verbinde das hier mit unserem Code. Und wir werden wieder
play note aufnehmen und wir
nennen dieses Ereignis, also nenne ich es Beispiel. Vielleicht haben wir jetzt auch andere Orte, die
unser Beispielereignis nennen. Wenn ich also mit der rechten Maustaste
klicke und nach Eingabeereignissen suche, kopiere ich das und füge es ein. Und ich setze diese Eingabe
zum Beispiel auf zwei, indem ich
einfach
hier auf die
kleine Tastaturtaste klicke und dann Tube drücke. Und wir werden
dieses Ereignis auch von
diesen Eingaben aus aufrufen , so. Also kopiere diese und füge sie ein,
und dann werden wir kompilieren. Wenn wir jetzt auf Play klicken,
um den Editor zu planen, können
Sie sehen, dass unser Breakpoint
läuft und jetzt
teilt er uns den Code mit, der diesen Breakpoint
aufruft. Wir können sehen, dass im
ThirdPersonCharacter das Event beginnt zu spielen. Wenn wir also
zu unserem Event begin übergehen läuft
das
Spiel im Event Graph und das kühlt das
Beispielereignis in unserem Ereignisdiagramm ab. Und dann werde ich den
Punkt so brechen, wie er genannt wird. Aber wenn wir das Spiel
fortsetzen übernehme ich einfach die
Kontrolle über meinen Charakter. Man sieht im Hintergrund dass ich mich
um die Kamera bewege. Wenn ich eine drücke, können Sie sehen , dass unser Breakpoint
läuft und jetzt
sagt er uns, dass die eine
Eingabe gedrückt wird. Das ist cool. Und das steht im Event Graph. Das ist dann die Kühlung unseres
Beispielkunden,
dann ist es das, was unseren Breakpoint
auslöst. Und dann dasselbe
, wenn ich auch drücke, können
Sie sehen, dass in
unserem Aufrufstapel im
Ereignisdiagramm auf zwei
geändert wird , das Beispielereignis
gekühlt wird, und das ist auch im
Ereignisdiagramm. Dies kann jetzt auch für Funktionen
funktionieren. Wenn Sie also
innerhalb einer Funktion einen Breakpoint hinzufügen, wird bei jedem Aufruf auch im
Aufrufstapel angezeigt, durch welche Ereignisse diese
Funktion ausgeführt wurde. Und das ist in
größeren Projekten sehr hilfreich ,
da Sie möglicherweise
Funktionen und Ereignisse haben , die an vielen
verschiedenen Orten aufgerufen
werden . Und wenn dieser Code
ausgeführt wird , wenn Sie ihn nicht
möchten, kann es sehr
schwierig sein, herauszufinden wo genau
er gekühlt wird. Mithilfe eines Aufruf-Stacks
und des Breakpoints können
Sie also sehr
schnell herausfinden, welche Ereignisse diese
Funktion oder dieses Ereignis
tatsächlich aufrufen. Das Letzte, was ich beim
Debuggen von Code wirklich nützlich
finde , ist der
Print-String-Knoten. Jetzt haben wir es in unseren vorherigen Lektionen
häufig verwendet, aber ich werde Ihnen einige Verwendungsmöglichkeiten
beim
Debuggen von Code
zeigen . Was wir also tun werden, ist, unser Spiel als Editor zu
beenden, und ich werde einfach
unseren Blueprint-Debugger
schließen, um unseren
ThirdPersonCharacter zu maximieren und die Standardmakros zu schließen. Jetzt drucke Strings
oder etwas, das ich
ständig verwende , wenn
ich Code debugge. Wir können sie zu Ereignisketten hinzufügen um zu wissen, wann ein Ereignis ausgeführt wird, wir können sie verwenden, um Variablenwerte auszugeben. Wir können sie auch
nur verwenden, um
Informationen zu einigen
unserer Einstellungen bereitzustellen . Nehmen wir zum Beispiel an, ich hätte
gesund angefangen. Also kann ich das als
Startgesundheit bezeichnen. Und ich könnte
eine Überprüfung haben und zum Beispiel
mit Placode beginnen, ich könnte es tun, ist größer als 0. Und wir könnten einen F-Knoten machen. Verbinde das so. Dann wollen wir wahrscheinlich, dass unsere Starthilfe
immer größer als 0 ist. Was wir also tun können, ist, wenn die Zeichengesundheit
nicht größer als 0 ist, können
wir eine Druckzeichenfolge hinzufügen
und wir können einfach
den Anfang auf 0 setzen . Wenn wir nun
einen Editor spielen würden und mit 0
beginnen,
wenn wir nach
diesem Breakpoint fortfahren, können
Sie sehen, dass es uns eine Warnung
gibt, die besagt:
Hey, du fängst an,
Gesundheit ist 0. Sie können diese also verwenden, um
sich selbst zu warnen dass eine Einstellung
möglicherweise nicht
korrekt ist oder dass etwas überhaupt
nicht gesetzt wird. Dies kann auch sehr
hilfreich sein , wenn Sie
mit anderen Personen zusammenarbeiten. Vielleicht
passen sie eine Einstellung und ändern sie falsch. Wenn sie dann einen Editor spielen, können
Sie eine Warnung
einrichten, die ihnen sagt, hey, diese Einstellung ist falsch,
Sie müssen sie ändern. Jetzt werde ich print string
hat auch einige andere Optionen. Wenn wir also hier auf den
Abwärtspfeil klicken, haben
wir einen Druckerbildschirm. Wenn dies nun
angekreuzt ist, wird es im Spiel auf
dem Spielerbildschirm
sichtbar sein . Wir müssen ein Protokoll drucken. Wenn dies nun zutrifft, wird
es auch dem Ausgabelog
hinzugefügt. Sie können also das
Ausgabe-Login-Fenster finden, dann gehen Sie hier zum
Ausgabelog und kreuzen Sie das an. Sie können sehen, dass wir unser Ausgabelog
haben. Wenn ich einen Editor spiele, entferne ich
jetzt unseren Breakpoint hier, damit er nicht läuft. Um einen Breakpoint zu entfernen, klicken Sie
einfach mit
der rechten Maustaste auf den Knoten, auf
dem sich der Breakpoint befindet, und
wählen Sie einfach Breakpoint entfernen. Wenn wir jetzt auf „Abspielen“ klicken,
können Sie sehen, dass unser Text gedruckt
wird. Und wenn Sie
im Ausgabelog nachschauen, haben
wir auch unter
Protokoll-Blueprint-Benutzermeldungen. Wir haben diese Nachrichten
von unseren Print-Strings. Jetzt haben wir ein
paar andere Einstellungen für unsere Print String-Knoten. Wir haben auch die Textfarbe. Dadurch wird die Farbe geändert
, die auf dem Bildschirm angezeigt wird. Dann haben wir Dauer. So viele Sekunden
wird es auf dem Bildschirm angezeigt. Jetzt mache
ich es gerne mit meinen Print String-Knoten, wenn ich sie in meinem Code verwende. Ich erstelle auch eine Variable
namens show debug text. Und wir können eine Umfrage durchführen, nur um
unseren Default Value Shop zu bekommen. Jetzt verbinde ich das eher mit
dem Druckerbildschirm
und drucke hier ein Protokoll. Also, wenn ich jetzt
alle meine Print-Strings ausschalten möchte, mache ich
vielleicht Screenshots oder Videos oder so etwas. Ich möchte nicht, dass meine
Druckzeichenfolge angezeigt wird. Ich kann einfach auf
die Blaupause eingehen. Ich kann meine
Show-Debug-Texte auf Ticket auswählen oder übernehmen, und das wird
alle meine Print-Strings ein- oder ausschalten, solange ich sie habe, diese Variable mit oder meine
Druckstrings wie diese verbunden sind. Sie können auch einfach all
dies zum Zusammenklappen auswählen , um zu funktionieren. Wir können diese Funktion
so etwas wie error nennen. Texte wie dieser. Wir machen es auf.
Jetzt haben wir hier unseren Druckstring mit
unserem Show-Debug-Text. Wir können aus der Zeichenfolge
zum Eingangsknoten ziehen , um einen Pin hinzuzufügen. Dasselbe können wir mit
Dauer und Textfarbe machen. Kompiliert das. Und jetzt haben
wir in unserem Event Graph unseren Fehlertext-Knoten. Wir können sagen, dass eine Nachricht hinzugefügt wird
, dass start 0 ist. Wir können die Dauer festlegen,
drei Sekunden sparen und
die zu lesenden Texte. Und solange unser
Show-Debug-Text angekreuzt ist und ich auf „Abspielen“ klicke, kannst du sehen, dass unser Text hier angezeigt
wird. Aber jetzt, wenn ich
alle meine Print-Strings verstecken wollte , könnte
ich das deaktivieren. Und wenn ich diese Funktion
anstelle dieser
Print String-Knoten verwende , hatte
ich hier eine, vielleicht
eine Nachricht. Nehmen wir ein Beispiel an, lauf. Und wir könnten
die Farbe in Blau ändern, und wir werden einfach
diese Print-Strings löschen. Also jetzt, wenn unsere
Show-Debug-Texte von diesem weißen Rum
abgehakt sind. Aber wenn wir es annehmen, können
wir diese Botschaften jetzt sehen. Das
war's also für diese Lektion. Hoffentlich verstehen Sie jetzt einige der Tools, die
in die Engine integriert sind und
Ihnen beim Debuggen Ihres Codes helfen.
34. Zusätzliche Kursinhalte (Zeitpläne): Hallo zusammen. In dieser
Lektion werfen wir einen Blick auf
den Knoten Timelines. Um loszulegen, erstelle ich
einfach eine neue Blaupause, in die
wir gehen können. Also erstellen wir eine
Blueprint-Klasse, die auf actor gesetzt ist. Und ich nenne
einfach meinen Würfel. Und das machen wir auf. Ich ziehe
meine
hier einfach nach oben und gehe zum Event Graph. Um Ihnen
eine kurze Erklärung
zu geben was Timeline-Knoten tun, ermöglichen
sie uns, Ihre
Werte im Laufe der Zeit langsam zu ändern. Sie eignen sich sehr gut zum
Animieren von Dingen wie zum Beispiel einer Tür. Oder wenn Sie möchten, dass ein Schauspieler von einem
Ort zum anderen wechselt, es
aber
nett und reibungslos machen möchten. Um eine neue Zeitleiste zu erstellen, wir einfach mit der rechten Maustaste
auf unser Event Graph hier und suchen nach einer Zeitleiste. Und Sie können sehen, dass wir
eine Option für „Zeitleiste hinzufügen“ haben. Jetzt können Sie keine
Zeitleisten in Funktionen hinzufügen, und Sie können keine
Zeitleisten in Komponenten hinzufügen. Das sollten Sie
also beachten, wenn Sie Zeitleisten
verwenden. Wir klicken also auf Zeitleiste hinzufügen
und Sie können sehen, dass wir diesen neuen Knoten hier
bekommen
und ich kann ihn benennen. Also nenne ich einfach
meine Beispiel-Zeitleiste. So wie das. Jetzt werden wir alle
diese Ein- und
Ausgaben gleich durchgehen . Wir
doppelklicken jedoch auf den Timeline-Knoten, und das
öffnet dieses neue Fenster , das wir uns noch nie zuvor
angesehen haben. Und hier legen
wir fest, welche Werte unsere Zeitleiste ändern
soll. Wir
erstellen einen neuen Track. Sie können sehen, dass wir aus Floats,
Vektoren, Ereignissen und Farben
auswählen können . Wir beginnen einfach
mit einem einfachen Float, also fügen wir eine
Float-Spur hinzu und können sie benennen. Also nenne ich
einfach meine Float,
Float , Ausgabe wie diese. Jetzt haben wir hier eine Zeitleiste
, die uns im Wesentlichen sagt wie hoch der Wert unserer
Durchflussleistung sein wird. Bestimmte Zeit. Daher haben wir derzeit noch keine Datenpunkte
hinzugefügt. Unser Float-Wert
wird also während der gesamten Zeit, in der
unsere Timeline abgespielt wird, einfach
0 sein . Aber wenn wir neue Punkte
hinzufügen möchten, können
wir die
Umschalttaste gedrückt halten und klicken. Sie können sehen, dass ich jetzt einen neuen
Punkt auf meiner Zeitleiste habe hier. Und hier oben können wir die
Zeit festlegen, zu der dieser Punkt abgelaufen ist. Also setze ich meins auf 0. Das ist also gleich am
Anfang der Timeline. Und dann können wir einen Wert festlegen. Wenn ich das so einstellen würde, dass es eins sagt, kann
man sehen, dass ich meinen Standpunkt nicht mehr
wirklich verstehe. Nun, Sie können hier auf
diese kleine Schaltfläche klicken, um alle Punkte in
Ihrem Diagramm sichtbar zu machen. Sie können also sehen,
dass meine Punkte
hinter diesen Schaltflächen den Wert eins erhöhen und gleichzeitig eins. Wir können aber auch
zusätzliche Punkte hinzufügen. Und das ermöglicht es uns, unseren Wert im Laufe der Zeit zu
ändern. Wenn ich also
noch einmal hier drüben klicke, kannst
du sehen, dass ich einen neuen
Punkt hinzugefügt habe und wir eine neue Zeit haben. Also setze ich das auf eins. Ich belasse
den Wert bei eins, und wir wählen hier unseren
ursprünglichen Punkt aus, und ich
setze seinen Wert auf 0. Jetzt können Sie sehen, dass
wenn unsere Zeitleiste beginnt, die erste bei 0 liegt, sodass ihr Wert 0 ist. Aber im Laufe der Zeit können
Sie oben sehen, dass
wir die Zeit Valley haben,
sobald sie den Wert eins erreicht hat, und das ist unsere Zeit, wird
der Ausgabewert unseres Floats eins sein. Wenn wir hier zu unserem
Ereignisdiagramm zurückkehren, werden
Sie sehen, dass wir tatsächlich
eine neue Ausgabe auf unserem Knoten haben , und das ist unsere Float-Ausgabe. Und das ist es, was
diesen Wert aus unserer Zeitleiste zurückgeben
wird . Derzeit läuft unsere
Timeline fünf Sekunden lang, nachdem ihr gesagt wurde, dass
sie ausgeführt werden soll. Und der Grund dafür ist, dass hier
oben Länge fünf steht. Wenn ich
das jetzt ändern würde, um eins zu sagen, können
Sie sehen, dass unsere Zeitleiste hier etwas kleiner geworden ist. Und das liegt daran, dass der
hervorgehobene Bereich die Zeit ist , in der die Zeitleiste
dafür ausgeführt wird , weil wir 1 Sekunde lang
aufgenommen haben Sie können sehen, dass
er jetzt 1 Sekunde endet. Wenn wir unserer Timeline
sagen, dass sie spielen soll, wird
sie im Wesentlichen einen Wert ausgeben der bei 0
beginnt, was
ein Float ist. Und dann, wenn die Zeit vergeht
, können Sie sehen, wenn wir mit der Maus darüber fahren,
können Sie sehen, wie sich der Wert im Laufe der Zeit
erhöht. Und das liegt daran, dass unsere
zweite um eins hier ist. Es gibt uns also eine lineare
Wertsteigerung. Jetzt werden wir also tatsächlich
lernen, wie wir
unsere Zeitleiste ausführen können , wenn wir hier
zum Event Graph zurückkehren.
Sie können sehen, dass wir von Anfang an
ein Spiel und ein Spiel haben. Und genau das sagt
der Timeline, dass sie spielen soll. Und es wird normalerweise am Anfang
der Timeline abgespielt . Wenn wir es also sagen, dass
es spielen soll, beginnt es ab dem Zeitpunkt
0 und es wird gestartet, unser Wert ist 0 Wert. Dann haben wir einen Stopp, der
die Zeitleiste
für Geld und seinen aktuellen Punkt stoppt . Wir haben umgekehrt,
was die Zeitleiste umkehren wird ,
die an
welchem aktuellen Punkt auch immer das ist. Wenn unsere
Zeitleiste zum Beispiel bei 0,2 Sekunden lief, sagten
wir ihr, sie solle umkehren. Es würde von
0,2 Sekunden zurück auf 0 umkehren. Dann sind wir vom Ende umgekehrt, was bedeutet, dass sich
die Zeitleiste von den Endpunkten aus
umkehrt. Die Gewinnchancen sind also 1 Sekunde, also würde sie
von eins zurück auf 0 umkehren. Und dann
haben wir endlich die festgelegte neue Zeit. Auf diese Weise können wir
der Timeline
tatsächlich mitteilen , ab
welcher genauen Zeit sie laufen soll. Nun, wenn unsere Timeline tatsächlich
läuft, werden
wir
diese beiden Ausgangsknoten hier haben. Jetzt führt das Update jedes Frame aus, das die
Timeline ausführt. Wenn unsere Zeitleiste also so
eingestellt ist, dass sie für 1 Sekunde läuft, was sie derzeit
ist, läuft für 1 Sekunde jedes einzelne Bild. Und wenn die Timeline
abgeschlossen ist, wird
das fertige PIM ausgeführt. Jetzt haben wir auch eine Richtung. Jetzt
könnte unsere Zeitleiste
entweder vorwärts oder rückwärts laufen . Um zu wissen, wie es läuft. Wir können
aus unserer Richtung herausziehen und eine Gleichheitsnote verwenden. Wir können equals Anion verwenden. Und hier können wir einfach überprüfen, ob es vorwärts oder rückwärts geht? Und das würde je nach Wert einfach ein true oder
false
zurückgeben . Wir können auch einen Schalter verwenden um nach Switch zu
suchen. Sie sehen, wir können
einen Switch-Knoten erstellen , der
entweder vorwärts
oder rückwärts ausgegeben wird , je nachdem, wie unsere aktuelle Richtung für unsere Zeitleiste
ist. Schließlich haben wir
unseren Flüssigkeitsausgangswert. Und wie ich bereits sagte, wird
dies aufgrund
dieser beiden Punkte, die wir in unserem Diagramm haben
, im
Laufe der Zeit langsam zunehmen aufgrund
dieser beiden Punkte, die wir in unserem Diagramm haben
, im
Laufe der . Was wir jetzt tun werden, ist
ein Beispiel dafür zu erstellen, wie das funktioniert. Also führen wir das Spiel einfach von Begin
Play aus. Und ich werde einen
Druckstring zu unserem Update hinzufügen. Jetzt gibt unsere Druckzeichenfolge, jedes Bild, das unsere Timeline
abspielt , den
aktuellen Float-Wert aus. Wenn wir also auf Kompilieren klicken,
kehren wir zu unserer Map zurück. Ich ziehe den
Würfel hinein, weil ich momentan keinen auf meinem Level habe
. Wenn wir auf „Spielen“ klicken,
können Sie sehen, dass es jetzt allmählich
von 0 auf eins steigt. Jetzt zeige ich Ihnen,
wie wir den Würfel tatsächlich mit diesem Wert
bewegen können . Also gehen wir zurück zu unserem Würfel. Ich werde eigentlich zum Viewport gehen und einfach
eine Cube-Komponente hinzufügen , damit wir sie in der
Welt sehen und kompilieren können, um zum Event Graph zurückzukehren. Also wollen wir jetzt unseren Würfel
tatsächlich bewegen. Was wir tun werden, ist
einen festgelegten Aktorstandort-Knoten zu verwenden. Und daraus werden wir einen Hauptstandort
machen oder einen solchen Vektor erstellen. Also werde ich einfach den Z-Wert
erhöhen. Nun könnten wir, in unserer
Timeline-Notiz hier, diesen Wert
tatsächlich auf
das setzen um das unser
Würfel erhöhen soll. Also könnte ich das auf 300 setzen. Und wir können auf diese
kleine Schaltfläche klicken, um die Punkte einfach und vertikal
anzupassen. Und wir kehren
zu unserem Mietdiagramm zurück. Wir könnten das hier direkt
in unseren z-Wert
stecken, das Update in diesen einfügen. Und wir wollen den aktuellen Standort der
Schauspieler ermitteln. Daraus
verwenden wir einen Break-Knoten. Alles, was wir
hier tun, ist, dass wir die aktuellen y- und x-Positionen abrufen, weil wir wollen, dass diese
gleich bleiben, aber dann erhöhen
wir die z-Position. Wenn wir also auf Jetzt spielen klicken, werden
Sie sehen, dass sich die
Würfel langsam nach
oben bewegen , wenn sich unsere Zeitleiste befindet. Wenn wir wollten, könnten
wir das
etwas langsamer nachholen , damit ich meine Zeitleiste hier
öffnen kann. Ich könnte die Länge
auf vier Sekunden einstellen. Jetzt müssen wir
unseren letzten Punkt hier ändern. Also müssen wir die Zeit auf vier Sekunden ändern
. Also jetzt unser Würfel oder langsam über vier Sekunden
nach oben bewegen. Also drück auf Spielen. Sie können sehen, dass es jetzt viel langsamer steigt als zuvor. Eine andere Möglichkeit,
unsere float-Variable zu verwenden , um die Position zu
ändern, und das ist ein
bisschen praktischer wenn wir unseren n-Wert ändern. Also, was ich tun werde, ist auf „Horizontal einpassen“ zu klicken
. Das bringt also nur
die Zeitleiste. Um all unsere Punkte zu zeigen. Ich kann hier unseren Punkt auswählen und
werde den
Wert tatsächlich wieder auf eins reduzieren. Jetzt ist unser erster Wert 0
und unser letzter Wert ist eins. Und wir machen auch den Zoom, um vertikal
anzupassen, damit wir sehen können, dass das dort
passiert. Jetzt kehren wir zum Event Graph zurück
. Und anstatt
direkt zu sagen, dass der Würfel oder der Ausgangsstrom hoch sein
wird. Wir können dies verwenden, um r
cubed zwischen zwei Orten zu bewegen. Also wird dieser
Code vorerst hier gelöscht. Und wir ziehen uns von unserem neuen
Standort zurück und suchen nach einem Labor. Wenn Sie sich daran
aus unserer Vektoren-Lektion erinnern, können wir mit
diesem Knoten schrittweise von der a-Position, der
B-Position,
ausgehen , und diese Menge
wird durch das Alpha bestimmt. Also wäre 0 nur die Ausgabe dieses
Knotens wäre der a-Wert. Und wenn dies auf 0,5 gesetzt wäre, dann wäre es ein Wert
zwischen den a- und b-Positionen. Und wenn das einer wäre,
dann wäre es nur der vollständige B-Standort
, der zurückgegeben wird. Und wenn Sie sich erinnern, gibt unser
Float-Wert jetzt aus, beginnend bei 0 und endend in
eins bei vier Sekunden. Wir können dies also verwenden, um
unseren Lymphknoten zu steuern und
unseren Würfel zwischen zwei
verschiedenen Orten zu bewegen . Was wir jetzt tun können, ist, dass wir einige aktive Variablen
erstellen können . Also
nenne ich das einfach Startdarsteller. Und wir setzen das
auf einen Schauspielertyp. Wählen Sie die beiden
hier unten aus, Objektreferenz, und dann duplizieren wir diese oder klicken einfach mit der rechten Maustaste
und duplizieren. Wir nennen diesen Schauspieler
so und nehmen es mit diesem Eis
auf, damit wir
sie im Level bearbeiten können. Für unseren staatlichen Schauspieler. Wir wollen seinen Standort ermitteln. Und wir fügen das
in den a-Wert ein. Dann machen wir
dasselbe mit unserer Induktivität. Gehe zum Standort. Wir fügen das
hier in den b-Wert ein und wir werden das kompilieren. Jetzt gehen wir zu unserem Level und können einen neuen Schauspieler gründen. Also werde ich einfach eine Blueprint-Klasse
erstellen. Wir nennen es einen
Schauspieler und wir nennen diesen Wegpunkt zum Beispiel. So wird eine hier
im Level und eine hier platziert. Und ich werde tatsächlich beide auswählen
, indem ich die Strg-Taste gedrückt halte. Und ich bewege sie
in die Luft, damit wir sie ein bisschen leichter sehen
können. jetzt, wenn wir auf „Spielen“ klicken Was passiert jetzt, wenn wir auf „Spielen“ klicken, wenn
wir unseren Würfel auswählen? Wir müssen ihm die
Start- und Enddarsteller mitteilen. Also
starte ich diesen Typen
hier und das Ende auf
den anderen Wegpunkt. Und jetzt, wenn ich Play oder Würfel drücke oder sofort auf
diese Weise darüber auftauche , zeige und
bewege mich langsam zu diesem Endwegpunkt. Wenn wir also auf Play klicken, können
Sie sehen, dass sich das langsam zwischen
diesen beiden Wegpunkten bewegt. Das passiert, denn
wenn Sie sich erinnern, geht
unser Float-Wert von 0 auf eins. Und dann habe ich den linken
Knoten verlassen und
einen Ort bekommen , der der Standort unseres
Starschauspielers ist. Und langsam, schrittweise
verschieben
Sie das zum Ort des
Enddarstellers, dem b-Wert. Und dann
sagen wir unserem Schauspieler, er soll zwischen diesen beiden Punkten
wechseln. Dies ist also eine bessere Methode, um die Position von Akteuren mithilfe
eines Timeline-Knotens zu
steuern ,
anstatt die Position
nur manuell in die Timeline einzufügen. Jetzt können wir unserer Zeitleiste auch
verschiedene Arten von variablen
Ausgaben hinzufügen . Wenn wir es öffnen
und zur Spur gehen, können
Sie sehen, dass wir tatsächlich eine Vektorfalle
hinzufügen können. Also klicke ich darauf.
Sie werden sehen, dass wir jetzt eine neue
Grafik hier unten haben. Ich
klicke hier
einfach auf den Pfeil neben unserer Float-Ausgabe , um sie auszublenden, damit wir
unseren neuen Track etwas besser sehen können. Ich nenne das auch. Oder wenn Sie mit der rechten Maustaste klicken
und Umbenennen auswählen, können
wir dies als
Vektorausgabe wie folgt benennen. Und wenn wir kompilieren und zum Event Graph
gehen, können
Sie sehen, dass wir jetzt
eine Vektorausgabe auf
unserem Timeline-Knoten haben . Nun funktioniert das
genauso wie unser Float-Wert, es ist nur so, dass wir in diesem einen Graphen
Free Float-Werte
gesteuert haben , einen für unsere z, y und x. Wenn wir
also wollten, könnten
wir
gibt nach und nach einen Vektor aus unserer
Timeline-Note aus,
der bei einem Wert beginnt und
endet und einem anderen, genau wie wir es mit unserem Float getan haben. Und wenn wir neue Punkte
hinzufügen möchten, können
wir bei gedrückter Umschalttaste klicken,
um hier einen neuen Punkt hinzuzufügen. Wenn ich das jetzt verschiebe,
sehe, dass dies
tatsächlich im x-Wert liegt, aber unser Y und Z haben
keinen Punkt und
sie sind immer noch bei 0. Wenn wir also
nur mit einem dieser Werte arbeiten wollen,
sagen wir, ich möchte einfach einen Wert zum z
hinzufügen.
Wir können das Y und das X ausblenden,
und wir können bei gedrückter Umschalttaste auf unser z klicken. Und jetzt können wir einen z-Wert setzen. Vielleicht
wollte ich jetzt einen y-Wert hinzufügen. Ich kann meinen z-Wert ausblenden
und den y-Wert einblenden. Und Sie können sehen, dass ich mich jetzt in diesem Punkt
bewegen kann. Und das macht es nur
ein bisschen einfacher wenn Sie alle diese
Punkte sichtbar haben, kann ein bisschen verwirrend werden. Jetzt habe ich sie
alle sichtbar. Ich kann diese
Punkte nach Belieben ändern, und wir könnten
hier
einen weiteren 1 12. y-Wert hinzufügen . Und wir können das bewegen. Und wir könnten
dasselbe für unseren z-Wert tun. Nun die Startwerte für
jede dieser Ausgaben. Und wenn Sie sich erinnern,
ist ein Vektor nur freie Floats kombiniert. Wenn wir es also brechen, verwenden Sie
den Breakvector-Knoten. Sie können sehen, dass wir ein X, Y und Z
haben. Welche Werte wir auch
immer hier für X-, Y- und
Z-Zeitleistenwerte haben,
das wird zu diesem bestimmten
Zeitpunkt auf unserer Timeline
ausgegeben. Und wir können
diesen Ausgabevektor
wie jeden anderen Vektor verwenden . Wenn ich also wollte, könnte
ich das tatsächlich in meinen Lap-Knoten
stecken, zum Beispiel am Endpunkt. Wenn wir jetzt kompilieren, wird
es, anstatt
zum End-Wegpunkt zu gehen, zu
dem auch immer der Ausgabeort aus unserer Timeline
stammt. Wenn Sie sich daran erinnern, dass sich die
Ausgabeverzeichnis tatsächlich
ändern wird , weil wir
diese Punkte hier
drin haben , die die x-,
y- und z-Werte
abhängig von der Zeit ändern . Wenn wir also auf „Spielen“ klicken, wird unser Würfel tatsächlich vom Startpunkt
bewegt. Es geht in Richtung 0, also
wird es in
diese Richtung gehen. Jetzt gibt es andere Ausgaben
, die unsere Zeitleiste leisten kann. Wenn wir also zu unserer
Timeline-Notiz hier zurückkehren und sie öffnen, können
wir sie tatsächlich zu bestimmten
Zeiten ausgeben lassen,
wenn sie ausgeführt wird. Wenn wir hier also eine neue Spur hinzufügen, füge
ich einfach eine Entlüftungsschiene hinzu. Jetzt verstecke ich
meine Vektorausgabe indem ich
einfach auf den
kleinen Pfeil hier klicke. Und wir werden unseren
Event-Track in Event-Ausgabe umbenennen. So wie das. Jetzt unseren vorherigen
Ausgabetypen für Shift-Click, können
wir, wie bei
unseren vorherigen
Ausgabetypen für Shift-Click, der Timeline einen Punkt
hinzufügen. Aber der einzige Unterschied ist hier. tun wir nicht, der Wert hier
spielt eigentlich keine Rolle. Alles was zählt ist die Zeit. Wenn ich das also auf 1.5 setze, wenn wir erneut klicken, können
wir einen weiteren
Punkt hinzufügen und wir können diesen Lauf bei etwa 2.5
haben. Was nun passieren wird, ist die Ereignisausgabe auf
unserem Timeline-Knoten 1,5 Sekunden
und dann 2,5 Sekunden läuft. Und wenn wir
zu unserem Event-Gra zurückkehren, sehen
Sie, dass wir jetzt
eine neue Event-Ausgabe haben. Also, wenn wir eine
Druckzeichenfolge hinzufügen, und wir werden sehen, dass dieses
Hallo jetzt
zu diesen beiden Zeiten gedruckt wird, wenn
unsere Timeline läuft. Wir haben also einen bei 1,5
und dann noch einen bei 2,5. Dann blendet der letzte
Ausgabetyp für unsere Timeline, wenn wir zu diesem Knoten
zurückkehren, wenn wir zu diesem Knoten
zurückkehren, unsere Ereignisausgaben indem Sie auf den
Pfeil daneben klicken. Auch hier fügen wir eine neue Spur und können die Farbspur hinzufügen. Auf diese Weise können wir jetzt
eine Farbe zu einem bestimmten Zeitpunkt ausgeben. Also wieder, wie zuvor, können
wir bei gedrückter Umschalttaste auf diese Farbe hier
unten klicken , um einen neuen Punkt hinzuzufügen. Also habe ich hier gerade einen
neuen Punkt hinzugefügt und wir können sie verschieben,
wie wir wollen, weil diese weiß sind Es
ändert den Wert nicht wirklich. Aber wenn ich oben mit der rechten Maustaste
darauf klicke, können
wir eine Farbe wählen. Und ich kann das zum
Beispiel auf Rot setzen. Jetzt, nach etwa 2,5 Sekunden, die Ausgabefarbe rot. Aber wir können dies ändern und wir können in
Abhängigkeit von diesen anderen Werten ändern,
wie stark
sich die Farbe ändert . Wenn wir diese
bewegen und jetzt nach
2,5 Sekunden sehen , bekommen wir
eine hellrote Farbe. Wenn wir möchten, können wir
die Standardwerte
unserer Timeline ändern , sodass wir mit der rechten Maustaste auf
diese klicken und eine
andere Farbe auswählen
können . Wir können das so ändern, dass wir
ein Blau wie dieses sagen . Und jetzt können Sie sehen, dass wir hier
eine blaue Farbe haben, die nach 0,5 Sekunden ausgegeben
wird . Aber im Laufe der Zeit ändert sich
langsam eine
rosa-violette Farbe und wird dann rot. Im Gegensatz zu früher. Wenn wir zu unserer Zeitleiste
zurückkehren, können
Sie sehen, dass wir
jetzt eine neue Ausgabe haben. Ich habe ihm
keinen Namen gegeben, also
geben wir ihm hier schnell einen Namen. Ich nenne es Farbe. Wenn wir zum
Ereignisdiagramm zurückkehren, können
Sie sehen, dass wir jetzt
Zugriff auf unseren
Farbvariablentyp haben , und Sie können diesen in jede andere
Farbeingabe einbinden, die Sie möchten. Wenn wir also wollten, könnten wir das
tatsächlich
in unseren Druckstring stecken. Wir können die Farbe
hier in die Textfarbe einfügen, zum Beispiel drücken Sie
einfach auf Play und wir sollten
einige andere Farben
für unsere Texte sehen . Man sieht wie lila
und jetzt ist es wie ein Rot. Das sind also alle Arten von Ausgaben, die unsere
Zeitleiste leisten kann. Sie können also wirklich Timelines verwenden , um viele verschiedene Dinge zu tun. Vielleicht wolltest du, dass
deine Zeitleiste
einfach hin und
her geht, um eine Schleife zu machen. Ich kann dir zeigen, wie
du das einrichten kannst. Was wir also tun werden, ist, dass wir
hier wieder
unsere Induktorposition für unseren B-Eingang verwenden . Und wir nehmen
den fertigen Stift. Und tatsächlich
ziehen wir uns aus
allen Richtungen heraus und
suchen nach switch. Wenn Sie die
Timeline-Richtung einschalten , wird dies bis zum Ende
verbunden. Jetzt wollen wir in der Lage sein zu kontrollieren, was unsere
Timeline tun wird, aber wir
wollen
diese hier nicht in die Eingänge stecken müssen . Was Sie also
tatsächlich tun können, ist
eine Variable zu verwenden , um
diese Zeitleiste zu steuern. Wenn wir zu den
Komponenten hier unten gehen, können
Sie sehen, dass wir eine
Beispiel-Timeline haben. Wir können diese Variable bekommen. Und wir können das tatsächlich nutzen
, um unsere Zeitleiste zu kontrollieren. Sagen wir also später in unserem Code, dass
unsere Timeline abgespielt werden soll, aber ohne diese Eingabe
anschließen zu müssen, können
wir diese Variable verwenden. Wir können uns hinziehen und nach Spielen suchen. Sie sehen, wir können eine
Funktion namens play aufrufen. Und das wird unsere Timeline tatsächlich
zum Laufen bringen. Um unsere Zeitleiste hin und her zu
schleifen, können
wir das Gegenteil verwenden. Wenn wir uns also in die Länge ziehen,
suchen wir nach Rückwärtsgang. Wir können die umgekehrte Option verwenden. Wenn es also gerade vorwärts
abgespielt wird, möchten
wir, dass es
rückwärts abgespielt wird, sobald es fertig ist. Und wenn es dann rückwärts
geht, wollen
wir, dass es von Anfang an abgespielt wird. Also spielen wir einfach. Nun, wir können
von Anfang an so spielen. Jetzt bewegt sich unser Würfel vom Standort
des Hauptdarstellers
zum Ende und dann zurück
zum Ende, zum Start. Und es würde einfach
weiter laufen und das tun. Also werden wir diese Notiz löschen. benutzen wir nicht
mehr. Also kompilieren wir und klicken auf Play. Wir können sehen, wie sich unsere Ellen
vom Anfang bis zum Ende bewegen. Und jetzt bewegt es sich
vom Ende zum Anfang zurück. Und das wird das jetzt einfach weiter
machen, hin und her. Zuletzt schauen wir uns Dramatiker
an. Jetzt steuert der Dramatiker, wie schnell die Timeline abgespielt
wird. Im Moment
ist unsere Zeitleiste also auf vier Sekunden eingestellt. So lange wird es
dauern, bis es abgespielt wird. Spielrate ist derzeit
auf eins eingestellt , da dies die Standardeinstellung ist. Wenn wir
den Dramatiker um zwei erhöhen, würde
das die Zeit, in der
ich renne, doppelt so schnell machen. Also zeige ich dir,
wie wir das machen können. Wir können unsere
Beispiel-Timeline-Variable nehmen, herausziehen und die Rate festlegen. Jetzt können wir das Spielzimmer einrichten. Vielleicht möchte ich, dass
das doppelt so schnell läuft. Wenn wir das
hier verbinden, um zu spielen, und wir spielen jetzt, werden
Sie sehen, dass
es viel
schneller läuft als zuvor. Wenn wir es
erneut auf vier erhöhen, läuft
es viermal schneller. Jetzt wird unsere Zeitleiste
tatsächlich in einer Sekunde abgeschlossen sein, obwohl
die Länge innerhalb von vier liegt, weil wir ihr sagen, dass sie viermal schneller spielen
soll. Wenn wir also auf Jetzt spielen klicken, werden
Sie sehen, dass das jetzt in 1 Sekunde
abgeschlossen ist . Jetzt gibt es noch ein paar andere
Einstellungen, die ich innerhalb
des Timeline-Knotens
schnell durchgehen wollte . Wenn wir also zu
unserem Warteschlangenentwurf zurückkehren und unsere Zeitleiste öffnen. Hier haben wir oben ein paar
Bands, mit denen wir steuern
können, was
unsere Timeline tut. Für den Anfang haben wir also Autoplay, und wenn
wir das einschalten, bedeutet das im Grunde, dass
wir den
Laufstall nicht ausführen müssen , damit
unsere Timeline reibt. Es wird einfach zu Beginn
des Spiels oder immer dann ausgeführt , wenn
unser Kuba spawnt. Wenn ich also den
Play-Pin anschließe und wir auf „Play“ klicken , können Sie
jetzt sehen, dass er
automatisch abgespielt wird, obwohl ich es nicht
wirklich sage. Es gibt auch eine Loop-Option. Wenn wir zu unserem Würfel
und dann zu unserer Timeline zurückkehren, können
Sie sehen, dass es
einen Loop-Button gibt. Nun, das wird nicht dasselbe tun wie das, was
wir hier unten getan haben, wo der Würfel einmal an
die Endposition gelangt und dann zum Startpunkt zurückkehrt. Durch diese Schleife beginnt die Zeitleiste jedes Mal von
vorne. Also wenn wir das
einschalten, ziehe ich meinen
fertigen Stecker heraus und wir
kompilieren und drücken auf Play. Du wirst sehen, dass es zu
Ende geht und dann
fängt es einfach wieder von
unserem Startort an. Das sind also ein paar
Sauerstoff, die sie vielleicht
nützlich finden könnte , wenn Sie in Zukunft
Zeitleisten verwenden. Jetzt können wir auch
die Art und Weise ändern, wie unsere Werte und unsere Grafiken hier
aufeinander zugehen. Wenn ich also meine beiden
Punkte hier auswähle nur die Strg-Taste gedrückt halte,
kann ich beide auswählen. Wenn ich mit der rechten Maustaste klicke, gibt es verschiedene Optionen
für die Interpolation. Wenn ich es also auf auto setze
und Sie sehen, dass
wir jetzt anstelle
dieser geraden Linie
zwischen den Werten eine Kurve haben, was bedeutet, dass der Startwert langsam, schneller und schneller
ansteigt. Und dann wird es langsam immer schneller
abnehmen bis es seinen Zielwert erreicht. Wir können diese
kleinen Handles hier verwenden , um zu steuern, wie schnell oder wie langsam sich
der Wert dem Zielwert nähert. Wenn ich also meinen Punkt
hier auswähle, bewege ihn so nach oben. Ich habe den Wert wird langsam
als schneller und schneller steigen , bis er an diesem Punkt
ankommt, an dem
er tatsächlich höher ist als unser n-Wert, weil Sie sehen können, dass die
Linie darüber geht, aber dann wird es wieder
auf unseren V1-Wert herunterkommen. Jetzt gibt es ein paar
verschiedene Optionen. Wenn wir diese Punkte hervorheben, können
Sie zwischen automatischem Benutzer,
Pause, Linear und Konstante wählen . So konstant zum Beispiel, nur eine gerade Linie bis
zum Punkt und dann geht es
sofort auf diesen Wert. Wir können linear verwenden,
was die Standardeinstellung ist. Es geht immer mit genau
derselben Geschwindigkeit von diesem Punkt zum Endpunkt. Wir können diese Einstellungen hier
in unserer Vektorausgabe verwenden. Sie können also sehen, ob ich diese
beiden Punkte hier auswähle, ich habe eigentlich
schon auf auto gesetzt, aber wir können es zum Beispiel wieder
auf linear setzen. Oder wenn du willst, können wir
es wieder auf auto setzen. Wir können diese Punkte
wie zuvor
mit unserem Float kontrollieren . Und das können wir auch
mit jedem unserer x-, y- und z-Werte tun. So könnten wir zum Beispiel dasselbe mit
unserem y-Wert machen. Wir könnten diese anpassen, um wirklich zu - oder
abzunehmen,
wie es uns gefällt. Das war's also für unsere
Zeitleisten-Lektion. Hoffentlich haben Sie ein
besseres
Verständnis dafür , wie sie jetzt funktionieren und wofür Sie sie in Zukunft
in Ihren Projekten verwenden können .
35. Zusätzliche Kursinhalte (Sockel): Hallo zusammen. In dieser Lektion
werden wir uns Sockets ansehen. Sockets oder wie wir Schauspieler mit
anderen Aktoren oder Komponenten
mit anderen Komponenten verbinden
können . Jetzt können wir Skelettmaschen Sockets
hinzufügen. Das sind also Netze, die
animiert werden können, wie zum Beispiel die Schaufensterpuppe, die wir für unseren Charakter
verwendet haben. Oder wir können Sockets
zu statischen Meshes hinzufügen. sind also Kennzahlen wie
die Cubes, die wir verwendet haben. Zunächst
zeige ich Ihnen, wie wir einem Skelett
einen neuen Socket hinzufügen können . Also gehen wir hier zum Ordner „Charaktere“ und
dann zu
den Schaufensterpuppengittern. Und dann können Sie hier sehen
, dass wir unsere
Schaufensterpuppen-Skelettmaschen haben und
auch das Skelett , das die Schaufensterpuppen verwenden. Wir öffnen die SK-Schaufensterpuppe. Hier drin. Sie können auf der
linken Seite sehen wir eine Liste aller Knochen haben ,
die das
Skelett enthält. Hier wählen wir nun einen bestimmten Bone aus, zu dem wir einen Socket hinzufügen
möchten. Nehmen wir zum Beispiel an, wir haben unserem Charakter einen Hut
hinzugefügt. Wir wollen, dass der Hut dem Kopfbein
folgt. Es scrollt also durch
und findet den Kopfknochen , der sich hier in der Nähe
des Bodens befinden sollte. Wenn ich weitermache. Los geht's. Wir haben die zwei Halsknochen
und dann das Kopfbein. Wenn wir also den Kopfknochen auswählen, klicken Sie mit der rechten Maustaste und fügen Sie einen Sockel hinzu, das wird uns eine neue
Pfanne zum Kopfknochen hinzufügen. Wenn wir zum
Bereich Details gehen, können
Sie sehen, dass wir diesen Socket
umbenennen können. Ich rufe meine
Hutsteckdose so an. Jetzt, wo der Socket ausgewählt ist, können
Sie sehen, dass ich hier die
Möglichkeit habe, ihn zu drehen. Und wenn ich W drücke, während ich im Viewport
ausgewählt
bin, kann ich auch den Socket bewegen. Der Socket ist momentan,
wenn Sie hier
im Detail-Panel nach
Nullen schauen , sind 0 Position. Das heißt, es befindet sich genau an der
Position des Kopfknochens, aber wir können das verschieben, damit
wir es nach oben bewegen können. Jetzt befindet sich unsere Pfanne
über unserem Kopfbein. Das bedeutet, dass
die Charaktere, die
diesen Sockel animieren , diesen Abstand
vom Kopfknochen
halten . Und das ist nützlich,
denn wenn wir einen Hut an diesem Sockel
anbringen, möchten
wir, dass er zusammen mit
dem Kopfknochen
folgt , selbst wenn
die Charaktere animieren. Wenn wir nun eine
Vorschau anzeigen wollten, wie es
aussehen würde , wenn es an
einen Socket angeschlossen ist. Das können wir machen. Wir können also hier mit der rechten Maustaste auf
unsere Herzpfanne klicken, zu
Vorschau-Asset hinzufügen
gehen und tatsächlich ein Netz auswählen, das
an unserer Steckdose befestigt werden soll. Denken Sie jetzt daran, dass dies nur
eine Vorschau ist. Selbst wenn wir hier jetzt
etwas anhängen, werden
wir es im Spiel nicht sehen. Dies dient nur zur Vorschau
, wenn wir
Animationen ansehen , oder in unserem
Skelett-Editor. Für mich wähle ich
nur den Zylinder aus, wähle hier den Zylinder aus. Und Sie können sehen, dass mein Zylinder falsch gedreht wurde. Also drehe ich meinen
Sockel und Sie können
in Echtzeit sehen , ob sich der
Zylinder dreht. Offensichtlich ist das kein Hut, ist nur ein Zylinder,
aber wir werden das als Beispiel verwenden. Und wir können sehen, wie
unser Zylinder
aussehen wird , wenn er
an unserer Steckdose befestigt ist. Wenn wir uns jetzt
eine Animation ansehen , die dieses Skelett
verwendet, sehen
wir tatsächlich
diese Vorschau und wir werden sehen, wie sie sich zusammen
mit der Animation bewegt. Wenn wir also
zum Inhaltsbrowser-Treffer zurückkehren, gehe
ich zum
Mannequins-Ordner. Dann
gehen Animationen ins Geld. Und wir schauen uns zum Beispiel
den Sprung an. Wir doppelklicken darauf und ich bringe die
Animation hierher. Sie können sehen, dass während unsere
Sprunganimation läuft, R hat immer noch
zusammen mit unserem Kopfknochen folgt. nun zu unserem
Schaufensterpuppen-Skelett zurückkehren, können wir, wenn wir diese Vorschau
loswerden wollen, immer einfach mit der rechten Maustaste klicken, alle angehängten
Assets entfernen und werden nur alle
Vorschauen für uns entfernt . können wir, wenn wir
mehrere Sockets
zu demselben Bone hinzufügen wollen . Also wenn wir eine andere
Steckdose wollten, die vielleicht einen anderen Ort für vielleicht
eine andere Art von Hut hat. könnten wir auch machen. Wir klicken einfach mit der rechten Maustaste auf Neuen Sockel
hinzufügen, und das würde es uns ermöglichen, unserem Kopfknochen
einen zusätzlichen Sockel
hinzuzufügen . Wenn Sie jemals einen Socket
entfernen möchten, können
Sie mit der rechten Maustaste darauf klicken und hier die Option Löschen
auswählen. Jetzt können wir auch
Sockets zu statischen Meshes hinzufügen. Wenn wir also hier zum
Inhaltsbrowser zurückkehren, gehe
ich einfach zum Level-Prototyping-Ordner und zwei Meshes. Wir haben hier nur ein paar
einfache Stack-Meshes. Aber wenn wir zum Beispiel das
shampoonierte Cubed öffnen, haben wir hier einige
Details über
das Netz und das Mesh
im Darstellungsfenster. Und wenn wir hier zum
Windows-Panel gehen, sollte
es einen Socket-Manager und ihre Gedanken sind angekreuzt. Wenn es bei Ihnen nicht der Fall ist, sollten
Sie darauf klicken. Und das kannst du
für mich sehen, es ist hier drüben. Auf diese Weise können wir unserem statischen Netz neue
Sockets hinzufügen. Also klicken wir einfach auf diesen
kleinen Plus-Button hier. Wir können unseren Socket benennen. Ich rufe einfach nochmal
meinen Socket an. So wie das. Im Gegensatz zu früher können wir unsere Steckdose
positionieren. Wir könnten sagen, dass wir uns hier einrichten. Und jetzt, wo auch immer sich
dieses Netz bewegt, sich
dieser Sockel auch während des Spiels
90 Zentimeter von seiner
Mitte entfernt. Im Gegensatz zum Skelett können
wir auch eine Vorschau hinzufügen. Wenn wir also
zum Optionssatz gehen, können
wir auf Erweitert klicken und ein vorheriges Stapelnetz angeben,
damit wir
den Zylinder auswählen können , den wir zuvor hatten oder den Zylinder hier und sehen, dass wir das haben
dieselben Maschen wie zuvor. Und wir können eine Vorschau sehen, wie
es aussehen würde , wenn es tatsächlich
an den Socket angeschlossen wird. Jetzt wissen Sie also, wie man Sockets
erstellt und
sie zu Skelettgittern
und statischen Netzen hinzufügt . Jetzt werde ich dir zeigen,
wie wir
diesen Socket tatsächlich während des Spiels verwenden
und Dinge daran anhängen können . Es geht also zurück zu
unserem Content Browser, zum Ordner Characters
oder zum Inhaltsordner. Gehen Sie dann zu
Third-Person-Blueprints und wir öffnen unseren
ThirdPersonCharacter Blueprint. Jetzt habe ich einige
zusätzliche Variablen und eine Funktion aus einer
unserer vorherigen Lektionen. Wenn Sie das nicht tun, machen Sie
sich darüber keine Sorgen, wir werden sie sowieso nicht verwenden. Bevor wir also anfangen,
Schauspieler zu spawnen und
sie an die Sockets anzuhängen, zeige
ich Ihnen zunächst einige
der am häufigsten verwendeten
Knoten mit Sockets. Wir
beginnen also zunächst damit,
unser Charakter-Mesh aus
unserem Komponenten-Panel zu holen . Und wenn Sie sich erinnern, können wir einfach darauf doppelklicken, um das Darstellungsfenster zu
öffnen. Das ist unser animiertes
Mesh in unserem Charakter. also zurück zum
Ereignisdiagramm gehe, zoome ich hier hinein. Wir können uns unsere Mesh-Komponente schnappen. Wenn wir uns
davon entfernen und nach get socket location
suchen , können
Sie sehen, dass wir diesen Hinweis hier
erhalten. Auf diese Weise können wir einen Socket-Namen
wie r hat socket
angeben . Und wenn dieses Mesh, also wenn unser Charakter-Mesh hier Socket
hat, der diesen Namen verwendet, wird
es einen
Welt-Speicherort für diesen Socket zurückgeben. Jetzt können wir
diesen get socket
location node auch mit
statischen Meshes verwenden . Also, wenn ich ein neues statisches Netz hinzugefügt habe, was dies als
Beispiel tut, weil unser Charakter keine
gestaffelte Netzkomponente hat. füge ich hinzu. Und wenn ich das hier in
unser Event-Diagramm ziehe, kann
ich das auch
in diese Notiz einbinden. Und jetzt, wenn das
Stack-Mesh, das wir
für diese Komponente festgelegt haben , einen Socket hat, erhalten
wir seinen aktuellen
Weltstandort. Nun gibt es noch ein paar andere
Hinweise, die so funktionieren. Wir können uns aus unserem Netz ziehen
und eine Socket-Rotation bekommen. Dies gibt uns die
Weltrotation des Socket-Namens, den wir
hier eingegeben haben und der sich auf unserem
Charakternetz befindet. Oder wir können diese Knoten löschen, wir können sie ziehen und die Suche
wird Socket-Transformation erhalten, und das wird
die Transformation des
Socket-Namens erhalten , den
wir hier festgelegt haben. Und wenn Sie sich an
unsere Transformationsstunde erinnern, können
wir einfach von hier aus ziehen und einen Break-Knoten
verwenden, der
uns Zugriff auf die Position, Drehung und Skalierung
des Sockets gibt. Dies gibt uns jetzt auch eine Option zum
Transformieren des Raums. Wenn dies nun auf RTS-Welt eingestellt ist, bedeutet
das, dass es
die Weltrotation,
Position und Skalierung des
Socket-Namens erhält ,
Position und Skalierung des , den
wir hier eingeben. Angenommen, unser Mesh-Eingang
hat diesen Socket. Wenn wir nun auf die
Transformationsräume klicken, ein paar verschiedene Optionen, können
wir Schauspieler auswählen. Dadurch werden
die Sockets
relativ zur
zentralen Position des Schauspielers transformiert . Und was ich damit meine,
wenn wir zum Viewport gehen, wenn wir unsere
Stake-Mesh-Komponente auswählen, die wir hinzugefügt haben,
wenn ich sie hierher verschiebe und
mir vorstelle, dass dies der Sockel ist. Die relative
Transformation des Sockets Actors wäre dieser
Ort, den wir hier haben. Wenn das also ein Socket wäre
und wir
die Transformation dieses Sockets
mit der actor-Option hier bekommen würden, würde
es den hier angegebenen
Ort zurückgeben. Die nächste Option,
wenn wir
zu unserem Transformationsknoten zurückkehren ,
ist die Komponente. Beachten Sie, dass dadurch die
Sockets relativ zu
der Komponente
transformiert werden, an die
sie angehängt sind. Also wenn ich noch einmal
zu unserem Viewport zurückkehre und
wir uns vorstellen, dass das Stack-Mesh hier ein
Socket anstelle einer Komponente ist. Wenn ich
dies an diese Maßnahme anhängen würde, können
Sie sehen, dass sich unser Standort tatsächlich geändert
hat. Dies ist nun seine
Komponententransformation. Wenn ich es zurücknehme und wieder an der
Kapselkomponente
befestige, stelle fest, dass die Position anders
ist da dies die
Akteur-Transformation ist. Und wenn wir es
zurück zur Komponente verschieben, sehen
Sie, dass dies jetzt
die Komponententransformation ist. Also nochmal, wenn unser Socket oder
Entschuldigung, wenn unser Stack-Mesh
ein Socket wäre und wir seine Position mithilfe
des Komponentenraums ermitteln würden, würde
es diesen Wert hier zurückgeben sobald es an etwas
wie das Mesh angehängt ist Komponente. Und schließlich,
wenn wir jetzt zu
unserem Transform zurückkehren , haben wir
den Raum des übergeordneten Bowman. Und wenn wir hier zu
unserer Schaufensterpuppe zurückkehren, wählen
wir unseren Knochen aus. Sein übergeordneter Knochenraum wäre der Wert, den wir hier festgelegt
haben. Sie sich jetzt nicht zu viele Sorgen, wenn Sie das etwas verwirrend finden. den meisten Fällen, wenn
Sie diesen Knoten verwenden, verwenden
Sie sowieso nur die Option
World,
da dies in
der Regel am nützlichsten ist, Sie den
World-Standort des Sockets ermitteln können. Nun gibt es noch ein
paar andere Hinweise
, die bei der Arbeit mit Sockets nützlich sind. Also werden wir diese Knoten
jetzt löschen und ich ziehe sie
aus unserer
Mesh-Komponentenvariablen heraus und suche danach. Existiert Socket? Und das wird nur überprüfen,
ob der Socket-Name , den wir angeben, auf dem Mesh
oder dem statischen Mesh
existiert , das wir in
die Schnauze stecken , und dann gibt es
einen wahren oder falschen Wert zurück. Wenn ja. Wir können auch eine Liste oder ein Array aller Socket-Namen
erhalten, die eine bestimmte
Komponente
existieren. So können wir herausziehen und
nach get socket suchen, alle Socket-Namen
abrufen. Und das wird
uns nur eine Reihe von Namen geben. Und das sind alle
Namen aller Sockets in diesem
speziellen Stack-Mesh. Und das wird auch mit
unserem Skelettnetz wieder funktionieren. Wir können das einfach
wie unsere vorherigen Knoten einstecken. Jetzt
werden wir
während des Spiels tatsächlich
etwas an einen Socket anhängen . Wir beginnen also damit,
diese Notizen zu löschen und auf „Kompilieren“ zu klicken. Wir gehen
zum Content Browser. Ich werde
einen neuen Schauspieler erschaffen, der
sich an unseren Charakter anpasst. Wir klicken mit der rechten Maustaste auf die Blueprint-Klasse. Wir werden einen Schauspieler erstellen,
ich nenne meinen
BP-Unterstrich-Hut , oder öffnen ihn. Und dann füge ich hier einfach
eine neue statische Mesh-Komponente hinzu. Und wir stellen es ein. Masche Also haben wir hier drüben
das Stapel-Mesh-Dropdown geöffnet. Und ich werde
das auf den Zylinder einstellen , den wir
schon einmal benutzt haben, das zu
kompilieren und zu speichern. Dann kehren wir zu
unserem ThirdPersonCharacter zurück. Und ich klicke mit der rechten Maustaste
und suche nach einem Eingabeereignis. Und wir verwenden ein
Eingabeereignis eins. Also wenn du dich erinnerst,
läuft dieser Knoten immer dann, wenn ich
einen auf meiner Tastatur drücke. Das erste, was wir tun
werden, wenn wir eins drücken ist Spawn auf einem neuen Hutdarsteller. Also ziehe ich mich
aus dem gedrückten und sozialen Spawn, der aktiv ist, aus dem Unterricht Wir setzen die Klasse
auf „r hat“ so. Jetzt, weil wir
unseren Hut sofort
an der Kopfbuchse unseres
Charakters befestigen werden. Wir könnten davonkommen,
indem wir einfach
einen Transformationsknoten von hier aus ziehen und den Hut einfach bei 0 in der Welt
spawnen. Und dann wird es sowieso sofort am Kopf unseres
Charakters
hängen. Aber die Sache damit ist manchmal für ein
paar Frames, man sieht den Hut in der Mitte
der Welt
erscheinen und dann plötzlich an der Steckdose
einrastet. Also, was ich gerne mache, ist, dass
sich die Sockets an diesem
Ort befinden und sie dann anhängen. Anstatt also
den Transform-Knoten zu verwenden, werden
wir die Position der
Sockets ermitteln. Also werde ich das Mesh herausziehen und Socket bekommen. Wir verwenden die
get-Socket-Transformation. Wir werden unsere Sockets
benennen und das muss
genau der gleiche sein wie der Socket,
den wir
in unserem Skelett erstellt haben. Wenn Sie sich also erinnern, wenn
wir es Hutsteckdose nennen, müssen
wir den genauen
Namen von Wegen verwenden, die unsere Fußballhutsteckdose nicht finden. Wir werden dies bei
RTS World belassen , weil wir die Welt dazu
bringen wollen, sich zu verändern. Und wir ziehen das einfach raus, stecken es in die
Spawn-Transformation, so dass
die Kollisionsbehandlung so eingestellt wird , dass Kollision
immer ignoriert wird, weil wir nur wollen, dass es an dieser Stelle
spawnt. Wir wollen nicht, dass es versucht, unser Extra in irgendeiner Weise
anzupassen. Jetzt
setzen wir r hat actor auf eine neue Variable, nur
damit wir sie bearbeiten können wenn wir später ziehen wollen, wir werden eine Variable befördern, um eine neue Variable für uns zu erstellen. Ich nenne
diesen Hut so. Jetzt haben wir einen Hut, an unserer Socketposition
spawnt,
wenn wir ihn erneut spielen. Wenn wir also Paul auf „
Spielen“ drücken können und wenn ich eine drücke, kannst
du sehen, dass unser Herz auf meinem Kopf
laichen wird. Aber wenn ich mich in C bewege,
bleibt es da, weil wir
es noch nicht an unseren Charakter gebunden haben. Wir sagen ihm nur, dass er
an der Position des Sockets spawnen soll. Es wird also den
Flugzeugeditor verlassen und hier zum
ThirdPersonCharacter zurückkehren. Als Nächstes
werden wir
unseren Hut tatsächlich an unserem Charakter befestigen . Um das zu tun, ziehen wir hier
aus der Mesh-Komponente heraus , erstellen eine neue
Mash-Variable und ziehen heraus. Ich werde
danach suchen. Anhängen. Jetzt gibt es zwei angehängte Notizen, die wir Schauspieler
an Komponente anhängen müssen, was wir
heute
verwenden werden , weil wir
den gesamten Herzaktor
an eine Komponente anhängen , die unsere Mesh-Komponente ist. Wir können aber auch
Komponenten an anderen Komponenten anbringen. Wenn
wir zum Beispiel in R hat eine Komponente hielten, die wir am Netz befestigen
wollten, aber wir wollten nicht
den gesamten
Hutaktor an unserem Netz befestigen . Wir könnten diese Komponenten,
Komponenten, Komponenten verwenden. Aber im Moment verwenden wir nur
Attach Actor to component. Und wir verbinden das mit dem
eingestellten Knoten. Jetzt haben wir ein Ziel, und das ist der Akteur, den
wir tatsächlich an unser Netz binden
werden,
das das übergeordnete Element ist. Also stecken wir das hier
in das Ziel ein. Dann müssen wir
den Socket-Namen festlegen. Das wird jetzt die Hutsteckdose
sein. Auch dies
muss immer genau der
gleiche sein wie der Socket, den wir in unserem Skelett
erstellt haben. Sonst wird
der Schauspieler nicht mit dem Fußball verbunden. Als Nächstes haben wir die Standort-, Rotations- und Skalierungsregeln. Das ist es, was der
Motor mit
dem Herzdarsteller machen wird , wenn ich ihn tatsächlich
an der Maische befestige. Jetzt
ist standardmäßig relativ bleiben, und ich zeige Ihnen, was
das im Gameplay bewirkt. Wenn ich also auf „Abspielen“ klicke, drücke ich eins. Du kannst sehen, ich kann hier nicht
mal meinen Hut sehen. Aber wenn ich F1 drücke, schaue ich nach unten. Sie können sehen, dass die Hüte
tatsächlich dort drüben an der Steckdose befestigt sind, aber sie haben eine
wirklich große Entfernung. Und im Grunde ist das die
Entfernung, die die Steckdose vom World Center entfernt
ist,
das hier drüben ist. Wenn ich also meinen Charakter hier
rüber fahre und einen drücke , sollten wir den Hut
jetzt
viel näher am Charakter sehen. Dies ist der relative Abstand den die Steckdose vom Mittelpunkt
der Welt entfernt hat. Nun, der nächste,
wenn wir
hier zu
unserem ThirdPersonCharacter zurückkehren , ist Keep World,
die, wenn wir sie
alle in Richtung des Hutes aufstellen, dem Sockel verbunden
wird. Die Entfernung ist
derzeit von der Steckdose entfernt. Wenn wir dies nun verwenden
und jetzt eins drücken, sehen
Sie, dass es sich direkt
über dem Kopf unseres Charakters und mit
dem Zeichensatz verbunden bleibt. Aber wenn ich
zu meinem Charakter zurückkehren sollte und unter
Verzögerung stehe , sagen wir zwei Sekunden. Wenn ich jetzt auf „Jetzt spielen“ drücke und
eins drücke, gehe ich hierher. Sie können sehen, dass es
jetzt verbunden ist weil es sich
mit der Animation bewegt, aber es ist die Entfernung, von der wir entfernt
waren,
als wir sie erzeugt haben. Wenn wir dann
zu ThirdPersonCharacter zurückkehren, können
wir dies ändern,
um zum Ziel zu springen. Und das wird unser Herz einfach
direkt an der Steckdose einrasten
lassen . Also nochmal, wenn wir eine Umfrage machen können, werden
wir diese
Verzögerung hier los und klicken auf „Spielen“. Wenn ich eine drücke, können Sie
sehen, wie unsere Hüte an
der Steckdose hängen und sie bleibt
dort, egal was wir tun. Und wenn ich
diese Verzögerung tatsächlich so hinzufüge. Nun vorher, wenn wir
eins drücken und dann weggehen, würde
es diese Entfernung
von uns Buch halten. Sobald diese zwei Sekunden abgelaufen sind, rastet
es einfach direkt in die Steckdose ein, wie Sie es erwarten
würden. Jetzt möchten Sie vielleicht
einen Schauspieler von einem anderen Schauspieler trennen, was ich
Ihnen jetzt zeigen werde Wenn wir hier zum
Third-Person-Charakter zurückkehren, füge
ich
neue Input-Events hinzu. Also suchen wir nach dem Eingabeereignis und ich füge es zum Beispiel für die
Eingabeereignisse 0 hinzu. Hier oben bekommen wir
unsere hats-Variable, die wir zuvor erstellt haben und die gesetzt
wird, wenn wir den Hut spawnen, wir können sie herausziehen und wir
können nach Detach suchen. Und wir können hier die Option „
Von Aktion trennen“ verwenden. Und wir führen das aus
, wenn unsere 0 gedrückt wird. Jetzt
ist die Standardeinstellung relativ beibehalten. Nun, das wird dasselbe tun wie beim Anbringen des Hutes. Dadurch wird die
relative Position
des Hutes vom
Mittelpunkt der Welt ferngehalten , was normalerweise nicht sehr nützlich ist. Also wirst du die meiste Zeit
das ändern, um die Welt so zu halten. Wenn sich der Hut löst, bleibt
er an
dem Ort, an dem wir ihm gesagt haben, dass er sich lösen soll. Wenn ich also „Jetzt kompilieren drücke und „Spielen“ drücke, drücke ich
einen Spawnerhut. Haben wir immer noch diese Verzögerung? Wenn ich also
hier zu unserem Code zurückkehre, entfernen wir das einfach. Damit es kompiliert wird, klicken Sie auf Play. Wenn ich eine drücke, kannst du
sehen, dass unser Herz mit
unserem Charakter verbunden ist , wie
es war, bevor ich herumspringen kann, und
es ist immer noch da. Wenn ich 0 drücke,
kannst du sehen, dass es sich
nicht mehr mit
unserem Charakter bewegt. Und es behält
genau die Position bei, an der ich
0 gedrückt habe, um es zu lösen. Zu guter Letzt
gibt es noch ein paar andere Hinweise, die Sie möglicherweise
verwenden möchten , wenn Sie Attachment verwenden. Wenn wir also hier zu unserem
ThirdPersonCharacter zurückkehren, können
wir uns aus dem
Hut ziehen und uns anhängen. Und das wird
uns tatsächlich den angeschlossenen Schauspieler bringen. Wenn wir also diesen Knoten verwenden, während wir mit unserem Charakter
verbunden sind, würde
er einen Verweis
auf unseren Charakter zurückgeben. Wir können uns auch hinziehen
und uns anhängen. Und das wird uns
die angeschlossenen Schauspieler geben. Dies gibt uns also
eine Reihe aller Schauspieler, die derzeit am Hut
befestigt sind. Ein Beispiel dafür, wie das nützlich
sein könnte, ist vielleicht, wenn dein Charakter stirbt und
du seinen Körper
zerstörst, du all
die Dinge zerstören willst , die daran hängen
könnten. Dies könnte ein guter Weg sein alle
Schauspieler, die an deinen Charakter
gebunden sind , zu gewinnen und auch all
diese zu zerstören. Dann der letzte,
wenn wir herausziehen und suchen, wird erneut angehängt,
Sie können sehen, dass es den Socket-Namen
der angehängten Eltern gibt . Und hier erfahren Sie, an
welchen Socket R hat
gerade angeschlossen ist , wenn
er an einen Socket angeschlossen ist. Wenn Sie jetzt einen
dieser Knoten finden möchten , den
wir durchlaufen haben, können
Sie immer
einfach aus
einer Komponente wie dem Mesh hier ziehen . Wenn ich hier oben eine neue
Mesh-Komponente erstelle, ziehen Sie sie heraus. Sie können nach
Attach suchen, um diese
angehängten Knoten zu finden. Sie können nach Socket suchen
, um die Socket-Knoten zu finden. Sie können auch nach Anhängen suchen, um diese
angehängten Modi zu erhalten. Eine letzte Sache, die ich
vor Abschluss dieser
Lektion erwähnen
wollte , ist, dass Sie vorsichtig sein und Schauspieler
an
Ihren Charakter binden
müssen , da sie Kollision Ihrer
Charaktere beeinträchtigen
können. Und das kann dazu führen, dass
dein Charakter in die Luft
fliegt
oder Probleme hat, sich zu in die Luft
fliegt
oder Probleme hat bewegen, weil der
Schauspieler, den du mit ihm
verbunden hast , seine Kollision
blockiert. Eine Sache, die Sie sicherstellen sollten, wenn
Sie Dinge an
Ihren Charakter anhängen , ist das eine gute Idee, eine
ihrer Komponenten durchzugehen? Ich habe eine Kollision wie ein Hut. Wir haben unsere
Stack-Mesh-Komponente hier. Wir gehen runter und suchen
die Kollisions-Voreinstellungen. Derzeit ist es
auf Block oder Dynamisch eingestellt, was auch unseren Charakter einschließt. Es ist also immer eine gute
Idee, dies in custom
zu ändern und
sicherzustellen, dass **** so
eingestellt ist , dass es ignoriert wird, damit r Kollision
unserer Charaktere überhaupt
nicht beeinträchtigt. Das war's also für
unsere Sockets-Lektion. Hoffentlich verstehen Sie jetzt,
wie sie funktionieren und wie Sie sie in
Ihren zukünftigen Projekten verwenden können.
36. Zusätzliche Kursinhalte (Bewegungskomponente): Hallo zusammen. In dieser Lektion werfen wir
einen Blick auf die Komponente „
Charakterbewegung“. Und für diejenigen unter Ihnen
, die in unseren vorherigen Lektionen
mitgemacht haben , habe
ich gerade eine neue
Third-Person-Vorlage erstellt damit wir für diese Lektion von
vorne beginnen können. Jetzt ist die Character Movement
Component
in jeden
Charakter-Blueprint-Typ integriert . Hier in unserem
ThirdPersonCharacter Blueprint können
Sie im Bedienfeld „
Komponenten“ sehen, dass
wir die
Charakterbewegungskomponente haben. Die Komponente der
Charakterbewegung ermöglicht es unserem Charakter, sich tatsächlich
zu bewegen. Und es bietet
uns auch viele
zusätzliche Einstellungen
, mit denen wir
anpassen können, wie sich unser Charakter bewegt und welche Art von
Bewegung er ausführt. Wenn wir also die
Charakterbewegungskomponente
auswählen, können
Sie
im Detailfenster sehen, dass
wir alle Einstellungen
für diese Komponente haben. Wenn Sie
das Bedienfeld „Komponenten“
oder das Bedienfeld „Details“ nicht haben , können
Sie
sie jederzeit aktivieren, indem Sie einfach zur
Dropdown-Liste der Fenster
gehen und im Bereich Details die
Option Komponenten-Panel hier. Jetzt werden wir nicht
alle Einstellungen für
die Bewegungskomponente durchgehen , da es einige davon gibt, aber wir werden
die wichtigsten durchgehen und ich werde erklären, was sie tun und
wie du kannst sie anpassen. Wenn Sie jemals vergessen,
was eine Einstellung bewirkt, können
Sie immer einfach mit der Maus
darüber fahren, und Sie erhalten einen ziemlich guten Tooltipp darüber, was diese
bestimmte Einstellung bewirkt. Wir
haben also zunächst die Schwerkraftskala. So viel Schwerkraft wird auf unseren Charakter angewendet. Schnell, um dies auf
etwas viel Höheres zu setzen, wie fünf, und wir werden es
kompilieren und auf Play klicken. Wenn ich springe, sieht man, mein Charakter eigentlich
nicht sehr hoch springt. Und das liegt daran, dass
wir die
fünffache normale
Schwerkraft auf unseren Charakter anwenden . Denken Sie jetzt daran, dass
dieser Schwerkraftwert nur den Charakter beeinflusst, keine anderen Objekte auf der Welt. wir dann zu
unserem ThirdPersonCharacter zurückkehren unserem ThirdPersonCharacter und die
Charakterbewegung auswählen, haben
wir die maximale Beschleunigung. So schnell
beschleunigt
der Charakter auf seine
maximale Bewegungsgeschwindigkeit. Je höher dieser
Wert ist,
desto schneller beschleunigt der Charakter und je niedriger, desto
niedriger wird er sein. Als nächstes haben wir den
Bruchreibungsfaktor. Je höher dieser Wert ist, desto schneller
stoppt der Charakter, wenn wir alle
Bewegungseingabetasten
loslassen. Als nächstes haben wir die
geduckte halbe Höhe. Dies ist die Höhe, die unsere Kapselkomponente haben
wird , wenn unser Charakter
in die Hocke geht. Und wenn wir zu unserem Viewport gehen, können
Sie unsere Capsule
Component hier sehen. Jetzt
ist unsere Kapselkomponente das, was die Texte sind, worauf unser Charakter
stößt. Wenn du jetzt in die Hocke gehst, möchtest du
normalerweise, dass dies kürzer ist, weil dein
Charakter sich nach unten hockt, und das
würde es dir ermöglichen, dich unter niedrigeren Objekten zu bewegen. Jetzt kehren wir zum
Event Graph zurück und ich
werde
ein kurzes Beispiel dafür aufstellen ,
wie wir
der Bewegungskomponente sagen können , dass wir in der Hocke sind. Wenn wir also hier nach oben gehen, erstelle
ich
ein neues Eingabeereignis,
protokolliere die Suche nach Eingabeereignissen
C. Und ich
scrolle einfach nach oben
und versuche, diese Eingabe zu finden. Also das ist für mich da. Ich richte
es einfach so ein, dass unser Charakter
Will Crouch, wenn ich C
drücke. Und wenn ich wirklich sehe, wie
unser Charakter in der Hocke läuft, denken Sie daran, unser Charakter
eigentlich keine Hocken-Animation spielt , weil wir die
Animationsseite nicht eingerichtet
haben. Aber was wir
tun werden, ist,
der Bewegungskomponente mitzuteilen , dass sie die Einstellungen für
die Hocke verwenden soll , um
unserer Bewegungskomponente mitzuteilen , dass wir uns in der Hocke befinden, aus der
Preston-Suche nach Hocken
herausziehen wird . Und wir wählen hier die
Hocken-Funktion. Und dann ziehen wir uns aus der
Veröffentlichung zurück und suchen und ducken uns so. Dies sind
Funktionen, die in Charakter-Blueprints
integriert sind . Wenn Sie versuchen, diese
Funktionen zu verwenden und sagen, nur eine zufällige Blaupause, könnten
Sie diese Funktionen nicht
finden. Jetzt gibt es noch eine
andere Einstellung, die wir aktivieren müssen
und die sich tatsächlich in unserer
Charakterbewegungskomponente Wir müssen ihr sagen
, dass unser Charakter
tatsächlich
im Suchenden hocken kann . werden
nur nach Dose ducken
suchen. Und du wirst unter
Bewegungsmöglichkeiten sehen, kann ducken hat
tatsächlich abgehakt. Also nehmen wir den. Jetzt können wir
das im Spiel testen, also kompilieren Sie es einfach und gehen Sie
zur Third-Person-Map
und wir klicken auf Play. Bevor ich jetzt C drücke, drücke
ich einfach die Tilde-Taste, die Taste auf der
linken Seite des Wonky. Ich werde nach einer Kollision im
Showspace suchen. Ich habe die Eingabetaste gedrückt. Jetzt können wir
die gesamte Kollision in unserem Level sehen,
einschließlich unserer Kapselkollision, bei der Sie sehen können
, dass es sich um den roten
Umriss unseres Charakters handelt. Wenn ich jetzt C gedrückt halte und sehe, dass meine Kapseln
jetzt kleiner werden, ist
das die Halbwertszeit unserer Kapseln, die 40 Zentimeter beträgt. Und wenn ich versuche mich zu bewegen
und sehe, dass sich mein
Charakter tatsächlich auch langsamer bewegt und meine
Kamera nach unten bewegt. Jetzt passiert das alles,
weil wir
der
Bewegungskomponente mitgeteilt haben , dass
wir in den Modus der
Hockenbewegung wechseln. Kehren wir jetzt zum
ThirdPersonCharacter
Blueprint zurück und wählen hier die
Bewegungskomponente aus. Und wenn wir hier oben nach Hocken
und Suchleiste suchen, können
wir die anderen Einstellungen für die
Hocke finden. Wir haben also die maximale
Gehgeschwindigkeit geduckt. So schnell bewegt sich der
Charakter beim Hocken, und dieser Wert ist in
Zentimetern pro Sekunde angegeben. Jetzt haben wir auch eine
Einstellung namens Kann beim Hocken von Hauptbüchern
gehen. Wenn das startet, kann ich dir
zeigen, was das bewirkt. Wir drücken auf „Spielen“ und rennen
hier zu unserem Felsvorsprung. Und wenn ich in C die Hocke
halte, kann ich beim Hocken nicht von
der Kante gehen . Wenn wir nun diese Einstellung
aktivieren würden
, könnten wir in der
Hocke von den Kanten gehen. Als Nächstes werden wir
die Crowd-Suche los und
gehen die
allgemeinen Einstellungen durch. Jetzt haben wir den
Standard-Landbewegungsmodus
und den Standard-Wasserbewegungsmodus. Nun, Bewegungsmodi
oder wie wir
der Bewegungskomponente mitteilen , welche
Einstellungen sie verwenden soll. Wenn wir also an Land sind, sagen
wir standardmäßig , dass wir
die Geheinstellungen verwenden möchten , die hier unten zu finden sind. Wenn wir im Wasser sind, möchten wir
die Schwimmeinstellungen verwenden , die
sich weiter unten befinden. Wenn sich die Bewegungskomponente
jetzt im Schwimmmodus befindet, werden
nicht plötzlich Schwimmanimationen
verwendet. Animationen werden separat
behandelt. Es teilt der Bewegungskomponente mit, dass wir die Schwimmeinstellungen verwenden
möchten ,
anstatt beispielsweise die
Geheinstellungen. nun zu den
Geheinstellungen übergehen, haben
wir die maximale Schritthöhe. So hoch ist die Kante , die dein Charakter nicht
erreichen könnte ohne springen zu müssen. Das
sind standardmäßig 45 Zentimeter, aber vielleicht hattest du eine
Treppe und der Charakter kann nicht einfach
normal hochgehen, du müsstest springen. Möglicherweise müssen Sie diesen
Wert ein wenig erhöhen, damit der Charakter eine höhere Höhe erreichen kann. Als nächstes haben wir den
begehbaren Bodenwinkel. So steil kann unser Charakter
einen Hang hinaufgehen. Wenn du möchtest, dass dein Charakter
steilere Hänge
hinaufgeht, musst du diesen Wert
erhöhen. Als Nächstes haben wir unsere
maximale Gehgeschwindigkeit. Dies ist die Höchstgeschwindigkeit unser Charakter beim
Gehen fahren wird. Wenn wir also wollen, dass unser
Charakter schneller geht, haben wir
diesen Wert erhöht, und wenn wir wollten, dass er
langsamer mit verringerter geht, dann haben wir die maximale
Gehgeschwindigkeit für geduckte. Wir haben das schon einmal erklärt. Das ist die Geschwindigkeit, mit der
sich unser Charakter in der Hocke bewegt. Dann haben wir die min.,
analoge Gehgeschwindigkeit. Und das wird verwendet, wenn Sie
einen Bucket haben , einen Gamepad-Stick. Dies ist die
Mindestgeschwindigkeit, die dein Charakter
mit der Eingabe
des Eingabesticks erreichen kann . Als nächstes haben wir die
Bremsverzögerung zu Fuß. So viel
Verzögerungskraft wird auf
den Charakter angewendet , wenn Sie
nicht mehr in eine Richtung gehen. Je höher dieser Wert ist, desto schneller
wird dein Charakter langsamer. Als nächstes müssen wir die Dose von den Felsvorsprüngen
gehen. Wenn das stimmt, verhält es sich so als ob
R in der Hocke von Hauptbüchern laufen kann Dadurch kann unser
Charakter beim Gehen von
der Kante weggehen . Und wenn das
falsch ist, wird unser Charakter nicht in der Lage sein
, die Hauptbücher zu verlassen. jetzt nach unten scrollen, gehen wir hier
zu den Sprungeinstellungen. Jetzt haben wir die
Sprünge, die Geschwindigkeit. So viel Kraft wird angewendet, wenn ein Charakter
tatsächlich springt. Wenn wir also festlegen würden, ist
das etwas wirklich hohes wie die 2000er. Und wir können ziehen, wenn wir auf Play drücken und wir springen unsere Charaktere jetzt richtig hoch
springen. Kehren wir nun
zum ThirdPersonCharacter zurück zum ThirdPersonCharacter und wählen Sie unsere
Charakterbewegungship Wir haben einige andere
Einstellungen für unser Springen. Ich werde nicht alle
durchgehen, aber einige der wichtigsten
sind die Luftkontrolle. So
viel Kontrolle hat der Spieler über die Richtung, in die
sich
Ihr Charakter die Richtung, in die
sich
Ihr Charakter bewegt, je höher dieser Wert ist, desto
mehr Kontrolle hat er. Wenn wir nun nach unten gehen, werden
wir in
dieser Lektion nicht auf die Netzwerkeinstellungen eingehen, da
sie weitaus weiter
fortgeschritten sind als das, was in dieser
Lektion
behandelt die Netzwerkeinstellungen eingehen, da
sie weitaus weiter
fortgeschritten sind wird. Aber wenn wir weiter runter gehen, findest
du die
Schwimmeinstellungen. Und hier kannst du
die maximale Schwimmgeschwindigkeit einstellen. Wir können Dinge wie Auftrieb einstellen. Und diese sind nur relevant, wenn sich
dein Charakter
im Schwimmmodus befindet. Dann müssen wir fliegen. Schon wieder. Wir können
die maximale Fließgeschwindigkeit einstellen. Dies ist die Geschwindigkeit, mit
der sich
der Charakter im
Flugbewegungsmodus bewegt. Wenn Sie jetzt zu
den Einstellungen für die
Drehung der Charakterbewegung gehen , können
Sie sehen, dass wir eine Rotationsrate
haben. So schnell
dreht sich
die Figur in die Richtung, in die
sie gerichtet sein soll. Also wenn ich das
von 500 auf 50 heruntersetzen und wir kompilieren und auf Play klicken. Wenn ich hier in die
Richtung schaue und W drücke, kannst
du sehen, wie sich mein Charakter langsam in diese Richtung
dreht. Diese Einstellung kontrollieren wir. Wie schnell dreht sich der Charakter. Jetzt haben wir hier auch ein paar andere Rotationseinstellungen. Jetzt haben wir die
Drehung auf Bewegung ausgerichtet,
was bedeutet, dass der
Charakter die Richtung zeigt, in die
wir uns bewegen. Wenn wir das ausschalten
und fallen und auf „Spielen“ klicken
und sehen, dass, wenn ich mich in diese Richtung
bewege, unser Charakter kontinuierlich nach
vorne zeigt, weil wir uns
nicht mehr in unsere
Bewegungsrichtung drehen. In unserer Bewegungskomponente haben
wir jetzt auch eine andere
Einstellung, die als gewünschte Drehung des Controllers
verwenden bezeichnet wird . Wenn wir das jetzt einschalten, unser Charakter in die
Richtung, in die unsere Kameras gerichtet sind. Jetzt setzen wir unsere
Rotationsrate auf 50. Ich werde
das wieder auf 500 erhöhen. Und wenn wir kompilieren und auf „Spielen“ klicken, können
Sie sehen, dass sich
unser Charakter jetzt
immer dann dreht
, wenn ich meine Kamera bewege , in die Richtung zeigt. Jetzt kannst du sehen, ob ich
mich schnell von meinem Charakter abgehalten habe, unser Charakter hat eine kleine Verzögerung
bekommen. Das liegt an
der Rotationsgeschwindigkeit. Wir könnten
diesen Wert also entweder
verringern oder erhöhen , damit sich unser Charakter schneller in
diese Richtung
dreht. Beachten Sie, wir die
gewünschte Drehung des Controllers verwendet haben Es funktioniert nicht, wenn Sie auch
Drehung an Bewegung orientieren aktiviert haben. Wenn beide
hier angekreuzt sind oder den Controller verwenden, funktioniert die
gewünschte Drehung nicht. sind also die meisten
Haupteinstellungen, die du anpassen
wirst , und die
Charakterbewegungskomponente. Wir können sie aber auch im Spiel
anpassen. Wenn wir also auf die aktuellen
Werte zugreifen
möchten , ändern sie alle. Wir können unsere
Charakterbewegungskomponente immer in die
Länge ziehen und nach einem bestimmten Wert
suchen. Nehmen wir zum Beispiel an, wir haben
ein Sprintsystem entwickelt und wir möchten, dass es die maximale Bewegungsgeschwindigkeit unseres
Charakters ändert. Wir könnten nach der
eingestellten maximalen Gehgeschwindigkeit suchen, und das gibt uns sowohl
Zugriff auf unsere maximale Gehgeschwindigkeit als auch auf unsere maximale
Gehgeschwindigkeit in der Hocke, wo wir die maximale Gehgeschwindigkeit verwenden. Ich setze die maximale
Gehgeschwindigkeit auf 1500. Und wir kopieren diesen Knoten und
fügen ihn ein und verbinden sein Ziel-Backup unserer Charakterbewegung hier. Und wir werden einen neuen Input erstellen. Es wird also nach Eingabe suchen, dann verschieben und
einen Linksverschiebungseingang erstellen. Wenn wir gedrückt werden, möchten wir, dass unsere maximale
Gehgeschwindigkeit auf
1500 erhöht wird, und wenn sie losgelassen wird, wird sie auf 600
geändert. Wenn wir jetzt kompilieren
und ich auf Play klicke und ich
herumlaufe, ohne die
Shift-Taste zu drücken, haben
wir unsere normale Gehgeschwindigkeit. Und wenn ich die Umschalttaste
gedrückt halte, kannst du sehen, dass unser Charakter viel schneller wird. Wenn wir nun zum
ThirdPersonCharacter Blueprint zurückkehren, können
wir auch ändern, in welchem
Bewegungsmodus oder welcher Charakter sich befindet. Also nochmal, wenn wir unsere
Charakterbewegung bekommen, können
wir herausziehen und einfach
den Bewegungsmodus einstellen. Und wir können hier die
SAT-Bewegungsmodus-Funktion verwenden, um den aktuellen
Bewegungsmodus unseres Charakters zu ändern. Wir könnten es also auf
Fallen oder Schwimmen einstellen je nachdem, in welchem Bewegungsmodus sich unser Charakter gerade befinden
soll. Wenn Sie sich erinnern, haben wir in unserer
Bewegungskomponente zu ducken, aber Sie können tatsächlich
auch andere Bewegungsmodi aktivieren und deaktivieren. Wenn wir also hier nach
unten scrollen, sollte
es unter
der Naff-Bewegung sein. Wir können fallen lassen, klicken Sie auf das Drop-down für Bewegungsmöglichkeiten. Dann können Sie hier
sehen, dass wir tatsächlich all
die verschiedenen Arten
von Bewegungsmodi
aktivieren und deaktivieren die verschiedenen Arten
von Bewegungsmodi die Ihr Charakter eintreten kann. Jetzt können wir auch
darauf zugreifen, ob
diese in unserem Code aktiviert oder
deaktiviert sind oder nicht . So können wir zum
Beispiel nach der Hocke suchen. Auf diese Weise
können wir überprüfen, ob sich unser Charakter
derzeit ducken kann? Mit unserer
Charakterbewegungsvariablen können
wir jetzt auch jede
unserer anderen Einstellungen anpassen. So können wir herausziehen
und nach Sets suchen, gewünschte Drehung des Controllers
verwenden. Und wir könnten dies ein- oder ausschalten je nachdem, was wir in unserem Code
tun. Wir können auch die Rotationsrate erhöhen oder
verringern. So können wir nach Rotation und Miete
suchen und eine
Rotationsrate festlegen, die wir verwenden möchten,
anstatt sie hier in
unseren Einstellungen für die Charakterbewegung
festlegen zu müssen sie hier in
unseren Einstellungen für die Charakterbewegung
festlegen . Nun gibt es Einstellungen, die
wir
in dieser Lektion nicht behandelt haben , nur
weil es viele davon gibt , und einige
von ihnen sind weitaus fortgeschrittener und ganz
spezifisch für bestimmte Bedürfnisse. Sie können jedoch unter
den meisten Kategorien und
erweiterten Optionen finden , mit
denen Sie
auf einige
zusätzliche Informationen zugreifen können . Und wenn Sie wissen möchten,
was diese Variablen bewirken, können
Sie immer einfach mit der Maus darüber fahren. Es gibt dir eine ziemlich
gute Erklärung , was sie tun. Die letzten Einstellungen, die
wir behandeln werden, befinden sich tatsächlich in den Klassenstandardwerten
des Charakters. Wenn wir also auf
Klassenstandardwerte klicken und hier nach oben scrollen, sollten
Sie hier die Optionen
zur Steuerung von Rotation, Neigung, Gieren und
Rollen finden. Nun, wie die vom
Benutzercontroller gewünschte Drehungseinstellung, die wir
in der Charakterbewegung haben
, zeigt die Figur dadurch in die Richtung, in die die
Kamera zeigt. Der Unterschied besteht jedoch darin,
dass
bei diesen Einstellungen der Charakter sofort in diese Richtung zeigt,
wenn sie aktiviert sind . Es berücksichtigt nicht die Rotationsrate, die wir
in unserer
Charakterbewegungskomponente haben . Wenn wir zurück zu
den Rotationseinstellungen scrollen, wird diese
Drehrate ignoriert. Wenn wir die gewünschte Drehung des
Use-Controllers ausschalten und zu unseren
Klassenstandardwerten zurückkehren, scrollen Sie nach oben. Wir können diese Einstellungen tatsächlich
aktivieren , um zu sehen, wie sie im Spiel funktionieren. Zunächst wird also nur eine Rotation in Europa
ermöglicht. Das ist also Seite an Seite. Wir kompilieren, klicken auf „Spielen“. Sie können jetzt sehen, wenn
ich meine Kamera drehe, der Charakter sofort
in diese Richtung zeigt. Normalerweise würden
Sie für einen
bodenbasierten Charakter wie unseren
ThirdPersonCharacter hier wie unseren
ThirdPersonCharacter hier nur
die Option, your verwenden, aber Sie können
die anderen Einstellungen in
den Klassenstandardwerten aktivieren . Wenn wir nach unten scrollen, um diese zu finden, können
Sie sehen, dass wir Pitch and Roll
haben. Wenn wir nun beide aktiviert haben und Kompilieren drücken, werden
Sie sehen, dass wir unseren Charakter in
jede Richtung richten können, in die
unsere Kamera zeigt, wenn
wir auf Play klicken unseren Charakter in
jede Richtung richten können, in die
unsere Kamera zeigt, wenn
wir . Aber auch hier würden
Sie
diese beiden Einstellungen normalerweise nicht für
einen bodenbasierten
Charakter wie diesen verwenden diese beiden Einstellungen normalerweise nicht für . Nun können
wir, wie unsere Variablen
in unserer Character
Movement Component, diese mithilfe des
Codes festlegen, damit wir mit der rechten Maustaste klicken können, wir können suchen, um die
Controller-Rotation festzulegen. Wir können Set verwenden,
Steuerung von Rotation, Nick, Roll und Gieren verwenden. Und wir können diese
Einstellungen mithilfe von Code anpassen. Das
war's also für diese Lektion. Wir haben die meisten der am
häufigsten verwendeten Einstellungen
mit der
Charakterbewegungskomponente behandelt . Hoffentlich
verstehst du jetzt, wie das funktioniert und wie du die Bewegung deiner Charaktere anpassen
kannst.
37. Zusätzliche Unterrichtsstunden (Audio-Effekte): Hallo zusammen. In dieser Lektion werden wir
uns ansehen, wie wir Sounds
mithilfe von Blueprint-Knoten abspielen können. Jetzt
muss Unreal Engine Five Soundsysteme. Derzeit haben Sie
das Sound Cue-System und das Meta Soundsystem. Und beide Systeme verwenden dieselben Blueprint-Knoten, um
die Sounds
tatsächlich abzuspielen. Und deshalb werden
wir uns heute in
dieser Lektion beide ansehen . Jetzt
befindet sich das Meta-Soundsystem derzeit in der Beta-Phase, was bedeutet, dass wir es aktivieren
müssen. Also gehen wir
zur Bearbeitungsoption, gehen zu den Plugins und suchen nach Materie. Wir werden uns hier mit
der Metalloption befassen. Wenn deins bereits angekreuzt
ist, dann ist das großartig. Sie haben es bereits aktiviert. Wenn nicht, was es übernehmen
wird, klicken
wir auf Ja, und dann müssen wir
den Motor schnell neu starten. Jetzt bin ich wieder
im Motor und habe das Metro-Soundsystem
aktiviert. Jetzt können wir auch noch das
Warteschlangen-Soundsystem verwenden. Wir haben gerade auch das
U-Bahn-System aktiviert. Und was wir tun können, um
sicherzustellen, dass es aktiviert ist, ist Klicken Sie mit der rechten Maustaste in den
Inhaltsbrowser. Hier können wir zur Soundoption
gehen
und sicherstellen, dass wir hier die Option
Meta-Soundquelle haben. Jetzt werde ich nur den Hauptunterschied
zwischen Sound Cues,
Metal Sounds und Schallwellen
erklären zwischen Sound Cues, . Was wir also tun werden, ist
in den Engine-Ordner zu gehen. Und wenn Sie das nicht haben, können
Sie zu Einstellungen gehen
und dann zur
Inhaltskategorie gehen und
sicherstellen , dass
Engine-Inhalt anzeigen aktiviert ist. Und das sollte
diesen Ordner hier zeigen. Jetzt, wo der
Engine-Ordner ausgewählt ist, fügen
wir einen neuen Filter hinzu, auf Sound heruntergeht. Wir werden
die Schallwellenoption finden , die hier unten sein sollte. Das übernehmen wir. Und jetzt sehen
wir derzeit alle Schallwellen, die in den Motor
eingebaut sind. Wenn wir den Mauszeiger über einen bewegen,
können wir ihn tatsächlich spielen. Wenn ich also drücke, solltest du in der
Lage sein, dieses Geräusch zu hören. Und Soundwave ist
im Grunde die Sounddatei Sie erhalten, wenn Sie einen
neuen Sound in die Engine importieren. Denken Sie an Schallwellen ist
nur eine einfache Sounddatei. Es gibt nicht wirklich viele
Anpassungsoptionen. Öffne jetzt eine dieser
Schallwellen , die uns zu
meinem anderen Bildschirm hier bringen.
Du kannst sehen, dass wir hier einige Einstellungen
haben. Meistens würden Sie
unter Sound anpassen. Es gibt zusätzliche Einstellungen, aber wir werden
sie in
dieser Lektion nicht behandeln , nur weil sie
etwas weiter fortgeschritten sind. Sie können jedoch beispielsweise die Lautstärkehöhe
anpassen und Looping für diese Schallwelle ein- oder ausschalten. Aber darüber hinaus gibt es hier
nicht viele Optionen zum
Anpassen des Sounds. Hier kommen Soundhinweise
und Mehta-Soundsystem ins Spiel. Es wird also
vorerst
unsere Schallwelle schließen und
zum Inhaltsbrowser zurückkehren. Und wir werden unsere Filterhüften los
. Also werden wir die Schallwelle entfernen, einen neuen Filter hinzufügen
und wir werden nach den Sounds
suchen , die herauskommen. Dann wollen wir die
Sound-Cue-Option hier. Und jetzt können Sie alle
Klanghinweise sehen, die in den Motor
eingebaut sind ,
wie die Schallwellen. So können wir mit der Maus über einen fahren und das Spiel drücken und den Sound hören, diesen Sound-Cue oder Play. Wenn wir auf einen Sound-Cue doppelklicken, können
wir den
Sound-Cue-Editor öffnen. Jetzt werde ich nicht all die
Dinge
durchgehen, die Sie in einem Sound-Cue-Editor
tun können , weil
es viele davon gibt. Wenn Sie mit der rechten Maustaste klicken, werden Sie sehen es viele verschiedene Knoten
gibt dass es viele verschiedene Knoten
gibt, die unterschiedliche Funktionen
für die Soundsteuerung ausführen. Aber im Wesentlichen nimmt ein Sound-Cue einen Wave-Sound auf. Wenn wir also diese Notiz hier auswählen, können
Sie sehen, dass sie
tatsächlich
die kompilierte fehlgeschlagene Welle darstellt . Und das können wir ändern
, wenn wir wollen. Und dann gibt es diesen
Sound an den Ausgangsknoten aus. Jeder Sound, den wir an diesen Ausgang
angeschlossen haben ,
wird immer dann abgespielt, wenn wir
unseren kompilierten, fehlgeschlagenen Sound-Cue abspielen. Wenn wir wollten,
könnten wir tatsächlich mehrere
Wave-Sounds in einem
einzigen Sound-Cue haben . Und so können wir das
tun, als ob wir mit der rechten Maustaste nach einem Wave-Spieler
suchen würden. Wir können den neuen
Knoten auswählen und eine neue Welle festlegen , die wir platzieren möchten,
damit wir erfolgreich kompilieren können. Nun, vielleicht wollten wir,
jedes Mal, wenn wir diesem
Sound-Cue sagten, er solle ihn spielen , um zufällig zwischen
zwei verschiedenen Schallwellen zu wählen. Wir könnten das tun, indem wir die Suche nach dem Zufall einfach in die
Länge ziehen. Und wir könnten diese beiden
Schallwellen
in diese zufällige Last stecken , dann den Ausgang in
unseren Ausgangsknoten. Und jetzt wird jedes Mal,
wenn
wir dieses Q spielen , zufällig
eines dieser Sounds ausgewählt. Jetzt gibt es ein paar Dinge
hier auf der linken Seite. Da ist die Lautstärke
multiplizieren und pitch multiplizieren. Und das wirkt sich auf alle Wellen aus , die sich in diesem Würfel befinden. Anstatt also zu
jeder Welle gehen zu müssen , die unsere Warteschlangenbenutzer
haben, könnten wir hier einfach die
Lautstärke und Tonhöhe steuern. Jetzt haben wir die
Dämpfungseinstellungen. Jetzt werde ich in
dieser Lektion nicht im Detail darauf eingehen , da sie
etwas weiter fortgeschritten sind. Aber im Grunde
enthalten die
Blaupausen für die Dämpfungseinstellung nur
eine Reihe von Einstellungen, die
steuern, wie weit sich ein Ton
bewegt und wie stark die Lautstärke des Klangs über eine Entfernung
abnimmt. Wenn Sie die enthaltenen
Einstellungen sehen möchten
, können
Sie diesen Blueprint hier verwenden. Und ich werde dir tatsächlich
all diese Einstellungen zeigen. Ich werde die nicht
durchgehen, weil es
viele davon gibt und
sie ziemlich komplex sind. Wenn Sie mehr
über diese Epic erfahren möchten, haben Sie tatsächlich eine wirklich
gute Dokumentation
zur Schalldämpfung. Jetzt haben wir
die grundlegenden Unterschiede
zwischen einer Klangwelle
und einem Sound-Cue behandelt . Nun
sind Schallwellen wieder nur die grundlegende Sounddatei , die Sie für
den Motor wichtig sind. Und dann Tonhinweise.
Wir können Dinge wie das zufällige
Auswählen von Schallwellen tun. Wir können Dinge
wie die Tonhöhe
durch diese Knoten hier anpassen . Zum Schluss werde ich noch erklären, wie wir einen Sound-Cue erstellen. Was wir also tun können, ist, wenn wir hier zu unserem Inhaltsbrowser
gehen, werde
ich meinen Sound-Cue-Filter los, indem ich
einfach mit
der rechten Maustaste klicke und einen entfernten Sound-Cue
mache. Und wir fügen einen neuen Filter hinzu. Und wir gehen zu Sounds und
nehmen es einfach mit Sounds auf. Und das wird
uns alle Soundtypen zeigen. Also nehmen wir das an und wir werden Schallwellen finden
. Also haben wir unseren
Kameraverschluss hier. Um jetzt einen neuen Sound-Cue zu erstellen, können
Sie entweder einfach
mit der rechten Maustaste auf eine Klangwelle klicken. Und hier können Sie nach oben gehen, um Würfel zu erstellen, und Sie
können darauf klicken, und das wird
uns einen neuen Sound-Cue erstellen. Wenn wir den neuen Sound-Cue öffnen, wirst
du sehen, ob ich
ihn auf den Bildschirm bringe. Sie können sehen, dass es tatsächlich eine Verschlusswelle der Kamera
hat. Und darauf haben wir im Content Browser mit der rechten Maustaste geklickt . Und es verbindet
sich mit unserem Ausgang für uns in unserem neuen
Kameraverschluss q. Sie können auch Tonhinweise erstellen. Wenn wir hier in den Ordner
Charaktere gehen, werde
ich diese Filter einfach
los, klicke
einfach mit der rechten Maustaste und
entferne dann alle Filter. Dann können wir auch
Sound-Cues erstellen, indem wir mit der rechten Maustaste klicken. Und hier gehts zum Sound und
du findest den Sound-Cue. Und das wird
nur
einen leeren Sound-Cue für uns erstellen . Wenn wir das also öffnen, Sie sehen, dass es hier
eigentlich keinen Input gibt weil wir ihm nicht gesagt haben,
welche Welle er verwenden soll. Und wenn Sie eine Welle hinzufügen möchten, können
Sie einfach
mit der rechten Maustaste klicken und nach Wave, Wave Player
suchen . Und Sie können
hier einen Sound-Cue setzen und diesen
mit dem Ausgang verbinden. Als nächstes werden wir also zum Metal-Soundsystem
übergehen. Und das Metall-Soundsystem
ersetzt einfach das Sound-Cue-System. Wenn wir also zum
Inhaltsbrowser gehen, klicke
ich mit der rechten Maustaste auf „
Gehe zu Sounds“ und
wir erstellen eine neue
Metro-Soundquelle. Das ist das Äquivalent
unseres Sound-Cue hier. Was wir also tun werden, ist
eine neue Messschallquelle zu erstellen . Wir nennen diesen neuen Sound so und
wir werden ihn öffnen. Jetzt haben wir eine
neue Benutzeroberfläche. Es sieht unserem Warteschlangensystem
ähnlich, weist
jedoch einige Unterschiede auf. Erstens haben wir hier einen Input, und diese Art von Arbeiten wie Ausführungsanhänge
innerhalb von Blaupausen. Dies wird ausgeführt, wenn unser
Metro-Sound zum Abspielen aufgefordert wird. Und dann sind wir fertig. Also wollen wir
das ausführen, sobald wir mit der Ausführung
unseres Codes
fertig sind und
dann haben wir diese Ausgabe
und das ist es, woran wir uns für unseren Sound
anschließen. Jetzt
heißt es momentan unsere Tomate, weil unsere Einstellung für unseren Meta-Sound
tatsächlich auf Mono eingestellt ist. Wenn Sie dies
ändern möchten, was normalerweise wahrscheinlich der Fall ist, klicken
Sie auf dieses
Drop-down-Menü und wählen Sie Stereo aus. Und jetzt können Sie sehen, dass
wir eine Option für unsere linke und rechte Ausgabe haben. Im Gegensatz zum
Sound-Cue-System werde
ich jetzt nicht auf dieses System
eingehen, denn
wenn Sie
mit der rechten Maustaste klicken, werden
Sie feststellen, dass es
viele, viele Funktionen gibt. Es ist ein sehr großes System. Aber wir werden einen neuen Wave-Plan erstellen. Wenn Sie also mit der rechten Maustaste klicken und
nach Wave Claire suchen, können
wir diesen Knoten verwenden, um unsere Wave Sounds
abzuspielen. Sie können sehen, dass wir Eingaben zum
Spielen und Stoppen haben. Und wieder funktionieren diese wie Ausführungseingaben auf
einem Blueprint-Knoten. So haben wir
diese Note gehalten, um
einen Sound abzuspielen oder die
Wiedergabe eines Sounds zu beenden. Wir können eine Welle setzen. Hier stellen wir also unseren Wellensound so ein, dass
er abgespielt werden soll. Also könnten wir,
sagen wir, eine kompilierte Datei auswählen. Wir können eine Startzeit festlegen. Wenn wir also wollten, könnten
wir den Sound zu einer
anderen Zeit als 0 starten. Wir können die Tonhöhe ändern. Wir können es auf eine Schleife setzen. Wir können die Uhrzeit festlegen, zu der
die Schleife startet. Und wir können einstellen, wie
oft oder wie lange die Schleife
dauern wird. Schleife für. Die Loop-Dauer ist auf minus eins
gesetzt. Das heißt nur, wenn die Flöte
angekreuzt ist , wird sie für immer in einer Schleife laufen. Dieser Knoten hat viele
Ausgänge und wir werden
nicht alle behandeln,
aber wir werden uns damit befassen, wie dieser Sound
tatsächlich wiedergegeben wird. Aus unserem Input heraus wollen
wir unser Stück
auf unserer Welle spielen Claire,
das sagt ihr, dass sie
anfangen soll, einen Sound abzuspielen. Und dann von unseren
Outputs, die wir wollen, bin
ich fertig, und
wir werden das
in unseren Metal-Sound
stecken, wenn wir hier fertig sind. Das sagt
ihnen bei einem Geräusch
, dass unsere Welle das Spiel beendet hat. Dann haben wir diese
Steckdose
und wir werden
diese hier an unsere Ausgänge anschließen. Für unseren Metal-Sound. Dies bietet eine linke und rechte Audioausgabe
für unseren Sound. Wenn wir jetzt die Wiedergabetaste drücken, sollten
wir ein Geräusch hören. Der Unterschied
zu Metazoanern besteht darin,
dass wir diese
Ausführungs-Pins auf den Knoten haben. Und was wir hier tun
könnten,
anstatt nur den
unfertigen Ausgangsknoten laufen zu
lassen, könnten wir, wenn
wir wollten , mehrere Sounds nacheinander
abspielen lassen. Also können wir unseren
Wave-Player hier kopieren ihn hier unten einfügen. Jetzt, wenn unser erster
Sound beendet ist, möchten wir
vielleicht, dass ein anderer
Sound abgespielt wird, damit wir diesen fertigen
Pin zu höflich verbinden
können. Wir fügen einen neuen Sound ein oder setzen
ihn auf „Kompiliererfolg“. Aber jetzt wollen wir unsere Linke und
unsere Teile mit diesen Ausgangspins
verbinden unsere Teile mit diesen Ausgangspins damit wir den Ton tatsächlich
hören können. Aber wenn wir sie ersetzen, können Sie sehen, dass
unsere ersten getrennt werden. Was wir jetzt brauchen, ist ein Mixer. Also klicken wir mit der rechten Maustaste
und suchen nach Mixer. Sie sehen, dass wir viele
verschiedene Mixe haben,
je nachdem , wie viele Eingänge es hat Wir werden
einen Stereomixer verwenden. Also machen wir ein oder zwei Stereo-Mix. Das bedeutet, dass wir von hier aus unsere
Linke und unsere Rechte
und von hier aus unsere Linke und unsere
Rechte einstecken können Linke und unsere Rechte
und von hier aus . Und es gibt uns nur eine
Ausgabe für links, für rechts. Dann wird unser zweites Wellendiagramm von unserem Ende
an dies mit dem Ausgang verbinden. Was jetzt passieren wird, ist wenn wir unserer
Medizin sagen, dass sie spielen soll, sie wird
kompiliert, gescheitert. Sobald das Spiel beendet ist, wird
es
abgespielt werden. Und es wird das linke und rechte Audio
von diesen beiden Knoten in den Mixer ausgeben und dann das Ergebnis für unseren Metal-Sound ausgeben. Und wir können das testen, indem wir
einfach auf Play klicken. Sie können sehen, wie beide Sounds nacheinander
abgespielt werden. Das ist also nur ein
einfaches Beispiel für
die Dinge, die Sie mit
dem neuen Metro-Soundsystem tun können . Jetzt gibt es noch einige
andere Einstellungen. Wenn wir hier zu den
Quelleneinstellungen gehen, können
Sie sehen, dass wir
eine Dämpfungseinstellung festlegen können ,
genau wie unsere Klanghinweise. Und wieder ist dies die
Blaupause, die die Entfernung steuert
, über die
der Ton
gehört werden kann , und wie stark die Lautstärke des Klangs über eine Entfernung
abnimmt. Als Nächstes werde ich Ihnen
zeigen, wie wir
all diese verschiedenen
Soundtypen mithilfe von Blaupausen abspielen können . Was wir also tun, ist
zu unserem ThirdPersonCharacter zu gehen hier zu unserem
Inhaltsordner zurückzukehren. Ich verstecke nur den
Inhaltsordner für unsere Engine. Wir gehen zum
ThirdPerson-Ordner, öffnen Blaupausen und gehen
zum ThirdPersonCharacter. Und wenn Sie es noch nicht
bemerkt haben, habe ich
aus unseren letzten Projekten ein neues
Third-Person-Projekt erstellt , damit
wir hier einen Neuanfang haben. Jetzt werden wir nur ein Beispiel dafür
aufstellen , wie wir einige Sounds abspielen
können. Also werde ich
den Spielknoten
hinzufügen sich von diesem herauszieht und einen Timer nach Ereignissen durchführt.
Von der Veranstaltung Zuhälter. Wir erstellen
ein benutzerdefiniertes Ereignis. Wir nennen das den Sound von M und räumen das einfach schnell auf. Und ich mache diese Schleife, sagen wir alle zwei Sekunden, und
wir werden auch mit dem Looping beginnen. Jetzt gibt es vier
Hauptknoten zum Abspielen von Sounds. Wenn wir uns hier von unserem Klangereignis zurückziehen und die
Suche Sound abspielen wird. Und Sie sehen, dass
wir Sound abspielen,
2D und Sound am Ort abspielen müssen . Der Unterschied zwischen
diesen ist Play Sound. Ein 2D ist sehr nützlich für
Dinge wie UI-Sounds. Es spielt es einfach auf dem Computer des
lokalen Spielers ab. Es spielt den Sound nicht an einem bestimmten Ort auf
der Welt ab. Dann müssen wir
Sound at Location abspielen
, der einen Sound an einem
bestimmten Ort auf der Welt wiedergibt. Also fangen wir am Dienstag mit
dem Ort an. Hier sehen Sie, dass wir einen Sound setzen
können. Dies
kann tatsächlich eine Klangwelle, ein Sound-Cue oder ein Metal-Sound sein. Wenn wir also nach unserer Angelegenheit suchen, können
Sie sehen, dass wir sie
auf unseren neuen Masker-Sound einstellen können. Wir können eine akute Tonwarteschlange oder eine Schallwelle einstellen. Nun ist es eine gute Praxis,
entweder Sound-Cues oder
Meta-Sounds zu verwenden , nur
weil Sie einfach
mehr Kontrolle darüber haben ,
wie diese ausgeführt werden. Aber jetzt verwende ich
einfach unsere neuen Meta-Sounds. Also habe ich nach neuem Metro-Sound
gesucht und wir werden ihn erneut auswählen. Sie könnten ein
Q wählen, wenn Sie möchten. Es würde genauso laufen wie unser Metro-Sound. Es wird kompiliert
und auf Play gedrückt. Und wir sollten
das Klangspiel hören. Und es zahlt sich für diese beiden Sounds
aus. Denn wenn Sie sich erinnern, in unserem Metal-Sound verketten
wir diese beiden
Sounds
in unserem Metal-Sound miteinander. nun zu unserem
ThirdPersonCharacter zurückkehren, klicken
wir hier auf dieses kleine
Drop-Down-Menü und es gibt uns einige Einstellungen
, mit
denen wir den abgespielten Sound
steuern können . Wir können die
Lautstärke und Tonhöhe ändern. Wir können eine Startzeit festlegen. Vielleicht hattest du einen wirklich langen Sound und du wolltest, dass er bei fünf Sekunden
beginnt,
du könntest fünf hier platzieren,
und das ist die Zeit, in du könntest fünf hier platzieren, der der
Sound aufhört zu spielen. Wir haben Parallelitätseinstellungen. Das ist wie
die Blaupause zur Abschwächung. Diese Art von Blaupause
enthält jedoch die Einstellungen dafür, wie viele
dieser Sounds
gleichzeitig abgespielt werden können. Ich werde in
dieser Lektion nicht darauf eingehen , weil es ein
bisschen weiter fortgeschritten ist, aber dafür wird das
verwendet und das gilt auch für den Besitz von Schauspielern hier, für
die beide verwendet werden
Parallelität. Aber im Moment können wir diese
einfach
leer lassen und unser Sound
wird gut abgespielt. Als Nächstes schauen wir
uns jetzt den Ort
des Wiedergabetons an . Also werden wir am Dienstag
unsere Wohnung los. Kompilieren Sie einfach, ziehen Sie sich hier
aus unserem Sound heraus und suchen Sie nach Plato-Sound unter. Wir spielen keinen Ton vor Ort ab. Jetzt wird dieser Knoten ein paar zusätzliche Optionen
haben. Also können wir Sound sagen. Dieses Mal wählen wir zum Beispiel die
Verschlusswarteschlange für
unsere Kameras aus. Wir können Standort sagen. Also werde ich einfach den Standort
unseres Charakters verwenden. Also verwenden wir den Standort des Schauspielers ermitteln. Stecken Sie das in den Positionierungsstift. Und wenn wir kompilieren,
sollten wir diesen Sound
alle zwei Sekunden hören .
Einfach so. Wenn wir zu unserem
Third-Person-Blueprint zurückkehren hier auf den Abwärtspfeil klicken, werden
Sie sehen, dass wir sowohl einige neue Optionen als
auch einige der gleichen
aus unserem vorherigen Knoten
haben . Wir können eine Rotation festlegen,
wenn wir möchten. Wir können auch
die Lautstärke
und die Startzeiten wie zuvor ändern . Aber jetzt haben wir eine Option für
die Einstellung der Dämpfung. Wenn Sie dieses Feld nun leer lassen, wird die
Dämpfungseinstellung verwendet , die Sie innerhalb des Würfels
festgelegt haben. Also, wenn Sie sich daran erinnern,
dass es hier eingestellt , ist das
eine Art Override-Optionen. Vielleicht wollten Sie dieses Mal, wenn
Sie den Sound abspielen, unterschiedliche
Entfernungseinstellungen verwenden, um zu ermitteln, wie weit der
Ton gehört werden kann. Das ist also eine Art
Override-Einstellung. Wenn Sie die Klangbetätigung
verwenden, möchten
Sie sie normalerweise innerhalb der Sound-Cues platzieren, im Gegensatz
zu den Knoten hier. Dann haben wir wie zuvor auch hier
die Parallelitätseinstellungen und unsere
Besitzer-Schauspieler-Pins. Nun, die beiden Knoten, die
wir bisher verwendet haben, wurden nur auf Knoten
reduziert und sie
eignen sich hervorragend, um einfach einen Sound abzuspielen
und ihn zu vergessen. Aber vielleicht möchten wir in der Lage
sein,
einen Sound abzuspielen und diesen Sound
oder Lupus anzuhalten oder ihn erneut abzuspielen. Es gibt also einige andere
Knoten, die wir dafür
verwenden können , wenn wir
jetzt aus unserem Sound
herausziehen und in C nach
Spawn-Sound suchen , dass wir Spawn-Sound 2D,
Spawn-Sound am Ort
und Spawn-Sound
haben angebracht. Jetzt werde ich
den Spawn-Sound nicht mehr 2D behandeln ,
da er im Grunde dasselbe ist
wie unsere vorherige 2D-Note. Aber was wir tun werden, ist
den Spawn-Sounder-Standort zu verwenden. Wenn wir das jetzt erstellen, können
Sie sehen, dass
wir alle Optionen haben ,
die wir zuvor hatten,
abgesehen davon, dass wir
eine neue namens auto destroy haben. Das bedeutet, dass
der Sound, den wir eingestellt haben, sobald die Wiedergabe
beendet
ist, diese Soundkomponente automatisch zerstört wird. Je nachdem, was Sie mit diesen Sounds
vorhaben, möchten Sie dies möglicherweise ausschalten. Vielleicht hast du vor, es zu wiederholen oder anzuhalten und es später erneut
abzuspielen. Sie würden diese Einstellung wahrscheinlich ausschalten wollen. Jetzt können Sie sehen, dass wir
auch eine Ausgabe haben, und dies ist eine
Audiokomponentenausgabe, wir ihren Sound steuern können
. Wenn wir uns also in die Länge ziehen, können
wir dies zu einer Variablen heraufstufen. Wir können also die Option
promotet Variable auswählen , die eine neue Variable
namens Audiokomponente erstellt. Und wir können uns einen Namen setzen. Also stellen wir es so ein, dass es eine solche
Soundkomponente sagt. Und jetzt können
wir mit dieser
Soundkomponentenvariablen viele
verschiedene Funktionen aufrufen, um den von uns eingestellten
Sound tatsächlich zu steuern. Wenn wir also unsere
Soundkomponentenvariable
hier bekommen , ziehen wir uns heraus, wir können Dinge wie Pause
selbst tun , damit wir nach Set Pause
suchen können. Und wir können einstellen, ob
der Ton
angehalten wird oder ob wir die Lautstärke unseres Sounds
ändern möchten, wir können die Lautstärke herausziehen und
einstellen. Wir könnten die Lautstärke ändern und mit diesem Knoten
multiplizieren. Und wenn wir
mit unserer Soundkomponente fertig sind, wollten wir sie
vielleicht einfach zerstören. Wir können die
Suche nach Destroy einfach in die Länge ziehen, und wir könnten hier den
Destroy-Komponentenknoten verwenden. Jetzt gibt es tatsächlich
einige Einstellungen , die wir mit
unserer Soundkomponente verwenden können. Wenn Sie nach Audio
suchen, finden
Sie tatsächlich alle audiobezogenen Funktionen
,
die mit
unserer Soundkomponente verwendet werden können. Der nächste Knoten, den wir behandeln werden ist der angehängte Sound an Knoten. Wenn wir
diesen Code also vorerst löschen, verschieben
wir ihn etwas nach oben damit wir etwas mehr Speicherplatz haben. Wir ziehen uns aus unserem
Soundereignis zurück und suchen nach Spawn-Sound. Und wir wollen den angehängten
Spawn-Sound hier. Jetzt gibt
es uns statt eines Standorts tatsächlich eine Komponente , an die wir uns selbst anhängen können. Dies ist nützlich für Dinge
wie vielleicht ein Auto, wenn Sie ein Motorgeräusch hatten, möchten
Sie tatsächlich, dass
es dem Auto folgt. Sie möchten
diesen Sound also an eine Komponente anhängen. Wir könnten es anhängen, um zu sagen, die Mesh-Komponente
unseres Charakters hier. Wir könnten das anschließen
und jetzt
folgt der Sound zusammen mit
unserer Mesh-Komponente. Und natürlich
können wir unseren Sound
so einstellen , dass wir dies so einstellen können, dass wir hier
auf die Schaltfläche Q klicken. Wenn wir nun auf den
Abwärtspfeil hier auf
unserem Spawn-Knoten klicken unserem Spawn-Knoten erhalten wir
tatsächlich einige neue Optionen. Ich schiebe die einfach hoch. Wir haben also ein bisschen mehr Abstandhalter. Wir können auch einen Socket einstellen, um unseren Sound
anzuschließen. Wenn unser Netz also sagen würde, eine Steckdose auf seinem Kopf, können
wir
hier den Socket-Namen setzen und ich würde tatsächlich an diesen Socket hängen und zusammen mit unserem Mesh
folgen. Als Nächstes haben wir die Standort
- und Rotationseinstellungen. Diese machen je nach
Einstellung des
Standorttyps hier etwas
anderes . Wenn dies also so eingestellt ist, dass der relative Versatz
beibehalten wird, würden wir sagen, setzen Sie
unseren Z-Wert auf 50. Nun, momentan
hängt unser Sound an unserem Mesh. Also, wenn wir zu unserem Viewport gehen, ist die Position der Netze genau
hier und dieser Drehpunkt. Da wir also 15 hinzugefügt haben, würde
der Z-R-Sound am Netz
haften, aber er würde ungefähr diese Höhe haben, 50 Zentimeter über
der Mesh-Position. Wenn wir als Nächstes zu unserem Knoten zurückkehren, haben
wir die Möglichkeit, die Wirbelposition
beizubehalten. Nun, wenn ich das
bei sagen lasse, Nullen sind 0, der r-Sound würde
in der Mitte
der Welt erscheinen und sich dann an unser Charakter-Mesh
anhängen. Je nachdem, wie weit
unser Charakternetz vom Mittelpunkt
der Welt entfernt war, war es
sicher zum Beispiel 500 Zentimeter in
x-Richtung. Der Sound blieb immer 500 Zentimeter in der x-Richtung
von unserem Charakter entfernt, aber er folgte immer noch unserem Charakter, während er sich bewegte. Dann haben wir
zum Schluss zwei Optionen. Nun gibt es zwei davon. Es spielt keine Rolle,
welches du für Sounds auswählst. also am Ziel eingerastet sind, bedeutet dies
nur, dass der Sound an den Wurzeln des Netzes befestigt
ist. Genau hier auf unserem Netz ist
eine weitere neue Einstellung, die dieser Knoten hat der Stopp, wenn er
an destroyed angehängt wird. Und das
bedeutet im Grunde, dass unser Sound, wenn das angekreuzt ist, aufhören zu spielen, wenn
unser Mesh zerstört wird. Wenn dies
abgehakt ist, wird der Sound von r
weiter abgespielt, auch wenn das
Mesh zerstört wird. Dann haben wir unten die gleichen Einstellungen, die wir für unsere vorherigen Knoten
hatten , die ich bereits durchgemacht habe. Und natürlich haben wir einen Ausgangsknoten
der Audiokomponente. Und wir können unsere
Audiokomponentenvariable setzen , die wir zuvor erstellt haben. Und wir können all die
Funktionen verwenden , die ich
Ihnen gerade mit dieser
Soundkomponentenvariablen gezeigt habe. Jetzt können wir den Blaupausen auch
Audiokomponenten hinzufügen. Wenn wir also zum
Bedienfeld „Komponenten“ gehen und nach Audio suchen, können
Sie sehen,
dass tatsächlich Audio und dann in Klammern der Kameraauslöser angezeigt wird. Für mich ist der Grund dafür , dass ich, wenn ich
zum Content Browser gehe, das tatsächlich ausgewählt habe. Wenn ich das also abwähle, kehren
wir
hier zu unserer Komponente zurück und suche nach Audio. Wir sollten nur den
Audionamen sehen, damit wir darauf klicken können. Dadurch entsteht eine neue
Audiokomponente. Und diese Komponente wird automatisch
an unseren Charakter gebunden . Und drüben im Detailbereich können
Sie all
die Dinge einstellen, die wir zuvor auf
diesen Knoten gesagt haben, wir können den Sound einstellen
, den wir verwenden möchten. Und das kann eine Welle, eine Warteschlange oder ein Metallgeräusch sein. Damit wir
unseren neuen Metro-Sound wählen können. Und das wird
mit unseren neuen Audiokomponenten einwandfrei funktionieren . Wir können Dinge
wie die Lautstärke einstellen, die Tonhöhe, wir können
die Betätigungseinstellungen anpassen. Und wir können
diese Audiokomponente genauso steuern wie unsere
Audiokomponente hier unten. Wir können uns hinziehen, wir können es zum Beispiel
pausieren. Wir können es entfernen
, wenn wir wollen. Wir könnten eine Zerstörung gebrauchen. Und es verhält sich
genauso wie unsere Soundkomponentenvariable
, die wir zuvor verwendet haben. Jetzt können wir diese
Audiokomponente testen. Ich werde
diesen Code hier einfach trennen , damit er nichts
abspielt. Und wenn wir
es kompilieren und auf „Play“ klicken, werden
Sie sehen, wie unser
Audiosound
im Stan Lee abgespielt wird
, da diese Komponente Teil unseres Charakters ist. Vielleicht möchten Sie nicht, dass
der Sound sofort abgespielt wird, Sie möchten ihn später abspielen.
Was wir tun können, ist
zu unserem ThirdPersonCharacter zurückzukehren, unsere Audiokomponente
auszuwählen nach unten zu auto zu scrollen
aktiviere und hake das ab. Wenn wir jetzt kompilieren
und auf „Play“ klicken, unser Sound nicht abgespielt. Aber wir könnten Code hinzufügen,
um diese Komponente zu aktivieren. Wir könnten also mit der rechten Maustaste
nach Eingaben suchen. Wir können
beispielsweise nach Eingabeereignis eins suchen. Und wenn ich
eine meiner Tastaturen drücke, möchte
ich meine Sounds aktivieren, damit wir die Audiokomponente ziehen und die Aktivierungsnote hier aktivieren und
verwenden können. Stecken Sie das in unsere Presse. Und jetzt können wir
kompilieren und auf Play klicken. Und wenn ich
eins drücke, klingt der Ton abgespielt. Jetzt kann ich das jedes
Mal wieder aktivieren ,
indem ich einfach eins drücke. Das deckt ziemlich genau
die wichtigsten Möglichkeiten ab, wie Sie Sounds
mithilfe von Blaupausen abspielen
können. Jetzt können wir auch Sounds
in Animationen abspielen. Was wir also tun werden, ist
X out of plan Editor. Ich gehe zurück zum Inhaltsordner,
zum Ordner „Charaktere“, dann
zu den Schaufensterpuppen und
dann zu den Animationen. Quinn, wir
eröffnen hier einen Lauf für die Animation. Und hier sehen Sie, dass
wir eine Benachrichtigungsleiste haben. Benachrichtigungen sind jetzt im Grunde genommen
Codeteile, die zu einem bestimmten
Zeitpunkt in einer Animation ausgeführt werden
können. Wenn wir also mit
der rechten Maustaste auf unsere Benachrichtigungsleiste klicken, können
wir eine neue Benachrichtigung hinzufügen und es gibt einige
eingebaute hier, aber wir werden den Play-Sound
verwenden. Wenn wir das hinzufügen,
können wir dies an
einen beliebigen Punkt in der
Animation ziehen , sagen wir hier. Und jetzt, wann immer die
Animation abgespielt wird, wird
an dieser Stelle
der Ton wiedergegeben, den wir gesessen haben. Und hier oben im Detail-Panel können wir uns selbst einstellen. Das kann also wieder
ein Wave-Sound, ein Sound-Cue
oder die neuen Metersounds sein. So können wir diese Zelle
für unseren Kameraverschluss auswählen, oder wir könnten sie auf
unseren neuen Metro-Sound einstellen. Und das wird einfach gut funktionieren. Wir haben auch Einstellungen für
Dinge wie die Lautstärke, und wir können
einschalten, ob
der Sound dem Mesh folgt oder nicht . Dies kann sehr wichtig sein,
wenn du einen Sound machst , dem du
zusammen mit dem Charakter folgen willst, du würdest es übernehmen wollen. Wenn wir jetzt zu unserem
Metro-Sound hier rüber ziehen, schauen wir mal. Ich spiele immer dann, wenn die
Animation diesen Punkt erreicht. Wir können auch mehrere Sounds hinzufügen,
Benachrichtigungen, damit wir mit der
rechten Maustaste klicken können, und ein weiterer
Klick-Klick-Sound. Und jetzt haben wir einen
zusätzlichen Platz und benachrichtigen uns. Wir können einen ganz
anderen Ton hinzufügen,
sagen wir, die Kamera hat scharf aufgenommen. Jetzt, wo wir
an diesem Punkt angelangt
sind, haben wir die Kamera im Spiel aufgenommen. Und dann, wenn wir an diesen Punkt
kommen, sind Tonspiele gemeint. Jetzt sind wir bereit
, das im Spiel zu testen. Wir gehen zu
unserer Karte und klicken auf „Spielen“. Wenn ich jetzt vorwärts renne, sollten
wir unsere
Klänge zum Zeitpunkt
der Animation abspielen hören , wie
wir da saßen. Also, das wird
ziemlich alles für diese Lektion sein. Hoffentlich verstehen Sie jetzt ein bisschen mehr darüber,
wie wir
Sounds und die Engine mithilfe von
Blaupausen und auch
Animationsbenachrichtigungen abspielen können Sounds und die Engine mithilfe von . Nur als Randnotiz fragen Sie sich
vielleicht, ob Sie
Sound-Cues oder Metta-Sounds verwenden sollten. Das hängt davon ab, wann du dir dieses Video ansiehst. Derzeit befindet
sich Metal-Sounds in der Beta-Phase, und deshalb müssen wir
zum Plugin-Menü gehen und es aktivieren. Aber wenn Sie sich
diese Lektion ansehen und neben
dem Metal-Sound-Plugin
nicht mehr Beta steht, sollten
Sie wahrscheinlich
das Metro-Soundsystem verwenden.
38. Zusätzliche Kursinhalte (Partikeleffekte): Hallo zusammen. In dieser Lektion lernen
wir, wie man Niagara-Partikeleffekte mithilfe von Blaupausen erzeugt. Bevor wir also für diejenigen unter
Ihnen
beginnen , die
in der vorherigen Lektion gefolgt sind, habe ich eine neue
Third-Person-Vorlage
erstellt, damit wir einen
Neuanfang für diese Lektion haben. Jetzt
enthält die
Third-Person-Vorlage eigentlich keine Niagara-Partikeleffekte, die wir verwenden können. Wir werden also
eine kostenlose Version vom Marktplatz verwenden. Ich werde das Niagara
Footstep VFX Pack von
Side Arm Studio verwenden , das völlig
kostenlos ist . Sie können
es also einfach auf dem Marktplatz abholen, Zu Projekt hinzufügen
auswählen und dann Ihr
Projekt auswählen und es wird lade automatisch
alles für dich herunter. Sobald der Download
abgeschlossen ist, sollten
Sie einen neuen Ordner und
Ihren Inhaltsbrowser finden , zu
denen wir gehen können. Und hier sind all
die Partikeleffekte, die
wir gerade heruntergeladen haben. Also gehen wir zum Ordner
Niagara Effects und gehen zu Partikelsystemen. Und dann können Sie hier
sehen, dass wir alle
unsere Niagara-Partikeleffekte haben . Jetzt können wir eine
davon auswählen, um einen genaueren Blick darauf zu werfen. Ich mache zum Beispiel den
Dreckslinger auf. Und ich bringe das einfach
von meinem anderen Bildschirm her. Das Kompilieren kann einen Moment dauern, also lass es das tun,
bevor wir eine Vorschau sehen können. Jetzt ist meins fertig mit dem Kompilieren. Wenn ich ein bisschen hineinzoome, können
Sie sehen, dass wir hier ein
perfektes Schmutzpartikel
haben. Jetzt werden wir
den Niagara-Editor in dieser
Lektion nicht behandeln , nur weil es ein riesiges System ist, auf das sich
ein ganzer Kurs nur
konzentrieren könnte . Aber wir werden diese neuen
Effekte
verwenden, die wir in unser Projekt
importiert haben , und wir werden
sie während des Spiels erzeugen. Wir beginnen also mit
dem Third-Person-Charakter. Also gehen wir zu
unserem Third-Person-Ordner, dann Blaupausen als
ThirdPersonCharacter und erben
, der einen Timer für
Begin Play
einrichten wird , um
unseren Partikeleffekt zu erzeugen. Also klicken wir mit der rechten Maustaste. Also vergiss einfach, fang an zu spielen. Ziehen Sie sich von hier aus und
wir machen einen Timer für sie. Wir ziehen uns
aus dem Event-Pin heraus und suchen nach einem benutzerdefinierten Ereignis. Und wir nennen diesen
Spawn-Effekt so. Und wir werden es so einstellen, dass es alle 1 Sekunde
spawnt. Und wir wollen, dass das wiederholt wird. Also nehme
ich es mit Looper auf. Jetzt gibt es ein paar
verschiedene Knoten, die Niagara-Partikeleffekte erzeugen
können. Wir werden uns
in dieser Lektion auf
die beiden wichtigsten konzentrieren . Wenn wir also den Spawn-Effekt verlassen
und nach einem Spawn-System suchen, können
Sie sehen, dass
wir vier Knoten haben, können
Sie sehen, dass
wir vier Knoten haben,
aber wir werden uns das Spawn-System am
Standort und das dazugehörige
Spawnsystem
ansehen . Nun der Unterschied
zwischen diesen beiden:
Beachten Sie, dass das
Spawn-System
am Standort unseren Effekt nur an einem bestimmten Ort
spawnt und dort bleibt. Während das
Spawn-System angeschlossen ist, können
wir das verwenden, um
unseren Partikeleffekt an etwas
anzuhängen . Und wenn sich das bewegt,
folgt es zusammen mit diesem Objekt. Wir beginnen also mit
dem Spawn-System bei der Ortsnotiz
und erstellen es. Jetzt haben
wir von oben beginnend eine Systemvorlage. Das ist der Niagara-Effekt , den wir
mit diesem Knoten erzeugen werden. Also können wir darauf klicken. Sie können sehen, dass
ich alle meine Effekte aus unserem Footstep-Asset-Paket habe. Wir können also eine davon auswählen. Ich wähle hier
den Graseffekt aus. Und das bedeutet, dass jetzt,
wenn wir diesen Knoten
ausführen, der
Graspartikeleffekt erzeugt wird. Vielleicht möchten Sie einige
Shader kompilieren, lassen Sie es einfach tun. Dann haben wir als Nächstes den Standort. Dies ist der Ort, unser Partikeleffekt erzeugt
wird. Wir haben die Rotation, das ist die Rotation, es
wird das spawnen. Und dann haben wir auch
die Waage. Jetzt haben wir automatische Zerstörung. Das wird nun
unsere Partikeleffekt-Komponente zerstören unsere Partikeleffekt-Komponente wenn sie mit der Wiedergabe
ihres Partikeleffekts fertig ist. Normalerweise
möchten Sie dies also wahrscheinlich aktiviert haben. Wir haben auch die automatische Aktivierung, was im Grunde bedeutet, dass der Partikeleffekt automatisch
abgespielt wird, wenn wir
ihn spawnen . Und wir haben die Pooling-Methode. Beim Pooling
speichert
die Engine im Grunde genommen eine Menge
deaktivierter Partikeleffekte. Und wenn wir ihm dann sagen, dass
er einen Partikeleffekt erzeugen soll, kann
er einen deaktivierten wiederverwenden,
anstatt einen neuen zu erzeugen. Nun zu diesem Beispiel, bei dem dies als none belassen werden
kann. Jetzt werden wir
unseren Partikeleffekt an den Orten
unserer Charaktere erzeugen . Also werden wir einfach den Standort des Schauspielers
ermitteln. Und
das fügen wir hier direkt in unsere Ortsvariable ein. Ich lasse Rotation
und Skalierung so wie sie sind. Jetzt können wir
das kompilieren und ausprobieren. Also drücken wir auf „Spielen“. Und wenn wir uns hier die Mitte unserer
Charaktere ansehen ,
weil das der Schauspieler-Standort unseres
Charakters ist, können
Sie sehen, dass alle 1 Sekunde
ein Partikeleffekt abgespielt wird. Wenn ich jetzt anfange mich zu bewegen, werden
Sie sehen, dass die
Partikeleffekte dort
bleiben, wo sie waren,
als sie gespawnt wurden. Es hängt nicht wirklich mit
unserem Charakter zusammen. Was wir jetzt tun können, ist einen
Blick auf den
angehängten Knoten zu werfen. Stattdessen. Dadurch wird unser
Spawnsystem am Standort gelöscht. Und wir ziehen uns
aus dem Spawn-Effekt heraus und suchen nach einem Spawn-System. Wir wollen das angehängte
Spawn-System verwenden. Nun hat dies viele der gleichen Einstellungen wie unser vorheriger Knoten, aber tatsächlich hat er auch ein
paar neue. Von oben beginnend können
wir also unseren Niagara-Effekt
und die Systemvorlage festlegen. Diesmal können wir ein anderes pflücken, vielleicht die Blätter. Wir können auch eine
angeschlossene Komponente liefern. Auf diese
Weise können wir nun angeben
, an welche Komponente wir unseren Partikeleffekt
anhängen möchten. Wir könnten die
Mesh-Komponente hier greifen, und wir können sie direkt
in die
beiden angeschlossenen Komponenten stecken . Dadurch wird unser
Partikeleffekt an unserer Mesh-Komponente
befestigt. Wenn unsere
Mesh-Komponente Sockets hätte, könnten
wir hier den
Socket-Namen angeben und das würde
dazu führen, dass die
Partikeleffekte an diesen Socket
angehängt werden . Jetzt haben wir den
Standort und die Rotation. Diese bewirken etwas
anderes, je nachdem, auf welchen
Standorttyp unser Standorttyp eingestellt ist. Wenn es so eingestellt ist, dass der
relative Versatz beibehalten wird, wenn wir zum Viewport gehen, wenn wir diesen Wert festlegen würden, sagen wir 250 im Z, was passieren würde, wenn unsere
Partikeleffekte bei 0 erzeugt
würden
Standort unseres Netzes. Das ist also der Punkt hier,
an dem sich der Pivot befindet. Es würde seine Höhe um 50% erhöhen. Es wäre also immer noch am Netz
befestigt, aber es wäre 50 über
dem Drehpunkt des Netzes. Als nächstes folgt die Option
Wirbelposition beibehalten. Wenn wir dies also in die Einstellung der
Tastaturposition ändern, wird jetzt der Ort,
an dem die Partikeleffekte erzeugt werden, passieren wo die
Partikeleffekte erzeugt werden. Und dann befestigen wir
es am Netz. Wenn Ihre Charaktere also sagen 500 Zentimeter vom Mittelpunkt
der Welt entfernt, würde der Partikeleffekt an
der Figur 500
Zentimeter entfernt sein . Und würde den Abstand
von 500
Zentimetern von dem Charakter
, an dem er befestigt ist, beibehalten . Zuletzt haben wir den
Snap zum Ziel. Dies bewirkt, dass
der Partikeleffekt an dem einrastet, an dem
wir ihn anhängen. Wenn wir
es also an unserem Netz befestigen, würde
es hier direkt
an seinem Drehpunkt befestigt werden. In diesem Beispiel behalten
wir die Einstellung „
Am Ziel ausrichten“ bei, damit unser Partikeleffekt
genau auf unserem Charakternetz erscheint. Und danach haben
wir einfach die gleichen Einstellungen
wie zuvor. Wir haben Auto Destroy, eine automatische Aktivierung und dann haben
wir auch die
Pooling-Methode. Ich werde es auch mit destroyed aufnehmen weil
ich tatsächlich möchte, dass
mein Partikeleffekt
zerstört wird, nachdem er mit dem Abspielen
fertig ist. Jetzt können wir das also noch einmal testen
. Wir können auf Play klicken und
Sie können sehen, dass unser Partikeleffekt jetzt
an unserer Mesh-Position abgespielt wird, anstatt in
der Mitte unseres Charakters. Jetzt möchten Sie vielleicht in der Lage
sein, abhängig von einer Variablen zu steuern ,
welcher
Partikeleffekt
abgespielt wird . Was wir also tun können,
ist hier zu
unserem Third-Person-Charakter zurückzukehren , und wir werden eine neue Variable
erstellen , die wir in
unsere Systemvorlage einbinden können , um
dem Knoten mitzuteilen , welche Art von
Effekte, die wir spielen wollen. Also erstellen wir eine neue Variable, ich nenne meinen Effekt. Wir können den
Variablentyp in das Niagara-System ändern. Wir wollen die
Niagara-Systemobjektreferenz, dann kompilieren wir und
jetzt in der Klassenstandardeinstellung. Sie können also sehen, dass wir
jeden unserer Niagara-Effekte auswählen können. Ich kann sagen, Eis zum Beispiel. Dann ziehen wir das einfach
hinein und verbinden es mit unserer Systemvorlage und kompilieren
es, bevor wir es erneut testen .
Wir lassen die
Shader einfach fertig kompilieren. Das ist jetzt vorbei.
Also können wir auf „Spielen“ klicken. Sie können sehen, dass wir jetzt sehen können, wie unser Eispartikeleffekt anstelle unserer Blätter
spielt. Jetzt sind alle Partikeleffekte, die wir verwendet haben, ziemlich kurz, aber vielleicht arbeiten
Sie in Zukunft mit einem, der an einem bestimmten Punkt lange
abgespielt wird, vielleicht möchten Sie
ihn für was auch immer zerstören Grund. Das kannst du auch machen. Wenn wir zum
ThirdPersonCharacter zurückkehren, haben
wir hier eine Ausgabe, und dies ist eine Komponente des
Niagara-Partikelsystems. Auf diese Weise können wir
steuern, was dieses Partikelsystem tun soll,
nachdem wir es erzeugt haben. Damit wir herausziehen können, können wir
die Promoter-Variablenoption verwenden , die nur
eine neue Variable mit
dem
Niagara-Partikelsystem-Komponententyp erstellt eine neue Variable mit , wie Sie hier sehen können, nenne ich
einfach meine und so
einen Effekt hervorgebracht. Und wir werden kompilieren. Dann
können wir mit dieser Variablen auf einige
nützliche Funktionen zugreifen. Wenn ich also die Variable erhalte, können
wir sie herausziehen und
die Pause verwenden. Wir können Setpost benutzen. Und auf diese Weise können wir
den Partikeleffekt pausieren oder fortsetzen ,
je nachdem, welche
booleschen Werte Sie hier auf der Notiz gesetzt haben.
Wir können feststellen, ob
es sich derzeit um Ports handelt oder nicht. Wir können also angehalten werden,
weil solche Berichte angehalten werden und
das wird zurückgegeben ob der
Partikeleffekt derzeit angehalten ist oder nicht. Und wenn wir dann die Partikeleffekte
zerstören wollen, können
wir die Suche nach Destroy einfach in die Länge ziehen. Wir können hier den
Destroy-Komponentenknoten verwenden. Jetzt können wir auch
Partikeleffekte als
Komponenten hinzufügen , anstatt sie mit einem Knoten spawnen
zu müssen. Wenn ich also sage, dass ich meinem Mesh hier
einen Partikeleffekt
hinzufügen möchte, könnte ich die
Suche nach Niagara hinzufügen. Wir könnten eine
Niagara-Partikelsystem-Komponente hinzufügen. dieses Partikelsystem ausgewählt ist, können Sie hier sehen, wir ein
Partikelsystem festlegen können, das wir verwenden möchten. So sagen wir zum Beispiel den Kies, wenn wir zu unserem Viewport
in C gehen , als ich in die Ansicht
ging, aber es gab uns eine kurze Vorschau. Aber wir können den
Ort festlegen und er
zeigt uns tatsächlich , wie er aussehen wird wenn er
an diesem Ort abgespielt wird. Dies verhält sich genauso wie ein angehängter Partikeleffekt. Also das ist jetzt
an unsere Mesh-Komponente angehängt. Wo immer ich also die vermaschte
Komponente hinführt, wird
unser Partikeleffekt folgen. Und wir können diese Komponente auch
auf die gleiche Weise in
unserem Ereignisdiagramm
verwenden . Wenn wir also unsere
Niagara-Komponente bekommen, können
wir das in
die zerstörte Komponente stecken. Wenn wir
diese Komponente zerstören wollten. Wir können auch die
Porenknoten verwenden, die ich Ihnen gerade mit unserer
Niagara-Komponente
gezeigt habe. Eine andere Möglichkeit,
Partikeleffekte zu erzeugen , ist die Verwendung
des Animationssystems. Wenn wir jetzt
zu einer Animation übergehen, gehe
ich zu Charakteren, Schaufensterpuppen als zu zwei Animationen. Und wir gehen in
den Quinn-Ordner ,
weil das
unser Charakter ist. Und wir werden die
Rumford-Animation hier öffnen. Jetzt, inhalieren, können wir
Benachrichtigungen hinzufügen, die wie
Code-Bits sind , die an einem
bestimmten Punkt einer Animation ausgeführt werden. Diese ermöglichen es uns, Sounds oder
Partikeleffekte abzuspielen , während
unsere Animation genau zu dem
Zeitpunkt
abgespielt wird , zu dem wir ein Partikel
oder einen Soundeffekt abspielen
möchten. Was wir also tun können, ist hier mit der
rechten Maustaste auf unsere
Benachrichtigungszeitleiste zu klicken. Gehen Sie zu Benachrichtigung hinzufügen und Sie können sehen, dass wir hier
einige integrierte Benachrichtigungen haben . Jetzt werden wir den Partikel-Effekt „Niagara
spielen“ verwenden . Also wählen wir das aus
und das erzeugt uns einen neuen Partikeleffekt. Und wir können dies
mitziehen, damit es während der Animation jederzeit
abgespielt wird. Also könnte ich meine hier
auf sagen 40 setzen. Damit benachrichtigt die Auswahl. Sie können hier oben sehen, dass wir jedes Niagara-System
einrichten können. Also könnte ich das als unseren Partikeleffekt festlegen . Wenn wir jetzt
zu unserer Benachrichtigung hier gehen, sollten
Sie ein
Schmutzpartikeleffekt-Paar sehen. Wenn dies bei Ihnen nicht der Fall ist, möglicherweise ein kleines
Pop-up angezeigt
, das besagt, dass es Shader kompiliert. Lassen Sie es
einfach zu Ende gehen , das besagt, dass es Shader kompiliert und dann sollten Sie sehen, wie Ihre
Partikeleffekte so abgespielt werden. Derzeit
spielt der
Partikeleffekt die Wurzel der Charaktere ab, die sich genau hier unten befindet. Aber wenn wir wollten, könnten wir einen anderen Ort
festlegen. Also könnten wir den
Standort-Offset hier verwenden, um sagen wir,
eine 50 und die Höhe hinzuzufügen . Wenn wir jetzt
die Partikeleffekte spielen, können
Sie sehen, dass es mehr bis
zu den Knien des Charakters reicht. Jetzt. Wir können auch den
Rotationsversatz festlegen, bei dem es sich um die Rotation der
Partikeleffekte handelt. Und wir können auch die Skala festlegen. Wir können
den Partikeleffekt auch an
einer Pfanne oder an einem Knochen anbringen . Wenn ich zum Beispiel meinen Schmutzpartikeleffekt am Kopf anbringen
möchte, könnten
wir die Hüfte des Kopfknochens einstellen und den Kopf auswählen. Und ich werde den
Positionsversatz auf 0 und z setzen. Wenn wir
jetzt
den Partikeleffekt ausführen, werden
Sie sehen, dass der
Partikeleffekt jetzt an der
Kopfknochenposition
läuft. Wir können auch mehrere
Partikeleffekte hinzufügen. Wenn wir wollten, könnten wir
einfach mit der rechten Maustaste auf Hinzufügen klicken, es
benachrichtigen und wir können
eine weitere Niagara-Benachrichtigung hinzufügen. Und hier können wir das
auf einen anderen Ort setzen. Wir können einen anderen
Partikeleffekt einstellen, um die Eispartikeleffekte zu speichern. Und wir können beide
in
dieser einen Animation abspielen lassen und sehen, dass sie gerade hier
abgespielt wird. Jetzt nur ein kurzer Tipp bei der
Arbeit mit Benachrichtigungen. Wenn du hier nur einen Balken hast, kann
es ziemlich verstopft werden, wenn du viele
Benachrichtigungen und eine Animation hast. Sie können also
hier
auf das Drop-down-Menü klicken , um eine Benachrichtigungsspur hinzuzufügen. Sie erhalten nicht nur eine neue
Benachrichtigungsspur, zu der Sie Benachrichtigungen
hinzufügen können , wie zum Beispiel einen anderen
Partikeleffekt. Und es funktioniert
genauso wie das Hinzufügen zum ersten Titel. Es hilft dir nur,
sie ein bisschen besser zu organisieren. Jetzt haben wir all diese leistungsstarken Effekte
in unserer Animation. Wir können tatsächlich überprüfen, ob diese im Spiel gespielt werden. Was wir also tun, ist zu sparen, wir kehren hier zu unserem
Third-Person-Charakter zurück. Und ich werde tatsächlich
die Niagara-Komponente löschen , die wir gerade hinzugefügt haben, und wir werden die
Verbindung trennen. Ich fange an zu spielen Knoten. Jetzt spawnt unser ThirdPersonCharacter überhaupt keine
Partikeleffekte mehr. Und wir können
das testen und spielen. Wenn wir jetzt auf „Spielen“ klicken, sollten
wir in der Lage sein,
herumzulaufen und
die Partikeleffekte zu sehen , die
wir unserer Animation hinzugefügt haben. Sie können sehen, dass die anderen
Partikeleffekte abgespielt werden und unsere
ICER-Partikeleffekte ebenfalls abgespielt werden. Ein bisschen schwer zu
erkennen, aber man kann sehen, wie es dort unten zu den Füßen
läuft. Das ist also nur ein grundlegender
Überblick darüber, wie man Animationen
spawnt und
Niagara-Partikeleffekte hinzufügt. Wenn Sie sich für VFX
interessieren und wissen, wie mit dem Niagara-System neue Partikeleffekte
erzeugen können, empfehle
ich auf jeden Fall, Kurse zu lesen, die sich speziell
auf dieses System konzentrieren.
39. Widgets (Übersicht): Hallo zusammen. In diesem Abschnitt des Kurses werden
wir uns Widgets ansehen. Nun Widgets oder die
Art von Blaupause, die wir verwenden, um dem Bildschirm
unserer Spieler eine Benutzeroberfläche hinzuzufügen, Dinge wie Menüsysteme, Inventarsysteme, Gesundheitsbalken. All dies würde
normalerweise mit Widgets gemacht werden. Nun, das ist ein ziemlich
großes System für sich. Sie könnten wahrscheinlich
einen ganzen Kurs nur für Widgets erstellen. In diesem Abschnitt werden wir also nur einige der Grundlagen durchgehen. Sie lernen, wie Sie neue Widgets
erstellen, ihre Layouts bearbeiten Dinge wie
Variablen und Funktionen binden. Zu Beginn dieser Lektion werfen
wir nur einen Blick auf
das Layout
der Widget-Benutzeroberfläche. Wir werden auch lernen,
wie man tatsächlich
ein Widget erstellt und es dann
zum Player-Bildschirm hinzufügt. Also fangen wir damit
an, dass wir ein neues Widget erstellen. Dazu klicken wir einfach
mit der rechten Maustaste in unseren Inhaltsbrowser, suchen
dann die Benutzeroberfläche, öffnen und gehen
zu Widget-Blueprint. Und wir werden hier
das allgemeine Benutzer-Widget auswählen. Und wir werden es bp
underscore, HUD, so nennen. Jetzt müssen wir tatsächlich Code
schreiben, um zu spawnen, der heiß ist, und ihn dann zu unserem Spielerbildschirm
hinzufügen. Also werde ich das
im ThirdPersonCharacter
Blueprint machen , der uns von
meinem anderen Bildschirm hierher bringt. Sie können dies jetzt auch innerhalb
des Player-Controllers
tun , wenn Sie möchten. Ich mache es nur innerhalb
des ThirdPersonCharacter ,
weil das die Blaupause ist, die
ich in dieser Vorlage habe. Wir klicken also rechten Maustaste und
suchen danach, um mit dem Spielen zu beginnen. Und davon
ziehen wir uns in die Länge und
suchen nach Widget erstellen. Und das wird
uns diesen neuen Knoten hier geben. Und es ist ein spezieller Knoten, der
entworfen wurde, um Widgets zu spawnen. Als Erstes legen
wir
also eine Klasse und wählen unser neues BP-HUD aus, das wir gerade erstellt haben. Jetzt müssen wir auch einen besitzenden Player
bereitstellen, und dies ist ein
Player-Controller-Typ. Was wir also tun, ist, mit der
rechten Maustaste zu klicken und nach Gap Player Controller zu
suchen . Wir können das einfach direkt
in unser Eröffnungsgebet stecken. Jetzt spawnen wir also oder BP HUD, aber wir fügen es noch nicht wirklich
zum Spielerbildschirm hinzu . Was wir also zuerst tun müssen, ist eine Variable zu
erstellen, um
einen Verweis auf unser HUD zu speichern. Wenn wir also später darauf
zugreifen möchten, können
wir einfach
aus dem Rückgabewert ziehen, auf die Variable promotet klicken,
und das wird eine heilige neue
BP-HUD-Variable
erstellen. Ich nenne einfach mein HUD. Und wir können das hier hochziehen. Jetzt. Wir ziehen uns aus der Ausgabe des gesetzten Knotens
heraus und
suchen nach Add to Viewport. Und jetzt wird dieser Knoten zu unserem Player-Viewport
hinzugefügt. Jetzt auf Begin Play erstellen
wir unser bp HUD,
sagte, es ist Owning Player,
um unsere Spieler zu kontrollieren. Wir setzen die Variable HUD nur den Fall, dass wir später darauf
zugreifen möchten. Und dann fügen wir unseren Kopf
zu unserem Spielerbildschirm hinzu. Aber wenn wir jetzt auf „Spielen“ klicken, würden
wir eigentlich nichts
sehen. Und das liegt daran, dass
unser BP-HUD leer ist. Also gehen wir jetzt dorthin. Wir werden das zusammenstellen und unser bp HUD
öffnen. Jetzt sind wir in unserer
bp HUD-Designer-Ansicht. Und hier legen
wir tatsächlich
fest , wie unsere Widgets aussehen
werden. Hier oben links haben
wir den Gaumen, und hier finden
Sie alle integrierten Widget-Typen
,
die mit der Engine geliefert werden. Wir haben Dinge wie Schaltflächen,
Bilder, Fortschrittsbalken und viele andere
, die wir uns in zukünftigen Lektionen
ansehen werden . Das Erstellen
neuer Widgets für unser HUD
erfolgt jetzt im Wesentlichen mithilfe der integrierten Widgets, die
mit der Engine geliefert werden, z. B.
der Fortschrittsbalken
in den Bild-Widget-Typen. Wir passen sie so an, dass sie
sich so verhalten, wie wir es uns wünschen. Wenn wir also einen Gesundheitsbalken verwenden möchten, verwenden
wir normalerweise unseren
Fortschrittsbalken und
passen ihn so an, dass er sich
wie ein Gesundheitsbalken verhält. Oder wenn wir
ein Menüsystem aufbauen, könnten wir
vielleicht
das Button-Widget und das Bild-Widget verwenden
und sie in Kombination verwenden, um beispielsweise
neue Menüs zu öffnen und
Einstellungen zu ändern. Das ist also unser
Palettenbereich hier. Wir haben auch den
Bibliotheksbereich. Das ist neu und
Unreal Engine fünf. Dies ist eine Art
benutzerfreundlichere Ansicht der Gaumenansicht. Sie können sehen, dass es hier tatsächlich
die gleichen Optionen gibt. Hier erhalten Sie nur eine kleine
Vorschau auf das Symbol. Es ist also ein bisschen einfacher zu sehen, was diese einzelnen
Widgets bewirken. Und später, wenn wir
unsere eigenen Widgets erstellen finden wir diese
tatsächlich
unter dem Benutzer erstellt. Wenn ich also auf dieses Dropdown klicke, kannst
du sehen, dass es
keine gibt, außer
diesem eingebauten Widgets gibt es hier keine. Aber wenn wir
unsere eigenen Widgets erstellen, können
wir
sie tatsächlich hier finden und sie in unseren anderen Widgets
verwenden. Sie können entweder
die Gaumen- oder die
Bibliotheksansicht als ganz
persönliche Präferenz verwenden. Wenn wir nun auch hier zur
Hierarchie gehen, können
wir sehen, dass die aktuellen
Widgets, die sich im
Sidebar-Widget befinden , momentan zufällig sind, weil wir kein m platziert
haben. Aber wenn ich sagen sollte, schnapp dir das
Text und gib das einfach ein, du kannst sehen, dass wir jetzt
ein Lehrbuch haben , das auftaucht. Wir können diese Einstellungen hier verwenden
, um die Sichtbarkeit umzuschalten. Nun, das ist hilfreich,
wenn vielleicht später viele
Widgets im Gange sind und sie
meistens nicht gleichzeitig
sichtbar sind. Sie können sie einfach so ausblenden , um die
Arbeit im Widget zu erleichtern. Als nächstes gibt es die Bind-Widgets. Das hat mehr mit
Widget-Animationen zu tun und
wir werden
in diesem Kurs nicht auf Animationen nur weil es ein
bisschen weiter fortgeschritten ist. Und was wir
behandeln werden. Als Nächstes haben wir
unser Detail-Panel. Jetzt, da ich mein
Textfeld hier in
unserem Hierarchiefeld ausgewählt habe, gibt es uns die Einstellungen für unsere Texte. Also zum Beispiel, was ich
ändern könnte, was der Text sagt. Also könnte ich sagen, Hallo, das ist ein Test und es
aktualisiert unsere Texte. Wir können Dinge wie Farbe festlegen, aber wenn wir
etwas anderes verwenden, wenn ich meine Texte
hier lösche und ein Bild hinzufüge, können
Sie sehen, dass
wir bei der
Auswahl unseres Bildes tatsächlich
andere Einstellungen erhalten. Und das ermöglicht es
uns, Dinge wie
ein Bild auf die Größe unseres
Bildes einzustellen , und solche Dinge. Wenn irgendwann eines
dieser Fenster geschlossen ist, können
Sie hier zur
Registerkarte Windows gehen und jedes von
ihnen hier oben übernehmen. Als nächstes haben wir die Diagrammansicht. Hier platzieren wir
Code, der
ausgeführt werden soll und der für unser Widget relevant
ist. Wenn wir jetzt
zur Diagrammansicht gehen, sollten
Sie feststellen, dass
sie fast
genauso aussieht wie die Blueprint-Editoren , mit denen wir gearbeitet haben. Sie haben Ihr
mike-Blueprint-Panel. Hier haben Sie die Funktionen, Makros, Variablen und
Event-Dispatcher. Wir haben unser Detail-Panel, das
je nachdem, was ich auswähle, wenn ich
beispielsweise eine neue Variable erstelle ,
sehen kann, dass sie uns alle
unsere Variablendetails liefert , wie
Sie es erwarten würden. Und natürlich, wenn ich
diese Variable ziehe , wenn wir sie bekommen und setzen
können, können
wir Code normal ausführen als wäre dies eine
normale Blaupause. Jetzt haben wir ein paar
verschiedene Hinweise, also haben wir das
Event-Konstrukt, das Sie sehen können. Es ist irgendwie ausgegraut. Wenn wir das jetzt löschen
und nur danach suchen, können
wir nach
Event Construct suchen. Sie können es einfach normal erstellen. Nun, das funktioniert ziemlich
ähnlich wie ein Start spielen es
ausgeführt wird, wenn
unser Widget erstellt wird. Jetzt haben wir auch diese
Veranstaltung vorkonstruiert. Dies wird tatsächlich jedes
Mal einer sein, wenn wir die Blaupause ziehen können. Um Ihnen ein Beispiel zu geben, Vielleicht könnten wir unser Bild verstecken,
was die andere Woche es aufwirft. Sie stellen fest, dass wir hier
in unseren Variablen tatsächlich
eine Bildvariable haben . Und das bezieht sich auf das Bild, das wir der Blaupause
hinzugefügt haben. Und der Grund, warum wir
das in
unserem Event Graph zur Verfügung haben , ist, wenn wir zu unserem Designer
zurückkehren und das Bild
auswählen. Sie können sehen, dass es hier
angekreuzt ist für ist variabel. Das bedeutet, dass wir über eine Variable auf
diesen
Bildfruchtcode zugreifen können . Also nehmen
wir dieses Bild und ziehen eines heraus
, nur
um die Sichtbarkeit festzulegen. Wir verbinden das mit unserem so
vorkonstruierten. Wenn ich es also herausziehen kann, können
wir sehen, dass es auf Visible gesetzt ist. Wenn ich also zu meinem Designer gehe, können
wir unser Bild sehen. Es ist momentan nur ein weißes
Bild. Aber wenn wir zurück zum Event Graph gehen und
ich
das in hidden ändere, gehe ich
jetzt, wenn ich kompiliere,
zurück zum Designer, du kannst sehen, dass es nicht mehr sichtbar ist, weil wir es auf hidden
setzen, und dieses Ereignis wird tatsächlich jedes Mal ausgeführt, wenn wir unseren Code kompilieren. Jetzt können unsere Widgets tatsächlich Code in
unserem Ereignisdiagramm
kühlen. Was wir also tun können, ist hier zu unserem Designer
zurückzukehren. Ich werde das Bild
vorerst löschen und wir nehmen einen Knopf und
ziehen es auf unser Hud. Sie können
es entweder direkt
hierher ziehen oder Sie können es in die Hierarchie nach
unten ziehen. Es macht dasselbe. Also ziehen wir es einfach mit
unseren im Detailbereich ausgewählten
Schaltflächen hinein. Wenn wir nach unten scrollen, haben
wir einige
dieser Event-Optionen. Wenn wir jetzt auf
diesen Plus-Button klicken
, werden wir tatsächlich ein neues
Ereignis und das Ereignisdiagramm erstellen . Vielleicht möchte ich, dass dieser
Button etwas Code ausführt. Wenn es angeklickt wird, können wir hier
auf diesen kleinen
Plus-Button klicken, und das erzeugt tatsächlich ein neues Ereignis innerhalb
des Ereignisgraphen. Dieses Event wird jetzt
immer dann ausgeführt, wenn wir diese
Taste während des Spiels drücken. Nun, was Sie beim Codieren in Widgets
beachten sollten:
Es ist eine gute Praxis, keinen Gameplay-Code
in ein Widget zu integrieren. Wirklich, Sie
sollten nur Ihr Widget haben, um Informationen
anzuzeigen und
dann Eingaben von
beispielsweise Dingen wie Tastendrücken entgegenzunehmen . Und dann sollte dieses Widget anderen Blaupausen,
wie Blaupausen-Schauspielern oder
Ihrem Charakter-Blueprint,
mitteilen wie Blaupausen-Schauspielern oder ,
was gedrückt wurde Sie
sollten eigentlich keine Ihrer Gameplay-Codierungen
innerhalb eines Widgets vornehmen. . Wenn diese
Schaltfläche zum Beispiel meinen Charakter tötet, könnten wir
einfach mit der rechten Maustaste auf Suchen klicken, Spieler und Charakter
vergessen, von hier
wegziehen und Destroy Actor
ausführen. Wenn ich diesen Knopf drücke, würde
das meinen Charakter zerstören
und das würde gut funktionieren. Es ist jedoch keine besonders
gute Praxis, dies zu tun. Was Sie wirklich tun sollten,
ist, dass wir auch kosten sollten. Oder ein Third-Person-Charakter wie dieser löscht den
zerstörten Aktorknoten. Und dann sollten
wir in unserem
ThirdPersonCharacter eigentlich
separate Ereignisse haben. Also erstelle ich einen neuen Kunden. Dann können wir
das Killplayer nennen. Dann würde dies Destroy Actor
ausführen. So wie das. Wir würden zu unserem HUD zurückkehren, aus unserem
ThirdPersonCharacter
herausziehen und wir würden diese Ereignisse als Kill Player bezeichnen. Jetzt ist unser Widget also nicht wirklich die Blaupause, auf der der Gameplay-Code
ausgeführt wird. Es nimmt nur die
buttonClicked-Eingabe. Es sagt dem
ThirdPersonCharacter, Hey, du musst dieses Event ausführen. das Programmieren in
Einzelspieler-Spielen
spielt das keine große Für das Programmieren in
Einzelspieler-Spielen
spielt das keine große Rolle. Aber später, wenn
Sie in die Multiplayer-Codierung
einsteigen möchten , ist
dies eine sehr wichtige
Vorgehensweise, die Sie befolgen sollten. Sie möchten nicht, dass Widgets
tatsächlich einen Gameplay-Code ausführen, sondern nur um dem Gameplay-Code
in anderen Blaupausen mitzuteilen ,
was passiert ist. Jetzt. Wenn wir unser HUD
tatsächlich kompilieren, werden
Sie feststellen, dass wir einige Fehler bekommen. Das liegt nur daran, dass wir unser Bild in
der Designer-Ansicht
gelöscht und
durch die Schaltfläche ersetzt haben. Und wenn wir
hier hochziehen, haben wir tatsächlich immer noch einen Hinweis
auf dieses alte Bild. Was wir also tun können, ist
einfach diese Knoten zu löschen, kompilieren, und das wird die Pfeile
los. Jetzt sind wir mit dieser Lektion fertig
. In unserer nächsten Lektion
werden wir uns
die Designer-Ansicht genauer ansehen und dann, wie wir das
Layout unseres Widgets steuern
können.
40. Widgets (Layouts): Hallo zusammen. In dieser Lektion
werden wir lernen, wie wir
ein Widgets-Layout
tatsächlich steuern können . Zu Beginn
haben wir
in unserer letzten Lektion dieses BP-HUD erstellt und
unserem ThirdPersonCharacter Code hinzugefügt
, der im Grunde genommen
dieses HUD erstellt und es dann zu unserem
Spielerbildschirm bei Begin Play
hinzufügt. Jetzt haben wir auch in
unserer letzten Lektion zum
BP hat ein Button-Widget hinzugefügt . Derzeit
nimmt das unser gesamtes bp HUD in Anspruch. Was wir also
tun werden, ist es
im Hierarchieliter auszuwählen . Dann werden wir kompilieren und das wird uns warnen. Wir gehen also
zur Diagrammansicht
, in der dieser Code hier
gelöscht wird. Und der Grund, warum wir
diese Warnung erhalten, ist dieses Ereignis ausgeführt werden
soll, wenn der gerade gelöschte Button
gedrückt wird und er nicht mehr existiert. Deshalb
erhalten wir jetzt diese Warnung, werden diese löschen und kompilieren. Jetzt gehen wir zum Design
der Ansicht über und schauen
uns einige
der Paneltypen von Widgets an. Also gehen wir zur
Palette, tippen Sie hier auf und ich wähle das Panel aus. Und hier haben wir ein paar
verschiedene Arten von Panels, und diese sind nützlich, um Layouts
mit Widgets zu
steuern. Aber wir beginnen
mit dem Canvas-Panel. Also
ziehen wir das hier einfach an die Spitze unserer
Widget-Hierarchie und veröffentlichen es einfach. Und jetzt haben wir ein Canvas-Panel. Und Sie können sich ein Leinwand-Panel vorstellen
. Es ist wie eine Darstellung des gesamten Bildschirms des Spielers. Wenn wir hier
so etwas wie eine Schaltfläche hinzufügen würden, können wir das einfach hineinziehen und auf
unserem Canvas-Panel
loslassen. Wenn wir kompilieren und auf „Spielen“ klicken, sollten
wir unseren Button
hier auf dem Spielerbildschirm sehen. Jetzt verlassen wir X aus dem Flugzeug-Editor und kehren zu unserer Hardware
zurück. Vielleicht haben Sie
bemerkt, dass wir
hier unten
diese Schaltfläche haben , die wir
ziehen können und die es uns ermöglicht, die
Größe unseres Viewports hier zu ändern. Nun ist es wichtig,
daran zu denken, dass wir nur
die Vorschau unseres Widgets ändern , damit wir sehen
können, wie unser HUD aussehen
würde, sagen wir bei dieser Auflösung, oder vielleicht eine andere
Auflösung wie hier unten. Aber das ändert nicht wirklich
die Größe unseres Widgets. Das alles
ändert nur die Vorschau. Wir können sehen, wie unsere
Widgets bei bestimmten Bildschirmgrößen tatsächlich
aussehen . Eine andere Möglichkeit, dies zu tun, ist die
Bildschirmgrößenoption hier, und dies gibt
Ihnen nur eine Reihe von Vorschauen für verschiedene Geräte. Wenn Sie also
an einem Mobilgerät arbeiten, können
Sie hier ein
Gerät auswählen, um Vorschau der exakten
Bildschirmauflösung anzuzeigen. Aber für die meisten Leute
werden
Sie wahrscheinlich einen Zehn-ADP-Monitor verwenden. Wir können also zu
Monitoren übergehen und den
21,5-24-Zoll-Monitor auswählen . Und das wird es für uns tatsächlich auf zehn ATP
ändern. Und Sie können die
Auflösung hier unten sehen. Jetzt
ist unser Leinwandpaneel im Vergleich zu
unseren anderen Paneelen
etwas Besonderes. Wenn wir Dinge wie
Schaltflächen oder Bilder hineinziehen, können
wir sie tatsächlich
herumziehen und
an verschiedene Stellen
innerhalb des Canvas-Bedienfelds verschieben an verschiedene Stellen
innerhalb des Canvas-Bedienfelds Wir können sie auch in der Größe ändern. Wenn ich also
meinen Button vergrößern möchte, kann
ich ihn einfach herausziehen
und vergrößern. Jetzt, weil ich
meinen Button ausgewählt habe und er ein Kind
unseres Canvas-Panels ist. Und was ich mit Kind meine, ist, dass es direkt
in unserer Leinwand enthalten ist. Wie Sie hier
unter unserer Leinwand sehen können, haben
wir unseren Button
, der ein Kind
des Canvas-Panels ist. Aus diesem Grund
haben wir auch einige Einstellungen
in unseren Schaltflächen,
Details, die exklusiv für sie gelten, wenn
sie sich in
einem Canvas-Panel befinden. Zunächst
haben wir Anker und ich werde gleich ein bisschen
darüber erklären. Aber wir haben auch die Position x. Das ist
also ein
Seite-zu-Side-Besitz, Besitz y,
das ist seine Auf - und Ab-Position, dann haben wir seine Größe. Das ist also seine Größe und Breite
und seine Größe und Höhe. Jetzt ist unser Anker im Grunde der Mittelpunkt
für dieses Widget. Also, wenn ich das auf
0 im x und 0 im y setzen wirst
du sehen, dass es bis zu
unserer oberen linken Ecke geht , weil es
momentan
dort verankert ist. Aber wenn ich diesen
Anker ändern würde, um das Zentrum zu sagen, kann
man sehen, dass er die
Position x und y hat. Er ist tatsächlich gestiegen. Und das liegt daran, dass sich die
0-Position jetzt in
der Mitte des Bildschirms befindet. Also wenn ich
das wieder auf 0 setzen würde, wirst
du sehen, dass das Widget tatsächlich die Mitte
des Bildschirms
geht. Jetzt ähnelt die Ausrichtung
der Drehpunktposition
für unser Widget. Derzeit bedeutet 00, dass es in der
oberen linken Ecke sein wird. Wenn ich das auf 0,50.5 ändere oder die Mitte unseres Widgets jetzt in der Mitte
ist. Und deshalb hat sich das
Widget jetzt in die Mittelposition
bewegt, obwohl seine X- und
Y-Position immer noch 0 ist. Dann haben wir die
Größe zum Inhalt, was ich
später in der Lektion erläutern werde. Wir haben die z-Reihenfolge, die im Grunde
steuert, ob wir
zwei Widgets haben ,
die
sich überlappen . Das mit der höchsten
See-Reihenfolge wird oben sein. Also wenn ich hier einen anderen
Knopf drücke, muss ich hineinzoomen, um ihn zu sehen. Wenn ich das über
den oberen Rand unseres Widgets ziehe, können
Sie sehen, dass
es sich tatsächlich über unserem unteren Widget befindet. Aber wenn ich mein unteres Widget auswähle und dieses auf eins erhöhe, sieht
man, dass es jetzt darüber
hinausgeht. Wir sind Jet,
weil die Reihenfolge 0 ist. Wenn wir jetzt
im Detailbereich nach unten gehen, haben
wir einige Darstellungsoptionen, haben
wir einige Darstellungsoptionen,
die
sich je nachdem,
welches Widget Sie gerade haben, unterscheiden werden . Da wir also in einer Schaltfläche sind, ,
wenn wir den Stil berücksichtigen werden
Sie sehen, dass wir Optionen für
normales Schweben und Drücken haben . So wird der
Button
aussehen, wenn er normal ist nichts mit ihm passiert. Dann, wenn die Maus über oben bewegt
wird und wenn sie dann tatsächlich heruntergedrückt
wird. Und wenn wir eine davon öffnen, sagen wir die normale Option, können
wir Dinge
wie das Bild oder den Farbton ändern oder ob es als abgerundete Box oder nur
als normale
Box gezeichnet wird . Und das siehst du jetzt. Hat keine
abgerundeten Ecken mehr, oder wir können sie als angespannt ändern. Also könnte ich
das ändern, um zu sagen, sei rot. Und Sie können jetzt sehen, dass es rot
hervorgehoben ist. Wie Sie sehen können, gibt es
viele verschiedene Optionen und jede Art von Widget
hat unterschiedliche Optionen. Also werde ich nicht
all diese Einstellungen durchgehen. Wenn du
herausfinden willst, was sie tun, kannst
du mit der Maus über sie fahren und es gibt dir einen kleinen Tooltipp. Oder Sie spielen einfach
über das Ändern Farben und Größen und
ähnliches. Aber nur zur Übersicht Wenn Sie ein Widget auswählen, finden Sie hier alle Einstellungen dafür, wie
es tatsächlich aussieht. Als Nächstes werden wir diese Schaltflächen hier
tatsächlich löschen. Wir werden uns
einige der anderen Panel-Optionen ansehen ,
die wir haben. Wir beginnen also
mit einer vertikalen Box. Wenn wir das also einfach hineinziehen, zoome
ich
ein bisschen mehr heraus. Wie Sie sehen können,
ist dies nur ein leeres Widget. Es gibt kein visuelles
Erscheinungsbild für uns. Aber was wir tun können, ist andere Widgets
hinzuzufügen. Wenn ich nach oben scrolle und den Text
ergreife, kann
ich ihn entweder einfach
auf das vertikale Feld
ziehen oder wir können ihn in der Hierarchie
darüber ziehen. Damit wir das einwerfen können. Sie können sehen, dass es jetzt unsere Texte für uns hier
hinzugefügt hat. Jetzt, weil wir
unsere Texte nicht zum Canvas-Panel hinzugefügt haben . Wenn ich es auswähle, kann ich es nicht
verschieben oder seine Größe ändern. Als ob ich einige Texte
direkt zum Canvas-Panel hinzugefügt hätte. Und der Grund dafür ist, dass unser
vertikaler Kasten die
Kontrolle über die Größe
unseres Textes übernimmt Kontrolle über die Größe
unseres , seine Position sein wird. Wenn wir also einen weiteren
Text in unser vertikales Feld einfügen würden,
sehen Sie, dass es jetzt beginnt, sie vertikal zu
stapeln. Und das ist das
Hauptmerkmal einer vertikalen Box. wir neue Widgets hinzufügen, werden
sie in
einem vertikalen Stapel hinzugefügt. Wenn wir hier unsere
vertikale Box auswählen, können
Sie sehen, dass sie
derzeit diese Größe hat. Wenn wir es bewegen,
können wir es immer noch in
unserem Canvas-Panel bewegen , da es an
der Leinwandplatte befestigt ist, während der Text dann in
der vertikalen Box
angehängt wird. Aber wenn man sich einen Werkzeugkasten anschaut, eigentlich
nicht die gleiche
Größe wie unsere Texte. Texte wie Lecks raus. Nun, hier kommt die Größe der Inhaltsoption ins Spiel. Wenn ich das übernehme, können
Sie sehen, dass meine
vertikale Box jetzt
größer geworden ist und jetzt die Größe von
allem hat, was wir hineinlegen. Dies ist also das Hauptmerkmal
des Inhalts der Website. Jedes Widget, in dem sich ein
untergeordnetes Widget befindet. Wenn Sie diese Option
für dieses Widget aktivieren, wird
es sich selbst so skalieren, dass es genau die Größe der
Widgets hat, die sich darin befinden, wie z. B. unser vertikales Feld. Wenn wir nun
einige der Texte
auswählen, die derzeit in
unserer vertikalen Box und
hier nach oben scrollen , werden Sie sehen, dass wir jetzt Einstellungen
haben , die
als vertikales Boxplot bezeichnet werden. Das ist anstelle des
Canvas-Panel-Slots, den wir hatten, als wir unseren Text
direkt in
das Canvas-Panel eingefügt haben. Dies sind einige der
Steuerelemente, mit denen wir unsere Texte
anpassen können , während sie sich
in einem vertikalen Feld befinden. Also haben
wir zu Beginn eine Polsterung. Padding gibt im Grunde an, wie
viel Platz zwischen
unseren Texten und der Außenseite
des vertikalen Kastens vorhanden ist . Wenn wir dies also in zehn ändern, wird es
unseren Texten zehn Pixel zwischen
seinem Rand und dem Rand der vertikalen Boxen geben unseren Texten zehn Pixel zwischen seinem Rand und dem Rand der ,
die
Sie hier sehen können. Jetzt ist es in
alle Richtungen für
diesen Text gemacht , weil ich gerade zehn in den Top-Hit
gesetzt habe. Wenn wir jedoch auf den Abwärtspfeil klicken, können
wir tatsächlich links,
rechts, oben und unten angeben . Als nächstes haben wir die
Größe und Ausrichtung. Derzeit ändert unsere vertikale
Box einfach ihre Größe auf das, was
sich darin befindet. Um die Einstellungen wirklich zu
testen,
müssen
wir das jetzt deaktivieren. Also werden wir die Größe des Inhalts
deaktivieren und
unser Textfeld vergrößern. Jetzt ist es also tatsächlich größer
als unsere Texte brauchen. Wenn ich also meinen
Text hier auswähle,
ist er momentan so eingestellt, dass er
vertikal und
horizontal so viel Platz wie möglich einnimmt. Was wir also tun können, ist, wenn ich meinen Text
zentriert haben
möchte, könnten
wir ihn auf
eine zentrierte Ausrichtung setzen, und jetzt ist er zentriert in der
Mitte unseres vertikalen Feldes. Wenn ich die Größe meiner Box ändere, können
Sie sehen, dass sie ihren Mittelpunkt
ändert. Oder wir können unseren Text erneut auswählen und ihn als rechtsbündig festlegen. Und das bedeutet, dass der
Text jetzt an
der rechten Seite
unserer vertikalen Box angehängt ist. Als nächstes haben wir auch die
vertikale Ausrichtung, wir
die vertikale Position
unseres Textes steuern können . Derzeit ist es so eingestellt,
dass es vertikal gefüllt wird, aber wir haben auch die
Größe auf auto eingestellt. Der Text wird also einfach viel Platz beanspruchen, wie er vertikal
benötigt. Aber sagen wir, ich möchte, dass
mein Text mehr in der Mitte
unserer vertikalen Box steht. Was wir tun können, ist zu
sagen, dass unsere Größe gefüllt werden soll. Und das bedeutet, dass unser
Text
dem vertikalen Feld im Grunde sagt , dass er so viel Platz wie möglich beanspruchen möchte. Dann können wir unsere
vertikale Ausrichtung verwenden. Wir könnten dies auf Mitte setzen, und das wird in
dem Raum zentriert sein , den es zur Verfügung hat. Nun können diese Einstellungen zunächst
etwas verwirrend
sein , und oft müssen
Sie nur mit ihnen
herumspielen, um das
gewünschte Ergebnis zu erzielen . Aber sie können
sehr hilfreich sein, wenn in Dingen
wie vertikalen Boxen
arbeiten. Und das Verhalten dieser
Einstellungen
hängt von dem Widget ab
, das Sie ausgewählt haben. Wenn wir also einen Knopf
greifen und diesen hier in die
vertikale Box
legen müssen, können
Sie sehen, dass er
sich
tatsächlich auf die volle Größe ausdehnt , die in der Breite verfügbar
ist. Und der
Grund dafür sind unsere Ausrichtungen. Wenn ich jetzt meine
horizontale Ausrichtung auf Mitte setzen würde, werden
Sie sehen, dass mein Knopf
tatsächlich viel kleiner wird. Und das liegt daran, dass
unsere Bildgröße auf 32 mal 32
gesetzt wird,
wenn wir hier
im normalen Dropdown zu Stil gehen ,
wenn wir hier
im normalen Dropdown . Wenn ich das also erhöhen würde, kann
man sehen, dass mein Button
tatsächlich größer wird. Oder wenn ich den X-Wert erhöhen
würde, sieht
man, dass es länger wird. Und wenn ich meine
Größe hier zum Füllen einstellen würde, sieht
man, dass mein Knopf viel größer
wird. Jetzt nimmt es nicht
den gesamten verfügbaren Platz ein, da unser Text hier oben
ebenfalls gefüllt wird. Also wenn ich das auf auto setzen würde und sehe, dass meine Box
jetzt all diese
Texte aus dem Weg schiebt und vertikal
so viel Platz wie
möglich einnimmt . Und das liegt daran, dass unsere
Vertikale so eingestellt ist sich
vertikal füllt, damit wir sie horizontal füllen Sie werden sehen, dass jetzt eine Schaltfläche den gesamten Platz
einnimmt. Und nur als Randnotiz: Wenn Sie die Größe
einer Taste in ihrem normalen Stil ändern , möchten
Sie wahrscheinlich dasselbe für sowohl mit
dem Schweben als auch beim
Drücken tun , weil Sie sich daran erinnern
müssen dass, wenn Sie
den Mauszeiger über eine Schaltfläche bewegen, diese Einstellungen
verwendet werden. Und wenn sich Ihre Größe
von Ihrer normalen Größe unterscheidet, wird Ihr Knopf immer kleiner, wenn Sie den Mauszeiger darüber bewegen. Sie sich keine Sorgen, wenn diese Einstellungen über den Kopf
gegangen sind.
Der beste Weg, Widgets zu lernen,
besteht darin, einfach mit ihnen zu spielen, kleine Dinge zu erstellen und bringen
und sie zum Laufen zu bringen wie Sie es möchten, indem Sie diese Schaltflächen hier
verwenden. Und auch die Padding
- und
Alignment-Einstellungen , die Sie durch
Auswahl des einzelnen Widgets zur Verfügung
haben . Jetzt haben wir
das vertikale Panel verwendet, aber es gibt auch ein
horizontales Panel. Wenn wir also zu unserer
Panels-Option gehen, können
Sie sehen, dass wir
die horizontale Box haben. Und wenn wir das hineinziehen,
verhält es sich
ziemlich genau so
wie unser vertikaler Quader, aber stattdessen ist es horizontal. Wenn ich also, sagen wir,
ein Text-Widget schnappe , ziehen wir es einfach in unsere horizontale Box. Sie können sehen, dass es
in unserer horizontalen
Box hier unten hinzugefügt wurde. Wenn ich
eine weitere zu unserer horizontalen Box hinzufügen würde, können
Sie sehen, dass sie hinzugefügt wurde, aber jetzt bewegt sie sie horizontal
statt vertikal. Das Coole
an diesen Panels ist, dass wir sie zusammen verwenden können. Wenn wir hier also
ein bisschen herauszoomen, lösche
ich alle
diese in meiner vertikalen Box. Und wir werden
eine horizontale Box innerhalb
der vertikalen Box hinzufügen . Also gehen wir zwei Panels runter und suchen eine horizontale Box. Und wir werden das so in
unsere vertikale Box
legen . Jetzt können
wir in unserer
horizontalen Box etwas wie Texte hinzufügen
, einige Texte hinzufügen. Und vielleicht will ich auch
ein Bild. Wenn wir uns also vorstellen, dass dies
vielleicht eine Liste von Artikeln war, würden
wir das Artikelbild
und dann einige Texte
für seinen Namen haben wollen . Also fügen wir auch so ein Bild zu unserer horizontalen Box hinzu. Jetzt können wir die
Reihenfolge ändern, in der sich diese befinden,
in unserer horizontalen Box. Wir können sie auswählen
und du kannst
diese kleinen Pfeile benutzen ,
um sie einfach zu bewegen. Oder im Hierarchiefenster können
wir es einfach ziehen. Und wir bekommen diese kleine
blaue Linie, die uns sagt, ob wir sie bewegen, damit wir sie über unseren Text verschieben
können. Und jetzt ist es über
unserem Text oder
vor unseren Texten für
die horizontale Box. Sag mir jetzt, dass mir das Aussehen nicht wirklich
gefallen hat. Ich wollte etwas Platz
oder vielleicht wollte ich mein Textfeld auf der anderen
Seite unseres Panels hier haben. Ich wähle meinen Text aus. Wir könnten es auf
Füllung setzen und ich werde es so
einstellen, dass es horizontal rechts
ausgerichtet ist. Und jetzt ist mein Text hier und meine Bilder sind immer noch auf
der linken Seite. Jetzt könnten wir kopieren und
einfügen oder horizontale Box. Also wählen wir
es aus, machen Control C, dann wählen wir
unsere vertikale Box und machen Control V. Und jetzt können
wir ein paar
unserer vertikalen Boxen einfügen. Sie können jetzt sehen, dass
wir eine Liste der
horizontalen Boxen in
unserer vertikalen Box haben . Und dann
haben diese horizontalen Boxen unsere Bilder und unsere Texte. So können wir unseren
Text auswählen und diese ändern. Wir könnten
dies ändern, um Schwert zu sagen, dies in Gold und dies zum Beispiel in
Gesundheitsgetränk. Jetzt haben wir eine vertikale Liste von horizontalen Boxen, in denen
sich diese Informationen befinden. Vielleicht wollten
wir nun den Abstand
vom Rand
unserer horizontalen Box
zum Rand des vertikalen Kastens ändern vom Rand
unserer horizontalen Box . Das können wir
mit unserer Polsterung machen. Damit wir unsere
Polsterung einstellen können, sagen wir zehn. Und das
gibt uns tatsächlich etwas Abstand zwischen unseren verschiedenen Eingängen und auch den Rändern unserer vertikalen Box. Also könnten wir das
mit jedem machen. Wir können dies auch auf zehn setzen. Und dann dasselbe, nur um ein
bisschen so aufzuräumen. Wenn wir wollten, könnten wir ein Bild für diese
festlegen. Wenn ich also eines
der Bilder hier auswähle, können
wir ein Bild festlegen. Jetzt habe ich nur noch die Bilder
, die mit dem Motor geliefert werden. Also werden wir, wir
benutzen, sagen Sie das. Das ist tatsächlich unser
Bild so eingestellt, dass wir hier 12 haben könnten ,
damit wir nach unten scrollen und ein anderes Bild
finden können , vielleicht dieses Android-Icon, das Sie sehen können. Jetzt können wir hier Bilder für
jede unserer Zeilen festlegen. Eine andere Möglichkeit,
Padding zu verwenden, ist,
sagen wir, in einer vertikalen Box. Vielleicht wollte ich, dass mein
Text auf dieser Seite ist, aber ich wollte ein bisschen Abstand zwischen dem Bild und dem Text. Was wir tun könnten, ist das wieder auf auto zu
ändern, also ist es über diese Seite. Dann könnten wir
entweder Padding verwenden. Also könnte ich Padding bei
einem linken Padding von sagen wir 50 öffnen. Und Sie sehen jetzt, dass unser
Text 50 Zentimeter ist, also 50 Pixel
von unserem Bild entfernt. Oder wenn wir das schnell
loswerden, können
wir ein Spacer-Widget verwenden. Wenn wir also nach Raum suchen, können
wir ein Spacer-Widget verwenden
und dieses zwischen unserem Bild und
unseren Texten in der Hierarchie einfügen. Wählen Sie einfach den Abstandhalter aus
und wir legen seine Größe hier fest. Wir wollen, dass das x horizontal ist, also wurden wir auf 100 erhöht, und das gibt uns 100 Pixel zwischen unserem Bild und unserem Schwert. Bisher haben wir uns
Panels angesehen und
Panels können größtenteils unbegrenzt Kinder
haben. können wir so viele
Widgets zu
unserem Canvas-Panel oder zu
unserer vertikalen Box oder
der horizontalen Box hinzufügen, wie wir möchten unserem Canvas-Panel oder zu
unserer vertikalen Box oder . Aber manche Widgets
haben diese Freiheit nicht. Wenn wir unsere Suche
hier loswerden und beispielsweise eine Schaltfläche hinzufügen, können wir
einem Button
ein untergeordnetes Element hinzufügen. Wenn ich also zum Beispiel einige Texte schnappe, kann
ich diese
hier oben ziehen, um sie als Kind hinzuzufügen oder sie einfach auf die Schaltfläche
im Hierarchiefeld fallen lassen. Und Sie können jetzt sehen, dass wir
den Text haben und das ist ein
Kind unseres Buttons. Aber wenn ich,
sagen wir, noch ein paar Texte schnappen würde, kann
ich
das eigentlich nicht
mehr zu unserem Button hinzufügen , weil unser Button nur ein Kind haben
kann. Ein guter Weg, dies zu umgehen, ist, wenn wir die Texte
von unserer Schaltfläche entfernen, wir können ein Panel wie
unsere horizontale Box verwenden. können wir zu unserem Button hinzufügen. Und jetzt unsere horizontale Box
als Kind des Buttons. Aber wir können so
viele Kinder hinzufügen, wie wir möchten, die horizontale Box. Also könnten wir,
sagen wir, etwas Text schnappen, das zu unserem Button
hinzufügen, könnten auch ein Bild aufnehmen. Also können wir das
zu unserem Button hinzufügen. Derzeit läuft es
aus einem Knopf heraus. Aber was wir tun können,
ist die Schaltfläche
auszuwählen sie so zu skalieren, dass unser Inhalt innerhalb der Schaltfläche
bleibt. Oder wenn du dich erinnerst, können wir
auf Größe zum Inhalt klicken. Die Schaltfläche ändert
sich selbst auf den
Platz, den sie
für den Inhalt darin benötigt. Das ist also ein wirklich einfacher Weg. Sie können Widgets erstellen, die nur ein Kind haben
können, und so viele Kinder
haben, wie Sie möchten, indem Sie einfach die Panel-Boxen hier unten
verwenden. Eine Sache, die bei der Arbeit mit
diesen Panel-Boxen
schwierig sein kann ,
ist zu sagen meine Texte oder dieser Eintrag hier in unserer vertikalen
Box größer sein sollen. Es gibt keine Größenoption
, die wir einfach kontrollieren können. Aber was wir
tun können, ist,
einzelne Elemente
mit einer Größenbox zu verpacken . Also sag, ich wollte, dass dieses Bild
tatsächlich viel größer ist. Was wir tun könnten, ist unser Bild hier
auszuwählen. Wir könnten es mit einem
Rechtsklick umbrechen, rappen mit. Und im Grunde
bedeutet das nur, dass wir
dem Bild mitteilen , dass es
in einem anderen Widget enthalten sein soll. Also wählen wir,
sagen wir, das Größenfeld aus. Und jetzt befindet sich unser Bild, das Sie
sehen können, in einer Größenbox. Diese Box in Größe befindet sich immer noch
in unserer vertikalen Box . Legen Sie unser Bild
einfach
in diese Größenbox für uns. Das können wir auch mit
unseren Boxen machen. Wenn ich also zum Beispiel mein Bild
hier auswähle, könnten
wir es beispielsweise mit
einer vertikalen Box umschließen, wenn wir wollten. Sie können sehen, dass wir eine vertikale Box oder eine
horizontale Box oder eine
dieser Optionen
haben horizontale Box oder eine , die Sie hier haben. Kehren Sie zu unserer
Größenbox zurück, die wir gerade erstellt haben. Sie können sehen, dass wir hier
einige Größenoptionen haben. Was wir also tun können, ist, dass wir diese Optionen
auswählen können , um die Größenüberschreibungen zu
aktivieren. Wenn ich hier einen Text eingebe, sagen wir 100 mal 100. Sie können sehen,
dass
dieses Bild jetzt gezwungen wird, diese Größe zu haben. Das kann also sehr hilfreich sein wenn Sie mit vertikalen Boxen arbeiten da
Sie manchmal einfach
erzwingen möchten ,
dass ein Widget eine bestimmte Größe hat. Und die Steuerung hier kann
ein bisschen einschränkend sein. Mit einer Größenbox können
wir also einfach
eine bestimmte Größe erzwingen. Es gibt auch ein paar andere
Optionen. Wenn wir also Optionen deaktivieren oder
überschreiben, und der Grund, warum ich sie verwende
, ist, dass diese im Grunde nur das
Widget zwingen, diese Größe zu haben. Keine dieser Optionen besser, wenn Sie diese tektonischen
haben. Also werden wir die
vorerst einfach ausziehen. Wir können auch eine
Min- und Max-Größe festlegen. Und das sagt uns im Grunde
, dass unser Widget mindestens 50 mal 50 sein soll. Es kann sich jedoch selbst skalieren,
um beispielsweise eine andere Site zu erreichen. Also sagen wir 200 mal 200. Sie sehen derzeit sind
es 50, weil unsere Bilder nur ein kleines Bild sind. Aber wenn unser Bild größer wäre, würde
es
diesen zusätzlichen Raum mit
bis zu 200 Pixeln nutzen . Und dann würde das Bild nicht größer als
200
werden , weil wir maximale Größe sagen. Im Moment fügen
wir Widgets nur manuell hinzu,
indem wir zum Beispiel Männer auf unser Canvas-Panel oder unsere vertikale
Box ziehen. Aber in unserer nächsten Lektion werden
wir
tatsächlich lernen, werden
wir
tatsächlich lernen wie wir
Widgets mithilfe von Code erstellen und sie diesen Feldern
hinzufügen können . Wir werden uns auch das Bildlauffeld
ansehen, also bringe ich das einfach hier rein. Und im Grunde funktioniert
das Bildlauffeld so sobald die Widgets darin enthalten sind, die Kinder darin
größer als die aktuelle Größe
werden, hier oben eine Bildlaufleiste bekommen, tatsächlich in der
Lage sind, durch der Inhalt innerhalb
des Bildlauffelds.
41. Widgets (Widgets erstellen): Hallo zusammen. In dieser Lektion lernen wir
, wie
man Widgets mithilfe von Code erstellt, anstatt diese Widgets
manuell per Drag &
Drop
in unser Panel ziehen zu müssen. Wir werden uns auch das Bildlauffeld
ansehen. Jetzt würde ich das in unserer letzten Lektion
ein wenig erklären. Aber
wenn der Inhalt
unserer Bildlaufbox größer wird
als die Box tatsächlich
ist, erhalten wir im Wesentlichen unserer Bildlaufbox größer wird
als die Box tatsächlich
ist, eine kleine
Bildlaufleiste, mit der wir durch
den Inhalt blättern können . Um loszulegen,
werden wir also eine Datentabelle erstellen , die einige Informationen
über einige Elemente
enthalten wird . Und dann lassen
wir unseren Widget-Code eine Liste für
jeden dieser Artikel
erstellen, und wir speichern sie hier
in unserer Bildlaufbox. Zunächst gehen
wir
zum Inhaltsbrowser und erstellen ein neues Widget. Und dies wird ein benutzerdefiniertes Widget
sein ,
in dem
wir tatsächlich spawnen werden und das zur Anzeige
unserer Informationen verwendet wird. Also klicken wir mit der rechten Maustaste, gehen
zur Benutzeroberflächenoption
und erstellen ein neues Widget. Wir
wählen das Benutzer-Widget aus. Und wir werden diese BP on
Score-Artikelliste so
nennen . Und wir doppelklicken darauf, um
es zu öffnen. Und ich werde meine hier einfach so nach
oben ziehen . Der Unterschied zur Erstellung dieses Widgets im Vergleich zu unserem HUD besteht darin
, dass wir
eigentlich kein Leinwand-Panel
verwenden werden, da unser Widget für Artikellisten
zu einem anderen Panel hinzugefügt
wird . . Ähnlich wie wir
unsere Bilder und Texte erstellt haben, wird
die Artikelliste nicht den gesamten
Spielerbildschirm belegen. Wir werden also kein Canvas-Panel verwenden, sondern zunächst
direkt eine horizontale
Box verwenden. Also
schnapp ich mir einfach eine horizontale Kiste und lege sie hier hin. Das wird es uns ermöglichen
, die Dinge in horizontaler Richtung anzuordnen. Wir können dir ein Bild schnappen, damit
wir die Bild-Option finden. Nun, ich werde
einige Texte für den
Player oder den Objektnamen hinzufügen , und ich füge auch einen weiteren Text hinzu. Vielleicht haben wir einen Kostenwert. Im Moment sieht das etwas seltsam aus, denn wenn Sie sich erinnern, wir uns immer noch
eine Vorschau an, wenn die Widgets zu einem 120 mal
zehn ATP-Bildschirm
hinzugefügt werden . Aber was wir tun können, um uns
eine kleine Vorschau zu geben, ist,
auf die Bildschirmgröße oder den
Vollbildmodus hier zu gehen . Und das ermöglicht es uns,
tatsächlich nur manuell eine Pixelgröße für unser Widget einzugeben . Denken Sie daran, dies dient
nur zur Vorschau. Das ist eigentlich nicht die
Größe unseres Widgets. Das gibt uns also nur eine
Vorstellung davon, wie das Widget bei einer bestimmten Größe
aussehen wird . Ich setze
meinen auf 350. Und die Länge, oder vielleicht
machen wir es 400 und die Länge, vielleicht AT, und die Breite. Jetzt bekommen wir eine etwas bessere Vorstellung davon, wie unsere Widgets tatsächlich aussehen werden, wenn
wir sie zu einem Bildlauffeld hinzufügen,
wie wir es im Layoutvideo getan haben.
Sie können ein wenig
Zeit damit verbringen, sich zu bewegen diese um, Leerzeichen
hinzufügen, die Schriftarten
oder Farben
ändern , wenn Sie möchten. Ich werde meine Kosten
so setzen, dass sie gegen diese Seite sind, also stelle ich sie so ein, dass sie auf
der rechten Seite ausgerichtet sind, und
wir werden den Film aufnehmen. Jetzt befindet sich unser Text auf
dieser Seite unseres Widgets. Jetzt müssen wir auch
die Werte
dieser Widgets im Code ändern . Wir werden
also
jedes unserer Widgets
hier auswählen jedes unserer Widgets und sie
umbenennen. Also benenne ich das
Bild in das Artikelsymbol um. Und wir haben die
Variable aktiviert, was gut ist, weil
wir auf
unser Bild im Event Graph zugreifen müssen . Wenn wir jetzt unser Lehrbuch auswählen, können
Sie sehen, dass es dieses TikTok nicht
wirklich enthält. Also werden wir das übernehmen. Und ich setze
diesen auf Artikelname. Und dieser wird auch das
übernehmen, und wir nennen diesen Artikel Kosten. Wenn wir jetzt zu
unserer Diagrammansicht gehen und kompilieren, werden
Sie sehen, dass wir
jetzt Variablen für
jeden unserer Widget-Typen haben . Mit diesen können wir sie
eigentlich nur
als Variablen abrufen und
Informationen über sie festlegen. Wenn ich also
unseren Artikelkostentext ändern
möchte, kann ich Text festlegen. Wir können den gesetzten Textknoten verwenden, und dies ermöglicht es mir tatsächlich, den Text zu ändern, der in unserem Artikelkostentext
angezeigt wird . Jetzt löschen wir einfach
diese Knoten, weil wir eigentlich unsere Datentabelle
einrichten müssen. Also speichern wir unsere
Artikelliste
vorerst und kehren
zum Inhaltsbrowser zurück. Bevor wir eine Datentabelle erstellen, müssen
wir zuerst eine Struktur erstellen ,
die diese Datentabelle verwenden kann. Also klicken wir mit der rechten Maustaste
und gehen zu Blaupausen Dann Struktur. Und ich nenne einfach
meinen S-Unterstrich. Und das machen wir auf. Und hier werden wir einige neue Variablen
hinzufügen. Also füge ich eine neue Variable hinzu. Den ersten nennen wir Name. Wir ändern dies
in einen Textwert. Das wird also der
Name unseres Artikels sein. Wir könnten Kosten festlegen, also nennen wir diese Kosten und setzen dies
auf eine ganze Zahl. Und wir könnten einen weiteren Wert hinzufügen, zum
Beispiel für eine Textur, die nach 2D-Textur sucht. Und wir wollen die 2D-Textur
hier, Objektreferenz. Ich
nenne dieses eine Icon einfach so. Und das sparen wir uns. Jetzt kehren wir zu
unserem Inhaltsbrowser zurück und
erstellen eine neue Datentabelle mit unserer
S-Unterstrich-Elementstruktur. Also klicken wir mit
der rechten Maustaste, gehen
hier zur Option Verschiedenes, wählen Datentabelle aus, und dann wählen wir
hier
im Dropdown unser S-Element aus und klicken auf Okay, dann rufen wir unsere
Datentabellenelementliste auf
so. Jetzt müssen wir also
die Artikelliste öffnen und
ihr einige Artikel hinzufügen. Also werden wir das öffnen. Und wir fügen ein paar neue Zeilen hinzu. Also füge ich eine neue Zeile hinzu. Ich nenne das sagen Schwert. Schwert, Schwert. Und wir setzen den Namen auf Sortierung. Wir setzen die Kosten auf fünf fest. Jetzt habe ich keine
Icons für Gegenstände, aber wir können
nur zufällige Texturen verwenden. Vielleicht wähle ich die
Kameratextur für diese aus. Nun, ich hatte keinen
Streit. Das sagen wir mal wieder falsch geschrieben nennen. Das ist also der ACS. Dann legen wir auch den Namen für
unsere AKS-Reihe zwei Acts fest. Wir legen die Kosten fest, sagen wir, 20 werden eine weitere Textur festlegen. Also wähle ich einfach
dieses grüne Gesicht. Wir fügen noch einen hinzu und
ich setze das auf „Hallo, Drink“. Ich habe
das wieder falsch geschrieben. Trink so. Und wieder setzen wir
den Namen, um beim Trinken zu helfen, den Preis
oder die Kosten auf zwei
fest. Und wir wählen ein anderes Bild aus. Also wähle ich, sagen wir, das Android-Symbol hier aus.
Das reicht vorerst. Wir werden weitere hinzufügen,
damit unsere Scrollbox
etwas später zum Laufen kommt. Aber im Moment reicht das aus. Wir kehren zu unserem Widget für
Artikellisten zurück. Jetzt müssen wir
eine Funktion erstellen , die
diese Liste
tatsächlich einrichtet und
unser Artikelkostensymbol und
Namen für dieses Widget festlegen . Um das zu tun,
erstelle ich eine neue Funktion. Ich nenne
diese Setup-Liste einfach. Wir fügen einen Input hinzu, also wählen
wir hier den
Eingabeknoten aus. Und unter Eingaben
fügen wir einen neuen Input hinzu. Und ich setze diesen Punkt
auf F-Unterstrich. Das ist die Struktur, die
wir für unsere Datentabelle verwendet haben. Wenn Sie sich erinnern, können
wir
eine Item-Struktur für diese Funktion eingeben . Also setzen wir es darauf und
wir setzen den Namen auf item. Jetzt werden wir
die Informationen aus
dieser Struktureingabe verwenden , um unsere Widgets
tatsächlich festzulegen. Wenn wir herausziehen, können wir
unsere Artikelstruktur aufbrechen und wir können
auf den Namen zugreifen, der ein Symbol kostet. Zunächst
greifen wir das Elementnamen-Widget, holen uns diese Variable und
ziehen dann heraus und legen Text fest. Und wir machen den setText-Knoten. Verbinde das mit unserem Input. Und wir
nehmen den Namen und fügen ihn in den Text ein. Dann bekommen wir die Artikelkosten. Mach das Gleiche. Stellen Sie also Text ein, holen Sie sich diesen Knoten. Verbinde das mit
unserem vorherigen setText, und wir übernehmen die Kosten. Das können wir auch direkt
in unsere Texte einbinden. Es gibt uns diesen Knoten
, der einfach
eine Ganzzahl in Text umwandelt . Und zum Schluss setzen
wir das Symbol. Also schnappen wir uns
das Elementsymbol und ziehen
es heraus
und setzen den Pinsel. Wir wollen Pinsel aus einer solchen
Textur setzen. Und so können wir
im Grunde nur sagen, was unser Bild-Widget ist, welche Textur Sie verwenden möchten. Also
schnapp ich mir einfach unser Icon hier, verbinde mich mit der Textur. Wenn wir
diese Funktion jetzt ausführen, setzen
wir die Kosten für den Artikelnamen und das Symbol oder auf die Struktur, die
wir für die Eingabe bereitstellen. Jetzt können wir das kompilieren und speichern und
kehren zu unserem HUD zurück. Jetzt habe ich das Bildlauffeld
aus unseren vorherigen Lektionen. Also werde ich es tatsächlich ein bisschen
größer
machen , weil es im Moment ziemlich
klein ist. Also ist es dort nur ein bisschen größer. Und wir werden
unserer Bildlaufbox auch
ein vertikales Feld hinzufügen . Jetzt könnten wir
unsere Widgets einfach direkt
zum Bildlauffeld hinzufügen . Das Problem dabei ist jedoch
, dass Sie möglicherweise einige Skalierungsprobleme haben und auch einige Optionen
fehlen werden. Wenn wir also nach unten scrollen, nehme
ich ein vertikales Feld und füge es dem
Bildlauffeld hier hinzu. Wenn ich zum Beispiel
nur
sagen würde, schnappen Sie sich eine Schaltfläche und fügen Sie
sie der Bildlaufbox hinzu. Wenn ich diese Schaltfläche auswähle, können
Sie sehen, dass wir
diese Füll- und Auto-Optionen
tatsächlich vermissen . Wenn ich das
der vertikalen Box hinzufüge, können
Sie sehen, dass wir
diese Optionen zurückbekommen. Deshalb werde ich
tatsächlich hinzufügen, wir können diesen Button
löschen. Jetzt. Ich werde unsere Widgets tatsächlich zur vertikalen Box hinzufügen,
anstatt
direkt in das Bildlauffeld. Aber keine Sorge, das
Bildlauffeld wird sich immer noch so verhalten wie es sollte, wenn unser
vertikales Feld
im Bildlauffeld zu
groß für das Bildlauffeld wird, wird es eine kleine Bildlaufleiste bekommen und wir können scrollen
durch den Inhalt. Im Moment müssen wir in der Lage sein, auf diese vertikale
Box in unserem Code zuzugreifen. Wir werden also wie
zuvor in der Artikelliste vorgehen und das vertikale Feld auswählen, das wir dem Bildlauffeld
hinzugefügt haben. Und wir werden
seinen Namen zur Artikelliste sagen. Und wir müssen es übernehmen ist variabel und dann werden wir kompilieren. Dann gehen wir zum Graph-Modus und verwenden
jetzt
den Konstrukt-Knoten . Deiner könnte ausgegraut sein. Meins nicht, weil ich es vorhin
verschoben habe, aber ich sagte, es ist ausgegraut. Das ist in Ordnung. Sie können es immer noch herausziehen und es funktioniert einwandfrei. Wir müssen also
zuerst alle
Einträge aus
unserer Artikelliste holen . Also werden wir mit der rechten Maustaste klicken
und eine Datentabelle abrufen. Und wir wollen Zeilennamen der
Datentabelle abrufen. Auf diese Weise können wir
eine Datentabelle festlegen und alle
Zeilennamen aus unserer Artikelliste
erhalten. Es wird uns also all
diese Namen hier geben. Als nächstes gehen
wir
zurück zur Hood und setzen unsere
Datentabelle auf Item List, werden dies mit
unserem Event Construct verbinden. Dann werden
wir von den Outro-Namen aus eine Schleife machen. Also ziehe ich heraus und
suche nach Schleife. Jetzt hatte ich tatsächlich
einen Fehler während der Dreharbeiten dieser Lektion, bei dem meine
Loop-Knoten auftauchten. Wenn Sie also ein Problem haben,
bei dem diese nicht vorhanden sind, können
Sie zum
Inhaltsbrowser gehen und den Engine-Ordner
suchen. Wenn es nicht da ist, können Sie es
anzeigen, indem Sie zu den Einstellungen gehen. Klicken Sie auf Engine-Inhalt anzeigen, gehen Sie
dann zur Engine und
suchen Sie nach Standard. Und Sie möchten
Standardmakros, öffnen Sie diese einfach. Und wenn Sie dann zum Widget
zu
Ihrer Hudson Bay zurückkehren ,
ziehen Sie es heraus, Sie sollten in der Lage
sein, sie zu finden. Hoffentlich
bekommst du diesen Bug nicht, aber nur für den Fall,
dass du es tust, habe ich ihn so behoben. Also tu das einfach. Hoffentlich werden
diese Loop-Knoten angezeigt. Also
suche ich einfach nach einer Schleife und wir wollen eine foreach-Schleife machen. Und das wird all
die verschiedenen Einträge
aus unserer Datentabelle
durchlaufen . Und mit dem Zeilennamen erhalten
wir die Daten oder die Struktur aus
unserer Artikelliste. Also
holen wir uns eine Datentabelle. Wir werden keine Datentabellenzeile bekommen. Wir setzen die
Datentabelle auf die Artikelliste. Und Sie können sehen, dass
wir unseren Rollennamen haben. Also werden
wir das einfach in das
Array-Element einbinden , denn
wenn Sie sich erinnern, erhalten wir dadurch
alle Zeilennamen. Jedes Mal, wenn dies ausgeführt wird, erhalten wir einen der
Zeilennamen aus unserer Artikelliste. Wir verbinden das
mit dem Loop-Körper. Dann erstellen wir
unser Widget für Artikellisten. Also werden wir ein Widget erstellen. Wir werden die Klasse auf
unsere Artikelliste Owning Player setzen . Wir können einfach rausziehen und
Owning Player holen , weil
wir uns in einem Widget befinden, wir können einfach
unser neues Widget bereitstellen. Wir haben unsere aktuellen
Widgets Owning Player. Dann verbinden wir die
gefundene Zeile, um den Widget-Knoten zu erstellen. Dann möchten
wir ab dem Rückgabewert dieses
neue Artikellisten-Widget einrichten. Um das zu tun, verwenden wir die Setup-Funktion
, die
wir gerade erstellt haben. Also wurde so etwas eingerichtet. Und wir wollen dann die
Setup-Listing-Funktion , die die Zeile
oder das Outro aus
unserer Artikelliste holen und
diese verbinden
kann oder das Outro aus , um das Angebot einzurichten. Schließlich
müssen wir tatsächlich ein
neues Widget, das wir
hier erstellt haben, zu unserer Artikelliste hinzufügen . Also
schnapp ich mir die Artikelliste. Und wir werden uns
davon zurückziehen und Kind hinzufügen tun. Wir möchten, dass unsere untergeordnete
vertikale Box dies mit unserer
Setup-Liste hier verbindet. Und dann benötigen wir für
den Inhalt das Widget, das wir der Artikelliste
hinzufügen. Also schnappen wir uns einfach
den Rückgabewert und verbinden uns mit solchen
Inhalten. Um nun nur den
Code zusammenzufassen, den wir gerade geschrieben haben.
Was passiert, wenn das
Widget erstellt wird, ist, dass es alle Zeilennamen
aus unserer Artikelliste
erhält. Also erhalte ich diese drei
Zeilen aus unserer Artikelliste. Dann durchläuft es
jeden einzelnen von ihnen. Also dieser Code hier, den wir 13 Mal hervorgehoben
haben. Und jedes Mal, wenn es ausgeführt wird, wird
es mit einem anderen
Zeilennamen aus unserer Artikelliste ausgeführt. Das bedeutet, dass
wir die verschiedenen Strukturinformationen
aus unserer Artikelliste erhalten. Und das richtet
ein neues
Listing-Widget ein oder erstellt es
und gibt ihm für
jede Widget-Liste, die wir erstellen, unterschiedliche Informationen . Und dann fügen wir sie für jede
einzelne zu dem Artikellisten-Widget hinzu, das wir zu unserer
Bildlaufbox
hinzugefügt haben , und hier. Jetzt können wir das also tatsächlich im Spiel
testen. Ich werde nur
diese alten Widgets löschen wir in unserer
vorherigen Lektion hinzugefügt haben. Also wähle ich hier einfach
das vertikale Feld aus, lösche das, lösche den Button. Wir wählen dieses
horizontale Feld hier aus. Löschen Sie das und wir löschen
dieses Textfeld, damit wir unser
Bildlauffeld etwas einfacher sehen
können. Ich verschiebe
das Bildlauffeld dort in die
obere linke Ecke. Also wird es das kompilieren. Und jetzt sind wir bereit, das zu testen, also klicken wir auf Play. Und jetzt können Sie
sehen, dass wir tatsächlich alle Artikel, die wir zu unserer
Artikelliste
hinzugefügt haben , auf unserem Bildschirm haben. Und das alles wird per Code
gemacht. Derzeit haben wir
die kleine Bildlaufleiste nicht mehr , da
es nur drei Einträge gibt, sodass sie nicht genug Platz
beansprucht, um die
Bildlaufleiste
tatsächlich existieren zu lassen. Aber was wir tun können, ist, wenn wir den Flugzeug-Editor
verlassen, können
wir einfach zur Artikelliste gehen. Sie können einzelne
Artikel hinzufügen, wenn Sie möchten. Aber ich nehme
einfach die Axt hier und wir werden das ein
paar Mal
duplizieren und dann dasselbe mit
dem Gesundheitsgetränk
machen, was
das ein paar Mal dupliziert. Wenn wir jetzt auf „Spielen“ klicken, haben
wir hoffentlich diese Bildlaufleiste. Derzeit kann ich nicht wirklich
mit der Bildlaufleiste interagieren. Und das liegt daran, dass unsere Maus an die Kamera unseres Spielers
gebunden ist . Als nächstes werde ich Ihnen
zeigen, wie wir ein bisschen
Code
einrichten können , der es uns ermöglicht, unsere Maus von
der Kamerasteuerung zu lösen, damit wir tatsächlich mit
unseren verschiedenen UI-Elementen interagieren können. Zunächst gehen wir
zu unserem Charakter-Blueprint. Also gehe ich einfach zu, wir werden diese Suche los, gehen in den Inhaltsordner für die Person, dann Blaupausen. Und wir gehen
zum ThirdPersonCharacter
und öffnen das. Jetzt haben wir noch
Code aus früheren Lektionen. Offensichtlich haben wir hier den
Code, unser HUD erstellt und dem Bildschirm
hinzufügt. wollen wir also behalten. Und wir können
diesen Killplayer-Code löschen , weil
ich ihn nicht mehr verwende. Wir fügen also eine Eingabe hinzu
, also klicke ich mit der rechten Maustaste und
suche nach einem Eingabeereignis. Ich würde eine Schicht machen.
Du hast die Schicht verlassen. Jedes Mal, wenn wir die linke
Umschalttaste drücken, wird zwischen Steuerung der
Kamera unseres Charakters und der Tatsache dass unsere Maus tatsächlich
frei ist, um mit der Benutzeroberfläche zu interagieren Zunächst
müssen wir also dorthin gelangen, wo unsere Maus gerade die Kamera
steuert oder nicht. Also holen wir uns den
Spieler-Controller. Daraus ziehen wir uns heraus und
erhalten Mauszeiger anzeigen. Dies ist wahr oder
falsch, unabhängig davon, ob
der Mauszeiger
gerade sichtbar ist oder nicht . Also machen wir ein F. Damit
können wir steuern, welchen Code wir ausführen, wenn der Mauszeiger
gerade sichtbar ist , als
wir ihn ausblenden wollen. Also machen wir oder werden kopieren, ich hole den Spielercontroller. Wir ziehen uns davon zurück
und stellen den Eingabemodus ein. Und wir wollen
den Eingabemodus nur auf
Spiel setzen , weil
wir wechseln. Wenn der Mauszeiger derzeit sichtbar
ist, wechseln
wir in den Gain-Modus, also wollen wir nur unsere Kamera
steuern. Also verbinden wir uns mit true. Und dann wollen wir auch unseren Mauszeiger
verstecken. Also ziehen wir heraus und
zeigen den Mauszeiger. Und wir wollen,
dass das so falsch ist. Wenn unser
Mauszeiger dann derzeit nicht sichtbar ist,
möchten wir ihn sichtbar setzen. Aber zuerst wollen wir
es auf Gain-Modus und UI setzen. Also stellen wir den Eingabemodus und das
Spiel ein und wussten, warum der Grund, warum
wir das Spiel und die Benutzeroberfläche und
nicht nur die Benutzeroberfläche verwenden , darin besteht, keine unserer Eingaben und unser
Charakter mehr funktionieren würden. Wenn wir also erneut die
linke Umschalttaste drücken würden, könnten
wir
den Y-Modus nicht verlassen , da dieser
Knoten nicht laufen würde. Stattdessen verwenden wir den eingestellten
Eingabemodus game und gy. Und wir verbinden
das mit false. Und dann erhalten wir
unsere Variable , die wir tatsächlich
in einer vorherigen Lektion erstellt haben. Sie können sehen, dass
der Code hier unten genau dort
ist, wo
wir das HUD erstellen. Wir setzen sie auf eine Variable und fügen sie
dann zu unserem Viewport hinzu. Also werden wir diese Variable
verwenden, um das Widget und den
Fokus so zu setzen. Zum Schluss
wollen wir unseren Cursor zeigen. Also ziehe ich einfach wieder aus dem
Get Player-Controller heraus , um den Mauszeiger zu zeigen. Wir wollen das übernehmen und das mit
unserem Output hier
verbinden. Jetzt ist alles
eingerichtet, wenn wir die Umschalttaste drücken.
Dadurch wird unsere Maus von der Kamerasteuerung
befreit und wir können die Benutzeroberfläche steuern. Und wenn wir es dann erneut drücken, übernimmt
es die Kontrolle über die Kamera
unseres Spielers zurück. Also können wir das kompilieren
und testen. Wir drücken auf „Spielen“. Momentan kontrolliere
ich meine Kamera. Wenn ich die Umschalttaste drücke,
siehst du, dass ich jetzt meine Maus habe. Ich
kontrolliere die Kamera nicht mehr. Eigentlich kann ich hier auch
unsere kleine
Bildlaufleiste benutzen , um durch alle
verschiedenen Einträge zu blättern. In dieser Lektion haben wir
nur noch
das horizontale Feld verwendet, um es zu unserem Bildlauffeld
hinzuzufügen. Aber wenn wir möchten, könnten
wir das Widget für
Artikellisten so oft bearbeiten ,
wie Sie es möchten. Damit wir zum Designer gehen können. Vielleicht wollte ich, dass das
tatsächlich ein Knopf ist. Wir können mit der rechten Maustaste auf
den horizontalen Boxer klicken. Wir könnten mit rappen
und wir wählen einen Knopf. Dann könnten wir
es so haben, dass, wenn dieser Knopf gedrückt
wird, etwas Code ausgeführt wird. So können wir
die Schaltfläche hier auswählen, nach unten scrollen und nicht angeklickt werden. Das schafft uns eine neue Veranstaltung. wenn diese Angebotsschaltfläche gedrückt
wird, wird eine ausgegeben. Wir könnten eine Druckzeichenfolge erstellen, und wir können diese
Druckzeichenfolge den aktuellen Wert
des Artikelnamens
ausgeben damit wir könnte
ItemName erhalten, erhalte Text. Wir würden den GetText verwenden. Beachten Sie es. Wenn wir jetzt
auf diese Schaltfläche klicken, der Name des Elements wird
der Name des Elements
,
auf das wir geklickt haben, gedruckt. Also gehen wir zum
Spiel und klicken auf „Spielen“. Und jetzt können Sie sehen, dass
dies Knöpfe sind. Momentan habe ich also die
Kontrolle über meine Kamera. Wenn ich die Umschalttaste drücke, bekomme ich jetzt meine Maus . Wenn ich jetzt darauf klicke, kannst
du sehen, dass sie
tatsächlich
den Namen des Elements ausdruckt . Das war's also für diese Lektion. Hoffentlich verstehen Sie jetzt,
wie Sie
Widgets tatsächlich erstellen und
diese Widgets dann mithilfe von Code hinzufügen können.
42. Widgets (Bindungen): Hallo zusammen. In dieser Lektion werden
wir uns jetzt Widget-Bindungen
ansehen , deren Bindungen wir
bestimmte Eigenschaften unserer Widgets
mithilfe
von Variablen oder Funktionen steuern
können bestimmte Eigenschaften unserer Widgets
mithilfe
von . Um Ihnen ein Beispiel zu geben, wenn ich
hier ein Bild hineinziehe und
es nur ein bisschen größer mache. Wenn Sie auf
der rechten Seite
des Bereichs Details hinüberschauen , sehen
Sie diese
Bindungsoption für einige der verschiedenen
Eigenschaften, die unser Bild hat. Das sind eigentlich
Einstellungen, die wir entweder
mit einer Variablen
oder einer Funktion steuern können . Ein gutes Beispiel dafür ist
die Sichtbarkeitsoption hier. Jetzt legt dies im Grunde
nur fest, ob das Widget
sichtbar ist oder nicht. Wenn wir es also als Gemüse belassen, können
wir es pausieren und auf „Spielen“ klicken. Wir werden sehen, dass wir
unser Bild hier haben. Und wenn wir zurück zur Haube gehen
und ich die Sichtbarkeit
auf hidden compile setze und
dann auf Play klicken. Sie können sehen, dass es nicht
mehr sichtbar ist. Wir können diese
Einstellung aber auch mit einer Variablen steuern. Wenn wir also zu unserem HUD zurückkehren, wählen Sie hier unser Bild aus.
Sie können sehen, dass wir neben der Sichtbarkeit eine
Bindungsoption haben. Und im Moment haben wir nur
die Option Bindung erstellen, und
das werde ich gleich erklären. Aber wenn wir
hier zu unserer Diagrammansicht gehen und
eine neue Variable erstellen, einfach aufgerufen
wird, nennen
wir es Bildsichtbarkeit. Und wir werden
seinen Typ auf Status, sorry,
Schiefersichtbarkeit setzen . Wir wollen also Eastlake-Sichtbarkeit. Dies ist der
Variablentyp, den wir
verwenden müssen , wenn wir
an eine Sichtbarkeitseinstellung binden. Also mache ich es als Komponente. Und wenn Sie hier unten sehen, ist
der Standardwert tatsächlich die gleichen
Einstellungen, die wir
in unserer Entwurfsansicht haben , wenn ich hier auf
das Drop-down-Menü für die
Sichtbarkeit klicke . Jetzt, wo wir
diese Variable erstellt haben, können
wir sie tatsächlich an
dieses Bild binden, das ist visibility. Wir können also binden drücken
und Sie sehen, dass
wir diese Variable jetzt hier sehen können. Wenn ich das jetzt auswähle, verwendet
unser Bild jetzt diese Variableneinstellung, um
festzustellen, ob es sichtbar ist. Und Sie können sehen, dass dies
tatsächlich ausgegraut ist. Wenn wir nun zum Ereignisdiagramm gehen
und die von uns erstellte
Variable auswählen, ist
sie derzeit auf Sichtbar eingestellt. Wenn wir also auf „Spielen“ klicken, sehen
Sie, dass es sichtbar ist. Und wenn wir zurückgehen und
diese Variable jetzt
auf versteckt in C setzen , ist sie jetzt versteckt. Und das ermöglicht es uns
, die Sichtbarkeit dieser Bilder
mithilfe dieser Variablen zu steuern . Und wir können diese Variable ändern, Belieben, also könnten
wir sie zum Beispiel setzen,
wir könnten sie so einstellen, dass sie nach einer
gewissen Zeit
ausgeblendet wird. Also könnten wir hier
eine Verzögerung hinzufügen. Nach zwei Sekunden setze ich
unser Bild auf versteckt. Und wir werden die Standardeinstellung auf
Sichtbarkeit
setzen , damit sie am Anfang
sichtbar ist. Dann, nach zwei Sekunden, wird
es auf versteckt gesetzt. Wenn wir auf „Spielen“ klicken,
sehen Sie, dass es jetzt sichtbar ist und nach zwei Sekunden wird
es ausgeblendet. Jetzt können wir auch
andere Eigenschaften unserer
Widgets mithilfe von Variablen steuern . Wenn wir also zu unserem HUD zurückkehren, gehen Sie zur Design-Ansicht und
wir haben unser Bild ausgewählt. Sie können sehen, dass
wir auch
eine Variable an den Pinsel binden können . Wir können also eine Variable verwenden, um all diese
Einstellungen hier zu steuern. Wenn wir also zum Graphen gehen und
ich eine neue Variable erstelle, nenne
ich meine
Pinseleinstellungen so. Wir ändern
den Typ auf Schieferpinsel. Und wir werden hier
die beste Option auswählen. Und wenn wir kompilieren, werden
Sie sehen, dass diese Optionen hier
tatsächlich mit denen übereinstimmen, die wir im Design der Ansicht
für unsere Bildpinseleinstellungen
haben. Und wenn wir auf die Bindung klicken, können
wir auch hier die
Pinseleinstellungen
festlegen . Jetzt können wir unsere
Pinseleinstellungen für Bilder mit der gerade erstellten
Variablen steuern . Wenn wir also Pinseleinstellungen auswählen und dann hier ein neues Bild
auswählen können. Ich wähle
zum Beispiel dieses grüne Gesicht. Und wenn wir kompilieren und auf „Spielen“ klicken, werden
Sie sehen, dass wir jetzt dieses grüne Gesicht
verwenden. Und es war immer noch
verschwinden auf zwei Sekunden. Denn wenn Sie sich erinnern, haben wir hier
unsere Sichtbarkeitsvariable, und das ist es, was die Sichtbarkeit
unserer Bilder steuert. Sie können also
mehrere Binds für die
verschiedenen Einstellungen hier haben , auch
für dasselbe Widget. Bisher haben wir nur
Variablen verwendet , um
diese Bindungen zu steuern, aber Sie können tatsächlich auch Funktionen
verwenden. Wenn wir also hier die
Sichtbarkeitsoption sagen, wenn wir einfach auf die Bindung klicken und wenn Sie jemals eine Bindung entfernen
möchten, können
Sie einfach darauf klicken
und die Bindung entfernen, und das wird sie wieder
auf die Verwendung zurücksetzen diese Einstellung hier. Jetzt ist es einfach auf versteckt eingestellt. Wenn ich also auf „Spielen“ klicken würde, wirst
du sehen, dass es einfach versteckt ist. Und selbst nach zwei Sekunden
wird sich das nicht ändern, da wir jetzt wieder diese
Sichtbarkeitseinstellung verwenden und nicht die Variable. Wir können aber auch Funktionen nutzen. Wenn wir also auf die Option hier klicken
und auf Bindung erstellen klicken, wird tatsächlich
eine neue Funktion erstellt und wir befinden uns immer noch in unserem
bp HUD. Hier können Sie sehen, dass der Rückgabewert unabhängig von der
Bindung
sein wird erfordert. Weil wir
die Sichtbarkeitsoption verwenden. Es gibt uns eine
Sichtbarkeitsausgabe unseres Knotens. Wenn ich zum Beispiel eine für
unseren Pinsel erstellen sollte, wenn ich diese Bindung entferne, dann erstelle ich eine neue Bindung. Sie werden sehen, dass
der Rückgabewert jetzt
ein leichter Pinselwert ist ,
da dies
die Variable ist, die er für diese Bindung
benötigt. Aber im Moment
werde ich das hier einfach auf unsere Pinseleinstellvariable zurücksetzen. Es wird also die Variable,
die wir
zuvor erstellt haben,
hier wieder verwenden die wir
zuvor erstellt haben,
hier wieder und
zu unserer neuen Funktion zurückkehren. Wenn wir also zu Funktionen gehen, werden
Sie sehen, dass wir jetzt
eine Option zum Abrufen der Sichtbarkeit haben. Und das ist die Funktion, die wir
geschaffen haben, als wir
diese Bindung hier erstellt haben. Jetzt können wir
hier wie gewohnt Code hinzufügen um die
Sichtbarkeit zu steuern. Also könnten
wir zum Beispiel den Player-Controller bekommen. Davon könnten wir Maus bekommen,
werden, Show, Mauszeiger bekommen. Und wir könnten uns von unserem Rückgabewert zurückziehen,
du wirst geschlagen. Stecker. Zeigt den Mauszeiger
in den Indexer. Wenn also der
Mauszeiger anzeigen wahr ist, setze ich
unser Bild auf sichtbar. Und wenn es falsch ist, setzen
wir es auf versteckt. Wenn Sie sich an
unsere vorherige Lektion
in ThirdPersonCharacter erinnern , haben wir diesen Code hier eingerichtet, es uns im Grunde ermöglicht, die
Steuerung der Kamera oder die
Steuerung der Maus umzuschalten . Wenn wir jetzt auf „
Spielen“ klicken, können Sie sehen, ich die Unreifen überhaupt nicht sehen kann, aber ich übernehme die
Kontrolle über meine Kamera. Aber wenn ich die Umschalttaste drücke, siehst
du jetzt dass
ich meine Maus habe und mein
Bild tatsächlich angezeigt wird. Und wenn ich die Umschalttaste erneut drücke, können
Sie sehen, dass
es jetzt versteckt ist. Und der Grund dafür ist,
dass in unserem HUD
diese Funktion ausgeführt wird, um die Sichtbarkeit unserer Bilder zu bestimmen. Das heißt, wenn
der Mauszeiger sichtbar
ist oder wenn diese
Variable wahr ist, setzen wir sie auf visible. Und wenn es falsch ist, wird es auf versteckt
gesetzt. Jetzt gibt es noch ein anderes
Beispiel, das ich dir
geben wollte , und das ist die
Verwendung des Fortschrittsbalkens. Jetzt werden Fortschrittsbalken normalerweise für Dinge wie
Gesundheits- und
Hungerbalken oder
Ladebildschirm und Balken
verwendet . Wir gehen also zur
Entwurfsansicht über und holen den Fortschrittsbalken
von der Palette. Zieh das rein. Ich werde meins so ein bisschen
länger machen. Jetzt haben wir ein paar
Einstellungen für Dinge wie den Stil, die
steuern, wie er aussieht. Aber wir werden uns hier nur
auf den Prozentwert konzentrieren. Und wenn das 0 ist, bedeutet das, dass der
Fortschrittsbalken leer ist. Und wenn es eins ist, können Sie sehen, wie ich es nach oben schiebe, es ist jetzt voll. Unser Prozentsatz wird also immer
ein Wert
zwischen 01 sein und das bestimmt, wie voll der
Fortschrittsbalken tatsächlich ist. Jetzt können wir auch eine
Bindung für diese Eigenschaft verwenden. Sie können also sehen, dass wir hier
die Bind-Option haben, sodass wir entweder eine Variable oder eine
Funktion
setzen können , um diesen Wert zu steuern. Jetzt, zum Zeitpunkt
der Dreharbeiten, gibt es tatsächlich einen Fehler in
der Engine, bei dem Sie dies nicht
an eine Variable binden
und ein Beispiel geben können . Normalerweise können Sie
diesen Wert an eine Float-Variable binden . Also wenn ich gehe und eine
neue Float-Variable in C erstelle, sagst
du amount und setzt
sie auf einen Float wie diesen. Und wir werden einfach kompilieren.
Wenn ich zur Entwurfsansicht zurückkehre und hier auf
die Bind-Option klicke, kannst
du sehen, dass unser Flow
nicht da ist und es auch sein sollte. Wenn Ihre Variable
hier ist, ist das großartig. Sie verwenden eine neuere
Engine-Version und der Fehler wurde behoben, sodass Sie
sich darüber keine Sorgen machen müssen. Aber wenn Sie es nicht
hier haben und es noch nicht behoben
wurde, können wir dies auf andere Weise umgehen, und zwar nur
mit der Funktion. Anstatt also nur die Variable
auszuwählen, können
wir einfach eine Bindung erstellen. Und hier sehen Sie, dass
der Rückgabewert ein Float ist. Und wir können einfach
unsere Betragsvariable nehmen in den Rückgabewert einbinden. Und jetzt können wir diesen
Float verwenden, um den Betrag zu kontrollieren. Also kann ich es auf 0,2 setzen. Wir können auf Kompilieren
und dann auf Play klicken. Sie können sehen, dass es jetzt auf der Fortschrittsleiste
bei 0,2 ist. Jetzt können wir tatsächlich ein weiteres Widget
einrichten, das die
Betragsvariable
steuert, die wir gerade erstellt haben, und das
unseren Fortschrittsbalken hier tatsächlich aktualisiert. Wenn wir also das
Spiel beenden, gehen Sie zum HUD. Wir können hier hinzufügen, sagen wir
einen Slider. Und wir werden es
ein bisschen größer machen. Ich werde
diesen Ankerpunkt nach
oben rechts ändern , weil das
der Punkt ist, der am nächsten ist. Also ändere ich den
Anker darauf. Und wir können den Stil
ändern , um ein bisschen größer zu werden. Also werde ich die Kugeldicke
sagen lassen , damit es im Spiel ein bisschen
einfacher zu sehen ist. Dann werden wir kompilieren. Und hier unten können Sie sehen, dass wir einen eigenen Wert geändert
haben. Und wenn wir auf die Plus-Schaltfläche klicken, wird uns ein
Ereignis erstellt, das es uns
ermöglicht, eine Variable festzulegen, indem wir die Folie verwenden die die Folie gerade
eingestellt ist. Schnappen Sie sich einfach unsere
Betragsvariable hier, verbinden Sie dies. Und jetzt, wenn wir unseren Slider im
Spiel
bewegen , kannst du sehen,
dass er hier drüben ist. Wenn ich die Umschalttaste drücke, um den Mausmodus
aufzurufen , können Sie sehen, dass unser Bild immer noch angezeigt
wird. Wir können keinen Slider ziehen
und Sie können sehen, dass unser Fortschrittsbalken tatsächlich mit unserem Slider
aktualisiert wird. Das ist so ziemlich alles
dafür, wie Sie
Variablen und Funktionen
an Widget-Eigenschaften binden können . Wenn wir hier zum Herzen zurückkehren, werde
ich einfach
die Planeten
verlassen, um zur Diagrammansicht zu
gelangen , falls Sie jemals der Bindungsfunktionen finden
möchten. Wir haben also erstellt, wenn wir
auf die Bind-Option geklickt
und die Bindung erstellt haben , finden
Sie diese auf
der Registerkarte Funktionen. Wie bei jeder normalen Funktion. Die Engine gibt
diese Namen
automatisch aus, sodass Sie sie bei Bedarf
umbenennen können. Und Sie können sie auch
löschen, wenn Sie sie
nicht verwenden, seien Sie vorsichtig. Wenn Sie eine löschen, die Sie in einer Widget-Bindung
verwenden, erhalten
Sie einen Fehler Seien Sie
also vorsichtig damit. Das war's für diese Lektion. Hoffentlich
verstehst du jetzt ein
bisschen mehr darüber, wie Bindungen und Widgets funktionieren und wie du sie in deinen
zukünftigen Projekten
verwenden kannst .
43. Widgets (Grenzen, Überlagerungen und Raster): Hallo zusammen. In dieser Lektion werden
wir uns
ein paar
weitere Widget-Typen ansehen. Wir werfen einen
Blick auf die Randüberlagerung und das einheitliche Gitterfeld. Aber bevor wir anfangen, werden
wir unser Projekt nur ein
wenig von unserer letzten Lektion
bereinigen . Also wähle ich einfach
diese drei Widgets hier aus,
lösche sie und gehe zum Event Graph. Ich nehme
meinen Konstrukt-Knoten verbinde ihn mit
diesem Knoten hier. Dann löschen wir diese
Knoten, die wir nicht verwenden, und
löschen auch diesen Schieberegler. Und wenn wir kompilieren,
sollte alles in Ordnung sein. Kehren wir nun zum Design
der Ansicht zurück Als
Erstes
schauen wir uns
das einheitliche Rasterfeld an. Wenn wir das in die Länge ziehen. Und ich werde
meine hier nur ein bisschen größer machen. Dieses Panel funktioniert
ähnlich wie das horizontale Feld. Die vertikale Box. Der einzige
Unterschied besteht darin, dass es sowohl vertikale als auch
horizontale Kinder haben kann. Um Ihnen ein kurzes Beispiel zu geben, wenn ich hier einfach
ein Bild greife und es
dem einheitlichen Rasterfeld hinzufüge. Du kannst es sehen. Es ist in
der oberen linken Ecke. Ich füge hier ein
zusätzliches Bild hinzu. Sie sehen, dass es still ist, beide sind immer noch in dieser
oberen linken Ecke. Aber du sagst, wenn ich einen von ihnen
auswähle, erhalte
ich tatsächlich diese
Pfeile und kann sie an
verschiedenen Stellen
positionieren, entweder nach unten oder
horizontal. Jetzt können wir dies auch
im Detailbereich
steuern .
Hier können Sie sehen, dass diese Widget-Zeile
derzeit
auf eins gesetzt ist und ihre
Spalte auf 0 gesetzt ist. Aber wenn ich die
Spalte auf drei setzen sollte, sieht
man, dass sie dann in die dritte Spalte
verschoben wird. Im Gegensatz zu den horizontalen
und vertikalen Boxen können
Sie jetzt auch
die Ausrichtung ändern. also hier oben im Detailbereich Wenn wir also hier oben im Detailbereich B in der
unteren rechten Ecke sagen wollen, könnten
wir das mit
diesen Ausrichtungsoptionen tun. Jetzt können wir
unserem einheitlichen
Rasterfeld auch Widgets mithilfe von Code hinzufügen . Und hier
werden sie wirklich mächtig weil wir
einheitliche Rasterfelder verwenden können um Dinge wie
Inventare oder
erweiterte Listen zu erstellen . Um Ihnen ein Beispiel
zu geben, wie Sie das machen würden, erstelle
ich ein neues
Widget, das wir auch
den Rahmen und das Overlay n verwenden können . Also gehen
wir
zum Content Browser. Ich
klicke einfach auf die Schaltfläche Hinzufügen, gehe zur Benutzeroberfläche,
als Widget Blueprint ein Widget verwenden auswählt
und es wird heruntergefahren. Und wir gingen nach Hause und S2, BP und Scott Grid Slot. Und das machen wir auf. Ich werde meine hier einfach so nach
oben ziehen. Um loszulegen, fügen
wir
das Rahmen-Widget einfach so zur
Hierarchie hinzu. es ausgewählt ist, können Sie
die Einstellungen für unseren
Rand im Bereich Details sehen . Und hier können wir
Dinge festlegen , wie wenn wir
ein Bild verwenden möchten , und dies
wird im Grunde genommen nur unsere Grenze in ein Bild
verwandeln. Wir können auch die Farbe festlegen. Wenn ich zum Beispiel
wollte, dass es grau ist, könnte
ich die Farbe
hier einfach in ein dunkleres Grau verwandeln . Und es gibt uns auch
Optionen für die Polsterung. Dies wirkt sich also auf alle Kinder aus, die wir zu dieser Grenze
hinzufügen. Jetzt können Grenzen nur noch ein Kind
haben. Es ist sehr hilfreich
, als eine Art
Hintergrund oder Container
für andere Widgets zu fungieren . Und eines dieser
Widgets ist das Overlay. Wenn wir also das
Overlay greifen und es
so zu unserem Rand hinzufügen , kann ich das jetzt nicht, wenn ich dem Rand ein weiteres untergeordnetes
Element
hinzufügen möchte . Wenn ich also das
Bild aufnehme, können Sie sehen ich
es nicht zum Rand hinzufügen
kann, aber unser Overlay kann so
viele untergeordnete Elemente haben, wie wir möchten. Also werden wir unser Bild so
zu unserem Overlay hinzufügen. Jetzt, wo das Overlay ausgewählt ist, können
Sie sehen, dass
es
keine eigenen Einstellungen hat. Und das liegt daran, dass es
wirklich nichts Visuelles macht. Es erlaubt uns lediglich, mehrere Widgets
hinzuzufügen. Und diese Widgets
überlagern sich gegenseitig,
sodass sie nicht in eine unterschiedliche horizontale
oder vertikale Richtung
verschoben werden . Sie waren einfach alle übereinander gestapelt
. Bevor wir also mit
dem Layout dieses Widgets beginnen, werden
wir hier die
Größe unserer Vorschau ändern da
es derzeit 1920 mal 1080 ist, was viel zu groß ist. Also werden wir
die Vollbildoption
hier so ändern , dass sie so gewünscht wird. Das bedeutet
im Grunde nur, dass das Widget so viel Platz beanspruchen soll wie
der Inhalt darin. Im Moment ist es also
sehr klein, weil unser Bild nur
sehr wenig Platz beansprucht. Aber wenn wir
unser Bild-Widget auswählen und das Bild
auf etwas anderes setzen. Also suche ich mir
dieses kleine grüne Gesicht aus. Sie können sehen, dass es
größer wird, weil unser Bild
größer ist , als wir es vergrößern
könnten, wenn wir wollen, sagen wir 128 mal 128 so. Wenn Sie jetzt hineinzoomen, stellen Sie möglicherweise fest, dass sich
die Oberseite näher an
der Kante und der Seite befindet. Und das liegt daran, dass wenn wir zu unserer Grenze
zurückkehren, das Padding auf 42 gesetzt ist. Und wenn wir auf das Drop-Down klicken, können
Sie sehen, dass die linken und rechten Werte
oder vier Pixel sind. Es ist also vier Pixel
vom Rand für unser Bild entfernt. Und dann sind oben
und unten zwei. Wenn wir also wollen, dass das alles gleich ist, könnten
wir das tun. Also werde ich meins so einstellen
, dass es zehn sagt. Wir haben also nur einen
Abstand von zehn Pixeln zwischen unserem Rand und Overlay-Widget, das in unserem Rahmen
enthalten ist. Jetzt haben wir unser
Icon-Bild hier. Wir werden auch
einige Texte hinzufügen. Also nehmen wir etwas Text und
fügen ihn zu unserem Overlay hinzu. Beachten Sie, dass es sich nur
über unser Bild legt. Jetzt ist unser Text im Moment ziemlich
groß, also
wähle ich ihn aus und ändere die Schriftgröße einfach auf 16 oder vielleicht 40. So wie das. Ich ändere den Text, um zum Beispiel
nur 99 zu sagen. Und wir werden es so einstellen, dass es an
der oberen rechten Ecke ausgerichtet ist, also verwenden wir die rechte
Linie und dann machen wir es, eigentlich
belassen wir es einfach als oberste Zeile. Also ist es jetzt in der
rechten Ecke. Vielleicht
wollten wir jetzt, sagen wir,
einen Fortschrittsbalken zu unserem
Raster-Slot hinzufügen . Das können wir machen. Also werden wir unseren Fortschrittsbalken auch
an der Überlagerung festhalten . Jetzt will ich das hier
unten in der Mitte haben. Also wähle ich
die mittlere Ausrichtung und dann die untere
Ausrichtung aus. Jetzt können wir
die Größe unseres
Fortschrittsbalkens mithilfe eines Größenfeldes ändern . Wenn wir also mit der rechten Maustaste darauf klicken
und rappen können, dann rappen Sie mit der Größenbox. Auf diese Weise können
wir die genaue Größe definieren ,
die
unser Fortschrittsbalken übertreffen soll. Wir können also die
Breite und Höhe ändern, die Breite auf
etwa 95
und die Höhe auf vielleicht zehn
setzen . Und jetzt haben wir einen
Fortschrittsbalken zu unserem Overlay hinzugefügt. Das sind genau die Größen
, die wir verwenden möchten. Vielleicht möchte ich es hier ein bisschen von
unten nach
oben drücken . Dafür könnten wir die
Polsterung benutzen. Mit unserer ausgewählten Größenbox. Wir können auf das
Füll-Dropdown klicken und
es von den Bomben abfüllen, sagen wir, fünf Pixel wie diese. Jetzt haben wir unser
Grid-Slot-Widget, das alle mit einem Overlay
angelegt ist.
Es ermöglicht uns nur, all diese
verschiedenen Widgets im selben Raum zu überlappen , während wir gleichzeitig
die Kontrolle über das Auffüllen
und die Ausrichtung haben. Einstellungen. Jetzt kompilieren
wir und fügen
diese Raster-Slots mithilfe von Code tatsächlich zu diese Raster-Slots mithilfe von Code tatsächlich zu unserem einheitlichen Raster innerhalb
unserer Haube hinzu. Bevor wir das tun, werden
wir
diese Bilder löschen , die wir dem einheitlichen Raster
hinzugefügt haben. Mit unserem einheitlichen Raster werden wir es
tatsächlich auswählen. Wir werden das Grid nennen. Jetzt. Wir müssen die Variable
übernehmen, damit wir auf dieses
Raster im Code zugreifen können, kompilieren und zur Diagrammansicht
übergehen. Also werden wir diesen Code zunächst nach oben
verschieben
und aus dem Weg räumen. Und wir werden jetzt
eine Sequenz hinzufügen, nur damit wir beide
Codeteile eins haben können. Das wird also zuerst
diesen Code ausführen und dann fügen wir den Rest
unseres Codes hier unten hinzu. Wir beginnen also damit, herauszuziehen und nach einer for-Schleife zu suchen. Wir wollen die
For-Loop-Option hier unten. Auf diese Weise können wir
im Grunde nur den Start- und Endindex
angeben
, der steuert, wie oft der Schleifenkörper tatsächlich ausgeführt wird. Also
setze ich meinen letzten Index. Sagst du neun? Das wird jetzt zehn Mal ausgeführt weil 0 im Wesentlichen eins ist. Daher möchten
wir für jedes Mal, wenn
diese Schleife ausgeführt wird, ein beliebiges Widget erstellen. Also ziehen wir uns
aus dem Loop-Körper heraus und erstellen Widget so. Dann, wie zuvor
, brauchen wir eine eigene Wohnung. Also ziehe ich einfach raus und
hole Owning Player. Jetzt stellen wir nur noch
den Owning Player von HUD zur Verfügung. Und dann
müssen wir die Klasse festlegen, also setzen wir das
auf den Raster-Slot. Dann brauchen
wir unser Grid-Panel und fügen dieses
neue Widget zu unserem Grid-Panel hinzu. Nun, weil Kinder
eines einheitlichen Gitters
eine Zeile und eine Spalte haben können ,
die definieren, wie weit, vertikal und
horizontal dort ist. Wir müssen
einige Berechnungen anstellen, um zu bestimmen, wo unsere neuen Rasterplätze positioniert werden
sollen. Es wird also
aus dem Rasterfeld gezogen. Würden Sie untergeordnetes Element
zum einheitlichen Gitter hinzufügen? Und wir verbinden das dort mit
dem Widget „Erstellen“. Jetzt wird der Inhalt nur noch
das neue Widget sein , das wir erstellt haben, aber wir haben auch eine
Zeile n und dann in der Spalte, jetzt wollen wir
mir Wasser geben, wie das funktioniert. Was wir also tun werden, ist
zuerst den Index zu speichern. Also ziehe ich mich
einfach aus
dem Indexwert in unserer for-Schleife heraus und fördere die Variable. Ich werde es
einfach Index nennen. Und wir werden das hier so mit unserer Schleife verbinden. Jetzt
müssen wir auch wissen, wie viele Spalten breit unser
Rasterfeld sein wird. Also werden wir dafür
eine neue Variable erstellen. Ich nenne meine
Kolumnen so. Und es wird eine Ganzzahl sein. Also setze es einfach auf Integer,
dann werden wir kompilieren. Und dann müssen wir den Standardwert
angeben. Also
setze ich meinen auf drei. also zunächst Unser Grid-Panel wird also zunächst
drei Widgets breit sein. Mithilfe unserer Index
- und Spaltenwerte können
wir jetzt bestimmen, in welchen Zeilen - und
Spaltenrasterschlitzen sich befinden sollen. Es wird unseren Index erfassen
und wir werden ihn durch unsere Spalten
teilen. Teilen Sie also, verbinden Sie
bis zu n Reihe. Und das wollen wir so
durch unsere Kolumnen teilen. Der Grund dafür ist nun dass wenn wir
den Index durch die Spalten teilen, dieser Indexwert
unter dem Spaltenwert liegt. Wenn dies also eins oder zwei ist, die Rückgabe immer 0 da zwei geteilt
durch drei 0 ist, weil es sich um ganze Zahlen handelt. Es gibt also
nur ganze Zahlen, bis dieser Index frei ist. Dies, der Rückgabewert von
r divide node ist 0. Das bedeutet also, dass unsere
Widgets in
der vertikalen Höhe von 0 bleiben , bis
dieser Index frei ist. Und dann gibt dieser Knoten
tatsächlich einen zurück , weil drei geteilt
durch drei eins ist. Dann wird unser Widget
nun tatsächlich in die
nächste vertikale Zeile verschoben. Dann haben wir die Säulen. Und das funktioniert
tatsächlich auf ähnliche Weise. Also kopieren wir diese beiden
Variablen und ziehen uns
aus meinem Index heraus und machen
das Prozentsymbol. Das ist also das
Prozentsymbol, hip. Das ist der Modus. Was dies also im Wesentlichen bewirkt, ist diese beiden
Werte
immer noch durch einander zu teilen. Aber anstatt
uns das Ergebnis zu geben, gibt
es uns den Rest. Wenn wir
das also mit Spalten verbinden, wenn Sie sich vorstellen, dass der Index
eins ist und die Spalten frei sind. Wenn wir
sie teilen würden, wäre das Ergebnis 0. Aber weil wir den Rest
bekommen, wird
der Rest einer sein. Wenn unser Index zwei ist und
unsere Spalten drei sind,
ist unser Rest zwei. Und das
schiebt unser Widget entlang der horizontalen Achse. Jetzt haben wir unser Setup
zum Spawnen unserer Grids
abgeschlossen und sie dann
zum Uniform Grid
Widget hinzugefügt , damit wir es
vergleichen und sehen können ,
wie das im Spiel aussieht. Also drücken wir auf „Spielen“. Seht zu, dass wir jetzt unser Netz haben. Sie können sehen, dass es drei Web und dann werden zehn Widgets
hinzugefügt. Wir haben also neun und dann
zehn unten. Jetzt gibt es derzeit ein
bisschen gequetscht, weil unser tatsächliches einheitliches Raster zu
klein ist , um all
diese Widgets zu verstehen. Was wir also tun können, ist
einfach zu unserem HUD zurückzukehren, Design der Ansicht zu
gehen, und wenn unser einheitliches
Raster ausgewählt ist, können
wir einfach die
Größe des Inhalts in C annehmen, es ist wirklich klein geworden, weil momentan hat es
keinen Inhalt. Aber wenn wir kompilieren, klicken
wir auf Play. Sie werden sehen, dass jetzt alle unsere Widgets
die richtige Größe haben. Wenn wir wollten, könnten wir zu unserem HUD
zurückkehren. Wir könnten den Wert
der Spalte
nett und einfach ändern , indem wir einfach den Wert
ändern, gut um fünf zu sagen. Und wenn ich dann
kompiliere und auf „Spielen“
klicke, wirst du sehen, dass
es jetzt fünf breit ist. Vielleicht wollten Sie jetzt ein
bisschen Abstand zwischen Ihren Widgets, die sich innerhalb
des Rasters befinden . Das könnten
wir auch machen. Also können wir zurück zum HUD gehen. Sie dann in der Entwurfsansicht Wählen Sie dann in der Entwurfsansicht das Rasterfeld aus. Und hier drin können wir tatsächlich das Slot-Padding
einstellen. Also können wir das auf fünf setzen. Und wir werden jetzt fünf
Pixel zwischen den
Ordnungen der untergeordneten Elemente
des einheitlichen Gitters haben. Also drücken wir wieder auf „Spielen“. Sie können sehen, dass
wir jetzt eine schöne Lücke
zwischen diesen Widgets haben . Wenn Sie sich erinnern, wie unsere Liste, können
wir diese
in Schaltflächen ändern. Derzeit sind es
nur statische Bilder, aber wir können sie
in Schaltflächen ändern, wie wir es bei unserer vertikalen
Liste auch hier getan haben. Wenn wir also
zu unserem Raster-Slot zurückkehren, können
wir unser Overlay
hier in einen Knopf wickeln, also werden wir mit dem du-Button umwickeln. Sie können sehen, dass wir jetzt eine Schaltfläche
haben und weil wir immer noch den
Rand als Hintergrund verwenden, können
Sie sehen, dass
die Schaltfläche tatsächlich diese Lücke von zehn Pixeln
hat. Wenn wir das also
loswerden wollen, können
wir einfach unseren Button auswählen, Padding
machen und diesen auf 0 setzen. Und Sie sehen, dass
unser Button jetzt tatsächlich bis zum
Rand unserer Grenze
geht. Aber wir haben immer noch ein bisschen
komische Polsterung an den
Seiten unseres Widgets. Und das liegt daran, dass wenn wir hier
eine Schaltfläche auswählen und
nach unten scrollen, finden
Sie sie in der Ich glaube, dass
sie installiert ist. Ja. Wenn wir den Stil öffnen, werden
Sie sehen, dass wir jetzt
normales Padding und Press Padding haben, weil
wir hier 12 haben. Wenn wir das öffnen, sehen
Sie links und rechts, wir ein 12-Muster haben und das ist es, was
uns diese große Lücke gibt. Wenn wir das so ändern wollen, dass es auf allen Seiten gleich ist, können
wir einfach
diese obere Zahl hier ändern, sagen wir fünf, und dann machen dasselbe mit dem
Presse-Polster. Ändere das auf fünf und
dann werden wir kompilieren. Sie werden sehen, dass wir jetzt die richtige Menge an
Padding von jedem
Rand unseres Widgets
haben . Jetzt haben wir unserem Grid-Slot-Widget eine Schaltfläche
hinzugefügt. Wir können Code ausführen lassen,
wenn diese Taste gedrückt
wird, damit wir hier nach
unten scrollen können, wir haben unsere Schaltflächen ausgewählt. Wir können ein
onclick-Ereignis hinzufügen, damit wir das hinzufügen können. Und wenn wir es sammeln, können
wir Code ausführen. Also füge ich hier einfach einen
Druckstring hinzu. Wenn wir
das jetzt kompilieren und auf „Spielen“ klicken, werden
Sie sehen, dass wir unsere Raster-Slots
haben , die
wie eine Schaltfläche hervorgehoben sind. Und wenn ich sie drücke, können
Sie sehen,
dass die Druckzeichenfolge läuft. Jetzt kann unser einheitliches Rasterfeld auch in einem Bildlauffeld verwendet werden. Wenn wir Planeten verlassen, um zum Hub zu
gelangen,
dann, wenn wir unser
Rasterfeld auswählen und mit der rechten Maustaste klicken, rappen
wir mit und wir wollen
das Bildlauffeld so. Nun, in unserer Bildlaufbox, wollen
wir eigentlich eine Größe festlegen, denn wenn wir die Größe erreicht haben, wird der
Inhalt tatsächlich
nie diese kleine
Bildlaufleiste aufrufen, weil sie immer größer
wird. Also wollen wir das Häkchen entfernen
und eine Größe auswählen. Also werde ich meine so
etwas breiter machen, aber ich werde sie kürzer
machen. Also lassen wir unsere Bildlaufleiste hochkommen. Dann werden wir kompilieren. Und wir wollen nur
sicherstellen, dass unser Rasterfeld so eingestellt ist sich horizontal
und vertikal füllt. Dann drücken wir auf „Spielen“. Wir
sollten sehen, dass wir hier unsere vertikale
Bildlaufbox
haben. Und wir können, wenn ich die Umschalttaste drücke, so durch
unser Raster scrollen. Vielleicht wollten Sie diesem Bildlauffeld
einen Hintergrund hinzufügen . Wir können das mit Hilfe von Grenzen tun. Wenn wir also jetzt aussteigen
und zu unserem HUD zurückkehren, können
wir unser Bildlauffeld auswählen
und dieses mit einem Rahmen umschließen. Also machen wir Grenze. Jetzt ist unsere Bildlaufbox innerhalb des Rahmens
enthalten. Wenn wir die Ansicht vergrößern, können Sie
tatsächlich sehen, dass
etwas von dieser seltsamen
Polsterung im Gange ist . Also, wenn wir
hier unsere Grenze auswählen und die Polsterung finden, werde
ich einfach
meine setzen, um sie tatsächlich zu verkaufen, um zehn zu sagen. Jetzt gibt uns eine
schöne große Grenze. Und dann ändern wir die Farbe. Wenn unser Rand ausgewählt ist, können
wir zu
den Pinseleinstellungen gehen. Und auch hier können Sie ein
Bild festlegen, wenn Sie möchten. Ich
benutze nur die Pinselfarbe. Und wir können das so einstellen, dass es hier diese rote Farbe
sein soll. Wenn wir jetzt kompilieren
und auf Play klicken, werden
Sie sehen, dass wir jetzt
die schöne
Hintergrundfarbe haben , die wir ausgewählt haben, und wir können immer noch gut
durch unsere Liste blättern . Das war's also für diese Lektion. Hoffentlich verstehst du jetzt
ein bisschen mehr über alle drei
dieser Widget-Typen.
44. Widgets (Drag & Drop): Hallo zusammen. In dieser Lektion werden wir
uns
Drag & Drop-Operationen
mithilfe von Widgets ansehen . Wenn Sie unsere vorherige Lektion nicht
mitgemacht
haben, haben wir dieses Raster hier erstellt. Wir haben diese verschiedenen Widgets und legen sie in eine Bildlaufbox. Ich würde dringend empfehlen die letzte Lektion zu befolgen, da wir
diese Widgets tatsächlich
für
unser Drag-and-Drop verwenden werden . Um loszulegen, werde
ich es tatsächlich ein bisschen größer
machen, also haben wir etwas mehr
Platz zum Arbeiten. Also gehen wir rüber zur Motorhaube
und ich schnappe mir einfach unsere Scrollbox oder
eigentlich tut mir leid, unsere Grenze hier, was das
ein bisschen größer machen wird . Dann gehen wir
in die Diagrammansicht und ich füge noch ein
paar weitere Slots hinzu. Also setzen wir das auf 19. Also werden wir
dieses Mal stattdessen 20 Slots haben, wir können das testen, klicken Sie auf Play. Sie können sehen, dass wir
alle unsere Slots hier haben und unsere Bildlaufleiste
ordnungsgemäß funktioniert. Jetzt können wir X
aus dem Ebenen-Editor heraus und gehen zu
unserem Grid-Slot-Widget gehen
dann in
den Diagrammmodus. Hier in den Funktionen haben
wir tatsächlich einige Funktionen, die wir überschreiben können. Und das sind Funktionen, die
alle Widgets eingebaut haben. Wie Sie sehen können,
gibt es viele von ihnen. Wir werden diese nicht
alle durchgehen, weil einige von ihnen
etwas weiter fortgeschritten sind. Wenn Sie jedoch mit der Maus darüber fahren, erhalten
Sie einen kleinen
Tooltipp, der besagt, wofür diese Funktionen
verantwortlich sind. Und es gibt ein paar, mit denen man sich vertraut machen kann. Also haben wir Dinge
wie Maustaste gedrückt. Das wird also ausgeführt,
wenn du
die Maustaste gedrückt drückst ,
während deine Maus über dem
Widget und dem Spiel schwebt, wir haben Dinge wie die
Drag-Funktionen hier drüben. Diese werden wir heute verwenden um ein
Drag-and-Drop-System zu erstellen. Es gibt auch Funktionen für die Eingabe
der Maus und/oder
das Verlassen der Maus. Und das heißt, diese
werden immer dann ausgeführt, wenn unsere Maus über unserem Widget
schwebt und dann nicht mehr
über unserem Widget schwebt. Aber wir beginnen
mit dem erkannten und ziehen. Und dies wird die Funktion
sein, die
erkennt, wenn wir unsere Maus
gedrückt halten , während sie sich über diesem Widget befindet, und wir
beginnen, es zu bewegen. Dann erkennt es einen Widerstand und diese
Funktion ist falsch. Also klicken wir darauf, um diese Funktion
zu überschreiben. Und hier haben wir
ein paar Ein- und Ausgänge. Um diese Eingaben schnell
abzudecken, haben
Sie meine Geometrie und diese gibt Ihnen
im Grunde
Informationen über Ihre Mausposition relativ zur Bildschirmposition
und ähnliches. Sie werden das wahrscheinlich nicht allzu oft
benutzen. Was Sie jedoch möglicherweise viel
häufiger verwenden , ist das Zeigerereignis. Auf diese Weise können wir beispielsweise Dinge wie die Maustaste
gedrückt halten. Und wir können dies jetzt verwenden, um zu
überprüfen, welche Maustaste tatsächlich gedrückt
wurde,
als das Medikament erkannt wurde, da wir tatsächlich sowohl mit der linken als auch mit der mittleren Maustaste
ziehen können . Wenn wir also nur möchten, dass
dieser Code
beispielsweise für die linke Maustaste ausgeführt wird, dann würden wir überprüfen wollen, ob
es sich um die Klicktaste handelt, die linke Maustaste. Und alles, was ich getan habe, war auf den
kleinen Knopf dort zu
klicken und dann mit der linken Maustaste die linke Maustaste zu klicken. Wir können dieses
Zeigerereignis auch verwenden, um den Namen der Taste
abzurufen, die gedrückt wurde. Also könnten wir einen
Affekt-Button bekommen. Und von hier aus können
wir eine Anzeige erstellen, und wir können den
Schlüsselanzeigenamen erhalten. Und das wird
uns nur sagen, welcher Schlüssel genau
gedrückt wurde , als dieses
Medikament entdeckt wurde. Aber für heute
benutzen wir
einfach die Maustaste gedrückt. Also markiere diese einfach
und lösche sie, und ich werde
es so machen, dass dieser Code nur ausgeführt
wird, wenn wir mit der
linken Maustaste ziehen. Also füge ich hier ein if hinzu, verbinde es mit unserem
Anfangsknoten hier. Und dann verbinden wir
den Rest des Codes
mit unserem wahren. Jetzt können wir
die Anmerkungen
zum
Drag-Drop-Vorgang erstellen tatsächlich verwenden die Anmerkungen
zum
Drag-Drop-Vorgang erstellen Sie mit der
rechten Maustaste und
suchen nach Erstellen, Erstellen, Ziehen. Und wir wollen eine solche
Drag-Drop-Operation. Und wir werden das so mit
dem Wahren verbinden. Jetzt können wir ein
vorhandenes Widget verwenden, aber ich
werde tatsächlich ein neues
Widget erstellen , das
verwendet wird , um unserer
Maus beim Ziehen und Ablegen im Grunde zu folgen. Also werden wir ein neues Widget
erstellen. Also werden wir das kompilieren und vorerst
speichern. Und wir klicken mit der rechten Maustaste
im Inhaltsbrowser gehen zur Benutzeroberfläche. Mach Widget-Blueprint. Benutze ein Widget und scrolle nach unten
und wir nennen diesen BP. Widget so bewegen. Und wir werden das öffnen, was auch immer. Ich werde meine hier einfach so nach
oben ziehen. Wenn wir nun tatsächlich
aus unserem Grid-Slot-Widget ziehen, wird
dies das Widget sein
, das erstellt wird und unserer Maus
folgt, während wir die Maus
bewegen. Also werden wir,
sagen wir, ein Bild dafür wollen. Wir beginnen also mit einer Überlagerung. Also wird es ein Overlay packen, das hier
platzieren, dann schnapp
ich mir ein Bild. Der Grund, warum ich
mit einem Overlay beginne, ist dass wir
mehrere Widgets haben können, wie zum Beispiel ein Bild und etwas
Text. Also schnappen wir uns
auch etwas Text, der hier hereingezoomt ist. Jetzt stelle ich meine
Vorschaugröße auf die
gewünschte Größe ein, damit wir
genau sehen können , wie groß unser
Widget sein wird. Ich ändere das
Bild auf 64 mal 64. Wir setzen es ein, machen
es zu diesem kleinen roten Gesicht. Stattdessen ändern wir unsere
Texte so, dass sie etwas kleiner sind, also machen wir etwa 14. Jetzt ist unser Image
immer noch ziemlich viel. Da haben wir's. Wir wollen die Größe erneut
ändern. Wir ändern es auf 64
mal 64, und wir werden unsere
Texte immer noch ein
bisschen klein machen , wie 12. Und wir werden zum Beispiel so einstellen, dass nur darüber
geschrieben wird. Jetzt möchte ich, dass
sich mein Text in der rechten Ecke befindet, damit er rechts ausgerichtet wird. Und das sieht für mich okay aus. Auch dies ist nur
ein kurzes Beispiel, Ihnen zeigt,
wie wir
ein Widget einrichten und es dann ziehen können . Jetzt kehren wir zu
unserem Rasterplatz zurück. Und in dem erkannten On-Drag müssen
wir tatsächlich
das Widget erstellen , das
wir gerade erstellt haben. Und dann liefern wir das
für unsere Drag-Drop-Operation. Es wird diese
also ein bisschen weiterbewegen. Und wir ziehen heraus und
suchen nach Widget erstellen. Und wir wollen den Owning
Player auf die besitzende Klasse setzen. Also
suchen wir nach dem eigenen Player, verbinden ihn und
setzen die Klasse
auf das Move-Widget
, das wir gerade erstellt haben. Als nächstes nehmen wir
unseren Rückgabewert aus unserer
Notiz zum Erstellen eines Widgets und fügen ihn
in das Standard-Drag Visual ein. Und wir verbinden unsere Drag-Drop-Operation
erstellen
mit dem zurückgegebenen Knoten. Und wir wollen
den Rückgabewert verwenden, um die Operation
für die Rückgabe
bereitzustellen. Beachten Sie hier. Jetzt haben wir einige zusätzliche Pins unserer Drag-Drop-Operation.
Beachten Sie, dass wir hier eine Klasse haben. Ich werde das nicht behandeln
, weil das
meistens C plus plus Zeug ist und du sowieso so ziemlich immer den Standard
verwendest, du kannst einige Tags hinzufügen. Also, wie in unserer Tags-Lektion, könntest
du ein paar
verschiedene Tags dazu hinzufügen. Und dann am anderen Ende, wenn wir unser Widget tatsächlich
ablegen,
sagen wir, dass ein anderes Widget diese Tags lesen
kann. Und dann haben wir Nutzlast. Jetzt kann Payload
jedes beliebige Objekt sein. Es kann ein Schauspieler sein oder was auch immer. Und dieses Objekt kann zum
Speichern von Variablen oder Funktionen verwendet werden . Und wieder haben wir
Zugriff auf das Widget,
auf dem wir
die Operation beenden. Sie könnten also, wenn
Sie Informationen
von diesem Widget an das
Widget weitergeben , auf dem wir sie ablegen. Sie könnten einige Tags oder sogar ein Objekt hinzufügen, das nur
eine Menge Informationen enthält , die Sie
dann in diesem anderen Widget lesen können . Im Moment werden wir diese
nicht verwenden, da sie
etwas weiter fortgeschritten sind. Wir haben aber auch eine Pivot-Option. Dies ist im Grunde nur der Punkt, an
dem das Widget gesperrt wird,
wenn es mit unserer Maus ist. Wenn
es also in der Mitte ist, bedeutet das, dass unsere Maus, wenn sie still steht,
das Widget
um unsere Maus herum ist, wobei sich die Maus in der Mitte befindet. Und während wir es ziehen, bleibt
die Maus immer in der
Mitte unserer Bewegung
, während wir uns bewegen. Und
hier gibt es ein paar
verschiedene Optionen , aus denen Sie wählen können. Ich behalte einfach
mein Gesundheitszentrum. Und dann haben Sie
einige Offsets, sodass Sie einige Pixel-Offsets hinzufügen können. Vielleicht wollten Sie, dass sich
die Maus in der Mitte
des Verschiebungs-Widgets befindet, aber Sie wollten beispielsweise
einen Versatz von zehn Pixeln nach links hinzufügen . Sie könnten das
mit diesen Werten tun. Derzeit wird dieser
Code niemals ausgeführt. Und das liegt daran, dass wir
dem Widget
tatsächlich mitteilen müssen , wenn
etwas gezogen wird. Um das zu tun,
müssen wir tatsächlich zur
Außerkraftsetzung gehen und wir müssen zur
Ein-Maus-Taste runter gehen. Dies wird jetzt immer dann ausgeführt, wenn die Maustaste oben in unserem Widget
gedrückt wird. Wir wollen also
zunächst überprüfen, welche Maustaste gedrückt
wurde. Also ziehen wir uns von hier aus
und bekommen Auswirkungen auf die Schaltfläche. Und daraus können wir uns tatsächlich
hinziehen und das Gleiche tun. Auf diese Weise können wir überprüfen diese Schaltfläche
der hier eingestellten Schaltfläche entspricht. Also klicke ich einfach auf
den kleinen Tastatur-Button und dann auf die linke Maustaste. Also setzt es auf die
linke Maustaste. Und wir fügen einen if-Knoten hinzu. Also wird es reichen, wenn das so ist. Jetzt können wir,
wenn
Sie möchten, Code hinzufügen, für den er ausgeführt werden soll wenn die linke Maustaste auf unseren Rasterplatz
klickt. Und den verschiedenen Code, ausgeführt wird, wenn wir mit der Maus klicken, möchten
Sie dies hier
hinzufügen damit wir diesen Knoten kopieren und
einfügen können, ihn mit
dem Effektknopf
verbinden und dann können wir
das in weiße Maus ändern. Also dann könnten wir noch eine
haben, wenn, wenn die linke
Maustaste gedrückt würde, dann würde
der wahre Pin hier laufen. Und wenn die rechte
Maustaste
gedrückt wurde und die Truppe,
und hier sind wir betrunken. Und dann könnten Sie
einen anderen Code haben ,
je nachdem,
welcher gedrückt wird. Jetzt, da ich nur möchte, dass meine Drag-Drop-Operation ausgeführt wird,
wenn
wir die linke Maustaste verlassen , werden wir
diesen Code hier hinzufügen. Also ziehen wir uns
von true zurück und
suchen nach Drag Detect. Wir wollen
Drogen erkennen, wenn sie gedrückt werden, dann brauchen wir die Zeigerereignisse. Also
nehmen wir einfach das Mausereignis und verbinden uns mit
dem Zeiger von m. Und dann den Drogenschlüssel, die Tastatur klickt und dann mit
der linken Maustaste klickt, um sie auf die linke
Maustaste zu setzen dass. Und dieser Knoten wird im Grunde
nur erkennen, zieht die Maus gerade unser Widget. Und wenn ja,
wollen wir das an
den zurückgegebenen Knoten und den
Rückgabewert als Rückgabewert übergeben . Und das ist eigentlich das, was dazu führen
wird, dass die Textfunktion
beim Ziehen ausgeführt wird und dann auch der gesamte Code, den wir hier
hinzugefügt
haben, ausgeführt wird. wir also mit
gedrückter Maustaste zu Ihnen zurückkehren, möchten
wir immer, dass alle Pins
hier einen Wert zurückgeben,
der für die
Mausbedienung und solche
Dinge wichtig ist . Wir
kopieren einfach eine schriftliche Notiz und fügen
sie hier ein. Und vielleicht, wenn wir mit der rechten Maustaste auf das Widget klicken, möchten
wir leider, dass etwas
anderes passiert, also füge ich einfach hinzu,
print string hier. Wir können das in
den Rückgabewert einfügen, und dann wird es das kopieren
und hier unten einfügen. Wenn es also weder die linke Maustaste noch
die rechte Maustaste ist, ist es
vielleicht zum Beispiel die mittlere
Maustaste. Wir wollen einfach nicht, dass
etwas passiert. Jetzt wollen wir diese
Rückgabewert-Pins nicht so leer
lassen . Wir müssen entweder
eine behandelte oder eine unbehandelte bereitstellen. Wenn wir also rausziehen und
nach Handled suchen,
wenn wir jetzt ein Handle zurückgeben, das der Engine
im Grunde sagt:
Hey, wir haben
die Mauseingabe gehandhabt. Lassen Sie keine anderen
Widgets damit umgehen. Führen Sie also keine
Events mehr aus, weil die
Maus gedrückt wurde. Also könnten wir das zum Beispiel verwenden, diesen Code auf unserer rechten
Maustaste gedrückt zu haben, aber vielleicht nicht für
den Knoten hier unten. So können wir uns hinziehen
und unbehandelt handeln. Und das sagt
der Engine nur: Hey, wir haben nichts
mit der Mauseingabe gemacht. Wenn etwas anderes diese Eingabe
verwenden möchte, dann lass es zu. Also verwenden wir hier unhandled. Also sollte es so aussehen. Jetzt müssen wir tatsächlich eine Änderung vornehmen, die
wir als Designer vornehmen müssen. Wenn wir also
dorthin zurückkehren, haben
wir, falls Sie sich erinnern, eine Schaltfläche hinzugefügt, die wir im Grunde als
Hintergrund verwenden und die
es uns ermöglicht, dieses Widget zu drücken. Jetzt müssen wir diesen Button
entfernen. Und der Grund dafür ist
, dass die Buttons den
Code überschreiben
, den wir hier hinzugefügt haben. Wenn wir also diese Taste oder die
Maustaste gedrückt
halten würden , würden
wir eigentlich nicht laufen, weil das Button-Widget das stattdessen
behandelt. Um diesen Knopf zu entfernen, ist
es eigentlich eine wirklich
einfache Möglichkeit, dies zu tun. Wir können
hier einfach mit der rechten Maustaste
auf das Schaltflächen-Widget klicken und
nach unten gehen, um durch zu ersetzen, und es gibt eine Option
für Durch Kind ersetzt. Und im Grunde löscht
das einfach den Button
und dann weisen wir das Overlay an, ihn zu ersetzen. Also werden wir durch
ersetzt durch Kind ersetzen. Und Sie können sehen, dass unser Button
weg ist und wir stattdessen wieder bei der Überlagerung mit all
seinen Widgets sind. Wenn Sie möchten, können Sie der Überlagerung jetzt
etwas
mehr Padding hinzufügen . Also füge ich einfach eine
Fünf oder Zehn hinzu, es
sieht ein bisschen besser aus. Wir haben jetzt etwas mehr Padding zwischen dem Overlay
am Rand. Jetzt können wir es kompilieren und wir können es tatsächlich
testen. Wir haben gerade eine Warnung , weil ich den Button gelöscht
habe. Wir können einfach zum
Ereignisdiagramm gehen und Sie können sehen , dass wir immer noch ein
Ereignis über diese Schaltfläche haben,
also können wir
es einfach markieren, löschen
und wir werden keine Warnung mehr erhalten diese Schaltfläche haben,
also können wir
es einfach markieren, löschen . Jetzt können wir das also tatsächlich testen.
Also werden
wir auf „Spielen“ klicken. Sie können sehen, dass
unsere Widgets ein
bisschen gequetscht sind weil die Bildlauffelder
etwas zu klein sind, aber das ist in Ordnung. müssen wir uns im Moment keine
Sorgen machen. Wenn wir
auf eines davon klicken und es ziehen, können
Sie sehen, dass unser
Widget tatsächlich angezeigt wird. Und ich habe im Moment die Kontrolle über
meine Kamera. Aber wenn ich die Umschalttaste drücke, kannst
du sehen, dass ich
ziehen kann und wenn ich
loslasse, verschwindet es. Derzeit machen wir
nichts mit diesen Informationen zur
Drag-Drop-Operation, aber jetzt können wir tatsächlich eines dieser Widgets abziehen. Und es gibt uns auch hier unser kleines
Move-Widget. Und wenn ich versuche, mit der rechten Maustaste zu ziehen, können
Sie sehen, dass wir die Hallo-Texte tatsächlich ausdrucken lassen. Es wird also hallo gedruckt weil wir
diese
hallo-Druckzeichenfolge zum
Druckknopf-Ereignis hinzugefügt haben . Jetzt haben wir das Draging-Setup. Wir möchten in der Lage sein,
Informationen zwischen
diesen verschiedenen Widgets zu übertragen . Was wir also tun, ist
Planeten auszuatmen und
zur langsamen Hüfte des Gitters zurückzukehren. Und wir werden eine neue Variable
erstellen, und wir nennen dies has item. Und wir
belassen es als booleschen Typ und wir werden kompilieren. Dann gehen wir zum Designer und
stellen hier
unser kleines Gesichtssymbol so ein, dass es
ausgeblendet wird, wenn der boolesche Wert falsch ist. Also gehen wir hier unten
zur Sichtbarkeit,
wir werden einen Ordner benutzen. Also erstellen wir eine Bindung. Und hier
werden wir zurückkehren, wenn der Artikel falsch ist, geben
wir zurück, dass er versteckt ist. Also ziehen wir uns
aus dem Turn-Wert heraus. Haben Sie ein ausgewähltes
US-Element als Index. Und wenn der Gegenstand falsch ist, wollen
wir versteckt sein. Wenn das stimmt, möchten wir, dass
es sichtbar ist. Dann können wir das also kompilieren. Wenn wir jetzt das Spiel wieder
spielen, können
Sie sehen, dass alle unsere kleinen Gesichtssymbole
jetzt tatsächlich
fehlen , da alle
standardmäßig keinen Gegenstand haben. Dann gehen wir zu unserem HUD und wir
werden den Code hier tatsächlich
so ändern , dass der erste Slot immer den
Gegenstand auf true gesetzt hat. Also ziehen wir uns von
hier aus und machen ein F. Wir wollen überprüfen, ob
der Index gleich 0 ist. Und wir werden uns mit dem Zustand verbinden
. Und wenn falsch, was das
mit hier verbindet. Und wenn das stimmt, möchten wir den Rückgabewert
von unserem Create Widget-Knoten
erhalten . Und wir wollen „set
has item“ machen und wir werden
es auf true setzen. Dann verbinden wir
das Ende wieder mit
dem untergeordneten Knoten Hinzufügen. Also alles was wir hier tun
ist zu überprüfen, ist das der erste
Index in der Schleife? Wenn ja, dann setzen wir
es has item auf true. Und wenn wir
das ziehen und auf „Spielen“ klicken, werden
Sie sehen, dass
unser erster Slot jetzt
ein kleines Gesichtssymbol hat , die anderen
jedoch nicht. Als nächstes wollen wir überprüfen, bevor wir den Ziehvorgang durchführen, das Salz,
aus dem
wir tatsächlich ziehen , das Element hat. Also werden wir X aus der Hüfte, gehen zurück zu unserem Raster-Slot, und wir gehen zur
Maus, um darauf zu tippen, ziehen die Texte,
fügen einen neuen Scheck hinzu, bewegen
das einfach
aus dem Weg. wir überprüfen möchten, ob
das Element wahr ist, werden wir zulassen, dass die trockene
Zusammenarbeit erstellt wird. Und wenn nicht,
werden wir nichts tun. Und das können wir auch schnell
testen. Also drücken wir die Wiedergabetaste und ich drücke die
Umschalttaste, um meine Maus loszulassen. Und Sie können sehen, wenn ich von dieser Art
ziehe, entsteht keine trockene Zusammenarbeit. Aber wenn ich von
diesem Slop wegziehe, tut es das. Als Nächstes müssen
wir tatsächlich einen Verweis
auf den ursprünglichen Slot speichern , aus dem wir gezogen haben. Denn wenn wir es auf
einen anderen Slot fallen lassen , der den Gegenstand
nicht hat, müssen
wir den
vorherigen Slot aktualisieren, der
den Gegenstand hatte, um zu sagen, dass er diesen Gegenstand
nicht mehr hat. Wir brauchen also einen Verweis
auf diesen ursprünglichen Slot. Um das zu tun, sind wir aus dem Spiel und gehen zum Move-Einsatz
über, dann zum Event-Diagramm, und wir werden eine neue Variable erstellen. Wir nennen das alte Widget. Und wir legen seinen Typ auf das Grid-Slot-Widget fest
, das wir erstellt haben. Das ist also derselbe, an dem
wir gearbeitet haben. Und wir setzen es auf
eine Objektreferenz. Und wir werden es hier mit
dem kleinen Auge aufnehmen, nur damit es bearbeitet werden kann
und wir kompilieren. Dann gehen wir
zurück zum Grid Slop. Hier in den Drag-Erkennungen möchten
wir diese Variable
für das neue Verschiebungs-Widget festlegen , das wir gerade erstellt haben. Also hier können wir herausziehen, wir können alte Widget setzen. Wir möchten dieses
alte Widget als self festlegen da wir uns
selbst als älteres Widget festlegen. Also ziehen wir uns
davon zurück und machen uns selbst. Und wir verbinden das so und dann kompilieren
wir. Jetzt brauchen wir also eine Funktion
, die ausgeführt wird, wenn wir tatsächlich loslassen oder
auf unseren Raster-Slot ziehen. Also gehen wir zum
Override über und wir wollen
die Drop-Funktion hier finden und wir werden sie erstellen. Jetzt können Sie sehen, dass wir
dieselben Eingaben haben, die wir für unsere vorherigen Funktionen
hatten, aber wir haben
jetzt eine neue, die Operation heißt. Und das sind im Grunde
alle Informationen
, die wir
vom On-Drag bereitgestellt haben erkennen alle
Informationen, die wir hier
bereitstellen, auf die wir
jetzt im On-Drop zugreifen können. Wenn ich also herausziehe und nach Drag Visual
suche, können
Sie sehen, dass ich einen
Verweis auf das Arzneimittel-Visual erhalten kann, und dies ist ein Verweis auf das Widget, das wir hier angeschlossen
haben. Damit können wir die Kosten
tatsächlich auf das Verschiebungs-Widget ziehen , da es sich
bei uns
um ein Verschiebungs-Widget handelt. Wenn Sie sich erinnern, wann
wir es in der Droge eingestellt haben, ist
dies das Verschiebungs-Widget. Also werden wir das kosten. Und mit diesen Kosten können
wir tatsächlich auf das
alte Widget zugreifen, bekommt altes Widget. Und das gibt uns einen Verweis auf das Widget, aus dem wir
ursprünglich gezogen haben. Jetzt können wir auch auf die
Tags und die Nutzlast zugreifen, sodass wir aus dem
Betrieb ziehen und Tags abrufen können. Und das gibt uns
die variablen Tags und auch die Blutplättchen. Wenn wir Nutzdaten erhalten, können
wir auch Zugriff auf diese
Objektreferenz hinzufügen, die wir hier im
Knoten
Drag-Drop-Operation erstellen bereitstellen
können . Wenn wir nun zur Funktion
On drop zurückkehren, können
wir diese Variablen löschen da wir sie nicht wirklich verwenden
werden. Dann wird es festlegen, dass
die alten Widgets Artikel haben. Es wird also
nach Set hat Artikel gesucht. Wir müssen das
auf false setzen, da es nicht mehr das Element enthält, das wir R has item
auf true setzen
müssen, ebenso wie item. Wir werden das
auf wahr setzen, so. Und wir verbinden dies mit
dem Rückgabewert, der den Rückgabewert annimmt, weil
wir unseren Code verarbeitet haben. Was wir also tun werden, stimmt, und wir wollen
das hier mit unseren Kosten verbinden. Dann können wir das kompilieren
und wir können es testen. Wenn wir also zur Karte gehen, Play
klicken, drücke ich die
Umschalttaste, um die Maus loszulassen. Wenn ich anfange zu ziehen, können
Sie sehen, dass unsere Drag-Drop-Operation funktioniert. Wenn ich es auf einer anderen Socke loslasse und sehe, dass die Slots jetzt sichtbar sind und der Gegenstand auf
true gesetzt ist und der
vorherige auf false gesetzt ist. Wir können das mit
jedem unserer Slots hier machen diese neue Operation
auf die anderen Widgets
ziehen. Wenn ich mir mein Widget schnappe und
es hier veröffentliche, zum Beispiel drüben
auf diesen anderen Widgets, können
Sie sehen,
dass tatsächlich nichts
passiert, weil wir
für diese anderen Widgets keine On-Drop-Funktionen
eingerichtet haben . Es wird also nichts
passieren, wenn wir die
abgebrochene Operation darüber
veröffentlichen. Das ist also so ziemlich
alles für diese Lektion. Hoffentlich
verstehen Sie jetzt, wie Sie
Drag-Drop-Operationen mit Widgets
erstellen können Drag-Drop-Operationen mit Widgets
erstellen und wie Sie
Informationen von einem Widget auf ein
anderes übertragen können Informationen von einem Widget auf , indem Sie entweder das Drag Visual oder die
Nutzlast-Objektreferenz.
45. Animation (Übersicht): Hallo zusammen. In diesem
Abschnitt des Kurses werden
wir uns Animations-Blaupausen
ansehen. Jetzt, Animations-Blueprint. Wie sagen wir einem Skelett Mesh , welche Animationen es spielen soll? Nun ist ein Skelettnetz
normalerweise ein Netz, das in einem 3D-Modellierungsprogramm an
einem Skelett befestigt wurde . Sobald wir dann in der Engine sind, können
wir dieses Skelett eine Animation
abspielen , was wiederum dazu führt, dass
das Netz animiert wird. In dieser Lektion führe ich Sie nun durch einen kurzen Überblick über den
Animations-Blueprint-Editor
sowie das Animations-Setup
, das mit der
Third-Person-Vorlage geliefert wird. Bevor wir beginnen, haben
einige von Ihnen vielleicht die vorherigen Lektionen
mitverfolgt . Ich habe hier nur
eine neue Third-Person-Vorlage erstellt . Wir haben also einen sauberen Start für diesen Abschnitt des Kurses. Um loszulegen, gehen
wir zum Animations-Blueprint, der sich im Ordner des
Charakters befindet, dann zu Schaufensterpuppen und Animationen. Sie können sehen, dass wir einen Geld
- und Quinn-Animations-Blueprint haben . In dieser Lektion werden
wir also
den Money-Animations-Blueprint verwenden . Und der Grund dafür ist, dass
der Quinn-Animationsentwurf den Geldentwurf
tatsächlich
als übergeordnete Blaupausen verwendet. Die gesamte
Funktionalität ist also tatsächlich in unserem Money
Animation Blueprint enthalten. Also werden wir das öffnen. Und ich werde
meine einfach so in
die obere Leiste ziehen . Jetzt kannst du sehen, dass ich
gerade einen Editor spiele, also klicke ich hier einfach auf den kleinen Stopp-Button, um das zu beenden. Und jetzt haben wir unseren
Animations-Blueprint geöffnet. Sie können sehen, dass wir das Event Graph
haben. Wenn Ihre nicht geöffnet ist, können
Sie sie jederzeit hier auf
der Registerkarte oben
öffnen. Oder Sie können hier auf
das Ereignisdiagramm doppelklicken, um unsere Animation zu
öffnen. Ereignisdiagramm ist genau das gleiche wie jedes andere Ereignisdiagramm, das Sie
verwendet haben, und anderen Blaupausen. Wir haben unseren Code hier
in unserer Eventgrafik. Wir haben unser My
Blueprint-Panel, in dem wir unsere Funktionen,
Variablen,
Event-Dispatcher und Makros
erstellen und finden können unsere Funktionen,
Variablen,
Event-Dispatcher und Makros
erstellen und finden . Der Hauptzweck
unseres Event Graph inside Art
Animation Blueprint besteht nun darin,
Variablen festzulegen , die dann in unserem Anim-Graphen
verwendet werden. Um das zu öffnen, gehen wir hier
zum Bedienfeld „Mein Blueprint“ und doppelklicken darauf. Ich bin ein Diagramm und das führt uns
zu unserem Anim-Diagramm. Nun, das hat sich
seit der Unreal
Engine Vierer-Version ziemlich
geändert . Sie werden vielleicht
einige Unterschiede feststellen wenn Sie schon einmal eine
ML-Engine verwendet haben, aber wir beginnen
damit, hier einfach zur
Fortbewegungszustandsmaschine zu gehen . Also doppelklicken wir darauf. Sie können sehen, dass wir einen Status
haben und in diesem können wir
Animationen zum Abspielen einrichten. Wir haben also einen
Leerlaufzustand und dann haben
wir einen Walk
Slash Run-Status. Wenn wir unseren Ruhezustand öffnen, können
Sie sehen, dass wir hier
eine Animation haben, die
einen Animationssequenzplayer verwendet einen Animationssequenzplayer , der tatsächlich
eine Leerlaufanimation ausgibt. Wir können anhand des Knotennamens oben hier sehen, welche Animation
tatsächlich
abgespielt wird. Oder wenn wir es auswählen, können
wir zur Sequenz gehen
und den Mauszeiger über den Eintrag bewegen und Sie können sehen,
dass MM, Unterstrich im Leerlauf steht. Wir können auch auf diese
kleine
Schaltfläche „Durchsuchen im
Inhaltsbrowser“ klicken , die
uns zu der Animation führt , die dort verwendet wird. Wir können sehen, dass dies
die Animation ist , die
tatsächlich
abgespielt wird, wenn sich unsere Charaktere
in diesem Ruhezustand befinden. jetzt zu
unserer Fortbewegungsmaschine zurückkehren, können
Sie sehen, dass wir
die Fortbewegung
hier oben in der oberen Leiste anklicken können . Jetzt bring uns tatsächlich zurück. Wir haben auch einen „Walk
Slash Run“ -Status. Wenn wir jetzt
darauf doppelklicken, um es zu öffnen, können
Sie sehen, dass wir tatsächlich
einen anderen
Knotentyp haben, der zum Abspielen von Animationen verwendet wird, Sir. Dies ist ein Blend
Space-Knoten und ermöglicht es uns , eine Variable
wie
beispielsweise einen Float einzugeben und je nach dem
unterschiedlichen Flusswert
unterschiedliche Animationen abzuspielen. Wenn wir also diesen
Knoten auswählen und zur
Sequenz- oder
Verschmelzungsbereich-Option übergehen , können
wir leider sehen, dass er derzeit auf BSIMM Walk Run
eingestellt ist, und dies ist der Mischbereich für unser Gehen und
Laufen animationen. Wir können jetzt darauf zugreifen, indem auf die Schaltfläche
Zum Inhalt durchsuchen klicken. Das bringt uns zum
Verschmelzungsraum. Und wenn wir das hier öffnen, können wir mit Verschmelzungsbereichen
jetzt
mehrere Animationen zusammenfügen und sie
mithilfe einer Variablen reibungslos
untereinander übergehen lassen. Sie können also
hier unten sehen, dass wir
einen Geschwindigkeitswert haben , der bei 0 beginnt. Dies ist die Animation, die
abgespielt wird , wenn unser Geschwindigkeitswert 0 ist. Und wenn ich die Strg-Taste gedrückt halte und
anfange, meine Maus zu bewegen, können
Sie sehen, dass
die Vorschaugeschwindigkeit tatsächlich zunimmt und wir beginnen, die
Gehgeschwindigkeit unserer Animationen zu erhöhen , bis wir
an diesem Punkt angelangt sind. Jetzt ist dieser Punkt hier derzeit auf den Weg nach vorne
eingestellt. Sie können also sehen, wenn ich
den Vorschaupunkt hier verschiebe, spielen
unsere Charaktere eine
Walk-Forward-Animation ab. Während ich es weiter erhöhe, bekommen
wir diese
laufende Animation. Und wenn wir am
Ende angelangt sind, können Sie sehen es derzeit auf den Lauf eingestellt ist, dass
es derzeit auf den Lauf eingestellt ist,
und genau das werden wir spielen wenn wir mit der Geschwindigkeit 500 unterwegs sind. So können wir dies für einen
reibungslosen Übergang
zwischen Geh- und
Laufanimationen nutzen . Wenn wir zu unserem
Animations-Blueprint zurückkehren und
steuern, welche Animation auf unserer Seite abgespielt
wird, verwendet
unser Verschmelzungsraum diese
Geschwindigkeitsvariable, die dann in diesen
Verschmelzungsraum eingefügt wird Knoten. Und abhängig von der
Geschwindigkeit, die wir haben, wird hier eine
andere Animation als unsere Ausgangspose ausgegeben. Kehren wir zu unserem Anim-Diagramm zurück. Und ich klicke sie einfach an. Fassen Sie hier in der oberen Leiste nach. Jede Animation, die von unserer Fortbewegung
ausgegeben wird dann in
dieses Fortbewegungsgeld eingegeben. Dies speichert im Grunde die aktuelle Animation
, die von unserer Fortbewegung
ausgegeben wird , sodass wir sie später verwenden können. jetzt zurück in die
Fortbewegungszustandsmaschine gehen, können
Sie sehen, dass wir diese Pfeile
haben , die zwischen unseren beiden Zuständen verlaufen. Dies sind
Übergangsregeln und auf diese Weise prüfen
wir, ob wir uns im Ruhezustand befinden sollten. Oder der Walk-Slash-Run-Zustand. Wenn wir also den Mauszeiger über eine bewegen, können
Sie sehen, dass wir
diese Variable haben , die in der QuickInfo angezeigt
wird. Und es
heißt im Grunde nur, dass diese Regel auf die Variable should
move gesetzt
ist. Wenn diese Variable also wahr ist, werden wir von
unserem Ruhezustand zum
Walk Slash-Run übergehen . Und wenn ich dann mit der Maus über
den unteren hier fahre, ist
es das gleiche sollte sich
variabel bewegen, aber mit einem nicht. Wenn diese Variable also falsch ist, wechseln wir zurück vom Walk Slash Run zum Idol. Und wir können auf diese doppelklicken , um den Code tatsächlich anzusehen. Sie können sehen, dass es sich
nur um eine Variable handelt, die
in das Ergebnis integriert ist. Und dann können wir dasselbe
mit dem Code für die Rolle tun
, die vom Walk in
den Idle-Zustand wechselt. Wenn wir also darauf doppelklicken, können
Sie sehen, dass wir dieselbe Variable mit
einem Knotenknoten haben , und das ist dann
in das Ergebnis integriert. Nun wird diese should
mov-Variable in
unserem Ereignisdiagramm mit etwas Code festgelegt unserem Ereignisdiagramm mit etwas Code und wir werden uns
das etwas später ansehen. Wenn wir jedoch
mit diesen beiden Zuständen
und diesen beiden Regeln zur Fortbewegung zurückkehren , entscheiden
wir, ob unser
Charakter
eine Leerlaufanimation oder eine
Geh- oder Laufanimation abspielen soll oder nicht . Wir geben diesen Wert dann aus
dem Fortbewegungszustand an
die Kassiererin der Fortbewegung aus. Wir können diese
Animation also später verwenden. jetzt in unserem Anim-Graphen Wenn wir jetzt in unserem Anim-Graphen auf die
rechte Seite gehen, haben
wir diesen Ausgangsposenknoten. Das ist die Animation, die wir tatsächlich im Spiel
sehen werden. Was auch immer die Animation hier
verbindet das werden wir sehen, wenn
wir unser Spiel spielen. Derzeit sind diese beiden
Knoten hier oben mit keiner
dieser Ketten hier unten verbunden. Aber wenn wir hier unsere
Hauptzustandsmaschine öffnen, ist unsere
Hauptzustandsmaschine
jetzt genau dieselbe wie unsere Fortbewegungszustandsmaschine.
Sie machen das Gleiche. Es ist nur so, dass unsere
Hauptstaaten, die Staatsmaschine verschiedene Insiderstaaten haben. Und wenn wir uns hier
den Fortbewegungszustand ansehen, wenn wir darauf doppelklicken, können
Sie sehen, dass wir eine Cash-Pose-Fortbewegung
verwenden. Dies ist die Cash-Pose, die
wir in unserem Anim-Diagramm festgelegt haben. Wenn Sie also hier oben nachschauen, stellen
wir es hier ein, und dann verwenden wir es in diesem Fortbewegungszustand in unserer Hauptzustandsmaschine. So sind diese
Knoten hier oben tatsächlich mit
dem Rest des Codes verbunden. nun zurück in die
Hauptzustandsmaschine gehen, können
Sie sehen, dass wir hier oben
einige Staaten haben, die nicht wirklich mit denen unseres Bundesstaates hier unten verbunden
sind. Der Grund dafür
ist in Unreal Engine five, wir haben diese neuen staatlichen Aliase und
Knoten, und diese ermöglichen es
uns,
Zustände zu verbinden , ohne dass tatsächlich
Regeln mit ihnen verbunden sind. Jetzt haben wir zwei
Aliase hier drin. Wir haben die beiden fallen
und die beiden landen. Jetzt können Sie anhand des kleinen Symbols auf
der
linken Seite erkennen, dass es sich um einen Alias
handelt . Die Funktionsweise
ist, wenn ich zum Beispiel
die beiden fallenden
Alias auswähle , können
Sie hier auf
der rechten Seite sehen, wir haben die Fortbewegung
auf Landstaaten, Tektonik. Jetzt haben Sie ein Häkchen für jeden Status, der
in Ihrer Zustandsmaschine existiert. Also haben wir eine für
Fortbewegung, die hier ist,
Sprung, die hier oben ist,
volle Schleife, die hier ist, und dann Land, das hier ist. Wenn wir jetzt weitere Staaten hätten, würden
sie ebenfalls
aufgeführt werden. Nun, weil die
Fortbewegung und das Land
beider Texte auf diesem Knoten
alle damit verbundenen
Regeln ausführen , während wir uns in
der Fortbewegung oder in diesen Landzuständen befinden. Das bedeutet, dass diese beiden
Regeln hier in
jedem einzelnen Frame ausgeführt werden , wenn wir
gerade
den Fortbewegungszustand
oder den Landzustand spielen . Und das Gleiche gilt für den
R2-Landknoten hier. Dies ist auch ein Alias
und Sie können sehen,
dass Jump
for Loop aktiviert ist, was bedeutet, dass diese Regel
bei jedem Frame
ausgeführt
wird, wenn wir uns im Jump - oder For-Loop-Zustand befinden. Und wenn diese Regel irgendwann wahr
wird, während wir uns in
einem dieser Staaten befinden. Die beiden Länder werden uns dann von
einem dieser
Staaten in unsere Landschaft
überführen . Und so sind diese Staaten
hier oben mit
den Staaten hier unten verbunden. Nun, nur um die
Regeln zu behandeln, die hier
im
Fortbewegungszustand laufen hier
im
Fortbewegungszustand und dies wird
immer dann
ausgeführt, wenn unser Charakter im Leerlauf
ist oder geht oder rennt. Und das liegt daran, dass
wir,
wenn Sie sich erinnern, diesen
Fortbewegungscache verwenden
, der von der
Fortbewegungszustandsmaschine gesetzt wurde. Und das hat dazu geführt, dass
unsere Idle- und Walk-Slash-Run-Animationen dort sitzen. Während dieser
Fortbewegungszustand hier läuft, werden
die beiden Fallenden alle Verbindungen durchlaufen , um zu sehen, ob eine dieser
Regeln zutrifft. Und wenn
wir irgendwann anfangen zu fallen, wird das Fallen wahr, wir werden von der
Fortbewegung zur For-Schleife übergehen. Und wenn wir fallen und es
eine Geschwindigkeit gibt , die größer
als 100 in der z ist. Wenn wir
also eine bestimmte Geschwindigkeit
überschreiten, wird tatsächlich der
Sprunganimationszustand verwendet anstatt einfach zur for-Schleife
zu gehen. Und dann
haben wir tatsächlich eine Regel, die zwischen unserem Sprung
und unserer For-Schleife
geht. Und das überprüft nur, ist unsere Sprunganimation
fast fertig. Und wenn ja, dann wird
es
uns von unserem Sprung
in unsere For-Schleife überführen . Und der Grund dafür
ist, dass wir diese Option hier
angekreuzt haben, die im Grunde nur
die Animation überprüft , die
wir überprüfen. Fast fertig. Wenn ja,
werden wir in den Zustand
übergehen , auf den
wir es überprüfen. Jetzt bleibt zu jedem
Zeitpunkt, an dem wir spielen oder springen oder eine
For-Loop-Animation erhalten. Das zu landen wird
auch laufen. Es wird überprüft, ob
es falsch ist? Wenn ja, dann wird uns das von Eva,
der For-Schleife,
überführen oder springen zu Land und dann wieder vom Land zu
unserer Fortbewegung. Das sind also die Grundlagen,
wie unsere Hauptstaaten, Zustandsmaschine, tatsächlich funktionieren. Wenn wir jetzt zu
unserem Anim-Diagramm zurückkehren. Gibt überall dort aus, wo Animationen wir gerade in
unserer Zustandsmaschine abspielen. Wenn wir uns also nur in
unserem Fortbewegungszustand befinden, wird
dies unsere
Fortbewegungsanimation ausgeben. Wenn wir sagen würden fallen, würde
es unsere For-Schleife spielen. Das wäre also eine Ausgabe
, die in diesen, einen Montageslot
, fließen würde . Jetzt werden wir in Zukunft
eine ganze Lektion über Montagen haben. Aber das ist nur ein Slot, der
es uns ermöglicht, eine Montage zu spielen. Montage ermöglicht es uns, eine Animation über
unsere Bewegungsanimationen zu legen. Aber wenn
gerade keine Montage abgespielt wird, werden
nur
unsere Bewegungsanimationen in den Montage-Slot aufgenommen. Es wird überprüft, ob eine
Montage abgespielt wird. Wenn nicht, dann
geht es einfach durch und es werden
keine Änderungen vorgenommen. Es sei denn, es läuft eine Montage. Dann geht das von unserem Montageschlitz in
unser Steuergerät. Nun, ich werde
in
diesem Kurs nicht zu sehr auf Control Rig eingehen , nur weil es ein riesiges System für sich ist, das einen
völlig anderen Kurs haben könnte, aber wir können sehen welches
Steuergerät läuft. Also wählen wir den Knoten aus. Und im
Detailbereich nach unten scrollen, sehen
Sie, dass wir
eine Control-Rig-Klasse haben. Hier. Es ist auf den
Mannequin-Basisfuß IK eingestellt. Und wir können dies finden, indem wir auf den Browser Zu Asset
und Content durchsuchen klicken. Und wir können
die Kontrolle öffnen, Rick, und Sie können den gesamten Code sehen von
diesem Kontroll-Rig ausgeführt wird. Jetzt werde ich nicht alle diese Knoten
durchgehen da Control Rig ein
ziemlich fortschrittliches System ist. Aber im Grunde
macht das unsere
Fußpositionierung für uns. Ich kann Ihnen ein kurzes
Beispiel dafür geben, was ich meine. Also spielen wir einen Redakteur. Und wenn ich zu dieser Rampe renne und eine auf meine Füße stelle, kann
man sehen, dass der Fuß
tatsächlich seine Höhe erhöht weil die Höhe des
Bodens an diesem Punkt höher ist. Das ist nur ein kurzer
Überblick darüber, was Control Rig in
dieser Blaupause tut. Und all dieser
Code passiert in diesem Control
Rig Hinweis hier. Es nimmt also unsere
Bewegungsanimationen wendet diese
neuen Fußpositionen für die Höhe des Bodens an. Und dann gibt es das in unsere Ausgabebeiträge hier für unsere endgültige Animation aus
, die wir im Spiel sehen. Jetzt, da wir das Anim-Diagramm
durchgesehen haben, haben
Sie vielleicht bemerkt, dass
einige Variablen wie R hier variabel fallen, die
gesamte Grundgeschwindigkeit innerhalb
des Geh-Slash-Laufzustands. Dies sind nur normale
Variablen, die sich
dann in
unserem Ereignisdiagramm gesetzt haben . Wir können sie also
in unserem Anim-Diagramm verwenden. Wenn wir also jetzt
zum Ereignisdiagramm gehen,
indem wir einfach darauf im Bedienfeld „
Mein Blueprint“ klicken, sagen
wir,
wie Sie sehen, einige der Variablen, die wir im Anim-Diagramm
verwenden. Wir haben hier also unsere Geschwindigkeit über
Grund, das ist nur die Geschwindigkeit aus unserer Bewegungskomponente. Dann wandeln wir das in einen Schwimmer um und stellen das
auf die Geschwindigkeit über Grund ein. Wir haben eine weitere Variable
namens should move,
die bestimmt, ob wir
ein Idol-Animationsstatus
oder unser
Walk-Slash-Run-Animationsstatus sein sollten ein Idol-Animationsstatus . Und dann haben wir hier unten r
fällt variabel, die nur die
Bewegungskomponenten verwendet ist fallende Variable
, die eingebaut ist. Und dann nehmen wir das und setzen das auf die fallende Variable. Und diese werden alle
von der Veranstaltung hier drüben festgelegt, die als Event
Blueprint-Aktualisierungsanimation bezeichnet wird. Dadurch werden alle Frames ausgeführt und diese Variablen
nach Bedarf
aktualisiert. Dann haben wir hier oben die
Blueprint-Initialisierungsanimation. Nun wird dies
ähnlich wie ein Start Spielnotizen ausgeführt werden. Dies wird also ausgeführt, wenn das Spiel beginnt oder wenn unser
Animations-Blueprint erstellt wird. Das bekommt nur den besitzenden Schauspieler, was normalerweise der
Charakterentwurf ist. Wir verursachen die
Zeichen-Blueprint-Zeichenvariable. Und dann bekommen wir auch seine Zeichenbewegungskomponente und setzen als Variable
,
damit wir sie hier
unten verwenden können , um
diese Variablen zu setzen. Jetzt zeig dir, wo
wir tatsächlich festlegen , welchen Animations-Blueprint
unsere Charaktere verwenden. Wir werden zum
ThirdPersonCharacter übergehen. Um das zu tun, gehen wir zum Inhaltsbrowser und
dann
zu ThirdPerson-Blueprints wird der
ThirdPersonCharacter Blueprint geöffnet. Dann können wir
die Mesh-Komponente hier
im Bedienfeld „
Komponenten“ auswählen . Und wenn wir darauf doppelklicken, gelangen wir zum Darstellungsfenster. Jetzt überhitzen und
das Detail-Panel. Solange der Animationsmodus auf die Verwendung von Animations-Blueprint
eingestellt ist , sollten
Sie diese
Anime-Class-Option haben. Und Sie können hier sehen,
dass es derzeit auf
den acht BP Quinn
Animation Blueprint eingestellt ist. Wenn Sie das also ändern
möchten, können
Sie einfach hier auf das Drop-down-Menü klicken und Ihren neuen
Animations-Blueprint
suchen. Es gibt einige, die in den Motor eingebaut
sind, aber normalerweise
werden Sie keine davon verwenden. Sie würden zum Beispiel unseren Money-Animations-Blueprint
oder unseren Quinn-Blueprint hier verwenden. Schließlich, als Randnotiz, erstellst du
vielleicht in Zukunft einen NPC-Charakter, der sich
eigentlich nirgendwohin bewegt,
und du willst nur, dass er eine einzige Animation
spielt. Sie können dies tun, indem Sie hier
den Animationsmodus auswählen , um das Animationselement zu verwenden. Und dann können Sie
eine einzelne Animation festlegen , die Sie
abspielen möchten, ohne
einen ganzen Animations-Blueprint haben zu müssen. Aber für Spielercharaktere werden
Sie so ziemlich immer wollen, dass dies so
eingestellt
wird, dass ein Animations-Blueprint verwendet wird. Und Sie möchten sicherstellen
, dass die Anime-Klasse
definitiv auf Ihren
Animations-Blueprint eingestellt ist . Für uns ist das also
die ABP Quinn hier. Das war's also für diese Lektion. Mach dir nicht zu viele Sorgen, wenn du
nicht alles verstehst. In unseren nächsten Lektionen werden
wir auf jedes System
viel detaillierter eingehen.
46. Animation (Montages): Hallo zusammen. In dieser Lektion werden
wir uns Animationsmontagen ansehen. Animationsmontagen oder wie wir unserem Animations-Blueprint
die spezifische Animation mitteilen, die
wir abspielen möchten. Wenn
dein Charakter zum Beispiel eine Nahkampfwaffe nachladen oder schwingen würde, würdest
du Animationsmontagen verwenden um diese Animationen abzuspielen. In dieser Lektion zu einigen
unserer zukünftigen Lektionen werde
ich nun
Animationen verwenden, die
eigentlich nicht in der
Third-Person-Vorlage enthalten sind. In der Klassenbeschreibung werde
ich einen Link zum
Herunterladen der Animationen hinzufügen, die ich in dieser Lektion und
unseren zukünftigen Lektionen verwende. Sobald Sie diese Dateien heruntergeladen und
extrahiert haben, sollten
Sie am Ende einen
Ordner haben, der so aussieht. Jetzt werden wir diese
Dateien zu unseren Projekten hinzufügen. Also klicken wir hier im Editor, klicken mit
der rechten Maustaste auf unseren Inhaltsordner und gehen zu Im Explorer anzeigen. Dies zeigt uns
einen Inhaltsordner. Und wir wollen unsere Unterrichtsanimationen hier so
in den Inhaltsordner verschieben. Jetzt können Sie sehen,
dass dies
in unserem Inhaltsbrowser angezeigt wird . Wenn wir es jetzt öffnen die Animationen nicht
da sind, machen Sie sich keine Sorgen. Alles was Sie tun müssen, ist das Projekt zu schließen
und dann erneut zu öffnen. Jetzt habe ich
mein Projekt neu gestartet. Und Sie können in
den Unterrichtsanimationen sehen, alle unsere Animationen jetzt korrekt
angezeigt werden. Jetzt werden wir in dieser Lektion nur noch eine
dieser Animationen verwenden . Das wird die
Reload-Animation sein. Wenn
Sie also im Ordner
Animationen für Lektionen nach Reload suchen, werden
Sie feststellen, dass wir eine Reload-Animation
haben. Jetzt verwenden
wir das, um eine Montage zu erstellen. Dazu klicken wir mit der rechten Maustaste
und gehen zu Erstellen Wählen Sie
dann Erstellen
und eine Montage aus. Und wir behalten einfach den gleichen Namen. Also drücke ich einfach
die Eingabetaste. Jetzt haben wir eine neue Montage. Wenn wir jetzt unsere
Animationsmontage öffnen, können
Sie sehen, dass
sie einer
Animationssequenz ziemlich
ähnlich sieht . Ich werde meine
hier einfach so nach oben ziehen. Der Hauptunterschied besteht nun darin,
dass wir diesen Montageslot haben und eine Montageaufnahme zeigt, wie wir
dem Animation Blueprint mitteilen , welche
Montage wir spielen möchten. Also, wenn wir zu unserem
Geld-Animations-Blueprint gehen, wenn Sie sich daran erinnern,
dass es in Charakteren ist, werden Sie diese Suche los
, gehen Sie zu Mannequins Animation
und öffnen Sie ein BP-Geld. Wenn Sie sich erinnern, haben
wir in unserem
Anim-Diagramm diesen Slot und er ist
derzeit auf den Standard-Slot eingestellt. Wenn wir jetzt einen
Blick zurück auf unsere Reload-Montage werfen, ist
dies auch
auf Default Swap eingestellt. Das heißt, wenn wir unsere Reload-Montage spielen
würden, könnte
I Animation Blueprint sie abspielen. Derzeit unsere Montage und unser Montageslot
in unserer Blaupause, oder beide verwenden dieselbe Steigung. Aber wenn wir den Slot hier
drüben im Detailbereich auswählen, können
Sie auf die Schaltfläche unten klicken
und sehen, dass die
Third-Person-Vorlage tatsächlich einige verschiedene Sorten einige verschiedene Sorten
enthält. Nun, wenn wir diesen Slot
ändern würden, um einen anderen Slot zu verwenden
und zu spielen, unsere Montage. Montage würde nicht mehr
gespielt werden, da es hier
einen anderen Slot
als der Slot geben würde . Der Hauptgrund
, warum wir
mehrere Slots haben können
, ist, dass mehrere Slots haben können
, ist ein Charakter
tatsächlich
mehr als eine Montage
gleichzeitig spielen kann. Aber jeder Slot kann nur eine Montage
spielen. Deshalb können wir mehrere Slots
haben und Montagen verschiedenen Slots
zuweisen lassen. Aber für diese Lektion
bleiben
wir einfach bei den Standard-Slots. Stellen Sie also sicher, dass diese Folie auf die Standardoption hip
eingestellt ist. Und zurück in unserer Montage
stellt sicher, dass der Standard-Slot und der
Slot-Name hier angekreuzt sind. Also
werden wir jetzt tatsächlich
etwas Code schreiben, um unsere Montage abzuspielen. Wir gehen also zum Content Browser,
gehen
zum ThirdPerson-Blueprint-Ordner öffnen
dann den
ThirdPersonCharacter Blueprint. Und hier können wir ein
bisschen Code hinzufügen, der
unserem Charakter-Mesh mitteilt ,
tatsächlich eine Montage zu spielen. Also klicken wir mit der rechten Maustaste. Ich
suche nach dem ersten Eingabeereignis und wir erstellen
diese Eingabe von ihnen. Dann schnappen wir uns hier
unsere Mesh-Komponente, ziehen uns daraus heraus und
suchen nach Spielmontage. Und das wird
uns diesen neuen Knoten hier schaffen. Jetzt führe ich Sie
durch einige
der Ein- und
Ausgänge auf diesem Knoten. Fangen Sie damit an, wir
müssen Montage spielen. Hier sagen wir ihm, welche
Montage wir spielen wollen. Also werden wir hier
unsere Reload-Montage auswählen. Wir haben den Dramatiker. Wenn dies also auf eins eingestellt ist, wird
die Animation mit ihrer normalen
Geschwindigkeit abgespielt. Aber wenn wir sagen würden, dass
die Animation doppelt so schnell
abgespielt wird. Als Nächstes haben wir
jetzt die Startposition, mit der Sie
den genauen Zeitpunkt festlegen können, zu
dem die Montage
beginnen soll. Wenn Sie zum Beispiel
eine 10 Sekunden lange Montage hatten eine 10 Sekunden lange Montage und bei zwei Sekunden
beginnen möchten, würden
Sie die
Startposition auf zwei setzen. Als Nächstes haben wir den
Startabschnitt. Jetzt werde ich das
etwas später in der Lektion erklären. Also werden wir das vorerst überspringen. Dann haben wir für Ausgaben die
normale Ausführungsausgabe. Dies wird nur ausgeführt,
sobald der Knoten vollständig
ausgeführt wurde. Dann sind wir unvollendet. Dies wird jetzt tatsächlich ausgeführt
, wenn die Animation beendet ist. Dann müssen wir verschmelzen. Eine coole Sache an
Montagen ist, dass sie sich - und
ausblenden
, wenn wir sie spielen. So erhalten Sie einen reibungslosen
Übergang von der ursprünglichen Animation, die Sie gespielt
haben, zur Montage. Und dann, wenn die Montage fast fertig
ist, wird
sie wieder
zu Ihrer ursprünglichen Animation zurückkehren. Und diese Verschmelzung wird ausgeführt, wenn die Animation
übergeht. Behandeln Sie gleich ein bisschen mehr über die Übergänge, aber wenn Sie weitermachen,
wurden wir unterbrochen. Und das läuft, wenn wir unsere Montage abbrechen oder beenden. Und ich werde später
in der Lektion erklären,
wie wir das machen können . Zu guter Letzt haben wir einige
Ausgaben für die Ausführung von Notify und einen Notify-Namen. Ich werde
in dieser Lektion keine Benachrichtigungen
behandeln , da wir
tatsächlich eine ganze
Lektion nur für Benachrichtigungen haben werden . Also werden wir das vorerst
überspringen. Jetzt werden wir
unseren Code einrichten , um Ihre Animation tatsächlich
abzuspielen. Ich werde eigentlich eine neue Variable
erstellen. Wir nennen das Reloading. Ich werde das nur
verwenden, damit, wenn wir die eine Eingabe spammen, unsere
Montage nicht immer wieder neu startet. Was wir also tun werden, ist
zuerst zu überprüfen, ob das Neuladen wahr ist. Und wenn es nicht stimmt, setzen wir reloading so
auf true. Und wir verbinden das
mit der Spielmontage. Dann wollen wir das
Neuladen auf false setzen. Bei IVR ist
die Wiedergabe der Reload-Animation beendet oder sie
wird auf diese Weise unterbrochen. Jetzt können wir das
tatsächlich testen, also kompilieren wir und klicken auf Play. Und jetzt, wenn ich eine auf
meiner Tastatur drücke , passiert
eigentlich nichts. Der Grund dafür ist
, dass, als wir in unsere
Unterrichtsanimationen
importiert
haben, sie tatsächlich mit
ihrem eigenen Skelett geliefert wurden. Obwohl diese
beiden Skelette genau gleich
sind,
gibt es jetzt zwei
Skelett-Assets genau gleich
sind, in unserem Projekt,
eines, das unsere Charaktere verwenden,
eines, das unsere neuen
Animationen verwenden. Wenn wir ausatmen, haben Sie einen
einfachen Editor und gehen Sie zu den Unterrichtsanimationen, öffnen Sie die Schaufensterpuppe und gehen Sie
dann zu Meshes. Du wirst sehen, dass wir eine SK-Schaufensterpuppe
haben. Dies ist das Skelett
oder weniger als eine Animation. Also mit, aber wenn wir zum Ordner Charaktere und
dann zu
Mannequins-Meshes gehen, werden
Sie sehen, dass wir
eine weitere SK-Schaufensterpuppe haben. Dies ist das Skelett , das Zeichen verwenden, die
Netze verwenden. diesem Grund spielen unsere
Animationen, aber es gibt eine neue Funktion
und Unterwäsche auf Jim Five namens
kompatible Skelette. Wenn wir also zu dem Skelett
hier in unserem
Charaktere-Ordner gehen , öffnen Sie es, gehen Sie zu
den Fenstern und wir wollen die
Asset-Details finden und diese übernehmen. Jetzt finden Sie hier
kompatible Skelette. Also
fügen wir einen neuen Eintrag hinzu. Wir wählen hier
das Drop-down aus. Wir werden das Skelett finden , das in unserer Unterrichtsanimation enthalten ist. Wenn Sie also den Mauszeiger darüber bewegen, können
Sie sehen, dass es
weniger sagt als Animationen, geschlitzte Schaufensterpuppen, Schrägstriche. Also
klicken wir darauf. Dann sparen wir. Jetzt alle Animationen
, die für unsere Lektion funktionieren. Das Animations-Skelett
funktioniert mit unserem Charakter. Wenn wir also hier zum
Level zurückkehren, klicken Sie auf „Spielen“. Wenn ich jetzt eins drücke, werden Sie sehen, wie unsere
Montagen gut laufen. Wenn ich eine spamme, können Sie sehen, dass sie
die a-Montage
nicht wieder abspielen wird , bis wir die
Originalmontage
fertig gespielt haben. Und das liegt
an dem Booleschen Wert , den wir eingerichtet haben, um
das zu verhindern. Eine Sache, die Sie vielleicht bemerken ist, dass wir die Montage
spielen, oder die Füße
bewegen sich nicht wirklich mit unserem Körper. Alles spielt
diese Montage. In unserer nächsten Lektion werden
wir
uns nun mit dem Mischen von
Knochen befassen, sodass wir
Körperteile voneinander trennen können. Während wir zum Beispiel
unsere Reload-Animation abspielen, können
wir die Beine haben. Sie werden in der Lage sein,
die Bewegungsanimationen abzuspielen und
darüber werden wir in der nächsten Lektion sprechen. Eine andere Sache, die
Sie vielleicht bemerken ist, wenn wir hier
zur Rampe gehen, können
Sie sehen, dass meine
Beine oben auf der Rampe stehen. Und wenn ich eine drücke, sieht
man, dass die Beine immer noch
oben bleiben und die Rampe, obwohl diese Montage den ganzen Körper
einnimmt. Der Grund dafür ist, dass
unsere Montage hier abgespielt wird, bevor das
Control Rig angewendet wird. Die Montage wird also hier abgespielt. Dann wenden wir das Kontrollgerät an, das sich mit
der Fußposition befasst, und geben dann
die endgültige Pose aus. Deshalb
werden unsere
Bewegungsanimationen von der Montage übernommen, die Fußpositionierung
jedoch nicht. Also, wenn ich meinen
Standardsteckplatz für einen Moment,
zwei, vor mein
Kontrollgerät verschieben würde. Und verbinde das alles. Wenn ich jetzt kompiliere, drücke Play Wenn ich zur Rampe renne, kannst
du sehen, dass meine
Fußposition immer noch funktioniert, aber wenn ich eine drücke, kannst
du sehen, dass sie nicht mehr funktioniert, während
ich eine Montage spiele. Es wird also einfach zu
unserem Animations-Blueprint zurückkehren und dieses Backup so einstellen, wie es war. Also wird es einfach hier vorwärts gehen, das
verbinden und
unser Montage-Backup hier verbinden. So wie das. Wenn Sie schon immer einen neuen
Montageslot zu Ihrem Anim-Graphen hinzufügen
wollten, können
Sie einfach mit der rechten Maustaste nach Slot
suchen und hier nach oben scrollen. Sie können den Standardsteckplatz für
Steckplätze verwenden und ihn dann auswählen. Und wenn Sie
einen anderen Slot-Namen verwenden
möchten, können Sie das hier oben ändern. Aber im Moment können wir diesen Knoten
einfach löschen und unser Animationsdiagramm kompilieren. Jetzt
haben Montagen auch andere Funktionen. Wir können einer Montage mehrere
Animationen hinzufügen. Also hier drüben
haben wir den Asset-Browser. Wenn Sie Ihre nicht haben, können
Sie jederzeit zu
Windows gehen und hier den
Asset-Browser übernehmen. Mit dem
Asset-Browser können wir jetzt
Animationen ziehen , um sie
mit unserer Montage zu verwenden. So könnten wir zum Beispiel
das Gewehr verwenden, das hüftweit im Leerlauf ist. ziehen wir einfach hin. Jetzt können Sie sehen, dass wir beide
Animationen in unserer Montage haben. Derzeit
sind beide so eingerichtet dass sie den Standardabschnitt verwenden. Was also passiert, ist
das Nachladen oder Abspielen des Gewehrs, und dann wird unsere
Animation im Leerlauf des Gewehrs abgespielt Aber mithilfe von Abschnitten
können wir
unsere Montage tatsächlich in
verschiedene Abschnitte unterteilen unsere Montage tatsächlich in
verschiedene Abschnitte und sie unterschiedlich abspielen. Dazu können wir hier mit der
rechten Maustaste auf die Leiste oben klicken und auf
Neue Montageauswahl klicken. Und wir könnten
das eine Schleifensektion nennen. Jetzt haben wir diese lila
Linie und können tatsächlich wählen, wo
dieser Abschnitt beginnt. Also wenn ich dieses Wort hier setze, unser Abschnitt jetzt für ist
unser Abschnitt jetzt für
den Loop-Abschnitt
dieser ganze Bereich hier. Und dann
ist unser Standardbereich dieser ganze Bereich hier. Derzeit wird nur
noch unser Standardbereich abgespielt
und dann wird unser
Loop-Bereich abgespielt. Aber wenn wir hier zu den
Montageabschnitten gehen, können
Sie sehen, dass wir einige Steuerelemente
haben, wie wir diese
verschiedenen Abschnitte abspielen können. Wenn Sie diese Montageabschnitte nicht
haben, können
Sie zu Windows gehen
und das hier ankreuzen. Im Moment können Sie sehen,
dass gerade der Standardbereich
abgespielt wird. Dann geht es weiter
zum nächsten Abschnitt
, unserem Loop-Abschnitt. Ich werde mein Fenster hier nur
ein bisschen größer machen . Kannst du sehen, dass der Button jetzt
tatsächlich an der richtigen Stelle ist . Wenn wir jetzt
wollten, könnten wir
diese Abschnitte
komplett getrennt haben . Wenn wir
hier auf diesen Pfeil klicken und den Link entfernen, können
Sie sehen, dass dies jetzt zwei separate Abschnitte
sind, sodass wir jetzt nur unseren
Standardbereich spielen. Weil wir ihm gesagt haben, dass er nach dem Spielen nichts
tun soll . Wenn wir nun wollen, dass
unser Loop-Bereich erneut abgespielt wird klicken Sie auf dieses kleine Kästchen
und machen Sie den Loop-Abschnitt. Und jetzt wird unser Loop-Bereich
abgespielt nachdem der
Standardabschnitt fertig ist. Jetzt können wir auch
Abschnitte schleifen. Wenn wir also hier auf dieses Kästchen
neben unserem Loop-Abschnitt klicken, können
wir den
Loop-Abschnitt erneut auswählen, und das wird dazu führen, dass
unser Loop-Abschnitt hier immer wieder wiederholt wird. Sobald unser Standard den Loop-Abschnitt
beendet hat, werden
wir spielen und dies wird einfach immer wieder wiederholt. Wie Sie jetzt sehen können. Das kann tatsächlich für verschiedene Dinge
nützlich sein. Angenommen, Sie haben zum Beispiel
eine Reload-Animation
für eine Schrotflinte erstellt. Normalerweise können Sie jetzt
einzelne Kugeln
in eine Schrotflinte laden . Wenn Sie also
Reloads
spielen,
fehlen vielleicht nur zwei Kugeln in der Schrotflinte. Sie möchten nur, dass der
Schleifenabschnitt
zweimal läuft , wenn Sie
die Kugel zweimal einsetzen. Aber vielleicht müssen
die Charaktere manchmal, wenn
sie neu geladen werden, sechs Kugeln einsetzen. Jetzt brauchst du also einen
Loop-Abschnitt, der sechsmal ausgeführt werden kann. Jetzt können wir dies mit
dem Looping-Abschnitt tun und mithilfe von Blueprints steuern,
wie oft es ausgeführt wird. Wenn wir also zum
ThirdPersonCharacter zurückkehren, zeige
ich Ihnen einige der Knoten , mit denen wir die verschiedenen Abschnitte
steuern können die verschiedenen Abschnitte
steuern , die von der Montage
abgespielt werden. Also kehren wir
hier zum
Third-Person-Charakter zurück und beginnen mit, wenn Sie sich erinnern, haben wir
diesen Startabschnitt. Wenn wir wollten, könnten wir unsere Montage
einfach
diese Loop-Sektion sofort abspielen lassen, anstatt zuerst den
Standardabschnitt abzuspielen, wir könnten den Abschnitt hier loopen. Wenn wir es jetzt kompilieren und spielen, wird
es nicht einmal mehr
das Reload abspielen. Es wird also eins gedrückt und Sie
können sehen, dass es einfach diesen
Standardabschnitt überspringt und
direkt zu unserem Loop-Bereich wechselt. Dann können wir hier zu unserem
ThirdPersonCharacter zurückkehren. Um nun Zugriff auf unsere
verschiedenen Montagefunktionen zu erhalten, benötigen
wir einen Verweis
auf unseren Animations-Blueprint. Dazu ziehen wir uns aus
den Mesh-Komponenten heraus ,
suchen zum Beispiel und verwenden den Instanzknoten
get anime. Dies gibt uns einen Hinweis
auf den
Animations-Blueprint, den wir verwenden. Für uns ist das also das ABP-Geld. Wenn ich jetzt rausziehe,
kann ich tatsächlich nur
Variablen abrufen , die
in diesem Blueprint existieren. Um das zu tun,
müssten wir dafür Kosten verursachen. Also könnten wir zu ABP Geld kosten. Dann könnten wir Variablen
erhalten, die in diesen oder
Funktionen
gespeichert sind , wenn wir wollten. Zum Beispiel sollte get move. Das ist eine Variable
, die in
unserem Animations-Blueprint hier existiert . Aber um unsere Montagen zu kontrollieren, müssen
wir eigentlich keine Kosten zahlen, da diese Funktionen in
alle Animations-Blueprints integriert sind. Wir können diese
Funktionen also vorerst löschen und aus
dem Rückgabewert ziehen und
nach Montage suchen. Dadurch erhalten
wir Zugriff auf all
die verschiedenen
Funktionen, die zur Steuerung von Montagen
verwendet werden können . Jetzt ist einer der am
häufigsten verwendeten Knoten mit Abschnitten die Notiz zum
Sprung zum Abschnitt. Wenn wir
das also erstellen, können Sie sehen dass wir eine Eingabe für den
Abschnittsnamen erhalten. Hier würden
wir also platzieren, in welchen Abschnitt unsere
Montage wechseln soll. Wir können auch eine Montage spezifizieren. Wenn wir hier keine Montage
angeben, passiert das, wenn Sie mehrere Montagen
gleichzeitig spielen
und alle die
gleichen Abschnittsnamen haben. Es wird all
deine Montagen in
den Abschnitt ändern , den wir ihr gestellt haben. Wenn Sie nun nur möchten, dass es
mit einer Montage passiert, sagen wir unserem Gewehrnachladen, würden
wir nur
die Montage spezifizieren, wir möchten, dass es auch passiert,
damit wir es hier auswählen können. Und jetzt werden wir nur noch
diesen Abschnitt für diese Montage ändern . Damit wir eine
schnelle Demonstration organisieren können. Wenn wir mit der rechten Maustaste
nach Eingaben suchen. Wir fügen das hinzu und
wir nehmen den gepressten Stecker in die Montage, die zum Abschnitt
gesprungen ist. Und wir werden dies auf Standard
ändern. Standard so. Wenn wir jetzt kompilieren
und auf „Play ich zum Abspielen eine drücke, kann
unsere Montage
sehen, dass sie direkt
zum Loop-Bereich
springt. Aber wenn ich auch drücke, du in C, wird jetzt tatsächlich
der Standardabschnitt abgespielt. Jetzt gibt es noch
viele andere Dinge, die wir mit diesen Funktionen tun können. Wenn wir also zum
ThirdPersonCharacter zurückkehren und diese Montage löschen,
springen wir zum Abschnitt. Wir können uns rausziehen und bei Kontakt
suchen. Ich werde das nicht alles
durchmachen. Die meisten von ihnen sind ziemlich
selbsterklärend. Und wenn Sie einen Tooltip benötigen, einfach mit der Maus darüber und Sie erhalten eine ziemlich gute Erklärung
, was sie tun. Aber ein wichtiger Punkt
ist die Stop-Montage. Und so können wir
einer Montage sagen, dass sie aufhören soll zu spielen. Wenn wir also hier auf
Stoppmontage klicken, erhalten
wir einen Knoten, mit dem wir
die Verschmelzungszeit einstellen können. Vielleicht willst du einfach, dass die Montage hier
sofort aufhört. Sie können dies einfach auf 0 setzen und die Montage wird sofort
vollständig beendet. Oder vielleicht wolltest du, dass
es langsam verschmilzt. Sie könnten
hier eine Zeit einplanen und sie wird langsam aus
dieser Montage herauskommen. Jetzt können Sie hier wieder eine Montage
einrichten. Wenn du das nicht tust,
werden einfach alle
deine Montagen gestoppt , die gerade abgespielt
werden. diesem Fall können Sie einfach angeben , welche Montage gestoppt werden
soll. Wenn wir das also mit unseren beiden Eingängen verbinden, haben
wir ihm gesagt, dass er
die Reload-Montage beenden soll. Also kompilieren wir, drücken Play und
drücken eine, um die Montage abzuspielen. Und wenn ich auf drücke, stoppt es sofort den Montageplan. Abschließend wollte ich Ihnen
zeigen, wie Sie
die Blending- und
Blend-Out-Zeiten für Ihre Montagen anpassen können . Also können wir das testen. Wir gehen hier zu unserer Montage, und ich werde
eigentlich nur unseren Loop-Bereich löschen und auch
diese Animation löschen. Nur damit das Reload jetzt hier in
unseren Asset-Details
abgespielt wird. Und wenn Sie dies
nicht haben, können
Sie einfach zu Windows gehen und nach Asset-Details
suchen
, um es zu übernehmen. Wir haben die Blending
- und Blend-Out-Zeiten. Je hoch diese Werte sind, desto länger dauert es, bis
die Animation sie vollständig
vermischt und
dann vollständig ausgeblendet hat. Wenn ich diese also so einstellen würde, dass
sie so 00 sagen, kehren
wir hier zu unserer
Third-Person-Vorlage zurück. Ich werde diesen Styling-Bereich einfach los
. Und wir werden
die Montage nicht stoppen,
die heißt, sie irgendwie von selbst
beenden zu lassen. Also drücken wir auf „Spielen“. Und wenn ich eins drücke,
siehst du, dass es sofort losgeht. Es gibt keinen Übergang für ein Tool und es wird auch sofort beendet. Wir drücken also eins
und Sie sehen, dass es sehr schnell
endet und beginnt. Wenn wir jedoch weichere
Übergänge in unserer Animation wünschen, können
wir diese Werte erhöhen. Also sag auch hier 0.30.3. Wenn wir zurückgehen, drücken Sie die
Wiedergabetaste. Wenn ich jetzt eine drücke, werden
Sie sehen, dass
sie viel
reibungsloser zur und
von der Animation übergeht. sind also Einstellungen
, die Sie wahrscheinlich ziemlich oft mit Montagen
verwenden werden, denn wenn Sie
eine schnelle Montage haben, möchten
Sie möglicherweise, dass die Ein - und Ausstiegszeiten kürzer sind. Und wenn Sie eine lange Montage haben, möchten
Sie vielleicht längere. Das Letzte, was ich behandeln wollte, war der Anime-Filialleiter. Wenn wir also
hier den Editor aus dem Flugzeug verlassen und
unsere SK-Schaufensterpuppe öffnen, dann gehen Sie zu Windows und öffnen den Anime-Slot-Manager, der den
Animations-Slot-Manager
aufrufen wird . Hier
können wir jetzt neue Slots hinzufügen oder bestehende Slots löschen oder umbenennen. Jetzt werden Sie vielleicht feststellen
, dass der Name, der hier
angezeigt wird ,
tatsächlich den gleichen Namen hat. So scharf, wenn wir
den Slop wählen, kein Trinkgeld. Dies sind die Slots, die in unserem Skelett
definiert sind. Hier
verwalten wir also tatsächlich all diese Slots. Bei Slots und Gruppen ist zu beachten eine Gruppe nur
eine Montage gleichzeitig durch
alle Slots spielen kann . Wenn also zum Beispiel der Ganzkörper-Montageslot
eine Montage abgespielt hat
und ich dann eine
andere Montage mit dem oberen Körperschlitz gespielt habe
, würde die Ganzkörpermontage tatsächlich abbrechen. Und der Grund dafür ist
, dass beide in derselben Gruppe sind. Wenn ich also möchte, dass
meine
Ganzkörper-Montage und meine Oberkörper-Montage gleichzeitig spielen
können , müsste
ich meinen
Oberkörper-Slot in eine andere Gruppe verschieben . Also könnte ich entweder eine neue Gruppe
erstellen oder sie in eine bestehende verschieben. Wenn Sie einen Slot in
eine vorhandene Gruppe verschieben möchten ,
können Sie einfach mit der rechten Maustaste klicken, eine Körpergruppe zwei einrichten, und das gibt
Ihnen eine Liste aller vorhandenen Gruppen,
die
Sie diesen Platz zwei verschieben können. Das war's für diese Lektion, aber wir werden auch in unseren zukünftigen
Lektionen
viel mehr Montagen verwenden .
47. Animation (Mischknoten): Hallo zusammen. In dieser Lektion werden wir
uns Verschmelzungsknoten ansehen. Blend-Knoten können wir jetzt
mehrere Animationen für unseren
Charakter gleichzeitig abspielen . Sie ermöglichen es uns auch, Variablen
zu verwenden, um zu steuern, welcher Abschnitt
unseres Anim-Graphen abgespielt wird. Bevor wir also anfangen, werde
ich
einige Sachen wiederverwenden, die wir in unserer letzten Lektion,
der Montagen-Lektion,
eingerichtet haben . Und wenn Sie sich an
diese Lektion erinnern, als wir die Wiedergabetaste und die Eins drücken, um unsere Animation tatsächlich
abzuspielen , bewegt sich
unsere untere Körperhälfte
nicht,
wenn wir uns bewegen. Und das liegt daran, dass ich die
Animation neu lade , tatsächlich den ganzen Körper
einnimmt. Deshalb
werden wir heute eine Mischung verwenden,
um unseren Körper in
zwei Hälften zu teilen, sodass
wir unsere Bewegungsanimationen in der unteren Hälfte
abspielen können,
während die Reload-Animation in der oberen Hälfte
abgespielt wird um unseren Körper in
zwei Hälften zu teilen, sodass
wir unsere Bewegungsanimationen in der unteren Hälfte
abspielen können wir unsere Bewegungsanimationen in der unteren Hälfte
abspielen . Wir beginnen also damit, den Planeditor
zu beenden. Dann gehen wir zu
unserem Animationsdiagramm über. Wir gehen also zu Charakteren
als Mannequins, Animationen und öffnen den
ABP-Geldanimations-Blueprint. gerade hier in
unserem Animationsdiagramm passiert, Was gerade hier in
unserem Animationsdiagramm passiert, ist, dass unsere
Fortbewegungszustandsmaschine entweder ein
Idol oder eine Laufanimation ausgibt. Wir speichern diese Animation
in diesem Bewegungsposenknoten dann in unserer
Hauptzustandsmaschine oder im
Fortbewegungszustand als abgespielt. Und das ist nur das, was wir im Fortbewegungsgeld
zwischengespeichert haben. Wenn wir dann
zum Anim-Graphen zurückkehren, speichert
diese Fortbewegung die Ausgabe unserer Hauptzustandsmaschine
in diesen Montageslot. Und wenn Sie sich erinnern, dass
die Montage eine Lektion ist, ist
das, was eigentlich unsere Montage
spielt. Sobald die Montage zum Abspielen aufgefordert
wurde, wird
dies tatsächlich nur unsere Montageanimation
ausgeben. Es wird nicht mehr im Leerlauf oder laufenden
Animationen abgespielt . Schließlich geht es in unser
Kontrollgerät und deshalb unsere Fußpositionierung
tatsächlich immer noch funktioniert
unsere Fußpositionierung
tatsächlich immer noch, wenn wir die Montage
spielen, denn das passiert, nachdem der Montage das Spielen
beigebracht wurde und dann geben wir
die letzte Pose aus. Im Grunde
müssen wir hier einen
Mischmodus hinzufügen, der es
uns ermöglicht, die obere Hälfte
des Körpers zu mischen, indem wir
den Montage-Slop spielen , und
die untere Hälfte des Körpers, der den
Fortbewegung Bargeld. Um das zu tun, klicken
wir mit der rechten Maustaste und suchen nach blend PER. Wir wollen eine solche mehrschichtige Mischung
pro Knochen. Also müssen wir das jetzt
verbinden. Ich
verschiebe diese Knoten einfach ein bisschen so
zurück. Und wir ziehen diesen Knoten
hier rein und trennen
diese beiden Knoten. Ich halte nur Alt gedrückt und
klicke dann hier weniger Stift. Also nehmen wir zuerst
den Ausgangspin und
stecken ihn einfach so in unser
Steuergerät. Lass uns die nach oben bewegen.
Jetzt werden die Animationen
, die auf der
unteren Hälfte unseres Körpers abgespielt werden, die Basispose
eingegeben . Wir
wollen also nicht, dass dies Geld für
die Fortbewegung ist
, weil das nicht unsere
Sprunganimationen haben wird. Wir brauchen Geld von
unseren wichtigsten Staaten. Um das zu tun, trennen
wir
den Steckplatz hier und bewegen ihn nach unten. Wir verfolgen die Hauptstützen aus. Ich suche nach Bargeld und klicke auf Neu, Geld sparen Pose. Und wir können diesen Knoten auswählen und ihn so nennen, wie Sie möchten. Ich rufe meine, sagen die Hauptstaaten, Bargeld wie dieses an. Dann
schiebe ich die hier hoch. Sie sind also ein bisschen mehr aus
dem Weg. Dann werden wir kompilieren. Machen Sie sich keine Sorgen,
dass wir hier in
eine T-Pose gegangen sind oder dass
wir hier eine Notiz
haben liegt nur daran, dass
wir eigentlich keine Animations-Plug-Vignette
haben. Jetzt cachen wir unsere
Haupt-Pose. Wir können aus unserem
Basisposter herausziehen und nach Main suchen. Und wir können die zwischengespeicherte Pose
verwenden, Hauptbargeld wie dieses. Dann wollen wir
das kopieren, einfügen. Und jetzt wollen wir
das in die Quelle
unseres Steckplatzes stecken und das
in die Mischpose stecken, ist 0. Jetzt ist die Mischpose 0,
oder es werden
die Animationen sein , die auf
der oberen Hälfte unseres Körpers abgespielt werden. Jetzt
bekommen wir
hier nur noch unsere Basisanimation. Also unsere Haupt-State-Animationen, das sind unsere Idle Run
- und Jump-Animationen. Diese werden immer
auf der unteren Körperhälfte gespielt . Und dann sagen wir für die obere Hälfte
unseres Körpers, wenn wir eine Montage spielen, verwenden Sie die Montage
für die obere Hälfte. Aber wenn wir keine Montage
spielen, wollen
wir nur dieselbe
Haupt-State-Cash-Animation verwenden. Also nochmal, Idle Run
- und Jump-Animationen. Jetzt können wir also kompilieren
, um diese Notiz
hier los zu werden, und Sie können sehen, dass unsere
Animationen wieder planen. Aber im Moment
wird unsere Animation eigentlich nicht so
aufgeteilt, wie wir es wollen. Sie teilen sich nicht in der Mitte. Das müssen wir eigentlich im
Layer-Setup hier einrichten. Wenn wir also den Knoten auswählen, gehen Sie zu Layer-Setup und klicken Sie dann auf diese
kleinen Dropdowns. Sie können sehen, dass wir einige Filter
haben und hier
definieren wir tatsächlich , an welchem Knochen unser Körper gespalten werden soll. Also
fügen wir
hier einen neuen Eintrag hinzu und klicken auf das
Index-Dropdown. Und hier legen
wir tatsächlich den Knochen fest, damit
die Spaltung stattfinden soll. Also wollen wir für uns unsere Knochennamen
einschalten. Wir können genau herausfinden, welchen
Knochen wir verwenden wollen. Also gehen wir zu Character, dann runter zu Bones und wir wollen Showbone-Namen übernehmen. Also nehmen wir das auf.
Und jetzt können wir hineinzoomen und wir wollen, dass die Spaltung
auf der Wirbelsäule stattfindet. Also werden wir hier ein bisschen
heranzoomen. Und ich denke, Wirbelsäule eins ist
wahrscheinlich die beste. Unsere Logo-Animationen werden unter dem ersten Rücken
abgespielt. Dann
werden unsere Oberkörperanimationen darüber abgespielt. Abhängig von
Ihrem Charakter haben
Sie möglicherweise in Zukunft unterschiedliche
Namen, sodass Sie nicht immer Wirbelsäule
eins angeben. Sie müssen überprüfen, was die Wirbelsäulenknochen für
Ihren speziellen Charakter sind. Im Moment verwenden wir
Wirbelsäule eins und
müssen sicherstellen, dass wir den Namen genau so Wirbelsäule eins und
müssen sicherstellen, dass wir buchstabieren,
wie er im Skelett ist. Also die Wirbelsäule unterstrich
01, so. Jetzt gibt es noch einige
andere Einstellungen für diese Notiz, auf die ich gleich
eingehen werde. Aber im Moment werden
wir nur kompilieren und das testen und
spielen, damit wir auf Play klicken. Und wenn ich eine drücke, um unseren
Reload abzuspielen, und ich mich bewege, können
Sie sehen, wie unsere
Reload-Animation
abgespielt wird und unsere
Unterkörperanimationen abgespielt werden. Und wenn wir nicht spielen
, werden Reload-Animationen oder
Oberkörperanimationen einfach normal abgespielt. Dies ist nur ein einfaches
Beispiel dafür, wie wir tatsächlich verschiedene Animationen
einrichten können , um sie an verschiedenen
Körperteilen
abzuspielen. Um ein
wenig über die Verschmelzungstiefe zu erklären, ist
dies im Grunde
wie ein Überblendeffekt. Derzeit ist es also 0, was bedeutet, dass ab Wirbelsäule eins und einschließlich
der Wirbelsäule ein Bone alle darüber liegenden Knochen sind. Wir werden hier nur diese
Animationsausgabe verwenden. Wenn ich neu lade,
spielt die Montage 100%
aller oben genannten Knochen ab. Wir werden diese Montage verwenden
und nur diese Montage. Wenn wir
dies
zum Beispiel auf drei setzen würden, würde das, was
passieren würde, unser Rückgrat. Man würde
etwa 33 Prozent
dieser Animationsausgaben verwenden . Also 33% unserer Reload-Montage, dann Wirbelsäule zwei,
würden 66%
unserer Reload-Montage und 33%
nur unseres Haupt-State-Caches verwenden . Und dann mit dem Rückgrat würde
es
die Montage vollständig zum Nachladen nutzen . Sie können
diese also grundsätzlich verwenden, um
die Effekte des
Verschmelzungsknotens zwischen mehreren Bones zu mischen. Wenn wir nun einen
Teil des Oberkörpers vom
eigentlichen Abspielen der
Reload-Montage ausschließen wollten , könnten wir das tun. Wenn wir also
einen weiteren Abzweigfilter hinzugefügt haben, öffnen Sie diesen und stellen Sie
diesen auf Unterarm ein. Also sage ich unterstrichen. Ich setze die Knochentiefe
auf zwei minus eins. Das bedeutet, dass wir
der Verschmelzungsnote mitteilen , dass wir
nicht möchten der Unterarmknochen
oder Knochen darunter
unsere Mischzustandspose 0 verwenden, sondern dass er unsere Grundpose verwendet. Wenn wir also auf Kompilieren klicken
und das testen, wenn ich Y drücke und Sie
sehen können, dass sich mein rechter Arm mit
unserer Reload-Animation
nicht mehr bewegt. Es bleibt einfach da. Jetzt
bewegen sich der Arm, der
Oberarm immer noch , weil wir nur
vom Unterarm aus angreifen. Aber Sie können sehen, dass es nicht mehr
so animiert, wie es sollte. Auf diese Weise
können Sie Körperteile
von der
Wiedergabe einer Animation ausschließen . jetzt keine
allzu großen Sorgen, wenn Sie nicht vollständig verstehen, dass
Ihre Knochentiefe, wenn Sie mit dem Animieren beginnen, meistens nur 0 beträgt und Sie sie nicht wirklich verwenden werden
das minus
eine Option auch sehr oft. Im Moment entfernen wir
dies einfach weiter unten,
indem wir hier auf den kleinen
Abwärtspfeil klicken und Löschen ausführen. Jetzt können wir mehrere
Eingabe-Blend-Posen hinzufügen. Wenn wir also auf Pin hinzufügen klicken, können
Sie sehen, dass dies
als neue Blend-Pin-Posts hinzugefügt wurde. Und wenn wir ins Detail gehen, können Sie sehen,
dass wir hier im Layer-Setup
einen neuen Index haben . Dies hat einfach die gleichen
Einstellungen wie Index 0 hat nur diese
Einstellungen jetzt für diesen Stift. Vielleicht wollten
Sie zum Beispiel die
Reload-Animationen
auf der oberen Körperhälfte abspielen , aber Sie hatten eine zweite Animation , die Sie
beispielsweise im Gesicht
abspielen wollten dann füge das hier ein,
füge dem Filter
auf den Zweigfiltern einen neuen Bone und lass den Kopf dann
eine andere Animation abspielen. Als Nächstes haben wir
die Mischgewichte. Dies ist der Betrag, um den sich die Verschmelzungspose tatsächlich
auf die Basispfosten auswirkt. Zum Beispiel
ist momentan nur auf eins eingestellt,
was bedeutet, dass für Bones, die
die Verschmelzungspose abspielen möchten,
eine Animation zu 100%
dieser Animation abgespielt wird. Wenn ich das auf 0,5 setzen würde, entfernen
wir diese
Mischpose vorerst mit einem Stift. Also was ist Rechtsklick
und entferne den Verrundungsstift. Dann werden wir kompilieren, wenn
wir auf „Jetzt spielen“ klicken und ich unsere
Reload-Animation durch Drücken einer Taste abspiele.
Sie können sehen, dass die Animation nicht
vollständig abgespielt wird. Es nutzt im Grunde die Hälfte
des Effekts davon
auf unsere Grundpose aus. Jetzt können wir dies auch verwenden, um zum Beispiel eine Überblendung zu
deaktivieren. Also könnten wir das
auf 0 setzen und kompilieren. Und jetzt, wenn wir
Play drücken und ich eins drücke, können
Sie sehen, dass sie
keine Montage mehr spielen , weil wir das Alpha hier auf 0
gesetzt haben. Dies ist nur ein
normaler Float-Eingang. Wir könnten also ziehen, eine Remote-to-Float-Option
verwenden, und das wird
uns nur eine Float-Variable erstellen, die wir in unserem Event Graph ändern und steuern
können. Gehen
wir nun weiter, wenn wir zum
Anim-Graphen zurückkehren und die
Ebenenmischung pro Knochenknoten auswählen. Hier haben wir eine Option für eine netzbasierte Rotationsverschmelzung. Dies bedeutet im Grunde, dass
die Rotation unserer Knochen oder der Mesh-Raum
anstelle des lokalen Raums verwendet wird. Diese Option
kann jetzt hilfreich sein, wenn Ihre Animationen beim Abspielen etwas
seltsam aussehen . Meistens stelle ich fest, dass ich das tatsächlich aktiviert habe
, aber es hängt von
deinem Charakter und den
Animationen ab, die du spielst. Das macht
dasselbe, aber wir haben so
skaliert, dass es Ihre Meshes
verwendet, Bones-Skala anstelle
der lokalen Skala. In den meisten Fällen
möchten Sie, dass dies ausgeschaltet wird. Jetzt gibt es andere
Arten von Verschmelzungsknoten. Also wenn wir diese vorerst löschen und diese
Variable löschen, oder? Weil ich nach dem Blend-Tool
suchen kann und es eine
Verschmelzungsposen von Boolean gibt. Wenn wir das also schaffen, können
Sie sehen, dass wir
einen echten und einen falschen Stift haben . Also wird es unsere
Quelle anschließen, es ist so. Auf diese Weise können wir
nun grundsätzlich steuern , welche Animationen sie
abgespielt werden , abhängig von
einem booleschen Wert. Wenn dieser aktive
Wert hier also true ist
, wird die Animation mit true
verbunden ausgeführt. Und wenn das
falsch ist,
ist die Animation verbunden, um
Leute laufen zu lassen. Und
das können wir tatsächlich in der Vorschau hier sehen. Sie können also sehen, dass
der Wert falsch ist. Also werden nur die Animationen, die von
unserem Folk-Pen hier
kommen unserem Folk-Pen hier , zu
unserem Kontrollgerät
weitergeleitet. Wenn ich
das übernehmen und kompilieren würde. Ich sage jetzt nur die
Animation von unserem echten Stift, sie wird
zu unserem Kontrollgerät weitergeleitet. Und dann haben wir noch
ein paar Mischzeiten. Wenn Sie
diesen Wert also während des Spiels ändern würden, hoch diese Werte sind, desto mehr Zeit dauert
es, bis er reibungslos von den wahren Posen zu den Posen der Leute
und dann wieder zurück falsch zu wahr für
die falsche Zeit. Dieser Knoten kann also
sehr hilfreich sein,
wenn Sie beispielsweise eine Menge Animationen hatten, also spielen Sie nur, wenn Ihre
Charaktere schwimmen, und dann andere Animationen,
wenn die Figur auf dem Boden
herumläuft Möglicherweise haben Sie eine Variable namens Schwimmen, die
sich mit so etwas verbindet. Und dann kann das
reibungslos zwischen
den Animationen auf dem
Boden und
den Schwimmanimationen übergehen Animationen auf dem
Boden und
den Schwimmanimationen ,
wenn dieser Boolean auf true oder false
gesetzt wird. Ein weiterer ähnlicher Knoten
ist das Blending. Wenn wir also nach
Blend und dann nach int suchen, können
wir die
Blend-Posen von int verwenden. Das funktioniert jetzt ähnlich, aber statt eines booleschen ist
es ein int-Wert. Wir können also
jetzt mehrere Eingaben hinzufügen, es gibt nur zwei. Wenn ich das also auf eins setzen würde, würde unser einziger Beitrag verwendet werden. Also können wir
diese so verbinden. Klicken Sie auf Kompilieren und Sie werden
sehen, dass der eine verwendet wird. Aber wenn ich das auf
0 ändere und wir erneut kompilieren, werden
Sie sehen, dass jetzt die
0-Eingaben verwendet werden. Und das Gute
daran ist, dass wir mehr als zwei Eingaben haben
können. Also, wenn wir mit der rechten Maustaste klicken und tun, oder wir klicken mit der rechten Maustaste
auf den Knoten, sorry, und fügen Blend PIM hinzu. Sie können sehen, dass dies eine neue Option
hinzufügt. Wenn ich diese Knoten einfach kopieren
und einfügen würde, füge sie ein und verbinde
sie mit hier. Und jetzt setzen wir das
auf zwei, wird kompilieren. Sie sehen, dass jetzt die
zwei Pins verwendet werden. Nochmals, wir haben gerade
diese Zeiten und sie funktionieren genauso wie
unser boolescher Knoten. Was auch immer Sie hier angeben ist, wie lange es dauern wird, ihn in diese Pose
einzufügen. Jetzt können wir auch einen
Blend-Knoten mit einer Aufzählung verwenden. Wenn wir das also löschen und uns
zurückziehen können , lassen wir
es einfach für einen Moment so. Wir erstellen eine neue
Aufzählung, also
klicken wir mit der rechten Maustaste und gehen
zu den Blueprints Dann gehen wir zur Aufzählung. Ich nenne das einfach
E-Unterstrich-Animationstypen. Wir werden das öffnen und
ein neues Anion erschaffen. Und wir nennen
das „sagen wir schwimmen“. Und wir fügen noch einen zum Gehen hinzu und
einen weiteren für zum Beispiel Auto. Das sind nur Beispiele damit ich Ihnen zeigen kann,
wie der Code funktioniert, aber wir schließen das jetzt. Kehren Sie zu unserem
Animationsdiagramm zurück und dann
suchen wir nach einer
EA-Unterstrich-Animation. Sie sehen
hier oben, dass wir
Verschmelzungsposen E
Unterstrich-Animationstypen haben. Und das liegt daran
, dass wir so
eine Gewerkschaft genannt haben . Also werden wir das schaffen. Sie sehen, dass wir
diesen Knoten hier bekommen. Und wenn wir mit der rechten Maustaste
auf den Knoten klicken, können
Sie sehen, dass wir Pins zum Schwimmen,
Gehen und Kosten
hinzufügen können . Also machen wir das für
jeden so. Und jetzt haben wir einen Anionenstift anstelle eines booleschen
oder einer Ganzzahl. Also verbinden wir den Ausgang
mit unserer Kontrollrückschau. Und wir verbinden
diese sicher zum Schwimmen, Gehen und Kapodaster. Derzeit ist dies auf 0 gesetzt. Wenn wir also kompilieren, wird
es einfach
den Schwimmpfosten auswählen , denn das ist der erste. Wir können aber auch eine
Variable verwenden, um dies zu steuern. Damit wir ein neues Anion erzeugen können. Wir nennen diesen
Animationsmodus zum Beispiel. Und wir setzen es auf E
Unterstrich Animationstyp. Das ist die Gewerkschaft, die
wir gerade gegründet haben. Wir werden kompilieren. Jetzt können wir diese
Variable in unseren Knoten einbinden. können wir tatsächlich steuern,
welche verwendet
wird Mit dieser Variablen können wir tatsächlich steuern,
welche verwendet
wird. Wir können also sagen, ich will im Auto, kompiliere
es und jetzt verbraucht es die Tinte. Und wir können dies während des
Spiels in unserem
Event-Graph hier ändern , um zu steuern, welche Animationen
unser Diagramm abspielen soll. Und schließlich, wenn wir
diesen Knoten löschen und nach dem Land
suchen, können
wir einfach einen Mischmodus verwenden. Dies ist ein einfacher Knoten
, der im Grunde nur
eine A- und B-Eingabe benötigt und es uns ermöglicht mithilfe eines Alpha-Werts zwischen ihnen
zu mischen. Wenn das also 0 ist, ist es
das, die Ausgabe dieses Knotens
wird nur 100% von a sein. Und wenn das einer ist, ist es a. 100% von B sind 0,5, dann sind es die Hälfte
und die Hälfte
dieser beiden Animationen ausgegeben. Im Moment löschen wir einfach diesen Knoten und setzen gerade unsere
Ebenenmischung pro Knochenknoten wieder auf. Also suchen wir nach Blei
und können Lead-Marke
pro Knochen verwenden , um das hier wieder zu verbinden
, das mit unserem Kontrollgerät. Wir werden diese Knoten löschen, weil sie sie nicht mehr verwenden. Dann werden
wir in unserer Notiz hier einfach die
Stütze des
Zweigfeldes für Wirbelsäule eins festlegen . Also wird es das auf
Wirbelsäule setzen, eine Eins unterstreichen. Und wir werden diese Variablen auch hier
unten löschen , weil wir
diese nicht wirklich verwenden und einfach kompilieren. Wenn wir jetzt auf Play klicken
und herumlaufen, können
wir eins drücken
und es wird eine Reload-Animation abgespielt , während unsere
Bewegungsanimationen
für diese Lektion noch mit ihnen
arbeiten hoffentlich
verstehst du jetzt ein bisschen mehr über das
Zusammenmischen von Animationen und wie wir tatsächlich
zwei Animationen
gleichzeitig auf einem Charakter-Mesh abspielen
können .
48. Animation (Notifies): Hallo zusammen. In dieser
Lektion werden
wir uns Animationsbenachrichtigungen ansehen. Jetzt benachrichtigt Animation ein wirklich praktisches Tool,
da sie es uns ermöglichen Code
zu einer bestimmten
Zeit in einer Animation auszuführen. Jetzt haben wir uns bereits einige
Benachrichtigungen zu einem früheren Zeitpunkt
im Kurs angesehen . Wir haben uns die
Sound- und Wiedergabeeffekte angesehen,
Benachrichtigungen, die es uns
ermöglichten, an bestimmten
Stellen in unseren Animationen Sounds oder
Partikeleffekte abzuspielen . Ich werde diese in
dieser Lektion noch einmal kurz
durchgehen , nur um Ihr Gedächtnis
aufzufrischen. Zunächst müssen
wir also
entweder zu einer Animationssequenz
oder zu einer Animationsmontage gehen . Wir können Benachrichtigungen zu beiden hinzufügen. Also werde ich
die Reload-Montage verwenden , die wir
in unseren vorherigen Lektionen gespielt haben. Also gehen wir zu den Animationen
des Unterrichts über. Und wenn Sie diesen Ordner nicht
haben, habe ich
in den Montage-Lektionen erklärt, wie Sie diese hinzufügen können. Also solltest du
dir das vielleicht mal ansehen. Jetzt scrollen wir nach unten und finden unsere Reload-Montage, die
sich hier unten befindet. Wir machen das einfach auf. Jetzt. Hier unten haben wir unsere Zeitleiste für Benachrichtigungen
und hier
werden wir alle Benachrichtigungen
für diese spezielle Montage sehen. Um eine neue Benachrichtigung hinzuzufügen, wir einfach mit
der rechten Maustaste auf diese Leiste , in der eine steht, und wir
können eine Benachrichtigung hinzufügen. Jetzt hat die Engine bereits einige
eingebaute Benachrichtigungen. Und so können wir Sounds
abspielen oder
Partikel- oder
Niagara-Partikeleffekte spielen . Jetzt gibt es noch andere Benachrichtigungen, wie Sie hier für
Clothing Simulation
und ähnliches sehen können . Ich werde sie in
dieser Lektion nicht
behandeln , weil
sie ziemlich spezifisch und ein bisschen
fortgeschrittener sind und was wir
behandeln werden. Aber wir fügen einfach eine Benachrichtigung über den
Wiedergabeton hinzu. Und jetzt, nachdem das
hinzugefügt wurde, können wir
das an jedem Punkt
in der Animation positionieren . wir also an, wir wollten genau an diesem Punkt klingen,
um zu spielen. Wir könnten unsere
Benachrichtigung an dieser Stelle hinzufügen. Dann können
wir im Detailbereich einen Sound-, Lautstärke
- und Tonhöhenmodifikator festlegen. Wir können die Farbe
der Benachrichtigung ändern, und das
dient nur der Organisation. So können Sie schnell und auf einen Blick
erkennen, was eine Benachrichtigung an ihrer Farbe
ist. Eine weitere nützliche Einstellung
ist die Trigger-Chance. Vielleicht
wollten Sie nur, dass diese Sounds
manchmal abgespielt werden, wenn diese
Animation zufällig abgespielt wird. Wir könnten es also nicht an eine senden,
was bedeutet, dass der
Sound immer
abgespielt wird , wenn die Animation abgespielt wird. Wir könnten das auf 0.1 setzen. Bei diesem Sound spielen wir nur zehn Prozent der Zeit, in der
diese Animation abgespielt wird. Ein Beispiel dafür, wie das nützlich
sein könnte, ist,
dass Sie
eine Animation im Leerlauf haben und
dieser Animation im Leerlauf
ein Hustengeräusch hinzufügen wollten . Jetzt
möchten Sie wahrscheinlich nicht, dass dieser Sound
jedes Mal abgespielt wird, wenn die
Leerlaufanimation abgespielt wird. Sie könnten also die
Auslösechance für
diese Soundbenachrichtigung auf 0.1 setzen , und dieser Sound wird
10% der Zeit wiedergegeben , in der die
Animation abgespielt wird. Jetzt können wir
dasselbe mit
Partikeleffekten tun . Also lösche ich
die Sound-Benachrichtigung hier, rechten Maustaste und füge Notify hinzu. Jetzt können wir entweder eine
Neun zu Fünf für Niagara hinzufügen, politische Effekte werden kaskadieren. Ich werde Niagara wählen, nur weil das
ein neueres System ist. Also klicken wir darauf und
wählen die Benachrichtigung aus. Dann können
wir hier oben in
unserem Detail-Panel festlegen, welche
Niagara-Partikeleffekte wir wählen möchten. Ich habe derzeit
keines meiner Projekte, daher wird hier eines angezeigt. Aber wenn du es tätest, würden sie
hier auftauchen. Dann können wir den
Standort und die Drehung festlegen. Dies ist der
Offset von der Wurzel. Der Wurzelknochen
unseres Charakters
hier ist also genau dort, wo sich meine
Maus gerade befindet. Wenn wir also, sagen wir, 50, Hi
hinzufügen würden, würde sich
unser Partikeleffekt
bis zu dieser
Höhe bewegen , weil er die Höhe des
Partikeleffekts
von der Wurzel aus um 50
erhöht . Jetzt können wir auch
sagen, ob
unsere politische Tatsache mit etwas
zusammenhängt oder nicht . Derzeit ist es also
angehängt und das
bedeutet, dass es einfach
an die Wurzel angehängt wird. Aber wir können einen
Bot-Namen angeben, wenn wir wollen. Wir wollten, dass die Partikeleffekte am Kopf angebracht
werden. Wir könnten das tun, indem wir nach Kopf
suchen. Und Sie können sehen, dass
uns das hier unser Kopfbein gibt. Also jetzt, wenn wir
diesen Partikeleffekt oder tatsächlich am Kopfknochen
befestigt werden. Im Gegensatz zu früher können wir
sagen, Farbe benachrichtigen. Und wir können auch
ändern, ob
die Benachrichtigung jedes
Mal ausgeführt wird oder nicht die Benachrichtigung jedes
Mal ausgeführt wird , oder die Hälfte der Zeit sagen,
wenn wir zum Beispiel 0,5 setzen. Wenn Sie diese Art von „
Benachrichtigen zum Abspielen“ verwenden, wird der
Effekt im Grunde nur
einmal gespielt , und dann
wird der Effekt zerstört. Aber vielleicht wollten Sie die
Effekte, die Sie von
hier bis hier in der Animation ausführen .
Nun, das können wir machen. Also wählen wir diese
Benachrichtigung aus, löschen sie, klicken mit der rechten Maustaste und
wir gehen zum
Benachrichtigungsstatus und gehen zur
Zeit bis zum Niagara-Effekt zurück. Oder wenn Sie Kaskaden verwenden, Zeit bis zum Partikeleffekt. Daher wird hier die
Niagara-Option ausgewählt. Und du siehst, dass wir
jetzt eine 12 haben. Wir können
dies hier tatsächlich auf den Wert ziehen,
indem wir auf den kleinen Punkt unten klicken und ihn herausziehen. Also können wir das zu 50 hinzufügen. Jetzt
paare ich die Partikeleffekte, die
wir für diese Benachrichtigung festgelegt haben , einen
Wert vom einen zum wahren Wert. Nun
ist etwas zu beachten , dass Ihr Niagara-Effekt sein
wird, der für eine Schleife eingerichtet werden muss. Wenn es nur einmal ausgeführt werden soll, werden die Partikeleffekte nur einmal ausgeführt und
dann nicht mehr ausgeführt. Sie müssen also den
Niagara-Partikeleffekt verwenden, der tatsächlich für eine
Schleife eingerichtet ist, damit dies funktioniert. Dann haben wir
dieselben Einstellungen wie bei unserem vorherigen
Benachrichtigungstyp. Wir haben die Vorlage
, die wir verwenden möchten. Hier legen wir also
den Effekt fest, den wir wollen. Wir können wählen, ob es
an einem Knochen oder einer Pfanne befestigt wird oder nicht . Wir können die Position
und den Rotationsversatz festlegen. Wir können wählen, ob
es sofort zerstört wird oder nicht. Und im Grunde bedeutet
das,
dass Ihre Effektoren beim Abspielen der Animation eine Schleife
bilden. Sobald es hier ist, ist Zerstören
sofort angekreuzt. Es spielt keine Rolle, in welchem Stadium der Partikeleffekt in der
Mitte des Laufens befindet. Es wird sofort zerstört. Wenn dies jedoch abgehakt ist, wenn wir an
diesem Punkt angelangt sind, wenn der Partikeleffekt halb vorbei
ist, wird er enden lassen. Also vielleicht
braucht dein Pot, ein cooler Effekt noch zwei
Sekunden, um fertig zu werden, dann wird es das zulassen. Es liegt also an Ihnen, ob Sie diese Tektonik haben oder
nicht abhängig von der Art der
Effekte, die Sie verwenden. Wenn Sie jetzt mit Benachrichtigungen arbeiten, Sie möglicherweise
eine ziemlich überfüllte Zeitleiste, wenn haben
Sie möglicherweise
eine ziemlich überfüllte Zeitleiste, wenn in
einer bestimmten Animation viel los ist. Sie können also immer einfach neue Benachrichtigungs-Tracks
hinzufügen. Wir können also
hier auf dieses
kleine Drop-down klicken , um eine Benachrichtigungsspur hinzuzufügen. Und das gibt uns einen zweiten Track , den wir hinzufügen können, benachrichtigt zwei, es ändert nichts daran, wie
sie laufen oder irgendetwas
Ähnliches ist rein organisatorisch. Bisher haben wir
die Standardbenachrichtigungen verwendet, die in der Engine
integriert sind,
aber wir können tatsächlich unsere
eigenen erstellen, aber wir können tatsächlich unsere
eigenen erstellen die es uns ermöglichen, bei
Ereignissen auszuführen und Code auszuführen, wenn eine
Animationsbenachrichtigung ausgeführt wird. Wir wählen diese Benachrichtigung aus
und löschen sie. Vielleicht wollte ich, dass
ein Stück Code läuft, wenn mein Charakter sagt schnappt sich das Magazin oder posiert das Magazin
von der Waffe hier aus. Nun,
das können wir mit Benachrichtigungen machen. Was wir also tun, ist
mit der rechten Maustaste zu klicken und eine Benachrichtigung hinzuzufügen. Dann gehen wir zu „Neu benachrichtigt“ über und wir können
die Benachrichtigungen
benennen, damit wir dieses
Detach-Magazin so anrufen können. Sie können sehen, dass wir
jetzt eine Benachrichtigung erhalten haben , dass es
das Touch-Magazin heißt. Wir können es bewegen
wie unsere vorherigen, aber ich werde meins hier behalten. dieser Benachrichtigung können
wir jetzt ein Ereignis in
unserem Animations-Blueprint aufrufen , wenn diese Animation diesen Punkt wiedergibt. Aber wir werden hier auf ein kleines Problem
stoßen,
und ich werde Ihnen zeigen, warum, wenn wir zu unserem Animations-Blueprint gehen und ich werde Ihnen zeigen, warum, wenn wir , der,
wenn Sie sich erinnern, in der Animation von Charakteren,
Schaufensterpuppen, enthalten
ist . Und dann eröffnen wir Geld. Wenn
ich mit der rechten Maustaste klicke und
nach meiner Trennung suche, sollte
ich normalerweise nach meiner Trennung suche, eine Veranstaltung
für unser
detach-Magazin finden , aber das bin ich nicht. Und der Grund dafür ist
, dass, wenn Sie sich erinnern, weniger als Animationen
sind
und dieser Ordner hier tatsächlich ein
eigenes Skelett hat. Und dann
hat unser Charakter ein anderes Skelett. Das ist der Grund, warum wir benachrichtigen. Es taucht nicht nur in
unserem Animations-Blueprint auf. Wir können das leicht beheben. Was wir also tun müssen, ist zu unserem Charaktere-Ordner
zu gehen, dann zu unseren Schaufensterpuppen, dann zu zwei Maschen und die
SK-Schaufensterpuppe zu öffnen. Und hier gehen wir
zum Tab Animationsbenachrichtigungen. Wenn Sie es nicht
geöffnet haben, können Sie
zu Window gehen und
die Animation,
die FISA, suchen und sie übernehmen. Und wir klicken einfach mit der
rechten Maustaste und machen neue. Ich nenne dieses Magazin, oh sorry, Detach Magazine. Und es muss genauso
geschrieben sein wie die Benachrichtigung
in unserer Montage. Und jetzt haben wir diese
neue Benachrichtigung zu unserem Skelett hinzugefügt. Wenn wir jetzt zu unserem
Animations-Blueprint gehen, können
wir mit der rechten Maustaste
nach der Berührung suchen. Und Sie können sehen, dass wir
jetzt einen Anime haben, der an das Touch-Magazin
benachrichtigt wurde ,
und das können wir hinzufügen. Wenn Sie jetzt eine Benachrichtigung zu
einer Animation
hinzufügen würden ,
die dasselbe Skelett verwendet ,
ist dies Ihr Charakter. Um euch ein Beispiel zu geben, gehen
wir zum Ordner
Charaktere, Schaufensterpuppen, Animationen. Dann gehen wir zu Geld
und wir werden einfach finden dass wir
zum Beispiel die Landanimation finden , ich öffne das. Wenn ich jetzt mit der rechten Maustaste
in die Benachrichtigungen
hier klicke, um eine Benachrichtigung hinzuzufügen, eine neue Benachrichtigung. Und ich nenne das
einfach „Sprung“. Und jetzt, wenn wir zu unserem
Animation Blueprint gehen, klicke ich mit der rechten Maustaste und
suche nach jump. Und du wirst sehen, dass
das sofort aufgetaucht ist. Und das liegt daran, dass ich
Jump Land Animation eigentlich nur
das gleiche Skelett
wie unser Charakter verwendet . Jetzt, in unserer Reload-Montage, haben
wir unser
Detach-Magazin benachrichtigen lassen, und dann haben wir auch in unserem Animation Blueprint
dieses Ereignis hier. Jetzt wird dieses Ereignis
jedes Mal ausgeführt, wenn diese Montage von unserem Charakter
gespielt wird von unserem Charakter
gespielt und die Animation an diesem Punkt
angelangt ist. Um das zu testen, können wir
einfach etwas Code hinzufügen. Ich ziehe mich einfach raus
und mache eine Druckzeichenfolge. Und wir lassen
dieses Lied einfach Hallo. Und wir werden kompilieren und auf Play klicken. Und wenn ich jetzt
eins drücke, werden Sie sehen dass wir diesen Hallo-Ausdruck bekommen, wenn unsere Reload-Animation diesen bestimmten Punkt
erreicht. Und wir können auch überprüfen, ob
das Sprungende auch funktioniert. Wir können also mit der rechten Maustaste
nach Sprung suchen, und das schafft uns ein neues Ereignis. Wir können uns daraus ziehen und
dafür eine Druckzeichenfolge erstellen. Und wenn wir kompilieren,
springen wir, wenn wir landen, man sieht,
dass Notify auch läuft. Kehren Sie jetzt für eine Sekunde zu
unserem
Charakter-Skelett zurück . Wir gehen zu Mannequins
als Meshes und öffnen die Schaufensterpuppe hier in unserer Registerkarte
Animationsbenachrichtigungen. Hier können Sie Animationsbenachrichtigungen
löschen. Sie können neue erstellen, damit wir mit der rechten Maustaste klicken und neue erstellen
können. Wir können auch umbenennen. Wir können also mit der rechten Maustaste klicken und
Umbenennen auswählen , um den
Namen einer Benachrichtigung zu ändern. Ein weiteres hilfreiches Tool sind
die
Suchverweise, mit
der wir alle Animationen finden können , in
denen diese Benachrichtigung enthalten ist. Wenn wir also darauf klicken,
können Sie sehen, dass es uns genau
die Animation gibt , die Jump and Notify
verwendet. Wir können darauf doppelklicken und Sie können sehen
, dass
dies die Animation ist
, die darüber informiert wurde. Es kann zum Beispiel sein,
dass
Sie eine Animation haben, die gerade ausgeführt wird, und benachrichtigen, dass Sie dies nicht möchten. Sie können immer einfach zum Skelett
kommen,
mit der rechten Maustaste auf Notify klicken und
die Animation suchen , die diese Benachrichtigung
abspielt. Wenn Sie die Suche hier
loswerden möchten, können
wir einfach mit der rechten Maustaste auf die Filter zum
Entfernen klicken und Sie können sehen, dass jetzt wieder
alle unsere Animationen angezeigt werden. Jetzt können wir auch unsere eigenen benutzerdefinierten
Benachrichtigungen
erstellen , die die Arbeit ein
wenig benachrichtigen , wie die Benachrichtigung über den Wiedergabesound oder den
Spielpartikeleffekt. Wenn wir also hier zum
Inhaltsbrowser zurückkehren, gehe
ich einfach
zum Ordner Blueprints. Also
Blueprints für Dritte, wir rechten Maustaste und klicken auf
Blueprint-Klasse. Dann gehen wir zu allen Klassen und
suchen nach notify. Und wir wollen
Animationsbenachrichtigung hier. Wenn wir also darauf klicken
und Select machen, wird uns
das
eine neue Blaupause erstellen. Ich
nenne nur mein Beispiel. Benachrichtige mich so. Und wir doppelklicken
, um das zu öffnen. Ich werde meine einfach so in
die obere Leiste
ziehen . Jetzt haben wir ein
neues Editor-Layout. Sie können sehen, dass wir eigentlich
kein
Ereignisdiagramm haben , wo wir
unser My Blueprint-Panel und
dann das
Detail-Panel hier haben unser My Blueprint-Panel und . Jetzt haben wir einige
Funktionen
in diesen Blueprint integriert , die wir überschreiben können. Und das sind die Funktionen
, die tatsächlich
ausgeführt werden , wenn Notify hier ausgeführt wird. Was wir also tun werden,
ist zuerst
zu unserer Reload-Montage zu gehen . Wenn wir mit der rechten Maustaste in die Benachrichtigung klicken, aber zu Notify hinzufügen gehen. Hier
sehen Sie, dass wir jetzt diese Beispielbenachrichtigungen
haben. Wenn wir also darauf klicken, können Sie sehen dass
wir einen neuen Benachrichtigungstyp haben. Das ist das Gleiche wie unser
Blueprint-Name und wir können ihn
zum Beispiel dort
positionieren, wo wir es hier sagen möchten. Nun, wenn unsere Animation
an diesem Punkt angelangt
ist, werden die Ereignisse in
unserem Beispiel „Notify“ hier ausgeführt. Damit können wir
benutzerdefinierten Code in dieser Benachrichtigung ausführen. Immer wenn diese Benachrichtigung ROM erhält, können
wir
receive notify überschreiben. Diese Funktion wird immer dann
ausgeführt, wenn ich innerhalb unserer
Animation
benachrichtige. Und es liefert uns
einige nützliche Informationen. Es liefert uns also die
Animation, die tatsächlich Notify und
auch die Mesh-Komponente
aufgerufen hat. Und das Gute
daran ist, dass wir beispielsweise auf
unseren Animations-Blueprint oder
sogar auf die Figur zugreifen können unseren Animations-Blueprint oder , die
die Animation damit abgespielt hat. Also können wir uns hinziehen und
wir können Besitzer bekommen, so. Jetzt ist der Besitzer
des Charakter-Meshs
immer der
Character Blueprint. Wenn wir das nutzen,
könnten wir uns zum Beispiel hinausziehen und Kosten für den Charakter verursachen. Und jetzt können wir ganz einfach auf
unseren Charakter-Blueprint zugreifen. Wir können auch auf unseren
Animations-Blueprint zugreifen , indem wir
einfach
aus den Mesh-Komponenten ziehen und zum Beispiel
suchen. Und das gibt
uns einen Hinweis
auf unseren Animations-Blueprint. Um Ihnen
ein Beispiel zu geben, wie das tatsächlich funktioniert, werden wir dies vorerst
löschen. Ich füge hier nur
eine Druckzeichenfolge hinzu. Und wir sagen Hallo. Das ist ein Test. Wir verbinden das mit dem Rückgabewert,
so wie dieser kompiliert wird. Und jetzt, wenn wir auf
Play klicken und ich eins drücke, wirst
du sehen, dass Hallo
und auch Hallo ausgeht Dies ist ein Test und das
liegt daran, dass wir in der Animation
neu laden, unser neues Beispiel benachrichtigen. Und innen am Beispiel benachrichtigen. Die empfangene Benachrichtigung von ihnen wird ausgeführt und unser
Druckstring wird hier ausgeführt. Nun ein gängiges Beispiel dafür, was dieser Kunde oder Pfizer für unsere Schritte
verwendet hat. Jetzt denken Sie vielleicht, dass
Sie einfach den
Wiedergabesound verwenden können , um zu benachrichtigen, dass er in die Engine
eingebaut ist. Das Problem dabei ist jedoch
, dass Sie, wenn Sie
verschiedene Arten von Sounds
für verschiedene Bodentypen haben , erkennen müssen welcher Art von Boden
Ihr Charakter auf
welcher Art von Boden
Ihr Charakter
läuft, und dann
den angemessener Sound. einen Kunden verwenden, der auf diese Weise
benachrichtigt könnten
Sie den
Code schreiben, der möglicherweise eine Linienspur unter Ihrem Charakter ausführt, um
den Boden zu erkennen, und dann den richtigen Sound
für diesen Bodentyp
abspielen. Dies ist jedoch nur ein Beispiel. Sie könnten diese
für alle
möglichen Dinge in Ihren Projekten verwenden . Wir können ihnen auch
Anpassungseinstellungen hinzufügen. Wenn wir hier also eine neue
Variable hinzufügen und diese zum Beispiel „say
sounds“
nennen, gehen
wir zum
Variablentyp und suchen nach einer Soundbasis und wählen eine
Objektreferenz aus. Jetzt kompilieren wir und klicken hier
einfach auf das
kleine Auge. Oder Sie können
Instanzen übernehmen, die hier bearbeitet
werden können
, das Gleiche tun, kompilieren. Und jetzt, wenn wir zu unserer
Reload-Montage gehen und unsere Benachrichtigung
auswählen, können
Sie hier oben
in den Einstellungen sehen, dass wir jetzt die Soundvariable haben
, die wir gerade erstellt haben. Wir können einen Sound setzen und dann werden
innen die
Benachrichtigungsfunktion empfangen. Wir könnten jeden
Sound verwenden, der in der Montage steckt, und
ihn abspielen. Um das zu tun, ziehen wir uns hier
einfach aus
unserem Rücksendeschein heraus und
schaffen etwas Platz. Also ziehen wir uns in die Länge und
suchen nach Play-Sound. Wir verwenden Play-Sound am Standort. Wir werden unseren Klangwert erfassen und ihn in die
Soundvariable einbinden. Und für den Standort wird der Standort
der Mesh-Komponente abgerufen. Also bekommen wir den Standort. Wir kriegen keinen Standort auf der Welt. Stecken Sie das in Position. Dann kompilieren wir
es und Sie werden feststellen, dass
ich meinen
Sound hier als keinen belassen werde, und wir werden die Montage verwenden, um diese Sounds
tatsächlich einzustellen. Also wählen wir hier das Beispiel notify aus und nehmen hier
einen Sound auf. Also werde ich den beim
Kompilieren fehlgeschlagenen Sound auswählen. Und während
die Animation hier abgespielt wird, werden Sie tatsächlich feststellen , dass sie tatsächlich
einen Ton dafür abspielt. Also stoppen wir dieses Flugzeug
, weil es nervig wird. Und wir werden das testen. Also drücken wir Play und
das Spiel und drücken eins, um diesen Sound abzuspielen,
wird die Animation abspielen. Sie können sehen, dass unser Notify
läuft und den Sound abspielt , den wir hier
in unserer Montage saßen. Sie können dies mit
allen möglichen Einstellungen tun. Wenn Sie also
möchten, können Sie zum Beispiel hier
einen booleschen Wert hinzufügen . Und solange Sie die
Instanz bearbeitbar machen
, ist dies
von unserer Montage aus zugänglich. Sie können sehen, dass wir jetzt diese neue Variable hier
haben, und ich kann darauf zugreifen, wenn
ich meine Benachrichtigung auswähle. Und wir können auch mehrere
dieser Animationsbenachrichtigungen verwenden. Also kann ich das
hier rüber verschieben, mit der rechten Maustaste. Fügen Sie genug ein Beispiel hinzu. Wenn ich das auswähle und jetzt können
wir einen anderen Sound auswählen. So könnte ich zum Beispiel den
Compiler-Erfolg auswählen. Wenn wir jetzt auf „ Abspielen“ klicken und ich eine drücke,
um die Animation abzuspielen, sollten
Sie beide Töne hören. Zuletzt habe ich Ihnen gezeigt, wie Sie neue Animationsbenachrichtigungen
erstellen, aber ich habe Ihnen nicht gezeigt, wie
Sie sie wiederverwenden können. Wenn wir also hier den
Flugzeugeditor verlassen, kehren wir zu unserer Reload-Animation zurück. Sie können sehen, dass wir
ein freistehendes Magazin haben. Nun, vielleicht möchte ich, dass dieses Ereignis
auch hier drüben läuft, wir können mit der rechten Maustaste klicken, hinzufügen, benachrichtigen, zu Skeleton-Benachrichtigungen gehen. Und hier
sehen Sie, dass wir alle
unsere vorhandenen Benachrichtigungen haben und getrennt sind. Das Magazin ist
hier ganz unten . Damit wir das schaffen können. Jetzt
wird das Ereignis in unserem Animations-Blueprint hier unserem Animations-Blueprint hier zweimal für
diese Animation ausgeführt, einmal hier und einmal hier. Und wir können auch
dieses Detach-Magazin verwenden , das
in anderen Animationen benachrichtigt wurde, es ist nicht an
diese Animation gebunden. Wenn wir also wollten,
können wir
den Animations-Ordner unter
den Schaufensterpuppen sagen den Animations-Ordner unter
den , dann gehen wir zu Geld. Und das könnten wir zum Beispiel zur
Landanimation hinzufügen. So können wir mit der rechten Maustaste klicken und
benachrichtigen, Skelett benachrichtigt. Und dann können wir hier zum
freistehenden Magazin gehen. Und jetzt
wird dieses Event auch laufen, wenn wir diese
Jump-Land-Animation auch
spielen. Das war's also für diese Lektion. Hoffentlich verstehst du jetzt
ein bisschen mehr über Animationsbenachrichtigungen und wie du sie in deinen
zukünftigen Projekten verwenden
kannst.
49. Animation (Staaten): Hallo zusammen. In dieser Lektion
werden wir uns die Animationszustände in
unserem
Animations-Blueprint genauer ansehen . In unserer ersten Lektion
haben wir nun einen kurzen Überblick über
diese Animationszustände gegeben. Aber in diesem Fall werden
wir uns
viel genauer ansehen wie sie funktionieren und wie
Sie neue hinzufügen können. Öffnen Sie also zunächst Ihren Animations-Blueprint
und gehen Sie zum Anim-Diagramm. Also werden wir das einfach öffnen. Dann gehen wir
zunächst zur Fortbewegungszustandsmaschine hier. Und wenn Sie sich an vorhin erinnern, haben wir
hier unseren Ruhezustand und dann werde ich den
Slash-Run-Zustand gehen. Und in diesen
Staaten haben wir tatsächlich unsere
Animationen. Im Ruhezustand haben wir also die Leerlaufanimation und
dann den Walk-Slash-Lauf. Wir haben unseren Walk Slash
Run, Londoner Raum. Zunächst fügen wir dieser
Fortbewegungszustandsmaschine
einfach einen neuen Zustand hinzu. zu tun, klicken wir einfach
mit der rechten Maustaste und klicken auf Staat. Und das wird uns
einen neuen Zustand schaffen, der
unseren Idle- und
Walk-Slash-Run-Zuständen ähnelt . Ich
nenne meins einfach zielgerichtet und wir werden heute
einen Zielstatus schaffen. Warum haben wir jetzt einen
neuen Staat namens zielgerichtet, aber er wird im Moment nie wirklich aufgerufen
werden weil wir keine Regeln haben , die darauf übergehen werden. Um also eine neue Regel zu erstellen, müssen
wir uns von einem anderen Staat
zu unseren neuen Stapes bewegen. Also werden wir uns
vom Leerlauf zum Zielen bewegen. Das gibt
uns einen Pfeil, vom Leerlauf zum Zielen
zeigt. Denn diese Regel bestimmt,
ob wir uns im Ruhezustand befinden, ob wir in den angestrebten Zustand
übergehen sollen oder nicht. Jetzt müssen wir unserer
Regel tatsächlich
etwas Code hinzufügen , um zu bestimmen wann der Ruhezustand in den Zielzustand
wechseln soll. Was wir also tun können, ist hier auf diesen
kleinen Button
doppelklicken. Und das wird uns
in diese Regel hineinbringen. Und je nachdem, ob dieser Rückgabewert wahr ist oder nicht, werden wir vom Idol
zum Endzustand
übergehen oder nicht. Wir beginnen also einfach damit, eine neue Variable zu
erstellen. Ich werde
meins zielgerichtet nennen, oder es tut uns leid, wir können es nicht als zielgerichtet bezeichnen, weil
wir einen Namen für den Bundesstaat haben, also nennen wir ihn
zielgerichtet so. Ich werde meinen in
einen Boolean wie diesen ändern und wir werden kompilieren. Jetzt könnten Sie hier
eine Warnung erhalten. Das sagt uns nur, dass unsere Regel hier keinen Code enthält. Und dazu werden wir jetzt
etwas Code hinzufügen. Also doppelklicken wir
darauf, um es zu öffnen. Und wir werden unser
Ziel nehmen und
das einfach mit dem Ergebnis verbinden . Dann können wir
so kompilieren und wir sollten diese Warnung auch jetzt loswerden
. Dann kehren wir
zur Fortbewegung zurück. Jetzt haben wir eine Regel, die
es uns ermöglicht, von
Idol zu Ziel zu wechseln , ob die Variable r als Zielvariable wahr ist oder nicht. Wir können das tatsächlich testen. Wenn ich das
also übernehme, kannst du sehen, dass unser Charakter T
posiert und
das tut , weil wir in unserem Zustand
noch keine
Animation eingestellt haben. Jetzt öffnen
wir unseren Zielstatus
und fügen tatsächlich eine
Animation hinzu, damit er abgespielt werden kann. Also ziehen wir uns heraus und
suchen nach Playern, und wir werden den
Sequenzplayer verwenden. Dies ermöglicht es uns nun, nur
eine Animation festzulegen , die unser
Ziel ist, sich zu beschweren. Und wir können das hier drüben
im Detail-Panel tun , um
die Sequenz auf
etwas wie die ADS einzustellen . Und wir sollten
das Gewehr im Leerlauf finden. Wenn Sie
diese Animation nicht haben, wir in der
Montage-Lektion tatsächlich durchgesehen,
wie Sie sie in
Ihr Projekt importieren können. Sie können sich das also
ansehen und das wird Ihnen
zeigen, wie Sie
diese Animationen hinzufügen können. Und jetzt haben wir die
Animation eingestellt, wenn wir kompilieren, weil unser Ziel oder
Ziel auf true gesetzt ist.
Sie können sehen, dass jetzt
eine gewehrgerichtete Animation abgespielt wird. Aber das Problem ist jetzt, wenn wir zu unserer
Fortbewegungszustandsmaschine
zurückkehren, wenn ich mich ändern sollte oder auf falsch ausgerichtet
ist, unsere Animation nicht wirklich wieder in den Leerlauf
geschaltet wird. Das liegt daran, dass wir immer noch eine Regel erstellen
müssen, die von unserem Ziel zu unserem Leerlauf
reicht. Wir ziehen also vom
zielgerichteten in den Leerlauf, und dies wird
überprüft, wenn wir uns innerhalb des Zielstatus befinden. Jetzt müssen wir dieser Regel
Code hinzufügen, der
uns dazu bringt, von unserem
In-State in unseren inaktiven Zustand zurückzukehren. Also machen wir das auf. Wir werden uns
die Zielvariable schnappen. Jetzt wollen wir, dass dies
true zurückgibt, wenn das falsch ist. Also ziehen wir uns heraus und
suchen nach nichts, finden den NOT Boolean hier und verbinden
ihn mit den Ergebnissen. Wenn also is target wahr ist, wird es in einen
falschen Wert umgewandelt und dann
ein falscher Wert zurückgegeben. Und jetzt können wir das testen. Also gehe ich zurück zur
Fortbewegungsansicht hier. Wir wählen das Ziel aus und
wir nehmen es aus und aus. Zunächst müssen wir kompilieren. Wenn wir es jetzt
an- und abnehmen, können
Sie sehen, dass es jetzt
zwischen unseren beiden Staaten wechselt. Jetzt
haben unsere Übergangsmetalle ein paar andere Einstellungen. Ich werde nicht alle
durchgehen, aber ich werde
einige der
wichtigeren durchgehen , die hier sind. Zunächst
haben wir also die Prioritätsreihenfolge. Je höher der Wert hier ist, desto höher ist
die Priorität dieser Rolle. Wenn Sie zum Beispiel
mehrere Regeln haben, wie wir
es hier für den Leerlauf tun, haben
wir diese und
wir haben diese. Angenommen, beide
sollten gleichzeitig zutreffen, dann
wählt die Engine diejenige aus, die hier die höchste Priorität
hat. Diese Einstellung kann
nützlich sein, wenn Sie
ein viel komplizierteres
Fortbewegungssystem
mit vielen Regeln haben ein viel komplizierteres
Fortbewegungssystem , die beispielsweise
von einem Staat ausgehen. Als nächstes haben wir die
Übergangsdauer. So lange
dauert es nun, bis die Leerlaufanimation reibungslos in
die Zielanimation übergeht. Denn wenn Sie bemerken, dass
wir unseren Namen für auswählen, schnappt
er nicht sofort ein. Wir haben einen reibungslosen
Übergang zwischen ihnen. Wenn wir also diese
Dauer hier erhöhen, sagen wir die Übergangsregel
von zielgerichtet zu inaktiv, ändern
wir sie in eins. Wenn wir nun kompilieren und als Ziel auswählen und es ausschalten,
können
Sie sehen, dass Sie einen viel glatteren,
langsameren Übergang von der
gezielten Animation zum Leerlauf
erhalten . Das Gleiche können wir auch
für unseren Overall tun. Also können wir das auswählen und die Dauer auf eins
setzen. Und jetzt, wann immer wir
es mit AMG aufnehmen, wird dieser reibungslose Übergang
nach der Kompilierung erreicht. Da haben wir's. Also jetzt
alles zusammen. Und Sie können sehen, dass wir jetzt einen viel langsameren Übergang
zwischen den beiden Animationen bekommen . Wählen Sie als Nächstes hier unsere Regel aus. In den Verschmelzungseinstellungen haben
wir einen Modus. So wird
die Animation nun zur neuen Animation
übergehen. Sie müssten diese
ausprobieren, um zu sehen, wie sie funktionieren. Diese geben Ihnen jedoch
unterschiedliche Auswirkungen des Übergangs zwischen
den beiden Staaten. Als Nächstes haben wir die Benachrichtigungen. Diese ermöglichen es
uns nun tatsächlich, Ereignisse in
unserem Ereignisdiagramm auszuführen , wenn
diese Regel etwas bewirkt. Wir können also einen Startübergang haben und wir können ein Ereignis in
unserem Ereignisdiagramm haben , das
immer dann ausgeführt wird, wenn dieser
Übergang hier beginnt. Wann immer die
Regel wahr wird, wird
dieses Ereignis, das wir hier
nennen, ausgeführt. Wir haben ein Ende des Übergangs. Wenn der Übergang abgeschlossen
ist und wir uns in den neuen
Zustand
bewegen, wird dies ablaufen. Und wenn es dann
unterbrochen wird, läuft es. Also, wenn
wir zum Beispiel 1 Sekunde in den
Übergang vom Leerlauf zum Ziel gehen, und wir haben es abgebrochen. Die Regel wurde falsch
und wir gingen zurück in den Leerlauf, als unterbrochen wurden, das
Ereignis würde ausgeführt. Um Ihnen ein kurzes Beispiel zu geben, könnten
wir hier einfach einen Test schreiben. Kompilieren Sie zum Beispiel, gehen Sie
zum Event Graph und
wenn ich mit der rechten Maustaste
klicke und nach Test suche, oder Entschuldigung, findet der
Ereignistest diesen neuen
Anime-Benachrichtigungs-Unterstrich-Test und dieses Ereignis wird ausgeführt wann immer unsere Regel hier beginnt, ist der Übergang
von Idol zu MD. Und wenn Sie Ihr
Ereignis und das Ereignisdiagramm nicht finden können, vergessen Sie
nicht, dass Sie
Ihren Blueprint zusammenstellen müssen , nachdem
Sie hier einen Namen geschrieben haben. Jetzt haben wir ähnliche
Einstellungen für unseren Bundesstaat. Wenn ich hier also tatsächlich
meinen Zielstatus auswähle, können
Sie sehen, dass wir dieselben Einstellungen
haben, also haben wir ein benutzerdefiniertes Ereignis, das wir in
unserem Ereignisdiagramm ausführen können wenn unser Zielaufenthalt eingegeben wird und auch wenn dieser
Zielstatus verlassen wird. Also wieder, wie zuvor,
wenn ich eine neue Veranstaltung hinzufüge, nenne
ich das zielgerichtet gestartet. Wir kompilieren, gehen
zum Event Graph und ich suche nach zielgerichteten Ereignissen. Und Sie können sehen
, dass unsere Veranstaltung
auch hier gestartet wurde . Jetzt haben wir einen neuen
Zustand hinzugefügt, also unsere Fortbewegung, und wir haben die Regeln für den
Übergang zu und
von diesem Zustand hinzugefügt , aber wir haben eigentlich
keinen Code eingerichtet , um
diese Variable zu steuern. Wir haben es hier gerade manuell
geändert. Deshalb zeige ich Ihnen ein paar
Möglichkeiten, wie wir
Variablen in unserem
Animations-Blueprint
vom Character Blueprint aus steuern können Variablen in unserem
Animations-Blueprint . Zunächst können wir also zum Event Graph
gehen. Es wird den Blueprint finden, Animation
aktualisieren,
und dies wird
jeden Frame ausführen und
die Variablen aktualisieren , die
wir damit verbinden. Also können wir hier einen neuen Zweig hinzufügen. Dann bekommen wir unseren Charakter weil wir
einige Informationen von
unserem Charakter erhalten möchten , werden sich
herausziehen und wir können der Person Kosten
zufügen, verbinden Sie sich mit der Reihenfolge, in der es. Jetzt müssen wir unserem Charakter tatsächlich
ein Namenssystem
hinzufügen . Also stellen wir es zusammen und gehen
zu unserem Charakter-Blueprint
, der in den
Third-Person-Blaupausen enthalten ist als der Third-Person-Charakter. Sie sich jetzt nicht zu viele Sorgen, wenn
Sie diesen Code nicht haben. Das ist aus unserer
Montagen-Lektion. Also scrollen wir einfach hier hoch. Ich klicke mit der rechten Maustaste
und suche nach der linken Maustaste. Und wir benutzen die
linke Maustaste. Und wir werden eine neue
Variable namens is target erstellen. So wie das. Wir wollen diesen
Widerstand daraus ziehen und tun f. Und wenn unser Ziel derzeit wahr
ist, wollen
wir es auf false setzen. Und wenn es derzeit falsch ist und wir es
auf true setzen wollen. Also kopiere ich
das einfach und füge es ein und verbinde mich mit Leuten und übernehme es
hier so. Und wir werden kompilieren und
zu unserem Animations-Blueprint zurückkehren. Und jetzt können wir einfach r aus unserem
Charakter-Blueprint heraus zielen. Verwenden Sie das, um R zu setzen, was
in unserem Blueprint hier angestrebt wird. Dann werden wir kompilieren
und jetzt können wir das
testen, damit
es auf Play klickt. Wenn ich die linke Maustaste gedrückt habe, können
Sie sehen, dass
wir in
diese Animation übergehen und wir immer noch diese
Übergangszeit von 1 Sekunde
haben. Es geht also ein bisschen langsam. Also kehren wir
zu unserer Fortbewegung zurück. Es ist wie die Regel. Ändern Sie die Dauer, sagen Sie 0 um dasselbe für
die andere Regel zu tun. Also 0.2 auch hier. Dann werden wir es kompilieren und
jetzt können wir es erneut testen. Und ich drücke die linke Maustaste. Sie können sehen, dass wir
jetzt
zu dieser Animation übergehen . Das funktioniert
zwar, aber vielleicht ist in Ihrem
Animations-Blueprint viel Code im
Gange. Und Sie benötigen diesen Code nicht, um tatsächlich bei
jedem einzelnen Frame ausgeführt zu werden. Was wir also tun könnten,
ist, wenn wir dies löschen, können
wir den Code tatsächlich
aus unserem ThirdPersonCharacter setzen . Stattdessen. Wir gehen zum
ThirdPersonCharacter. Wir holen uns unsere Mesh-Komponente, ziehen
uns daraus heraus und erhalten eine M-Instanz. Wenn Sie sich erinnern, gibt uns dies einen Hinweis auf unseren
Animationsplan, aber wir müssen
unseren ABP-Unterstrich immer noch Geld kosten unseren ABP-Unterstrich immer noch Geld ,
da dies unser
Animations-Blueprint ist. Und wir werden beide Knoten
diesen Code ausführen lassen. Es spielt also keine Rolle,
ob wir zielen oder unbenannt sind. Dann wollen wir uns in die Länge ziehen und
wir wollen es nicht machen. Jetzt können wir
unsere Zielvariable festlegen. Das ist der Animations-Blueprint. Und wir wollen einfach nur r aus
diesem Entwurf heraus
bekommen und
damit festlegen. Jetzt können wir das testen,
ob ich ziehen kann, auf Play klicken und wenn ich mit der linken Maustaste klicke
und sehe, dass es mit dem neuen Code, den wir gerade geschrieben haben
, immer noch funktioniert. Jetzt werden Sie vielleicht feststellen, dass wir keine
Bewegungsanimationen mehr bekommen, wenn
wir die
Maustaste verlassen und uns bewegen . Das liegt daran, dass wir eigentlich
keine Regeln für den Übergang
von unserem Ziel festgelegt haben. Wenn wir zur Fortbewegung zurückkehren, von unserem gezielten zu
unserem Geh-Slash-Lauf. Also wird es einfach in unserem Ziel
stecken bleiben, bis wir den
linken Mausklick loswerden und dann wird
es in den Leerlauf wechseln. Und wenn wir uns bewegen, wird
es auf Gehen umschalten. So könnten wir hier
einige neue Regeln hinzufügen , die den Übergang von
zielgerichtetem zu Walk Slash Rump regeln. Also ziehen wir uns aus dem Ziel heraus und gehen zum Gehen wie diesem. Und wir werden
den gleichen Code verwenden, den wir von unserem Idol hier
verwenden,
wo es heißt, dass er sich bewegen sollte. Also werden wir diese Regel öffnen. Wir werden die
Soll-Move-Variable bekommen. Das wird stimmen. Wenn sich unser Charakter bewegt, kehren wir zur
Fortbewegung zurück und kompilieren. Und jetzt,
wenn wir Play drücken linke
Maustaste gedrückt habe, können Sie sehen, wir zielen und wenn ich anfange, uns zu bewegen, sind wir wieder in unsere
Walk Slash Run-Animationen übergegangen. Und Sie sehen es, wenn ich den Walk Slash Running
verlasse, kehren
wir zu unseren Zielen zurück und wir
können uns entbenennen, wie wir es zuvor getan haben. Nun, zum Schluss,
wollte ich nur noch Aliase behandeln. Wenn wir also
hier den Flugzeugeditor verlassen und zu
unserem Animations-Blueprint zurückkehren, sind Aliase
wirklich praktisch, um
Ihre Animationszustände etwas
kleiner zu halten . Also werden wir ein
kurzes Beispiel für ein Beispiel aufstellen. Wir klicken mit der rechten Maustaste und
verwenden einen staatlichen Alias, und wir nennen
das nur gezielte Schecks. Zum Beispiel haben wir hier unseren
Aim Check ausgewählt. Wir werden uns
mit unserem Ziel verbinden. Und wir werden diese neue Regel
verwenden um zu bestimmen, ob wir in
den angestrebten Zustand eintreten sollen oder nicht. Also werden wir zielgerichtet sein und das so
verbinden. Dann werden wir
diese Regeln hier löschen , die mit unserem Leerlauf, mit unseren Zielen in Verbindung
stehen. Wir werden auch die Regel
löschen, die sie
mit dem
Walk-Flügellauf verbindet. Jetzt sind diese beiden Blöcke also
nicht miteinander verbunden. Aber wenn wir hier unsere
Zielprüfungen auswählen, können
wir übernehmen, für welche Staaten
es laufen soll. Also könnten wir im Leerlauf und wir könnten einen Spaziergang mit
nach Hause nehmen. Das bedeutet, dass
wir diese Prüfung durchführen, wenn wir uns in
unserem Ruhezustand befinden oder unser Walk-Slash diesen Alias ausführt. Wir
müssen also eigentlich keine
direkten Verbindungen von
einem dieser Staaten haben . Zwei zielen darauf ab, weil
wir diesen Alias jetzt für diese
Zwei-Staaten-Tektonik verwenden . Wenn wir uns
in diesen Staaten befinden, werden alle Regeln ausgeführt
, die damit verbunden sind. Jetzt müssen wir einen Weg
finden, um von
unseren gezielten Animationen zu
unserem Leerlauf oder Spaziergang zu gelangen . Wir klicken also mit der rechten Maustaste auf Neuen Bundesstaatenalias
hinzufügen. Wir nennen das Bewegungsprüfungen. Auf diese Weise
erstellen wir eine Regel für unseren Leerlauf. Und das wird, ist
angestrebt, muss falsch sein. Also ziehen wir uns von seinen
Zielen zurück und wir werden es nicht tun. Und wir scrollen nach
oben und werden nicht
Gliedmaßen sein und uns hier oben verbinden. Und dann
wird sich unsere Bewegung herausziehen und wir werden uns mit
unserem Walk Slash Run verbinden. Und wir werden das
Gleiche tun, was wir wollen. Ist angestrebt, ist eigentlich sollten
wir uns bewegen. Denn wenn wir anfangen,
uns zu bewegen, wollen wir einfach unsere
Bewegungsanimationen verwenden , um zu wahr zu werden. Nun
müssen wir eine Sache zu unserer Regel hinzufügen, indem wir unser Ziel
eingeben, da
wir auch hinzufügen müssen , dass wir nicht möchten, dass es
ausgeführt wird, wenn wir umziehen. Also werde ich unser hier
öffnen. Wir fügen nur ein Ende hinzu. Also machen wir das und wir verbinden
die Ausgabe mit unseren Ergebnissen. Also wollen und sollten wir uns bewegen, sollten wahr sein oder
nicht wahr sein. Wir wollen, dass dies ein NICHT,
NICHT ein Boolescher Wert wie dieser ist. Unsere Regel hier wird also nur wahr
sein, wenn sie gezielt ist, wahr
ist und wenn sollte
move falsch ist. Also nur um Ihnen
eine sehr kurze Zusammenfassung
zu geben was dies bewirkt, wenn wir uns in unserem Leerlauf
befinden oder unsere
Walk-Slash-Run-Zustände darauf abzielen, den Lauf zu überprüfen. Und das wird es tun,
weil wir diese beiden Staaten hier angekreuzt haben. Und es werden alle damit verbundenen
Regeln ausgeführt. Also wird es diese Prüfung durchführen. Es wird überprüft, ob es auf wahr ausgerichtet ist
und sich falsch bewegen sollte. Und wenn ja, werden wir unsere gezielten Animationen
ausführen. Und dann, während wir
zielgerichtete Animationen laufen, werden
diese Bewegungsprüfungen
ausgeführt, weil wir,
oh, vergessen haben , das
tatsächlich anzunehmen. Wir wählen das aus
und kreuzen die Namen an. Da wir also unser
Ziel erreicht haben , wann immer wir uns
in diesem Zustand befinden, werden
Bewegungsprüfungen ausgeführt,
und das überprüft, ob
diese beiden Rollen hier wahr sind, um
festzustellen, dass FEV1 wahr ist. Also werden wir das jetzt testen. Wir werden kompilieren, auf „Spielen“ klicken
und jetzt können wir zielen. Und wenn ich ziele und anfange mich zu bewegen, können
Sie sehen, dass
wir stattdessen
diese
Bewegungsanimationen ausführen . Wenn wir aufhören, gehen wir wieder in die
gezielten Animationen über. Das ist nur ein kurzer
Überblick über die Aliase. Es ergibt nicht wirklich
viel Sinn, wenn wir
eine kleine
Fortbewegungszustandsmaschine wie diese haben . Aber wenn Sie etwas haben, das immer komplizierter wird haben Sie
vielleicht eine Menge Regeln
. Sie können diese verwenden, um
Ihre Animations-Blueprints aufzuräumen. Das war's also für diese Lektion. Hoffentlich verstehst du jetzt
ein bisschen mehr über
Animationsstatus und Regeln.
50. Animation (Blende Räume): Hallo zusammen. In dieser
Lektion werden wir uns
die Bereiche der
Animationsverschmelzung genauer ansehen. Wenn Sie sich an
unsere
Animations-Blueprint-Übersichtsstunde erinnern , mischen Sie Räume, die
ich
reibungslos von einer
Animation zur anderen übergehen sollte. Und wir können uns ein Beispiel dafür
ansehen, indem wir uns unseren Money
Animation Blueprint ansehen. Dann gehen wir zum
Anim-Graphen als zur Fortbewegung, dann gehen wir Schrägstrich. Und dann haben wir hier
einen Verschmelzungsraum pro Knoten. Nun nimmt dieser Knoten einen Wert wie unsere Bodengeschwindigkeit
hier auf und verwendet diesen,
um zu bestimmen, welche
Animation er von unserem Verschmelzungsbereich aus
abspielen soll . Wenn wir diesen Knoten auswählen und zum Bereich
Details gehen, können
wir hier in der Verschmelzungsbereich-Option herausfinden, welchen
Verschmelzungsbereich er
verwenden soll . Wenn Sie den Mauszeiger darüber bewegen, speichern Sie den
Namen des Verschmelzungsbereichs. Unserer ist also der MM Walk Run. Wir können hier auch auf
diese Schaltfläche klicken , um zu diesem Verschmelzungsbereich zu gelangen. Also machen wir das und öffnen es
dann. Wie Sie sehen können, haben wir
diese Diagrammansicht hier unten, und hier definieren wir unsere Animationen für
die verschiedenen Geschwindigkeiten. Hier können Sie also sehen
, dass die Geschwindigkeit 0 ist, und hier oben ist die
Geschwindigkeit 500 für 0. Wenn wir den Mauszeiger über diesen Punkt bewegen, können
Sie sehen, dass die
aktuelle Animation die Animation für begehbare Orte
ist. Dann weiter
beim Wert von 230 haben
wir eine andere
Animation und das ist unsere
Walk-Forward-Animation. Und am Ende,
Geschwindigkeit 500, spielen wir Animationen ab
oder führen sie durch. Wenn ich die Strg-Taste gedrückt halte und
meine Maus hier entlang der
Timeline bewege , können Sie sehen, wie sich der Wert erhöht,
unsere Animation ändert. wir uns
unserer Laufanimation hier nähern, können
Sie sehen, dass sie dieser Animation
näher kommt. Das ist es, was uns einen
reibungslosen Übergang zwischen beispielsweise
einer Gehanimation und einer
Laufanimation ermöglicht , einer Gehanimation und einer
Laufanimation und es wird
dieser Geschwindigkeitswert verwendet
, den unser
Animations-Blueprint hier liefert,
und das ist unser Geschwindigkeitswert über
Grund. Jetzt laufe ich los. Verschmelzungsbereich ist ein 1D-Verschmelzungsbereich, was bedeutet, dass es nur eine Variable
gibt , die steuert, welche
Animation abgespielt wird Das ist unser Geschwindigkeitswert hier. Wir können aber auch
Verschmelzungsbereiche haben, die zwei Variablen verwenden. Wir können eine Richtung
und die Geschwindigkeit festlegen , die steuert, welche Animation abgespielt
wird. In dieser Lektion werden
wir einen 2D-Verschmelzungsbereich
einrichten . Um das zu tun, gehen
wir zum Content Browser. Ich gehe einfach in
den Animations-Ordner. Im Ordner Mannequins wir mit der rechten Maustaste und
gehen zur Animation. Und dann möchten Sie
die Option Verschmelzungsraum finden. Sie können sehen, dass es hier
die 1D-Option gibt, oder den Verschmelzungsbereich
hier, der 2D ist. Also
wählen wir das aus. Dann suchen wir uns ein
Skelett aus. Ich werde
das Skelett verwenden, das mit der
Third-Person-Vorlage
geliefert wird. Das ist also das Top
Hier können Sie sehen , dass der Pfad aus
vier Zeichen besteht, Mannequins und dann aus Meshes. Also wählen wir das aus und
das wird namenlos zum gezielten Gehen verschmelzen. Und das machen wir auf. Hier sehen
Sie jetzt, dass wir
ein ähnlich aussehendes
Diagramm wie unser 1D haben . Aber anstatt nur
den horizontalen Wert zu haben, haben
wir auch einen vertikalen
Wert, mit dem
wir Animationen an
beliebiger Stelle in diesem Diagramm festlegen können . Und dann können wir sie beide mit
einer Richtungs- und
Geschwindigkeitsvariablen
steuern . Zunächst müssen wir diese Achsen
umbenennen und einrichten. Wir beginnen also hier mit der
horizontalen Achse. Sie können auf das Drop-down-Menü klicken,
wenn es nicht für Sie geöffnet Wir nennen
unsere Richtung, da diese Achse die Richtung steuert , in
die die
Animationen, die wir abspielen möchten, verwenden. Dann wollen wir, dass der minimale
Achsenwert eins oder minus eins ist und der
Maximalwert 180 ist. Und das bedeutet, dass wir für
jede mögliche Richtung, in die sich unser Charakter bewegt
, eine Animation
festlegen können . Dann müssen wir
die vertikale Achse
so einstellen ,
dass du sie einfach hier unten öffnen kannst. Und wir werden diesen auf Geschwindigkeit setzen. Nun, der Maximalwert, den ich
auf 600 setzen werde, und wir lassen den
Minimalwert auf 0. Also werden alle Animationen, die wir hier
unten in
der Grafik platzieren , verwendet, wenn unser Charakter
untätig ist oder sich nicht bewegt. Und wenn wir dann aufsteigen, werden
die Animationen hier oben
für schnellere
Bewegungsgeschwindigkeiten verwendet . Jetzt übernehme ich
gerne die Option Am
Gitter ausrichten in der
horizontalen Achse und dann in der vertikalen Achse. Und was das bewirkt, ist, wenn
wir unsere Animationen hineinziehen, werden
sie tatsächlich
an diesen Rasterpunkten einrasten. Das ist eine
persönliche Präferenz, aber ich empfehle,
diese einzuschalten. Es macht das Einrichten Ihrer
Animationen nur viel einfacher. Jetzt sind wir bereit,
einige Animationen in
unserem Verschmelzungsbereich festzulegen . Wir beginnen
mit der Animation, die
verwendet wird , wenn wir bei 0 Geschwindigkeit sind. Dafür
werde ich hier in unserem Asset-Browser nach
Leerlauf suchen . Und ich werde das Gewehr-Leerlauf-ADS verwenden
. Wenn Sie
diese Animationen nicht haben, können
Sie sich den Beginn
der Montage-Lektion ansehen und ich zeige Ihnen, wie Sie diese
Animationen zu Ihrem Projekt hinzufügen können. Aber wenn du das tust,
können wir das einfach hineinziehen und wir wollen, dass es
in der Mitte unten ist, also lass ich es einfach hier fallen. Wir werden es auch unten
links und unten rechts
so
hinzufügen . Der Grund, warum wir das tun ist, wenn
unsere Geschwindigkeit 0 ist, sodass sich unser Charakter nicht bewegt, sodass unser Richtungswert
eigentlich keine Rolle spielt. Alles was wir tun müssen, ist
unsere Animation im Leerlauf abspielen zu lassen. Als Nächstes benötigen wir eine
Walk-Forward-Animation, und dies ist die Animation
, die abgespielt wird , wenn
unsere Richtung 0 ist. Also wird es hier ganz oben sein. Dafür suche
ich nach FWD und dem Asset-Browser,
und wir werden die Animation zum Vorwärtsgehen des
Gewehrs verwenden. Also zieh das rein und lass es hier oben fallen
. Wenn wir jetzt die Kontrolle behalten, können
wir herumziehen und
wir können sehen, wie
unsere Gehanimation
jetzt funktioniert, während wir unseren Wert auf die
Walk-Forward-Animation ziehen. Als nächstes brauchen wir unsere
Rückwärts-Animation. Dafür werden wir also
nach WD suchen. Und wir werden
das Gewehr benutzen, um rückwärts zu laufen. Und wir werden das
an
der äußersten linken Stelle hier einstecken . Und auch ganz
rechts hier. Der Grund, warum wir das tun, ist
, dass überall dort, wo
unsere Charaktere 180 Richtung oder minus eins AT sind
,
beide rückwärts gehen. Also entweder wollen
wir diese
Rückwärts-Animation abspielen. Als nächstes wollen wir unsere linke Animation. In unserem Asset-Browser
suchen
wir also nach links und wir wollen das Gewehr nach links gehen. Also werde ich das
in diese Punkt-Hüfte ziehen. Und dann wollen wir die
richtige Animation. Also suchen wir nach Richtig. Und wir wollen das
Gewehr laufen, oder? Und das wird hier so
hochgehen. Wenn wir jetzt die Kontrolle behalten, können
wir steuern, welche Animation abgespielt
wird,
abhängig von unserer Richtung und
auch unserer Geschwindigkeit. Jetzt werden wir
diesen neuen Verschmelzungsraum
in unserem Animations-Blueprint verwenden . Um das zu tun, gehen
wir zu unserem Geldplan
über. Jetzt fügen wir einen neuen Zustand hinzu, der verwendet wird, wann, wo wir zielen und
während wir uns bewegen. das zu tun, klicken wir rechten Maustaste und fügen einen neuen Status hinzu. Ich nenne diese
zielgerichtete Bewegung so. Jetzt brauchen wir
eine Regel, die von
unserer zielgerichteten zu unserer gezielten Bewegung reicht . Und in dieser
Reihe werden wir
überprüfen, ob es wahr ist. Und wir werden auch
überprüfen, ob wir umziehen? Also machen wir einen UND-Boolean
und wir wollen sollten uns bewegen. Wenn also beide zutreffen, geben wir das Ergebnis zurück. Und das wird es
uns ermöglichen, von der
gezielten in unsere gezielte Bewegung überzugehen . Jetzt wollen wir von unserer
gezielten Bewegung zurück zum Ziel
übergehen . Wir bewegen uns nicht mehr.
Also werden wir diese Regel öffnen, die zielgerichtet ist. Und wir wollen überprüfen, ob
sich falsch bewegen sollte. Also sollte es sich bewegen. Wir wollen
NOT Boolesche Knoten verwenden. Also NICHT boolescher Wert. Und dann, zurück in der Fortbewegung, müssen
wir eine Reihe hinzufügen, die
von unserem Ziel ausgeht, um zu überprüfen, ob zwei gezielte Bewegungen sind
, denn wenn wir
uns
bereits bewegen und anfangen zu zielen, wollen
wir zur
gezielten Bewegung übergehen Bewegungen sind
, denn wenn wir uns
bereits bewegen und anfangen zu zielen, Bundesstaat. Wir ziehen also vom gezielten
Scheck zur gezielten Bewegung. Und wir öffnen unseren Rohit. Und wieder werden wir
das Ziel erreichen. Und wir möchten auch überprüfen, ob sich auch dies als wahr erweisen
sollte. Also sollten wir uns so
bewegen. Dann kehren wir zur Fortbewegung
zurück. Bisher haben wir also eine Einrichtung, sodass, wenn gezielte
Prüfungen ausgeführt werden, alles überprüft werden, was wir angestrebt haben. Und wenn ja,
gehen wir in unseren Zielzustand. Und wenn wir stattdessen zielgerichtet sind
und uns bewegen, gehen
wir zu unserer gezielten Bewegung über. Wenn wir nun zielgerichtet sind
und anfangen, uns zu bewegen, bewegt es sich von zielgerichtet
zu zielen und zu bewegen. Und wenn wir uns in gezielter
Bewegung befinden und aufhören, uns zu bewegen, werden
wir in
den angestrebten Zustand übergehen. Jetzt müssen wir noch ein paar
andere Änderungen vornehmen. Wir müssen unsere
Bewegungsschecks auswählen, Alias bleiben. Wir müssen die gezielte
Bewegung der Hüfte annehmen und das tun
wir. Wir prüfen also, ob wir
zielgerichtet sind und wenn nicht, dann wollen wir von
unseren Zielzuständen zu
unseren normalen Leerlauf- oder
Normallaufanimationen zurückkehren unseren normalen Leerlauf- oder
Normallaufanimationen . Jetzt müssen wir
eine unserer Regeln im
Zusammenhang mit
unserer Bewegungsprüfung
hier ändern Zusammenhang mit
unserer Bewegungsprüfung , und das ist diese hier. Wenn wir das also gerade öffnen, wird nur überprüft,
ob wir umziehen. Das wollen wir ändern, weil wir
jetzt einen Bewegungszustand haben. Wir wollen nicht zum Walk
Slash Run
übergehen , wenn wir uns nur bewegen. Wir müssen also
eine Überprüfung hinzufügen, um
sicherzustellen , dass das Ziel falsch ist. Wir wollen also einen Boolean
wissen. Wir ziehen uns wieder heraus und
geben diesen Wert hier zurück. Wenn wir jetzt zur Fortbewegung
zurückkehren, wenn wir uns in der Ames-Bewegung befinden
und aufhören zu zielen, wird
es
zurück zu unserem
Geh-Slash-Lauf übergehen , da wir hier diese Überprüfung
haben , dass Checks falsch ausgerichtet sind
und es sollte wahr werden. Und wenn ja, dann
wird es uns
von einer gezielten Bewegung oder einem
gezielten Slash-Lauf überführen . Als nächstes müssen wir
unseren Verschmelzungsraum und
gezielte Bewegung einrichten . Also werden wir das öffnen. Wir ziehen uns aus dem Ergebnis heraus
und ich
suche nach Blend Space Player. Und wir nutzen den Verschmelzungsraum. Spielen Sie eine Notiz ab. Dann wählen wir
es aus und scrollen hier nach unten zur
Option Verschmelzungsbereich unten. Wir müssen dies auf
unseren neuen Blend Space einstellen. Das ist also der Raum für zielgerichtete
Spaziergänge hier. Sie sehen, dass unsere Eingaben
für unsere Richtungs- und
Geschwindigkeitsvariablen tatsächlich
aktualisiert wurden . Also für die Geschwindigkeit wird es einfach
herausziehen und so eine
Grundgeschwindigkeit erreichen . Für die Richtung
brauchen wir jetzt eine neue Variable. Um das zu tun, gehen
wir zum Event Graph. Und hier werden
wir eine neue Variable erstellen. Also machen wir das jetzt und
nennen diese Richtung. Und wir wollen, dass dies ein Float ist. Also setzen wir das auf
einen Float und kompilieren. Jetzt brauchen wir das, um jeden Frame zu
aktualisieren, also fügen wir es
dem Code hier unten hinzu. Also fügen wir der Sequenz einen neuen
Stift hinzu und erstellen einen gesetzten Knoten. Und wir verbinden das
mit unserer Sequenz. Ich
doppelklicke einfach auf die Zeile,
um eine Umleitung zu erstellen. Jetzt nur um die Dinge in Ordnung zu halten. Um unsere Richtung zu finden, brauchen
wir unsere Geschwindigkeit. Also klicken wir mit der rechten Maustaste
und suchen nach Geschwindigkeit. Und wenn wir nach unten scrollen, sollten
wir die
Geschwindigkeitsoption finden. Dann brauchen wir unsere
aktuelle Rotation. Also lass uns das machen. Wir klicken mit der rechten Maustaste
und machen Lückenzeichen und verwenden die
Lücken-Zeichenvariable. Ziehen Sie sich davon heraus
und drehen Sie sich. Und wir verwenden die
GETS ACTIVE-Rotation. Dann klicken wir
mit der rechten Maustaste und suchen nach Richtung berechnen. Und das ist eine Funktion
, die eigentlich in
allen Animation Blueprint integriert ist,
was sehr praktisch ist. Es erlaubt uns nur, unsere Geschwindigkeit
einzustecken. Rotation und das gibt
uns unsere Richtung, die wir hier einfach direkt
in unsere Setnote einstecken
können. Jetzt können wir
zu unserem Anim-Graphen zurückkehren, dann zur Fortbewegung. Und dann sind zwei gezielte Bewegung. Und wir können diese
Richtungsvariable greifen sie hier in unseren Knoten
stecken. Jetzt können wir also kompilieren und das
ausprobieren. Also klicken wir auf „Spielen“. Wenn ich die Maustaste verließ,
können Sie sehen, dass wir richtig
zielen und
wenn ich anfange, mich zu bewegen, spielen
wir tatsächlich mit
neuen zielgerichteten Gehanimationen. Wenn ich während der Bewegung mit der linken Maustaste klicke, kehren
wir zu unseren
normalen Laufanimationen zurück. Wenn Ihre jetzt nicht funktioniert, können
Sie zur
Fortbewegungszustandsmaschine zurückkehren und einfach sicherstellen, dass alle Regeln
, die Sie festgelegt haben, korrekt sind. Sie sehen also aus wie meine
jetzt. Der hier unten. Und stellen Sie sicher, dass bei
Bewegungskontrollen eine gezielte
Bewegung aktiviert ist. Derzeit verwendet unser Charakter nicht wirklich unsere Links-, Rechts- oder Rückwärts-Animationen. Und das liegt an
einer Einstellung, die wir im
Character Blueprint
aktiviert haben . Also gehen wir zum
Third-Person-Ordner,
Blueprints, Then ThirdPersonCharacter, und erben. Wir wählen die
Charakterbewegungskomponente aus. Dann scrollen wir nach
unten zu den Rotationseinstellungen und entfernen das Häkchen bei Drehung auf Bewegung
ausrichten. Und das verhindert,
dass unser Charakter in die Richtung
blickt, in die wir uns bewegen. Jetzt können wir unsere Animationen testen, werden kompilieren und auf Play klicken. Und jetzt, wenn ich
nach rechts ging, können
Sie sehen, wie wir
rechte Animationen,
linke oder linke Animationen pflügen linke oder linke Animationen und dann Rückwärts- oder Rückwärts-Animationen
abgespielt werden. Jetzt wirst du vielleicht feststellen, dass
unser Charakter sich nicht mehr zur Seite
bewegt, wenn du mit der
linken Maustaste klickst und wir uns zur Seite
bewegen. Er kommt gerade voran. Der Grund dafür ist jetzt in unserem Animations-Blueprint zu finden. Der Laufstatus für den Schrägstrich verwendet
nur einen 1D-Verschmelzungsbereich, sodass er keine
Richtungseingabe hat. Alles was es hat ist ein Geschwindigkeitseingang. Und das ist der Grund, warum
der Third-Person-Charakter standardmäßig
die Oriente-Rotation
zur Bewegung aktiviert
hat . Jetzt gibt es noch ein paar
weitere Einstellungen im Animationsverschmelzungsbereich
, die ich Ihnen zeigen wollte. Wir haben jetzt die
Rasterunterteilungen, dies steuert, wie viele
Räume wir in unserem Raster haben. Wenn ich dies also auf
acht bis acht hier auf unserer vertikalen Achse
erhöhe , sehen
Sie, dass wir jetzt
mehr Blöcke in unserem Raster haben. Dies ist hilfreich,
wenn Sie
die aktivierte Option Am Raster ausrichten verwenden . Und das gibt Ihnen nur mehr
Punkte auf dem Gitter, die Sie fangen müssen um zu sagen, ob Sie eine
Animation an einer bestimmten Stelle
haben möchten, Sie können diese Werte erhöhen,
um dort einen Fangpunkt zu erhalten. Dann haben wir die
Glättungszeit. So
lange dauert es nun, bis
eine Animation zu einer anderen Animation
übergeht. Wenn wir
das wirklich hoch ansetzen würden, sagen wir zum Beispiel fünf Sekunden. Wenn wir jetzt auf „Play“ klicken und
ich mich nach rechts bewegt habe, werden
Sie sehen, dass es fünf
Sekunden dauert, bis ich tatsächlich zu unserer „
Nach rechts bewegen“ -Animation
übergehe. Normalerweise möchten Sie dafür also
kleinere Werte verwenden. Sagen wir zum Beispiel auch hier
unten 0.250.25, nur um ein bisschen
Übergangszeit zwischen den
Animationen zu geben . Aber standardmäßig sind
diese auf 0 gesetzt, sodass die Animation nur
sofort zueinander
übergeht . Also können wir
diese vorerst einfach auf 0 setzen. Es gibt auch einige Einstellungen in unserem Animations-Blueprint. Wenn wir das also hätten, dann gehen wir zur Fortbewegung, zur gezielten Bewegung. Und wenn wir diesen Knoten auswählen
und nach unten scrollen, können
Sie sehen, dass es hier ein paar
zusätzliche Einstellungen gibt. Wir haben das Spiel Vergewaltigung. So schnell werden
die Animationen in unserem Blend Space abgespielt. Eins ist normale Geschwindigkeit, zwei wären doppelt so schnell wie normal. Als nächstes kommt eine Schleife. Normalerweise möchten Sie, dass dies für Verschmelzungsbereiche aktiviert
bleibt, aber wenn Sie dies jemals deaktivieren
möchten, können
Sie dies hier deaktivieren. Wir haben auch die Startposition. Wenn Sie also möchten, dass
die Animationen zu einer anderen
Zeit als 0
beginnen, können
Sie dies hier ändern. Dann haben wir zu guter Letzt
unsere Blend-Space-Einstellung. Auf diese Weise ändern wir
, welchen Button-Space wir tatsächlich auf diesem Knoten verwenden. Das war's also für diese Lektion, aber wir werden in unseren zukünftigen Lektionen
Verschmelzungsbereiche verwenden.
51. Animation (Aim: Hallo zusammen. In dieser Lektion werden
wir
einen Blick auf Zielversätze werfen. Das Ziel von Sets ermöglicht es
uns nun,
unseren Charakter tatsächlich in
eine bestimmte Richtung schauen zu lassen. Dies kann hilfreich sein, wenn Sie eine Waffe
besitzen und
tatsächlich möchten der Charakter in
die Richtung schaut dass
der Charakter in
die Richtung schaut, in die Ihre
Kamera zeigt. Nun, Ziel von Sets funktionieren tatsächlich sehr ähnlich wie Verschmelzungsräume. Wir haben ein Diagramm, in dem wir Animationen platzieren
können, und dann verwenden wir zwei
Variablen, um zu steuern , welche Animationen
wir abspielen möchten. Jetzt lass uns das machen. Wir
werden einige Animationen brauchen, also werde ich hier nicht mehr NetTutor
spielen, ich werde einige
Animationen verwenden, die im Animationsordner der Lektion
enthalten sind . Wenn Sie dies
in Ihren Projekten nicht haben, zeige
ich Ihnen zu Beginn der Montage-Lektion, wie Sie diese
hinzufügen . Wenn Sie sich
das also ansehen, wird Ihnen erklärt
, wie Sie
diese Animationen
in Ihr Projekt integrieren können . Wenn wir jetzt nach
unten scrollen, finden
wir die EO-Animationen. Dies steht jetzt für AIM-Offset, und Sie können sehen, dass wir einige davon
haben. Und das sind Animationen für jede Richtung, in die der
Charakter blicken kann. Wenn wir diese nach unten
gerichtete Animation
hier öffnen , können
Sie sehen, dass es sich um eine
Einzelbildanimation handelt,
was bedeutet, dass sie den Charakter nicht wirklich
animiert, sondern nur ein einzelnes Bild
unseres Charakters nach unten schauen. Wenn wir das dann schließen
und zu einem anderen gehen, sagen wir unsere Animation hier. Dies ist eine Animation
, die nur ein Einzelbild
ist, aber unser Charakter schaut nach links. Jetzt werden
wir mit unserem Zielversatz all
diese Animationen neu kombinieren
und dann steuern
, welche wir abspielen
möchten,
abhängig von diese Animationen neu kombinieren
und dann steuern , welche wir abspielen
möchten,
abhängig den beiden variablen Eingaben. Und diese Eingaben werden die Rotation unserer Kamera sein. diese Weise können
wir steuern,
in welche Richtung unsere Charaktere
mit unserer Kamera blicken. Zunächst
werden wir dies schließen und einen neuen AME-Offset erstellen. Ich mache das in den
Schaufensterpuppen, dann in den Animationen. Also klicken wir hier auf die Schaltfläche
Hinzufügen, gehen
dann zur
Animation und Sie möchten jetzt einen größeren Versatz finden, ähnlich wie bei den Verschmelzungsbereichen, das ist eine 1D-Option, mit der
Sie das Ziel steuern können setzt mit nur einer Variablen, aber wir werden
nur den normalen Zielversatz verwenden, also wird es eine davon erzeugen. Und jetzt müssen wir unser Skelett
auswählen. Ich wähle
das Skelett aus, das mit der
Third-Person-Vorlage
geliefert wird. Also das ist das hier in
CSS Pfad Mannequins Meshes. Wir wissen also, dass das der richtige ist. Das wird
einen neuen A-Master schaffen. Also
nenne ich das einfach zielgerichtete A0. Wir wissen also, dass dies der
angestrebte Animationsversatz ist. Und dann machen wir das auf. Ich ziehe meine
hier einfach in die obere Leiste. Jetzt sind wir also innerhalb
unseres Zielversatzes. Sie können sehen, dass es einem Verschmelzungsbereich sehr
ähnlich sieht. Wir haben unsere Grafik hier unten. Wir haben hier die gleichen Einstellungen für die horizontale und vertikale Achse, und wir erhalten unsere Vorschau
oben hier. Um loszulegen,
müssen wir unser Diagramm
einrichten , indem wir unsere
Variablen hier unten benennen. Also unser Top für
Horizontale, wir wollen York. Wir setzen
das Minimum auf fünf, U2 minus 90, und den
Maximalwert auf positive 90. Das gibt unserem Charakter
die Möglichkeit,
eine Animation abzuspielen , wenn
wir ganz nach rechts und ganz links schauen . Dann machen wir dasselbe für Pitch. Also werden wir
unsere Steigung der vertikalen Achse benennen. Und der Mindestwert
wird minus 90 sein, und der Maximalwert
ist positiv 90. Und das bedeutet, dass wir in der Lage
sein werden, eine Animation
für den ganzen Weg nach oben und
nach unten festzulegen . nächsten Folie, unser Verschmelzungsbereich, möchte
ich hier und auch hier unten
die
Option „Am Gitter ausrichten“ übernehmen , nur damit wir unsere
Animationen ziehen und wissen , dass sie
an exakten Werten fangen. Bevor wir nun anfangen,
Animationen zu unserem Zielversatz hinzuzufügen, wollte
ich nur ein bisschen
erklären was es tatsächlich bewirkt. Nun verwenden Zielsätze
additive Animationen,
was bedeutet, dass die Animationen, die wir mit unserem
Zielversatz spielen , nicht
die aktuelle Animation ersetzen auf dem Charakter abgespielt
wird. Sie ergänzen
diese Animationen tatsächlich. Das bedeutet, dass wir
unser Ziel versetzen können ,
mit unserem Charakter zu spielen, in eine Richtung zu
schauen
und gleichzeitig
beispielsweise eine Leerlaufanimation für
die Charakteratmung zu spielen . Aber damit wir das tun
können, müssen wir die Animation tatsächlich
ändern. Also werden wir
einen Offset für additive Animationen
verwenden . Nun müssen wir das
sowieso tun, weil wir diese Animationen nicht
wirklich hier
platzieren können Animationen nicht
wirklich hier
platzieren bis sie als Additiv
eingerichtet sind. Und ich kann Ihnen zeigen, dass wir unsere
A0-Animationen hier unten finden sollten, wenn
wir nach unten
scrollen . Wenn ich versuche, einen hineinzuziehen, wirst
du sehen, dass er mich nicht
wirklich lässt und es heißt ungültiger
additiver Animationstyp. liegt daran, dass derzeit alle unsere A0-Animationen hier noch nicht additiv
sind. Wir müssen auf
sie eingehen und
sie ändern , um additive Einstellungen zu verwenden. Es gibt also ein paar
Möglichkeiten, wie wir das tun können. Ich zeige
Ihnen in einer Animation, wie Sie
diese Einstellungen ändern können. Und dann werden wir
tatsächlich
den Matrix-Editor verwenden , um
alle auf die
gleichen Einstellungen zu ändern . Es wird hier mit
dem obersten beginnen. Das ist die A0, C, C. Das ist
also unsere Center-Animation. Ich doppelklicke darauf
, um es zu öffnen. In unseren Anlagendetails scrollen
wir nun nach
unten, bis wir hier
die additiven Einstellungen finden . Und momentan können Sie sehen, dass
es auf keinen Zusatzstoff eingestellt ist, was bedeutet, dass dies nur
eine normale Animation ist, noch
nicht als
additive Animation eingerichtet ist. Für AIM-Offsets müssen
wir
dies jetzt tatsächlich in den Netzraum ändern, was bedeutet, dass diese Animation die Änderungen berechnet. Damit das Zeichen und
der Netzraum anstelle
des lokalen Bereichs für AIM-Offsets vorgenommen
werden sollte Netzraum anstelle
des , möchten
Sie immer MSS-Raum verwenden da dies der
einzige ist, den er unterstützt. Dann ändern wir den Typ
der Basispose auf die ausgewählte Animation, die hier so
skaliert ist. Auf diese Weise können wir nun
eine Animation festlegen ,
die
wir als Standardstartpunkt
für diese additive Animation betrachten . Für diese Animation stehen
wir also in der Mitte, und das ist die eigentliche, die wir als Referenz verwenden
möchten. Also
werden wir das tatsächlich auf
die Animation einstellen , in der
wir uns gerade befinden. Wir suchen nach
CC und verwenden das MM-Gewehr-Idle-Hip, FAI, AOC. Sehen Sie, das ist nur unsere zentrale
Einzelbildanimation. Nun, das ist die Animation, die wir tatsächlich für alle unsere
zielgerichteten
Offset-Animationen verwenden hier
tatsächlich für alle unsere
zielgerichteten
Offset-Animationen verwenden werden, denn das ist der Mittelpunkt und das ist der
Punkt, an dem wir unsere additiven
Animationen hinzufügen
möchten. Jetzt haben wir
diese Animation als
additiv eingerichtet und können jetzt
zu unserem
Zielversatz hinzufügen, aber wir
müssen das immer noch für all
diese Animationen hier unten tun . Jetzt könnten wir jeden einzelnen
durchgehen und diese
Einstellungen auf die gleiche Weise vornehmen, aber es gibt einen schnelleren
Weg, dies zu tun. Was wir also tun, ist zu speichern und zum Animationsordner für die Lektion zu wechseln. Wir scrollen
bis ganz nach unten und
wählen nur alle unsere
zielversetzten Animationen mit Ausnahme unserer mittleren
aus da wir das bereits
eingerichtet damit wir die Kontrolle behalten
und wähle hier alle aus und gehe weiter runter,
bis wir alle haben. Dann klicken wir mit der rechten Maustaste und möchten zu den Asset-Aktionen und
dann zur Massenbearbeitung
über die Eigenschaftsmatrix gehen . Und das wird dieses Fenster hier öffnen
. Wenn Sie dieses Tool noch nicht
verwendet haben, können
Sie im Grunde genommen mehrere Assets
im Content Browser
auswählen und
alle ihre Einstellungen
gleichzeitig ändern . Um das zu tun,
klicke ich einfach auf die Assets
und mache Control a, und das wird alle
unsere Assets hier auswählen. Dann können
Sie im Eigenschaftseditor sehen,
dass wir dieselben Einstellungen
haben wie
in der Animation. Wir scrollen hier einfach nach
unten. Wir wollen die
additiven Einstellungen finden. Wir werden
dies also von keinem Zusatzstoff
zum Netzraum ändern ,
wie wir es zuvor getan haben. Dann ändern wir dies in eine skalierte
ausgewählte Animation. Dann wollen wir die
Animation und das Wochenende auswählen. Wir möchten dies
auf die CC-Animation
für unseren Zielversatz festlegen ,
also wählen wir das aus. Und jetzt können wir das schließen und alle unsere Animationen verwenden
jetzt diese Einstellungen. Wenn wir also zufällig eine auswählen,
wie unsere Linke hier unten, können
Sie sehen, ob ich nach unten scrolle, finden
wir die additiven Einstellungen. Sie können sehen, dass
es jetzt für uns eingerichtet ist. Jetzt sind alle unsere
Zielversatzanimationen als additiv eingerichtet. Wir können zu
unserem Zielversatz zurückkehren. Also werde ich
diese beiden Animationen vorerst schließen. Und wir gehen zu den Schaufensterpuppen als zum Animationsordner
und öffnen unser Ziel. Ich werde das einfach wieder nach oben ziehen
. Das Letzte, was wir tun
müssen , bevor wir
Animationen zu unserem Zielversatz hinzufügen ,
ist eine Vorschauanimation festzulegen. Und das gibt uns nur
eine Animation, die über unseren
Zielversatz hinaus eine
Vorschau anzeigt, damit wir sehen können, wie sie
aussieht. Also wird es hier
nach unten scrollen. Für die Vorschau-Basispose möchten
wir jetzt keine additive
Animation verwenden, da wir sonst einfach
keine Vorschau sehen. Also werden wir nach Leerlauf
suchen. Und wir werden das finden, ich werde hier die FAI für
Gewehr-Idle-Hip-Hüfte verwenden weil
unsere Zielverschiebungen eigentlich
für das Hüftschnell sind , also wählen
wir das aus. Dann. Ich werde einfach speichern
und dann unseren Zielversatz so schließen und wieder öffnen. Jetzt können wir anfangen, unserem
Diagramm hier unten
Animationen hinzuzufügen . In der Suchleiste suche
ich nach der mittleren Animation
, da dies die Animation ist
, die wir verwenden möchten. Wann ist deine Tonhöhe 0, denn das wird der Mittelpunkt
sein. Ich suche nach CC und wir ziehen es so
in die Mitte. Jetzt könnte dieses Problem auftreten bei dem die Vorschau ausgeblendet wird. Es scheint einen Fehler zu geben, wenn Sie nach unten scrollen
und wir einfach
den Wert für unsere Vorschau zurücksetzen und dann, sagen wir, eine
andere Animation auswählen. Wir suchen einfach wieder
nach Leerlauf. Ich wähle MFA im Leerlauf und suche dann erneut
nach Leerlauf. Wir wählen unser
Gewehr, unsere Hüfte im Leerlauf und unsere FAI
aus, wie wir es zuvor getan haben, und Sie
können sehen, dass es jetzt funktioniert. Ich weiß nicht, warum das passiert. Ich denke, es ist ein
Engine-Bug, also hoffentlich wird er bald behoben. Als Nächstes müssen wir
weitere Animationen hinzufügen. Also hier in der Suchleiste suche ich nach CU, und das steht für Center up. Also werden wir diese
Animation hier oben hinzufügen, weil wir wollen, dass
es für unsere Charaktere, die in deinem Hintern
zentriert sind, 90 in der Tonhöhe sind. Also füge ich das hier hinzu. Sie können sehen, dass unsere Vorschau wieder
kaputt ist, das ist in Ordnung. Wir werden das Problem beheben, sobald wir
mit dem Hinzufügen von Animationen fertig sind. Also machen wir eine weitere Suche und suchen nach c, d. Und das steht
für Center down. Also fügen wir das hier unten in der
Mitte hinzu. Und dies ist wieder der Fall, wenn R
0 ist und unsere Tonhöhen minus 90 sind. Als nächstes machen wir die
linke Seite. Also suche ich nach L,
C, das für Left Center steht. Also fügen wir das hier hinzu. Das wird für unseren
Pitch sein, oder tut mir leid, bist du minus 90
und unser Pitch ist 0. Dann wollen wir links oben, also LU, und wir fügen
das hier oben hinzu, dann Aldi und fügen
das unten hinzu. Dann machen wir die
rechte Seite. Also machen wir LC, RC, das ist genau in der Mitte
als wir wollen. Richtig hoch. Und das ist der One Down Hit, der sich in der oberen
rechten Ecke summiert. Und dann wollen wir unser D, das ganz unten ist,
und wir fügen es so zur unteren
rechten Ecke hinzu. Und jetzt können wir das retten. Als Nächstes können wir unsere Vorschau korrigieren, sodass wir das tun, was wir zuvor getan haben, wodurch der Wert zurückgesetzt wird. Dann suchen wir nach Leerlauf. Ich setze das auf
unsere Leerlauf-Animation und dann
suchen wir wieder nach Leerlauf. Und wir werden das
Hip-Fire-Ideal so verwenden. Dieser Fehler hat jetzt keinen Einfluss darauf, wie unser Zielversatz im Spiel funktioniert. Es ist nur ein Vorschauproblem, also mach dir darüber keine
allzu großen Sorgen. Aber jetzt können wir das tatsächlich
testen. Also halten wir die Kontrolle und bewegen unsere Maus herum und du
kannst sehen, wie unsere Charaktere jetzt die Zielversätze verwenden
, die wir gerade eingerichtet haben. Sie können auch sehen, dass unsere Leerlaufanimation immer noch abgespielt wird, obwohl wir zusätzlich zu
dieser Animation unseren Zielversatz
hinzufügen . Und so funktionieren additive
Animationen. Sie fügen die
zusätzlichen Informationen
zur aktuell
abgespielten Animation hinzu. Jetzt sind wir bereit, dies
tatsächlich
in Art Animation Blueprint einzurichten . Was wir also tun, ist
das zu speichern und es zu beenden. Es wird also mit dem Geld
Animation Blueprint geöffnet und wir
wollen zum Event Graph gehen. Wenn Sie also nicht da sind, können
Sie einfach
darauf doppelklicken und gelangen in
das Ereignisdiagramm. Und wir brauchen
zwei neue Variablen. Wir brauchen also eine
Variable für unsere Tonhöhe und unser Gieren. Also fügen wir eine neue Variable hinzu, ich nenne das pitch. Und wir wollen, dass dies ein Float ist. Also werden wir
das in den Float-Typ ändern. Und wir werden dasselbe für
dein super cooles Problem tun. Und es ist bereits
auf dem Float für uns eingestellt. Dann können wir einfach kompilieren. Als Nächstes benötigen wir Code, um diese Variablen
tatsächlich zu setzen. Also wird es hier runter gehen und wir beginnen
mit dem Charakter. Also hol dir Charakter. Und wir wollen, dass sie eine
Zeichenvariable erhalten. Und wir müssen
die Kontrollrotation bekommen. Holen Sie sich also eine kontrollierte Rotation. Und das ist die
Drehung unserer Kamera. Und dann wollen wir die Rotation unserer
Charaktere, also holen Sie sich eine solche
Schauspielerrotation. Dann
ziehen wir uns aus unserer Kontrollrotation heraus und wir werden
nach Delta suchen. Wir wollen, dass das Delta eine Note dreht, und wir wollen b so in
unsere Achsendrehung stecken. Jetzt bekommt der Delta-Knoten im Grunde
nur noch den Unterschied zwischen unserer Steuerrotation
und unserer Achsenrotation. Und das ist die
Richtung unser Charakter tatsächlich gehen soll. Aus dem Rückgabewert
suchen
wir nun nach unserem Abfangpunkt. Und wir wollen unser interp2. Und wir wollen, dass dies
das Ziel ist, denn das ist die Zielrichtung, in die
unser Charakter schauen soll. Und dann werden
wir für den aktuellen Stand
unsere Tonhöhe für Ihre Werte verwenden . Jetzt können wir mit der rechten Maustaste klicken und so einen Stift mit geteiltem Schlag
ausführen. Wir können die
Werte indirekt verbinden. Oder wenn Sie diese neu kombinieren, können
wir herausziehen und einen solchen
Make-Rotator-Knoten erstellen
und verwenden. können wir auch hier
einstecken. Also werde ich das deine holen, das in deinen
Eingang
stecken und dann pitchen, das in die Tonhöhe stecken
und so setzen. Dann wollen
wir für die Delta-Zeit die Delta-Zeit der Welt nutzen. Also ziehen wir uns einfach
hin und suchen nach der Welt. Und wir wollen
Welt-Delta-Einstellungen bekommen. Und für die Internetgeschwindigkeit ist
dies, wie schnell der zurückgegebene Wert
vom aktuellen zum Ziel wechselt. Je höher das
ist, desto schneller a oder B, ich setze meins auf 20. Wir können zurückkommen und das
anpassen, wenn wir wollen. Als nächstes müssen wir
die Nick- und Gierwinkel klemmen. Um das zu tun, werden wir
uns hinziehen und brechen. Der Rotator aus unserem Spielfeld zieht
sich heraus und
sucht nach einer Klammer. Wir wollen den Klemmwinkel. Der Grund
dafür ist, dass wir, wenn Sie sich in unserem Zielversatz erinnern, einen Mindestwert von minus
90 und einen positiven Wert von 90 haben . Wir wollen unsere
Tonhöhe nicht oder du
gehst über oder
unter diese Werte. Also setzen
wir für sie minus 90 für das Maximum, das wir wollen 90. Und dann kopieren wir das
und fügen das ein und stecken die Winkelgrade so
in das Z oder die
Ausgabe hier. Jetzt werden wir
diese verwenden, um unsere Variablen festzulegen. Also für die oberste, für die Tonhöhe, wollen
wir die Tonhöhe festlegen. Und wenn wir unseren
Set Pitch Node verwenden, und dann für den unteren, wollen
wir set your will set your node so verwenden
. Verbinde diese miteinander. Und dann verbinden wir
diese mit unseren Sequenzen. Fügen Sie also einen neuen Stift hinzu, ziehen Sie ihn heraus und
verbinden Sie ihn mit unserem Pitch. Doppelklicken Sie einfach
darauf, um einen Root-Knoten hinzuzufügen. Und wir ziehen das einfach
hierher, nur um die
Dinge so in Ordnung zu halten. Jetzt sind wir also
bereit,
unseren Zielversatz zu
unserem Anim-Diagramm hinzuzufügen . Also gehen wir jetzt dorthin. Wir möchten nur, dass unser Zielversatz die obere Hälfte unseres Körpers
beeinflusst, nicht die untere Hälfte, da dies
die untere Hälfte beeinflusst, dies unsere
Bewegungsanimationen durcheinander bringt. Wenn Sie sich an
unsere Lektion mit Blendknoten erinnern, haben wir hier eine Blend per Bone
Note eingerichtet, die
unseren Unter- und
Oberkörper trennt und es uns ermöglicht Animationen nur in der oberen Hälfte
abspielen
zu lassen. Und genau das machen wir
hier mit unserem Montageslot. Also werden wir hier unser Ziel,
den Offset, zu diesem
Code hinzufügen , denn das wird der Code sein, der für die obere Hälfte
gespielt wird. Also ziehen wir das in die Länge um ein bisschen mehr Platz zu schaffen. Jetzt werde ich meinen Zielversatz vor meinem Montage Slot
spielen lassen. Der Grund, warum wir das tun, ist,
wenn wir eine Montage spielen, ich will das nicht, oder ich möchte
nicht, dass unser Zielversatz
die Montage beeinflusst. Wenn wir es also vorher machen,
dann, wenn wir eine Montage spielen, wird
es unser Ziel überschreiben von unserem
Hauptkassierer
versetzt ist. Wir ziehen uns in die Länge
und suchen nach dem AIM-Offset. Und wir wollen die
Zielversatzebene. Also werden wir
das einfach so erstellen. Jetzt müssen wir festlegen, welches
Ziel-Offset wir tatsächlich verwenden wollen. Und das ist dasselbe wie das
Setzen von Verschmelzungsräumen. Hier im Detailbereich
mit
den ausgewählten Notizen scrollen
wir also nach unten. Sie können sehen, dass es tatsächlich Verschmelzungsraum
heißt, aber es bedeutet, Offset zu sagen. Aber wir können
darauf klicken und Sie können sehen, ob A0 da ist. Also wählen wir das aus. Nur als
Randnotiz könnte es für Sie
einen Versatz bedeuten, wenn Epic dies behebt. Für mich heißt es also
verschmelzen Raum für dich. Es könnte ein Offset sein, aber Sie können hier trotzdem Ihren
Zielversatz festlegen. Dann können Sie sehen, wie
unsere Mitteilung aktualisiert wurde. Wir haben unsere
eigenen Tonhöheneingänge, also greifen wir nach diesen
Variablen und fügen sie in unseren Zielversatzknoten ein. Also schnappen wir uns Ihren Pitch und fügen ihn in eine solche
Tonhöhe ein. Und jetzt können wir das kompilieren
und testen. Also gehen wir zu
unserem Level und drücken auf Play. Sie können sehen, dass unser Charakter jetzt, wenn ich es bin und mich umsehe tatsächlich in die
Richtung schaut, in die meine Kamera zeigt. Wenn wir uns bewegen, kannst
du sehen, dass unser
Verschmelzungsbereich immer noch mit den
Bewegungsanimationen unseres Charakters
funktioniert, während auch unsere
Zielverschiebungen funktionieren. Und wenn Sie genau hinschauen oder Animation
im Leerlauf noch läuft, obwohl wir
mit unserem Ziel von SAP in eine andere Richtung zielen. Aber wenn ich jetzt
meine Zielansicht verlasse, indem ich einfach
mit der linken Maustaste
klicke, kannst du sehen, dass meine
normale Animation keine Waffe zu halten, irgendwie seltsam
ist. Und das liegt daran, dass wir diesen gezielten Offset
spielen. Selbst wenn wir nicht zielen, können
wir dies in
unserem Animations-Blueprint ziemlich
einfach ändern unserem Animations-Blueprint ziemlich , also
gehen wir dorthin. Hier sehen Sie jetzt, dass unser Zielversatz
einen Alpha-Wert hat. Nun bedeutet eins, dass
der Zielversatz aktiviert
ist und
0 bedeutet, dass er aus ist. Wenn es also 0,5 ist, würde es den
halben Einfluss
unseres Zielversatzes erfordern. Jetzt können wir dies tatsächlich in
einen booleschen Wert
ändern , um es einfach
ein- oder auszuschalten. Also wählen wir unsere Notiz aus, gehen zum
Alpha-Wert in C Alpha-Wert über,
Entschuldigung, der Alpha-Eingabetyp ist
derzeit auf Float-Wert eingestellt. Aber wenn ich das
in einen booleschen Wert ändere und sehe, dass wir jetzt
dieses Kontrollkästchen für die Gesamtzahl aktiviert haben. Und jetzt können wir einfach
greifen ist die Acht. Stecken Sie das hier in das aktivierte ein. Und jetzt, wenn wir kompilieren
und auf Play klicken, können
Sie jetzt sehen, dass ich nicht zielgerichtet bin. Sie werden sehen, dass sich die Animation
im Leerlauf korrekt verhält. Aber wenn ich anfange zu zielen, können
Sie sehen, dass unser
Zielversatz dann wieder funktioniert. Jetzt gibt es eine andere
Möglichkeit, unseren Zielversatz ein- und auszuschalten. Wenn wir also hier weggehen und zu unserem Animations-Blueprint
zurückkehren, könnten
wir, anstatt diesen Knoten nur ein- oder
auszuschalten, anstatt diesen Knoten nur ein- oder
auszuschalten, tatsächlich
einen ganzen
Codeabschnitt nur ausführen lassen, wenn dies als wahr angestrebt
wird . das zu tun, können wir nach dem Blend-Tool
suchen und die Bibel für
Mischposen verwenden. Und das verwenden wir in unserer Lektion zu
Blend Nodes. Also, wenn du dich erinnerst, können
wir das nehmen, das hier in unseren
Standardsteckplatz
stecken, und dann nehmen wir die
Trennung Herz ist gerichtet. Stecken Sie dies in den aktiven Wert. Wenn es also als
wahr angestrebt wird, wird der wahre
Code hier ausgeführt. Und wenn es falsch ist, wird der Folk-Code ausgeführt. Wenn wir es also nicht tun, wollen wir
unsere gezielten Codes rump. Also verbinden wir
das mit true. Ich klicke
auf Tests aktivieren. Es ist also immer aktiviert. Wenn wir nicht zielgerichtet sind, können
wir einfach das Geld unserer wichtigsten Staaten kopieren und
einfügen. Steck das hier rein. Das funktioniert
genauso wie zuvor. So können wir Hit Play kompilieren. Sie werden sehen, wenn ich
unsere Charaktere mit unserem Ziel oder
separaten Dateinamen ziele, können
Sie sehen, dass unsere Animation
korrekt funktioniert. Wie Sie sehen können, funktionieren
beide Wege. Welches du benutzt, es liegt
ganz bei dir. Dieser Weg kann ein
bisschen einfacher sein, wenn Sie beispielsweise
andere Knoten haben, die
ausgeführt werden sollen , wenn es als wahr angestrebt wird, da Sie diese
einfach mit hier
verbinden und ausführen lassen könnten . Wann stimmt das? Das war's also für diese Lektion. Hoffentlich verstehen Sie jetzt,
wie Sie einen
Namensversatz einrichten und wie Sie
ihn in Ihren Projekten verwenden können.
52. Animation (Kurven und Metadaten): Hallo zusammen. In dieser Lektion
werden wir uns
Animationskurven und Metadaten ansehen . Kurven und Metadaten
ermöglichen es uns jetzt im Wesentlichen, unseren Animationen
zusätzliche Informationen hinzuzufügen , die
wir dann
in unserem
Animations-Blueprint lesen können , wenn sie abgespielt werden. Zunächst zeige
ich Ihnen, wie wir tatsächlich eine neue Kurve erstellen. Also gehen wir zu einer Animation. Ich wähle die
Run-Forward-Animation. Für uns wird das also
im Quinn-Ordner sein ,
dann unter dem r14. Und der Grund, warum es sich
im Quinn-Ordner befindet und nicht im Geld, ist, dass,
wenn Sie sich erinnern, unser
Charakter-Blueprint tatsächlich den Quinn
Animation Blueprint
verwendet. Und darin haben wir das
Run 4D Animationsset. Das machen wir auf. Und hier sehen Sie, dass
wir eine Kurven-Timeline haben. Um nun eine neue Kurve hinzuzufügen, klicken
Sie einfach auf das
Drop-down-Menü und wir können zur AD-Kurve gehen. Wie Sie sehen können,
enthält die
Third-Person-Vorlage eine
Reihe integrierter Kurven. Diese
machen
standardmäßig nichts , bis wir sie verwenden
und tatsächlich einrichten. Aber im Moment werden wir
nur unsere eigenen Kurven erstellen. Also gehen wir zu
Kurve erstellen und
geben ihr einen Namen. Ich nenne meine
Beispielkurve so. Und Sie sehen,
dass das jetzt
unsere Beispielkurve
zu unserer Animation hinzugefügt hat. Diese Kurve ermöglicht es
unserer Animation nun,
einen Wert auszugeben , der davon abhängt, zu welcher Zeit
in der Animation wir uns befinden. Derzeit können Sie also
sehen, dass es nur auf 0 gesetzt ist. Wenn wir also diese Animation abspielen, wird
unsere Kurve
nur einen Wert von 0 ausgeben. Aber wir können
diese Kurve tatsächlich bearbeiten, um
einen anderen Wert auszugeben , je nachdem
, an welchem Punkt der Animation gerade gespielt wird. Dazu gehen
wir zum
Kurven-Dropdown für die Beispielkurve wählen
dann Kurve bearbeiten aus. Und wenn Sie sich an
unsere Timelines-Lektion erinnern, funktioniert
das tatsächlich
sehr ähnlich. Derzeit wird dieser
Wert die gesamte Zeit, in der die
Animationen abgespielt werden, nur
0 sein , aber wir können neue Punkte hinzufügen. Wenn ich also mit der mittleren Maustaste klicke,
fügt das einen neuen Punkt für uns hinzu. Und dann haben
wir hier oben die Zeit,
an der sich
dieser Punkt gerade befindet, und seinen Wert. Also wenn ich das auf 0 oder
0 setze ist momentan 0
Zeit und hat 0 Wert. Wenn ich jetzt einen weiteren Punkt hinzufüge, sagen wir in einer Sekunde. Also ungefähr hier klicken wir mit
der mittleren Maustaste. Jetzt, wo das ausgewählt ist, können Sie
sehen, dass die Zeit eins ist und wir können den Wert auf etwas
anderes wie zehn setzen , zum Beispiel können
Sie sehen, dass mein Punkt aus dem Diagramm verschwunden
ist, aber wenn wir darauf
klicken Box hier, es wird tatsächlich alle
unsere Punkte wieder in den Blick rücken. Wenn diese Animation jetzt
um das 0-fache abgespielt wird, ist der Wert 0. Aber im Laufe der Zeit wird
der Wert
entlang dieser Linie steigen bis wir 1 Sekunde erreichen
und es werden zehn sein. Wenn die Zeit dann wieder
zunimmt, bleibt
der Wert
zehn, da wir keine
zusätzlichen Punkte
haben. Jetzt können wir
diesen Wert in
unserem
Animations-Blueprint lesen , indem wir hier
zur Third-Person-Map gehen . Dann wollen wir zu
unserem Animation Blueprint gehen. Animationen gehen dann zum
Geld Animation Blueprint. Und im Ereignisdiagramm fügen
wir einen neuen Knoten hinzu. Wir klicken mit der rechten Maustaste
und suchen nach Kurve. Wir benutzen „
Get Curved Valley“. Sie können sehen, dass wir einen
Kurvennamen angeben können. Das muss also genau
der Name sein , den wir für unsere Kurven
verwenden. Dies ist also eine Beispielkurve die genauso mit den
Großbuchstaben geschrieben wird. Wenn nun eine Animation abgespielt , die die von uns eingestellte Kurve
verwendet, wird der aktuelle Wert ausgegeben
. Also fügen wir einen neuen Stift hinzu und
fügen zum Beispiel einfach eine
Druckzeichenfolge hinzu. Und wir fügen den
Rückgabewert in unsere Druckzeichenfolge ein. Und wir werden kompilieren. Und das können wir
testen. Also drücken wir auf „Spielen“. Und Sie können
derzeit sehen
, dass keine Animationen ausgeführt werden, die diese Kurve verwenden. Unser Wert ist also nur 0. Aber wenn ich anfange vorwärts zu rennen, können
Sie sehen, dass unser Wert auf zehn
steigt. Jetzt wird es jedes Mal, wenn die
Animation wiederholt wird, wieder auf
0 zurückgesetzt . Denn wenn Sie sich
am Anfang unserer Animation erinnern, ist
es 0, dann geht es auf zehn. Und dann, sobald es das Ende
erreicht hat wird unsere Animation in einer Schleife ausgeführt. Es wird wieder bei
0 beginnen und der r-Wert ist 0. Nun können
wir,
ähnlich wie in unserer Zeitleiste, diese Punkte hier hervorheben. Wir können ändern,
wie sie voneinander abweichen. Hier oben können wir also auswählen, welche Arten von Abfällen für den Punkt
sein werden. Zum Beispiel können wir die
Automatik auswählen und Sie sehen, dass wir jetzt
eher einen gekrümmten Effekt
für unsere Wertsteigerung erhalten . Und wir können diese
kleinen Griffe verwenden, um Änderung
unserer Linie
tatsächlich anzupassen. Wir können unsere Punkte auch verschieben,
indem wir sie einfach auswählen und
herumziehen. Jetzt habe ich beide ausgewählt,
also werden beide verschoben. Aber wenn ich hier
nur den einen hervorhebe, können
Sie sehen, dass ich diesen
Punkt verschieben kann, um zu ändern was unser Wert zu
diesem bestimmten Zeitpunkt sein wird . Wenn Sie diesen Wert jemals sehen
möchten, können
Sie mit der Maus darüber fahren oder
ihn hier finden. Und dann ist der Zeitwert hier. Aktuell sind wir
im Kurveneditor, wie Sie hier sehen können. Wenn Sie jedoch zur normalen Ansicht
zurückkehren möchten, können
Sie einfach auf diese
Registerkarte klicken und das bringt uns zurück zu der Registerkarte, die
wir normalerweise sehen. Wenn Sie jetzt jemals zum Kurveneditor
zurückkehren möchten,
sagen wir, Sie haben
ihn versehentlich geschlossen, können
Sie auf Kurve klicken
und einfach die Kurve bearbeiten. Das wird uns wieder hierher bringen. Wenn Sie eine Kurve entfernen möchten, klicken
Sie einfach
darauf und dann auf Kurve
entfernen. Dadurch wird unsere Kurve für uns tatsächlich beseitigt. Jetzt können Sie mehrere
Kurven und eine Animation haben. Sie können einfach die
Kurve und eine weitere Kurve treffen Sie können entweder eine der Kurven erstellen oder wiederverwenden
, die sich hier befinden. Jetzt können wir dieselbe
Kurve zu anderen Animationen hinzufügen. Wenn wir also losfahren und zum Geld
gehen und uns öffnen, sagen wir die Sprunganimation. Wir könnten die gleiche
Kurve auch hier haben. Wir können zur AD-Kurve gehen. Und anstatt eine neue Kurve zu
erstellen, können
wir einfach nach dem Namen suchen. Also suchen wir zum Beispiel. Und Sie können sehen, dass unsere
Beispielkurve bereits da ist , weil wir
sie erstellt haben, bereits vorhanden. Damit wir es wiederverwenden können,
werden wir das schaffen. Und Sie können sehen, dass es
mit den Standardwerten 0 beginnt . Vielleicht möchten wir in dieser
Animation, dass eine dunkle Kurve
völlig andere Werte hat. Wir könnten zum Beispiel mittleren Maustaste klicken und dies auf 0
setzen. Wir könnten den
Startwert auf
etwa minus 100 setzen . Und wir klicken auf das Kästchen , um es
wieder in unsere Ansicht zu bringen. Dann können wir mit
der mittleren
Maustaste auf, sagen wir, 2.5 klicken und diesen
Wert auf 500 setzen. Und wir holen
die Kiste wieder ab
, nur um beide in unseren Blick zu rücken. Und jetzt, wenn diese
Animation
völlig andere
Werte als unsere Kurve abspielt oder ausgibt . Also im Test das heraus, drücken Sie Play
und sehen Sie, ob ich vorwärts renne , der immer noch unsere
Kurve aus dieser Animation abspielt. Aber wenn ich springe, werden
Sie sehen, dass
es zwei völlig
unterschiedliche Werte erhöht. Als Nächstes haben wir Metadaten, bei denen es sich im Grunde um eine Kurve handelt
, die nur einen Wert hat. Es zeigt Ihnen also, was ich meine,
wir können den Sprung
hier hinzufügen und wir kehren
zur Registerkarte hier oben zurück. Jetzt können wir diese
Beispielkurve vorerst entfernen. Also entfernen wir einfach Kurve, gehen zu Kurven hoch und Sie können
sehen, dass wir Metadaten haben. Jetzt können Sie hier wieder sehen, dass es viele
Standardvorlagen
gibt, die mit der Third-Person-Vorlage
geliefert werden. Aber wenn wir zum Beispiel noch einmal nach
Kurve suchen , werden Sie sehen
, dass das auch da ist. Obwohl es sich um eine Kurve
handelt, handelt es sich auch nur um Metadaten. So können wir nach einer Kurve
suchen und unsere
Beispielkurve so hinzufügen. Wie Sie sehen können, ist der
Standardwert eins. Und wenn wir zum
Kurven-Dropdown gehen, gibt es keine Möglichkeit, dies zu bearbeiten. Das liegt daran, dass
Metadaten sich so verhalten, als würden Sie Ihrer Animation einen booleschen Wert
hinzufügen. Wenn es zur Animation hinzugefügt wird
,
entspricht der boolesche Wert true. Und wenn es nicht in der
Animation enthalten ist, dann ist es falsch. In unserem Animations-Blueprint ist dieser Rückgabewert
entweder eins oder 0,
je nachdem, ob
die Animation
diese Metadaten mit diesem Namen enthält . Wenn wir jetzt auf „Spielen“ klicken, werden
Sie sehen, wenn ich springe, auf eins steigt und dann wieder auf 0
sinkt. Jetzt
werden Animationskurven für alle möglichen Dinge wie die
Steuerung
von Gesichtsanimationen oder Eigenschaften innerhalb von Materialien verwendet. Wir
werden das in
dieser Lektion nicht behandeln, nur weil es ein bisschen weiter fortgeschritten ist. Was wir aber auch
mit Animationskurven tun können ist, sie in unserem
Animations-Blueprint zu lesen, wie wir es mit
unseren Kurven in Metadaten getan haben. Ein Beispiel dafür, was Sie in Zukunft mit Kurven
machen könnten ist vielleicht,
dass Sie ein Projekt haben, in dem gedreht wird, aber bestimmte Animationen sollen der Spieler
nicht aufnehmen können. Nun, Sie könnten
eine Blockschusskurve erstellen. Das sind die Animationen, in denen Sie die Aufnahme blockieren
möchten. Dann könnten
Sie in Ihrem
Animations-Blueprint diese Kurve lesen. Und wenn der Wert über 0 liegt, wissen
Sie, dass Sie die Aufnahme in Ihrem Code
blockieren sollten. Eine Sache, die
wir jetzt beachten sollten, ist, wenn wir zu unserer
Sprunganimation zurückkehren, da wir
hier
unsere Beispielkurve als Metadaten hinzugefügt haben . Wir können dann nicht auch
eine
Beispielkurve als Kurve hinzufügen . Wenn wir eine Kurve hinzufügen müssten, haben wir zum Beispiel
in C gesucht . Sie wird nicht angezeigt,
bis wir
diese Beispielkurve löschen. Also entfernen wir
das und gehen dann zum Beispiel zu
Kurvensuche hinzufügen . Jetzt können Sie sehen, dass es angezeigt wird und wir können es als Kurve
hinzufügen. Wenn Sie nun
herausfinden möchten, wo all diese Kurven tatsächlich
gesetzt sind, und Sie sie verwalten können, benennen Sie sie um oder löschen Sie sie. Wir gehen
zum Content Browser. Dann gehen wir
zum Mannequin-Ordner, dann
zu Meshes und wir öffnen SK Mannequin. Das ist das Skelett unserer
Charaktere. Und hier drüben
findest du die Anime-Kurven. Wenn deine nicht geöffnet ist, kannst
du zum
Fenster gehen und hier
Anime-Kurven auswählen. Jetzt können
wir auch in den
Anime-Kurven Kurven löschen, sodass Sie mit der
rechten Maustaste auf die Spalte klicken und auf Löschen klicken können . Sie können sie umbenennen oder neue Kurven hinzufügen, indem
Sie einfach Neue
Kurve hinzufügen auswählen und einen Namen eingeben. Nun, zum Schluss, wenn wir versuchen, unsere Beispielkurve zu
den Unterrichtsanimationen hier
und dem Unterrichtsanimationsordner
hinzuzufügen den Unterrichtsanimationen hier
und . Wir werden unsere Beispielkurven nicht wirklich finden können
. Wenn wir also aufmachen, sagen wir
das Gewehr,
vorwärts gehen , gehe ich zu Kurven und gehe AD-Kurve
und ich suche zum Beispiel, dass es nicht
wirklich auftaucht. Wenn Sie sich jetzt an
diese Animationen in
unserem Animationsordner erinnern unserem Animationsordner oder ein anderes Skelett verwenden, stammen
sie von unserem Charakter. Also müssen wir unsere Kurve tatsächlich
manuell
zu diesem Skelett hinzufügen , damit diese
Animationen sie finden. Um das zu tun,
gehen wir einfach zu Mannequin als zwei Maschen und dann zu SK Mannequin. Und hier
gehen wir zu Anime-Kurven, die mit der
rechten Maustaste eine Kurve hinzufügen. Ich nenne
diese Beispielkurve genau so wie den Namen, den
wir unserer Kurve zuvor gegeben haben. Wir drücken die Eingabetaste
und jetzt haben wir
diese Kurve zu unserem Skelett hinzugefügt . Jetzt können wir das schließen
und zurück zu unserem Gewehr
gehen, vorwärts gehen, dann zwei Kurven. Und wir können entweder eine Kurve oder
Metadaten hinzufügen , und wir können zum Beispiel
suchen, und wir können unsere Kurve jetzt
finden. Also
füge ich einfach unsere Beispielkurve hinzu. Ich bearbeite es, um einige Werte hinzuzufügen. Wird mit der mittleren Maustaste auf ein Wort klicken und ein Wert bei 0 für zehn sagen. Und dann zentrieren wir den
Graphen neu. Ich habe keinen Wert, sagen wir
einen für 500, so. Wir werden es neu zentrieren, nur um sicherzustellen, dass alles in Ordnung ist. Jetzt können wir das testen. Ich drücke auf „Spielen“ und
ziele und gehe vorwärts. Und Sie sehen, dass unser Wert auf diese Weise
steigt. Wenn dies bei Ihnen nicht der Fall ist und beim Vorwärtsgehen
immer wieder 0 angezeigt wird,
versuchen
Sie einfach, alles
vor dem Neustart des Motors zu bewahren. Das ist im Moment ein Bug
mit kompatiblen Skeletten. Wenn du dich erinnerst, kann
unser Charakter deshalb die
Animationen aus unseren Lektionen spielen. Wir haben
in der Montagenstunde ein kostenpflichtiges Skelett gesehen, aber es ist ein bisschen fehlerhaft,
da es sich um eine neue Funktion handelt. Manchmal musst du das Projekt
einfach speichern und erneut öffnen und
es sollte korrekt funktionieren, dann war's das für diese Lektion. Hoffentlich verstehen Sie jetzt
, wie Sie Metadaten und Kurven zu
Animationen hinzufügen und
diese Werte dann in einem
Animation Blueprint lesen .
53. Gameplay-Systeme (Interaktion): Hallo zusammen. In diesem
Abschnitt des Kurses werden
wir alles, was wir in
unseren vorherigen Lektionen gelernt haben
, verwenden , um einige gängige
Spielmechaniken zu entwickeln. In dieser Lektion werden
wir nun
ein grundlegendes Interaktionssystem erstellen . Auf diese Weise können wir Code innerhalb
anderer Objekte
ausführen , wenn unser
Spieler mit ihnen interagiert. Für diejenigen unter
Ihnen, die in
früheren
Lektionen mitgearbeitet haben, habe ich eine neue
Third-Person-Vorlage erstellt , damit wir einen Neuanfang
für diesen Abschnitt des Kurses haben . Um loszulegen, gehen
wir in den ThirdPersonCharacter
Blueprint und das ist nur im
ThirdPerson-Ordner, dann Blaupausen. Also wird es das öffnen. Und inhalieren wir,
wir werden
eine neue Funktion erstellen und
wir werden
das look at actor will compile nennen . Das ist eine Funktion
, die tatsächlich erkennt, welchen Akteur wir
gerade betrachten. Und um das zu tun, verwenden
wir eine Linienspur, sodass sie sich hinauszieht und
wir nach einer Linienverfolgung suchen. Und wir wollen eine
Zeilenverfolgung für Kanal. Wenn Sie sich an
unsere Line Traces Lektion erinnern, können wir mit
einer Linienverfolgung
Objekte zwischen den
Start- und Endpositionen erkennen . Das macht es also
ideal für Dinge wie ein Interaktionssystem,
da wir erkennen können,
ob der Spieler gerade ein Objekt
betrachtet. Um das zu tun, brauchen
wir ein
bisschen Mathematik, um zu
bestimmen, wo unsere
Zeilenablage beginnen und enden soll. Also klicken wir mit der
rechten Maustaste und erhalten die Kontrollrotation. Und das gibt uns
die aktuelle Rotation der Kamera unseres Spielers. Daraus wollen wir
die Richtung nach vorne ziehen. Also wollen wir nach
get rotation x vector suchen. Dann wollen wir uns
daraus ziehen und
einen mal- oder multiplizierten Knoten machen . Und wir werden
die Eingabe hier in einen Float ändern. Also klicken wir einfach mit der
rechten Maustaste auf do convert pen und
wählen dann den Flow aus und wir
wollen doppelte Genauigkeit. Also machen wir das. Es wird die ein bisschen
zurückbewegen. Der Wert, den wir hier
festlegen, ist, wie weit unser
Charakter
vom Startort entfernt interagieren kann. Also sag ich wollte
Es interagiert und die
Entfernung beträgt vier Meter. Ich werde hier 400 setzen und wir werden das später ändern können
, aber im Moment
belassen wir das einfach bei 400. Jetzt brauchen wir einen Startpunkt
für unsere Linienverfolgung. Jetzt könnten wir einfach den Standort des
Schauspielers verwenden, aber wenn wir zum Viewport gehen, werden die Acts oder der Ort der
Charaktere in der Mitte sein. Und ich möchte lieber, dass meine
Linienspur vom Kopf kommt. Also schauen wir uns
den Schauspieler an und ermitteln die Position unserer
Kopfknochen. das zu tun, können wir die Mesh-Komponente aus
dem Bedienfeld „Komponenten“ abrufen .
Ziehen Sie heraus und suchen Sie, um die Socket-Position
zu erhalten. Wir können diesen Knoten
sowohl mit Socket- als auch mit
Bone-Namen verwenden und er gibt uns die Position dieses
Sockets oder Bones. Ich werde den
Kopfknochennamen angeben, der
einfach so ist. Und ich schiebe
das einfach ein bisschen zurück. Dann stecken wir den
Rückgabewert in die Aktie ein
, weil ich dort wohne. Die Ablaufverfolgung wird von beginnen. Dann
brauchen wir einen ungeraden Knoten. Also ziehen wir uns
aus dem Rückgabewert heraus, füge ich einen Knoten hinzu? Und wir werden den
Ausgabewert von r mal notieren zum Add Node aus
dem App-Knoten zwei hinzufügen und in unserer Zeilenverfolgung
eingeben. Also nur um es zu erklären, unsere Linienspur
wird an
der Position des Kopfknochens beginnen und dann wird das Ende unserer
Linienspur
wieder an der Kopfhörerposition sein , aber wir fügen vier Meter hinzu in die Richtung, in die
unsere Kamera zeigt. Jetzt können wir das testen. Wir setzen den Draw Debug
Type zwei für einen Frame, sodass die Linienspur für ein Bild
sichtbar ist. Und dann müssen
wir diese Funktion tatsächlich ausführen. Also gehen wir einfach
zum Event Graph,
klicken mit der rechten Maustaste und suchen nach Technik. Und wir werden eine Veranstaltungstechnologie hinzufügen, die dies vorübergehend
tut, um zu testen, ob alles funktioniert. Dann schnappen wir uns
den Lookout-Schauspieler und verbinden ihn mit
hier und kompilieren. Jetzt können wir das
testen, damit wir auf „Spielen“ klicken. Und es ist ziemlich
schwierig,
die Linienspur zu erkennen , weil
unsere Köpfe im Weg sind. Wenn wir F8 drücken, um unsere
Maus abzulehnen, und wir uns bewegen, können
Sie sehen, dass
die Linienspur unseren Kopf
startet und er
vier Meter vorwärts in
die Richtung geht , in die unsere
Kamera zeigt. Als Nächstes wollen wir speichern, was die Linienspur
tatsächlich trifft. Also verlassen
wir die Planeten hier,
kehren zu unserem
ThirdPersonCharacter und dann zurück zu unserer
Lookup-Aktor-Funktion. Und wir werden
hier bis zum Ende weitermachen. Jetzt möchten wir
eine neue Variable hinzufügen, Geschäfte
aus unserer Linienverfolgung getroffen werden. Also ziehen wir uns einfach von
hier raus und fördern zur Variablen. Und wir nennen das,
schauen uns das Treffergebnis so an. Jetzt können wir diese
Variable später verwenden, um festzustellen, was unser Charakter
gerade betrachtet. Jetzt werde ich hier auch eine Variable
für diesen 400-Wert erstellen . Also ziehen wir uns heraus und fördern
wieder variable. Und das wird nur einen Float für uns
schaffen. Und ich nenne
das Interaktionsdistanz. Jetzt tun wir das
nur, damit wir unsere Interact-Entfernung
für unsere Linienverfolgung leicht
ändern können . Sie können also sehen, dass es sich
tatsächlich nur auf 400 eingestellt hat. Und wenn wir später wollten, könnten
wir das in
den Klasseneinstellungen hier anpassen. Anstatt also
in Funktion gehen zu müssen , um die Entfernung zu
ändern, können
wir einfach hier hineingehen
und sie leicht ändern. Und um die Dinge zu organisieren, könnten
wir ihr auch eine
Kategorie geben, also wähle ich sie aus und
wir ändern
den Kategorienamen in eine solche
Interaktion. Sie sehen jetzt,
dass es eine
kleine Interaktionskategorie gibt, in
der wir all diese Variablen beibehalten können. Und wenn wir zu den Klassenstandardwerten gehen, sollten
wir eine
Interaktionskategorie haben, wenn wir pumpen können, zuerst kompilieren, dann zu den
Klassenstandardwerten gehen und
Sie werden sehen, dass wir jetzt
eine Interaktionskategorie haben und unsere
Wechselwirkungs-Entfernungsvariablen da drin. Als Nächstes ändern wir
unseren Lookout-Schauspieler so, dass er mit einem Timer
läuft,
anstatt es auf technischer Ebene zu tun. Und wenn Sie sich erinnern,
wird On Tech jeden einzelnen Frame ausführen. Wenn Sie also, sagen wir,
200 Frames pro Sekunde bekommen , wird
dies 200 Mal ausgeführt. Was
für unseren Schließfachdarsteller etwas übertrieben ist. Also verwenden
wir stattdessen einen Timer. Also werde ich einfach den Start-Planeten
holen. Daraus ziehen wir uns heraus und
machen die Func-Funktion per Timer. Wir wollen den Timer
nach Funktionsnamen einstellen. Jetzt können wir hier unseren
lokalen Schauspieler löschen. Auf diese Weise können wir
eine Funktion zu einer bestimmten Zeit ausführen lassen. Also werden wir diesen
Funktionsnamen so festlegen, dass er sich AXA ansieht. Jetzt muss der Name
genauso wie Großbuchstaben geschrieben werden , sonst funktioniert das nicht. Dann
nehmen wir das Looping auf. Dann
setzen wir die Zeit auf 0,03. Das bedeutet nun, dass unsere
Lookout-Actor-Funktion 30 Mal pro Sekunde ausgeführt
wird. Das mag viel erscheinen, aber für eine einzige Spur ist
es keine große Sache. Und das bedeutet, dass wir die
aktuellsten Informationen erhalten, wenn wir uns mit unserer Kamera
umschauen . Eine weitere Sache, die
wir tun können, ist
diesen Rückgabewert zu speichern und
das ist unser Timer-Handle, nur für den Fall, dass wir diesen Timer jemals stoppen
wollen, vielleicht weil unser Charakter stirbt. Wir wollen nicht mehr, dass der Lookout-Act
läuft, also können wir den
Timer-Handler verwenden, um ihn zu stoppen. Also ziehen wir uns einfach heraus,
um die Variable zu fördern, und wir nennen diesen
Look-Schauspieler-Timer einfach so. Wenn wir es also jemals stoppen
wollten, können
wir diese
Variable dafür verwenden. Jetzt schauen wir uns das aktive Funktions-Setup
an. Wir müssen jetzt eine neue
Schnittstelle hinzufügen, mit der wir
zwei weitere Blueprints hinzufügen können ,
um
Ereignisse und Code auszuführen , wenn mit ihnen
interagiert wird. Also kompilieren
wir das einfach und speichern es und gehen
zum Content Browser. Und wir klicken mit der rechten Maustaste
und
fügen ein neues Blueprint-Interface hinzu. Also gehen wir zu Blaupausen
und dann wollen wir das Blueprint-Interface hier, und wir
werden es nennen,
ich nenne
meine
BP-Unterstrich-Interaktion,
Schnittstelle wie diese nennen,
ich nenne
meine
BP-Unterstrich-Interaktion . Und wir werden es öffnen. Und ich füge
meins einfach hier in die obere Leiste ein. Wenn Sie sich an
unser Interface-Video erinnern, programmieren
wir hier nicht wirklich. Wir fügen lediglich neue Funktionen und geben ihnen
Eingaben und Ausgaben. Wir haben bereits eine neue Funktion , die mit der Schnittstelle beginnt. Also klicken wir einfach mit der rechten Maustaste
und benennen das um. Ich nenne meins „
Interact“ so. Und wir werden kompilieren und
können jetzt neue Eingaben hinzufügen. Und das sind Informationen, die
wir von
unserem Spielercharakter-Blueprint
an die Blaupause senden unserem Spielercharakter-Blueprint , mit der
wir interagieren. Also füge ich gerne eine Zeichenreferenz hinzu,
nur damit wir auf
Informationen von
dem Charakter zugreifen können , der mit dem Blueprint
interagiert hat , dass wir diesen Code ausführen. Also suchen wir nach Charakter, verwenden
die Objektreferenz
vom Zeichentyp. Ich nenne diesen
Charakter einfach. Natürlich in der Zukunft, wenn Sie
ihnen Informationen von
der Figur an die Blaupause senden möchten, mit der
sie interagiert. Sie könnten hier neue Eingaben hinzufügen. Jetzt haben wir also unsere
Funktion, die
immer dann ausgeführt wird , wenn unser Player mit einer Blaupause
interagiert, aber wir können auch einige
zusätzliche Funktionen hinzufügen. Also füge ich
einen hinzu. Und wir nennen das „Interaktion erlauben“. Und wir werden tatsächlich eine Ausgabe für diese
hinzufügen. Also fügen wir eine neue Ausgabe hinzu. Und wir setzen dies
auf einen booleschen Wert und nennen diesen
Rückgabewert einfach so. Dies gibt
uns jetzt eine neue Funktion , die wir überprüfen können, bevor wir
die Interact-Funktion ausführen , nur
um sicherzustellen, dass die Interaktion des Blueprints, mit dem
wir interagieren um sicherzustellen, dass die Interaktion des Blueprints , nur
um sicherzustellen, dass die Interaktion des Blueprints, mit dem
wir , aktiviert ist. Jetzt fügen wir
eine weitere Funktion hinzu. Also gehen wir zur Funktion hinzufügen und dann
nennen wir diesen Interaktionsnamen. Dann fügen wir eine neue Ausgabe hinzu. Und das wird
Name heißen. Und wir werden den Variablentyp
zwei Texte so
setzen und dann kompilieren wir. Auf diese Weise können wir jetzt einen benutzerdefinierten Namen in
jedem Blueprint
festlegen , den wir unserer
Interaktionsschnittstellenröhre hinzufügen. Und dann fügen wir
unserem Bildschirm
ein paar Texte hinzu, sodass unser
Spieler, wenn er sich ein Objekt
ansieht, den Namen anzeigt, den wir mit dieser Funktion angeben. Jetzt hat sich das alles hinzugefügt. Wir können es zusammenstellen und speichern. nun zum
Third-Person-Zeichen zurückzukehren, benötigen
wir einige Eingabeereignisse, um unseren
interaktiven Code
tatsächlich auszuführen. Jetzt können wir einfach
mit der rechten Maustaste klicken und nach
den temporären Eingabeereignissen suchen , die wir zuvor verwendet haben. Aber stattdessen gehen wir
tatsächlich zu unseren Projekteinstellungen und fügen
ordnungsgemäß eine Eingabe hinzu. Also gehen wir zu
Projekteinstellungen bearbeiten. Und hier wollen wir in
die Kategorie Input gehen. Und jetzt wollen wir
ein Action-Mapping hinzufügen. Also gehen wir zu Action Mappings. Wir klicken auf die Schaltfläche
Aktionszuordnung hinzufügen. Und wir werden das „interagieren“
so nennen. Dann klicken wir auf die
Tastatur und Sie können wählen, was auch immer Ihre Taste Ich drücke E,
damit es zu E geht. Nun, da das eingerichtet ist, kehren
wir zu
unserem Charakter zurück, klicken Sie mit der rechten Maustaste
und suchen nach interagieren. Und wir möchten, dass die
Interaktion unter den Aktionsereignissen hier unseren Input
hinzufügt. Jetzt fügen wir den Code hinzu
, der dem Objekt
, das
wir uns ansehen, tatsächlich mitteilt
, dass es
seine Interaktionsschnittstelle ausführt. Um das zu tun,
gehen wir den Ausguck hoch, treffen gelöst, und wir ziehen uns davon
zurück und brechen ihn auf. Und wir klicken hier auf den kleinen
Abwärtspfeil, um alle Variablen abzurufen , oder ziehen
den Hit Actor
heraus. Und wir werden nach Interact
suchen. Und wir wollen die
Interact-Nachricht hier. Jetzt
klicke ich
noch einmal auf diesen Pfeil , um ihn zu verkleinern. Und wir können das ein bisschen
zusammenbinden. Bevor wir das ausführen, werden
wir zunächst
überprüfen wollen, ob es sich um Violett handelt. Also werden wir tun ist gültig. Wir verbinden das
mit gedrückt. Und wir möchten auch überprüfen, ob die Interaktion zulässig
ist. Also ziehen wir uns wieder heraus
und suchen nach Zulassen. Und wir können das
Allow-Interaktions-Paar verwenden. Stecken Sie das in ist gültig. Und dann wollen wir einen Branch Node
betreiben. Also ziehen wir uns aus dem
Rückgabewert heraus und machen IF. Und dann, wenn unser Rückgabewert wahr ist und Interaktion
zulassen wahr ist, möchten
wir unser Interact ausführen damit wir es so anschließen können. Dann können wir für unsere
Charaktereingabe, weil wir uns in unserem
ThirdPersonCharacter befinden, wir uns in unserem
ThirdPersonCharacter befinden, einfach
herausziehen und
uns selbst machen. Und das wird
einen Verweis auf
dieses Zeichen über
die Interact-Funktion übergeben . Lasst uns jetzt die Dinge in Ordnung halten. All dies können wir tatsächlich
hervorheben. Beachten Sie es, nicht das Eingabeereignis, sondern nur den Code, den
wir mit der
rechten Maustaste hervorgehoben haben , und wir können die reduzierte Funktion
ausführen. Und ich nenne
das einfach „interagieren“ so. Wir können das einfach herbringen. Jetzt befindet sich der gesamte Code nur noch in unserer neuen
Interaktionsfunktion. Wenn wir also darauf doppelklicken, können
Sie das hier sehen. Wir können das einfach
hierher verschieben, also ist es ein bisschen aufgeräumt. Jetzt müssen wir einen Schauspieler
einrichten, dem
unser Charakter
tatsächlich interagieren kann. Es wird also kompiliert und
zum Inhaltsbrowser weitergeleitet, um
nur eine
neue Blueprint-Klasse zu erstellen. Wir stellen es auf einen Schauspieler ein. Ich nenne dieses Beispiel für eine
BP-Unterstrich-Interaktion . So wie das. Wir öffnen es und
fügen eine neue Komponente hinzu. Ich füge nur
eine Cube-Komponente hinzu. So wie das. Gibt uns nur etwas, das die
Linienverfolgung treffen kann. Sie können jedoch
ein Skelettnetz oder
eine statische Netzkomponente verwenden und eine benutzerdefinierte Messung verwenden,
wenn Sie möchten. Eine Sache, die Sie beachten sollten, ist, wenn Sie ein statisches Netz
oder ein Skelettnetz
verwenden, es muss eine
Kollision haben, denn wenn es nicht ausgerichtet ist, trifft die
Spur es nicht. Um zu überprüfen, ob Ihr statisches
Netz kollidiert, können
Sie einfach im Katalog-Browser zu seinem
Stack-Mesh wechseln. Was sind zum Beispiel Coupa? Wir können einfach auf den Browser Durchsuchen
und Inhalte klicken , um dorthin zu gelangen. Wir können das öffnen. Jetzt hier können Sie zur Show gehen
und dann zu der Stelle
gehen, an der einfache Kollision steht. Und wenn
du das übernimmst, du
hier einen hellgrünen Umriss bekommst , bedeutet das, dass es
dir gut geht. Es hat eine Kollision. Wenn Sie das nicht haben, können Sie hier zum
Kollisions-Dropdown
gehen
und diese
verschiedenen Optionen ausprobieren, um Ihrem Objekt eine Kollision
hinzuzufügen. Also verwenden wir diesen
Würfel, damit wir wissen, dass er eine einfache Kollision
hat,
also sind wir alle in Ordnung. Wir können zu unserem
Interaktionsbeispiel-Blueprint zurückkehren. Jetzt müssen wir hier
unsere Interaktionsschnittstelle hinzufügen. Also gehen wir zu den
Klasseneinstellungen, um die Schnittstellen zu implementieren,
und fügen eine neue hinzu. Wir werden nach Interaktion
suchen. Und wir wollen die
BP-Interaktionsschnittstelle. Und dann werden wir kompilieren. Wenn wir nun zu unserem Bedienfeld „
Mein Blueprint“ gehen auf das Drop-down-Menü
für Schnittstellen klicken.
Sie können sehen, dass
wir alle
unsere neuen
Oberflächenfunktionen haben , die wir
in unserer
Interaktionsoberfläche hinzufügen . Jetzt werden Sie vielleicht feststellen, dass dieser gelb ist, aber
diese sind großartig. Das liegt daran, dass
unser Interact eigentlich keinen Rückgabewert
hat,
wenn Sie sich erinnern. Wenn ich darauf klicke, wird einfach ein Event in
unserem Event Graph
erstellt. Aber wenn ich
zum Beispiel klicke oder Interaktion
zulasse, wenn du dich erinnerst dass das einen Rückgabewert hatte. Also öffnet es das
in einem Funktionseditor. Das ist also der Hauptunterschied oder Interaktion hat eigentlich
keinen Rückgabewert. Wenn Sie sich
innerhalb der Benutzeroberfläche erinnern unser Interact auswählen, sehen
Sie, dass es keine Ausgaben hat, aber unsere
beiden anderen haben Ausgaben. Und das ist der Grund, warum sie
verschiedene Farben haben. Und wenn wir auf „Interagieren“ klicken,
wird ein Ereignis erzeugt. Und wenn wir auf Interaktion
zulassen klicken, wird eine Funktion angezeigt. Um loszulegen,
wollen wir nur die Interaktion ermöglichen. Also nehmen wir
das einfach auf. In zukünftigen Projekten oder
Funktionen wie dieser ist dies jedoch praktisch, da Sie möglicherweise ein Objekt
haben, mit dem Sie interagieren können möchten , und
manchmal möchten Sie es deaktivieren. Sie können also einfach
einen anderen Wert zurückgeben , wenn Sie
die Interaktion deaktivieren möchten. Als Nächstes haben wir den
Interaktionsnamen, also doppelklicken wir einfach
darauf, um ihn zu öffnen. Jetzt können wir hier einfach manuell einen Namen
eingeben,
wenn wir möchten, aber ich werde ihn herausziehen und
zu einer Variablen hochstufen. Also werden wir eine Variable fördern. Ich rufe meinen Namen an
und hinterlasse ihn als Text. Dann werden wir kompilieren und
ich füge einfach einen Standardwert
wie default hinzu. Nennen. Ich kann das später nicht mehr
ändern. Also werden wir nur Komponenten erstellen. Jetzt können wir also tatsächlich
etwas Code zu unserer Event-Interaktion hinzufügen . Wir kehren also
zu unserem Ereignisdiagramm zurück. Und jetzt, da wir
auf „Interact“ doppelgeklickt haben, wurde
dies gerade zu unserem Ereignisdiagramm hinzugefügt. Aber wenn wir das nicht hätten, könnten
wir auch mit der rechten Maustaste auf die
Suche nach Event Interact klicken. Und
das könnten wir auch auf diese Weise schaffen. Dies ist das Ereignis, das
ausgeführt wird, wenn unser Charakter dieses Objekt
betrachtet und a-z-Seife
drückt. Im Moment ziehen wir einfach
heraus und drucken eine Zeichenfolge. Wir können zum Beispiel den
Namenswert string ausgeben und das einfach so einstecken. Das Gute
an dieser Veranstaltung ist, dass wir Zugang zu unserem
Charakter-Blueprint
haben. Vielleicht hattest du eine Komponente in
deinem Charakter-Blueprint , die ein Inventar
oder ein Gesundheitssystem war. Sie können hier einfach
aus dem Charakter herausziehen. Wir könnten
get-Komponente für Klasse verwenden. Und wir könnten
das nutzen, um zu überprüfen, ob
unser Charakter eine
bestimmte Komponente hat ? Wenn ja, können wir den Rückgabewert
verwenden , um auf eine der Variablen dieser
Komponente zuzugreifen. Oder wir könnten einfach
unseren Charakter kosten. So könnten wir
ThirdPersonCharacter kosten. Und dann könnten
wir Variablen oder
Funktionen von unserem Charakter erhalten. So könnten wir, sagen wir, die Interaktionsdistanz
ermitteln, wenn wir das aus
irgendeinem Grund wollten oder wenn Sie
Gesundheitsvariablen hinzufügen, sind. Was auch immer, Sie könnten dies
verwenden, um auf diese zuzugreifen. Aber im Moment werden wir
einfach unsere Druckzeichenfolge ausführen. Also werde ich
diese löschen und
dieses Backup so mit der
Druckzeichenfolge verbinden . Eines der Dinge, die wir jetzt machen wollen ist unsere Namensvariable. Wir wollen nur eine editierbare Instanz übernehmen
. Und wenn Sie Mitglied sind, bedeutet
das nur dass wir, wenn wir unseren
Würfel in unser Level ziehen, ändern können diesen Namen für jeden
Würfel ändern können, den wir hineinziehen. Jetzt
ist unser Interaktionssystem also ziemlich eingerichtet. Aber ich wollte
in einem HUD hinzufügen, dass wir den Interaktionsnamen
des Schauspielers angeben Interaktionsnamen
des Schauspielers wenn unser Spieler diesen Schauspieler
ansieht. Um das zu tun, kehren
wir hier einfach
zum Third-Person-Ordner zurück , dann zu Blueprints
und erstellen ein neues HUD-Widget. Also klicken wir mit der rechten Maustaste und
gehen zur Benutzeroberfläche. Wir machen einen Widget-Blueprint. Ich wähle „Widget
verwenden“. Und wir nennen das BP
Underscore HUD, so. Und wir werden es öffnen. Nun
, weil dies unser Haupt-HUD ist. Wir werden
ein Leinwand-Panels hinzufügen. Suchen Sie also einfach nach
Canvas und wir fügen das hier zu unserer Hierarchie hinzu. Dann möchte ich, dass ein Text tatsächlich den Namen der
Interaktion anzeigt. Also suchen wir auch hier nach
Text. Und das
fügen wir unserem Leinwand-Panel hinzu. Und wir werden es haben,
damit es in der Mitte ist. Also werde ich
den Anker ändern , damit der Text
so zentriert wird. Und Sie können sehen, dass unsere
Position durcheinander ist. Was wir also tun werden, ist
dies auf 000 so zu wählen. Jetzt können Sie also sehen,
wo zentriert ist. Ich möchte eigentlich, dass sich
die Mitte des Textes in der
Mitte des Textes befindet. Was wir also
tun werden, ist Alignment zu
machen, 0,50.5 so zu machen. Sie können also sehen, dass der
Text jetzt zentriert ist. Jetzt möchte ich, dass mein Text etwas höher ist, also halte ich die
Umschalttaste gedrückt und ziehe nach oben. Und das wird es
mir tatsächlich ermöglichen, unsere Texte und
eine Richtung zu verschieben und sie auf
diese Richtung zu fixieren , damit Sie
sehen können, dass ich sie nach oben verschieben kann. Sag hier. Jetzt ändere ich die Schrift, um
sie ein bisschen kleiner zu machen. Also lassen wir 20 sagen. Und wir werden kompilieren. Jetzt können Sie
so lange ausgeben, wie Sie
möchten , damit
der Text gut aussieht. Ich mache das nur schnell,
damit wir es zum Laufen bringen können. Also müssen wir zuerst
unsere Texte verstecken , wenn wir uns nicht
wirklich ein Objekt ansehen. Was wir also
tun werden, ist die Sichtbarkeit hier
zu nutzen. Wir werden eine neue Bindung
erstellen. Also machen wir oder klicken auf
Binden und erstellen eine Bindung. das geöffnet ist,
müssen wir festlegen, wann wir diesen Text
sichtbar und dann ausgeblendet machen
sollen. Um das zu tun, benötigen
wir einige Variablen von unserem
ThirdPersonCharacter. Wir brauchen also
einen Hinweis darauf. Also gehen wir zunächst
zum Event Graph. Wir werden diesen
Knoten und diesen Knoten hier löschen. Wir holen uns
den Spielercharakter. Und davon wollen wir überprüfen
, ob es gültig ist? Also ist gültig. Und wir werden
das verbinden, um zu konstruieren. Dann ziehen wir uns wieder heraus und machen Cast to ThirdPersonCharacter. Wir können dann
die Ausgabe davon verwenden , um sie als Variable zu
speichern. Also werden wir variable fördern. Ich nenne
meinen Charakter einfach so. Dann werde
ich diese Knoten hervorheben. Und wir klicken mit der rechten Maustaste und klappen einfach
zusammen, um zu funktionieren. Und wir nennen das
Setup-Referenzen so und
halten die Dinge tatsächlich schön und ordentlich. Und
das können wir auch später wiederverwenden. Jetzt sind wir bereit,
zu unserer Funktion „Sichtbarkeit abrufen“ zurückzukehren . Und wir wollen
unseren Charakter bekommen. Und wir wollen nur
sicherstellen, dass dies
gültig ist , bevor wir Code ausführen. Es wird das bis hier verbinden. Und wenn es nicht gültig ist,
können wir
unsere Setup-Referenzen tatsächlich so ausführen . Und wir verwenden diesen
Rückgabeknoten, stecken Sie ihn hier ein. Wir setzen das einfach auf versteckt. Wenn unser Charakter also nicht
gültig ist, wenn dies ausgeführt wird, wird er versuchen, die
Zeichenvariable erneut zu setzen. Wenn die Zeichenvariable nun
gültig ist , wollen wir sie erneut abrufen. Dann wollen wir uns
herausziehen und uns das Treffergebnis
ansehen. Wir würden uns hinziehen
und eine Pause machen. Wir werden diesen Knoten erweitern
und wir wollen Hit Actor. Wir tun es ist gültig. Und wenn es gültig ist, wird
es wieder kleiner. Wir haben also etwas mehr Platz, das so aufzuräumen. Wenn das also gültig ist,
wollen wir überprüfen, ob
es interagierbar ist? Also ziehen wir uns in die Länge und
erlauben eine solche Interaktion. Und wenn das stimmt, dann wollen wir unsere
Sichtbarkeit auf sichtbar setzen. Also kopieren wir das und fügen es hier ein. Also das auch sichtbar. Wir schließen es so an. Wenn Sie also fertig sind,
sollte es ein bisschen so aussehen. Jetzt gibt es
tatsächlich ein paar von einem oder mehreren Knoten, die wir brauchen. Wir
kopieren also unseren Rückgabewert, fügen ihn hier ein und
setzen ihn auf hidden. Wenn „
Interaktion zulassen“ falsch ist, möchten
wir unsere
Texte ausblenden, also tun wir das. Und auch wenn der
Erfolgsdarsteller nicht gültig ist, wollen
wir auch unsere Texte verstecken, also schließen wir das so ein. Das umfasst also die Einstellung der Sichtbarkeit
unserer Texte, aber wir
möchten auch den Inhalt
des Interaktionsnamens ändern . Was wir also tun werden,
ist, dass wir diesen Code tatsächlich kopieren, weil
es denselben geben wird. Wir können also all
dies und das auch kopieren. Und so wird sichergestellt, dass alle
hier hervorgehobenen Knoten Control C ausführen. Dann gehen wir zum Designer wählen hier unseren Text aus. Und wir wollen zum Text gehen und binden und dann eine Bindung erstellen. Und hier werden
wir diese Notizen einfügen. Und ich werde den
Anfangsknoten verbinden ,
bis r so gültig ist. Jetzt müssen wir etwas Sex zurückgeben. Also würde dieser hier
einfach reinstecken. Und wir wollen dafür keine Texte
zurückgeben, also lassen wir das einfach leer. Wir kopieren das und
fügen es hier ein. Sobald wir wissen, dass
Interaktion zulassen wahr ist, möchten
wir den Namen
der Interaktion tatsächlich erhalten. Also ziehen wir uns aus dem Namen der
reaktor-do-Interaktion heraus. Und wir verbinden
das mit true. Wenn die
Interaktion jetzt falsch ist, möchten
wir nur
einen leeren Wert zurückgeben. Lass uns das machen. Dann kopieren wir
das und fügen es erneut ein, fügen es hier ein und verbinden name mit
dem Rückgabewert
so. Dann können wir kompilieren. Und wenn das erledigt ist, sollte
es ein bisschen so aussehen. Das Letzte, was Sie tun
müssen, ist unseren schwer zu spielenden Bildschirm
hinzuzufügen. Um das zu tun, gehen wir
zum ThirdPersonCharacter
Blueprint, diesem Ereignisdiagramm. Wir werden dies
zu unserem Begin Play hinzufügen. Wir klicken mit der rechten Maustaste und
machen Widget erstellen. Verbinde das mit unseren Notizen. Und wenn wir Player besitzen,
machen wir einfach Control, holen uns den
Player-Controller. So wie das. Wir müssen die Klasse auf den Hub setzen,
den wir gerade erstellt haben. Also BP HUD. Jetzt ist es
immer eine gute Idee, diesen Rückgabewert
zu speichern, wenn Sie Ihr Haupt-HUD erstellen. Also ziehen wir uns heraus
und wir werden
das wahrscheinlich zu einer Variablen machen,
wir nennen dieses HUD. Und das ist genau das, wenn wir es später verwenden
wollen. Und dann von der Ausgabe
dieses gesetzten Knotens, oder suchen Sie einfach so
nach Add to Viewport. Und das wird unser Widget tatsächlich
zum Bildschirm unseres Spielers
hinzufügen . Jetzt sind wir bereit
, das zu testen. Wir kompilieren und
gehen zu unserer Karte. Wir möchten dem Level einige unserer
Interaktionsbeispiele
hinzufügen . Also füge ich hier einen hinzu
und einen hier drüben. Und wenn Sie sich erinnern, weil
wir unseren Namen in unserem Beispiel für die
Interaktion auf Instanz
editierbar gesetzt haben, haben
wir diesen Wert hier. Also für diesen
werde ich das so einstellen,
dass es Schwert sagt. Für diesen. Stellen Sie es auf so etwas
wie eine Pfeife ein. Jetzt können wir auf „Spielen“ klicken. Und wenn wir
hier zu diesem Würfel rennen , können Sie sehen, dass er das Schwert
ausdruckt. Und wenn ich C drücke, können Sie sehen,
dass es den Namen
unseres Beispiels für die
Schwert-Interaktion ausdruckt , und es wird dasselbe mit dem Beispiel
var pi hier tun. Jetzt könnten wir
etwas mehr Zeit damit verbringen unsere HOD-Texte
aufzuräumen x, es ist ein bisschen schwer zu erkennen. Wenn wir also aussteigen und unsere Haube
öffnen, können
wir hier unsere Texte
in der Hierarchie auswählen. Und zuerst konnten wir es
zentrieren, damit unser Text schön zentriert ist und wir können auch einen Hintergrund
hinzufügen. Also, was ich mache, ist mit der
rechten Maustaste zu rappen, und wir machen Rap mit einer Grenze. Und dann wählen wir für unseren
Rand
das aus und
legen die Größe auf den Inhalt fest, sodass die Größe auf
die Größe unseres Textes angepasst wird. Wir können die Farbe ändern, also ändere ich die
Pinselfarbe in Grau. Es ist also nur ein bisschen
einfacher, so zu sehen. Und wir könnten auch etwas Padding
hinzufügen. Also wählen wir unseren Text aus
und legen den Abstand fest, scheinbar acht. Es gibt uns also ein bisschen
Polsterung an den Rändern. Und jetzt haben wir
ein neues Widget hinzugefügt. Wir müssen tatsächlich auch
seine Sichtbarkeit festlegen. Und wir können unsere
Sichtbarkeitsfunktion
, die wir für unsere Texte verwenden, wiederverwenden . Also scrollen wir nach unten und gehen hier zur
Sichtbarkeitsoption. Wir klicken einfach auf Binden
und Sie können sehen, dass unsere Sichtbarkeitsfunktion von früher darin besteht, dass wir sie festlegen können. Und jetzt ändert unser
Textrahmen hier ihre Sichtbarkeit, wenn wir uns ein Objekt
ansehen, mit dem
wir interagieren können. Also können wir das testen. Wir kompilieren und gehen
zurück und klicken auf „Spielen“. Und jetzt können wir sehen unser Text zentriert ist
und ein bisschen einfacher zu erkennen ist, weil wir
unsere graue Box haben , wenn wir
nicht auf etwas schauen.
Sie können sehen, dass unsere Boxen zusammen mit unserem Text
versteckt sind. Was wir derzeit
tun, wenn wir eines unserer
Interaktionsbeispiele presi und auswählen , ist das Ausdrucken eines Namens. Aber das
ist natürlich nur ein Beispiel. Du könntest das ändern
, was du willst. So können wir hier zum Beispiel zu unserer
Interaktion gehen und den Schauspieler „Zerstören“ sagen lassen
, wenn wir mit ihr interagieren. Also könnten wir Destroy Actor hinzufügen. Wenn wir
es jetzt kompilieren und auf Play klicken und ich jetzt mit
den Würfeln interagiere, können
Sie sehen, dass
beide zerstört werden. Das war's also für diese Lektion. Hoffentlich
verstehen Sie jetzt, wie wir
Blueprint Interfaces verwenden können , um
Code in anderen Blueprints auszuführen, z.
B. wenn wir ein Interaktionssystem
benötigen. Und in unseren nächsten Lektionen werden
wir diesem Projekt weitere
Gameplay-Funktionen
hinzufügen .
54. Gameplay-Systeme (Schaden): Hallo zusammen. In dieser Lektion werden
wir ein Gesundheitssystem
einrichten und wir
werden auch das Schadenssystem verwenden , das in Unreal Engine eingebaut ist. Zunächst könnten
wir also einfach
unsere Gesundheitsvariablen
und Funktionen
direkt zu unserem
Third-Person-Charakter hinzufügen unsere Gesundheitsvariablen
und Funktionen
direkt zu unserem . Stattdessen werden wir eine Gesundheitskomponente
erstellen. Und der Grund, warum wir
das tun werden, ist
, dass wir es und andere
Blaupausen
wiederverwenden können , wenn wir das später
wollen . Also lass uns anfangen. Wir klicken
in unserem Inhaltsbrowser auf die Schaltfläche Hinzufügen, gehen zur Blueprint-Klasse und wählen eine
Akteurkomponente aus. Wir wählen eine Act-Komponente anstatt eine
Komponente zu sehen, weil unsere Gesundheitskomponente nicht auf der Welt existieren
muss. Es braucht nur Code, also verwenden wir die aktive Komponente. Ich werde
meine BP Underscore
Health Komponente so nennen . Jetzt öffnen wir das und ich ziehe meins so
in die obere Leiste. Wir beginnen also damit,
einige Gesundheitsvariablen zu erstellen. Also füge ich eine neue Variable hinzu. Ich nenne diese
aktuelle Gesundheit so. Und ich setze
meine auf eine Ganzzahl. Du könntest einen Float gebrauchen,
wenn du willst. Persönlich bevorzuge ich für die Gesundheit
ganze Zahlen, weil
es sich um eine ganze Zahl handelt. Wir beginnen also mit aktuellen Gesundheit und das
wird eine ganze Zahl sein. Dann
erstellen wir eine weitere. Dies wird
als Start-Gesundheit bezeichnet. Und wir wollen noch einen, und das wird
als maximale Gesundheit bezeichnet. Schließlich wollen wir
eine weitere Variable namens und nehmen Schaden. Und wir werden das in einen
Brillanten
ändern , weil das wahr oder falsch ist. Dann nehmen
wir für diese drei Variablen eine editierbare Instanz. Also machen wir das jetzt einfach. Das bedeutet nur, dass, wenn wir
unsere Gesundheitskomponente
zu einem anderen Blueprint hinzufügen , wenn wir die
Gesundheitskomponente in
ihrem Komponenten-Panel auswählen , diese Werte bearbeiten
können. Also werden wir jetzt kompilieren und einen Startwert
festlegen. Um mit Gesundheit zu beginnen, setze
ich das auf 100. Für maximale Gesundheit setzen Sie
dies ebenfalls auf 100 und können Schaden
nehmen und können Schaden
nehmen,
und dann kompilieren. Als nächstes werden wir einige Funktionen
erstellen, die tatsächlich
unsere Gesundheitsvariable ändern werden. Also fügen wir eine neue
Funktion hinzu und nennen dies Gesundheit erhöhen. So wie das. Wir fügen einen neuen Input hinzu und nennen diesen Erhöhungsbetrag. Und wir werden dies
auf eine solche Ganzzahl setzen. Und dann werden wir kompilieren. Das erste, was wir tun
wollen, ist sicherzustellen, dass unser aktueller Gesundheitszustand nicht über der maximalen Gesundheit liegt. Also bekommen wir unsere aktuelle
Gesundheit und prüfen, ob
das weniger als r max selbst ist ? Also bekommen wir Karten, Gesundheit. Und wir wollen
diesen Code nur ausführen ,
wenn er stimmt. Also wird es das hier nach unten verschieben
und so zu unserem
Eingangsknoten
hinzufügen. Als nächstes wollen wir überprüfen, ob der Betrag hinzugefügt
wird, der erhöhte Betrag
zu unserer aktuellen Gesundheit macht sie über r max Gesundheit. Um das zu tun, erhalten wir
aktuelle Gesundheit und fügen unseren erhöhten Berg hinzu, jetzt
könnten wir einfach von hier wegziehen
und das so einstecken. Oder wir ziehen uns von hier aus in die Länge
und bekommen einen höheren Betrag. Und Sie können sehen, dass wir diesen Wert
tatsächlich von
unserem Eingabeknoten erhalten können ,
ohne eine Variable erstellen zu müssen. Es lässt uns das einfach hier verwenden. Und wenn das nicht auftaucht, stellen Sie
einfach sicher, dass Sie den Eingang teilen können und in der Lage sein
sollten, ihn zu finden. Als nächstes wollen wir
überprüfen, ob dieser Wert
kleiner oder gleich max out ist . Es wird also maximale Gesundheit bekommen. Und wenn ja, können wir diesen Betrag
auf unsere aktuelle Gesundheit festlegen. Also machen wir das und
dann können wir diese
Node-Pasteten hier kopieren und einfügen. Wir stellen die aktuelle Gesundheit ein. Das. Dann wenn falsch, was
bedeutet, dass der Anstieg und die aktuellen
Gesundheitswerte größer als r max sein werden. Wie oft wollen wir das einfach
kopieren und einfügen und sagen, ich helfe dabei, das zu maximieren. Wir könnten
hier eine Umleitungsnotiz hinzufügen, nur die Dinge aufgeräumt halten. Also wenn du fertig bist, sollte es so aussehen. Als nächstes wollen wir also eine Funktion zur
Verringerung der Gesundheit. Also
suche ich danach, oder ich erstelle eine neue
Funktion und nenne
das Grease, so. Und wieder werden
wir einen Input hinzufügen,
also werde ich mein
Fenster hier vergrößern. Warum der neue Input, und wir werden diesen Verringerungsbetrag
nennen. Und wir setzen dies auch auf
eine Ganzzahl. Und dann werden wir kompilieren. Jetzt wollen wir
überprüfen, ob unser aktueller
Gesundheitszustand größer als 0 ist ? Die aktuelle Gesundheit
ist also größer als 0. Und wenn ja, dann wird es zulassen oder verringern, dass
die Gesundheit so läuft. Als nächstes wollen wir überprüfen, ob
unsere aktuelle Gesundheit minus r
Abnahme größer als 0 ist unsere aktuelle Gesundheit minus r . Wir bekommen also die aktuelle Gesundheit und wollen
minus oder subtrahieren. Wir wollen
unseren Rückgang subtrahieren. Jetzt wieder, Wir könnten
das so
einstecken oder wir können den Betrag für
sexuelle Abnahmen herausziehen und das können wir hier hinzufügen. Und dann wollen wir überprüfen,
ist das größer als 0? Wenn dies der Fall ist, können wir zulassen , dass diese Menge
gegenüber unserer aktuellen Gesundheit verringert wird. Also machen wir das. Wir kopieren das,
fügen es hier ein. Wir stellen die aktuelle Gesundheit ein. Und wenn die Menge kleiner als 0
ist, wollen
wir einfach
unseren aktuellen Gesundheitszustand auf
0 setzen, weil wir nicht wollen, dass
unsere Gesundheit unter 0 sinkt. Also wird es hier nur eine Notiz hinzufügen, einfach das aufräumen,
und wenn du fertig bist, sollte
es so aussehen. Eine Sache, die ich vergessen habe
hinzuzufügen, ist, dass wir überprüfen wollen, ob Schaden nehmen
können, bevor
wir die Gesundheit erhöhen. Also werden wir das weiter rausziehen, was
unsere Dose Schaden nehmen wird. Und wenn das stimmt, dann werden wir
diese Funktion zulassen Trump. Also wird es das einfach hier
einstecken und hier rein. Jetzt werden wir auch einige
Event-Dispatcher
hinzufügen , die
hilfreich sein können , denn wenn wir
unsere Gesundheitskomponente zu
verschiedenen Blaupausen hinzufügen , möchten
wir vielleicht, dass in einem etwas anderes passiert
Blaupause als eine andere , wenn unsere Gesundheit steigt oder abnimmt, wenn die
Gesundheit 0 erreicht. Wir beginnen also damit,
einen Event-Dispatcher zu erstellen. Und ich nenne das nur „
Gesundheitserhöhung“. So wie das. Wir werden eine weitere erstellen, die zur Verringerung der Gesundheit
aufgerufen wird. Dann wollen wir auf Gesundheit 0. So wie das. Wir könnten einige Inputs hinzufügen, um unsere eigene Gesundheit zu
erhöhen und zu verringern. Also gehen wir hier
zum Detail-Panel
und fügen eine neue Eingabe hinzu. Ich nenne
diesen Betrag für die Erhöhung. Und wir setzen es auf eine Ganzzahl. Und wir werden dasselbe
für einen ungesunden Rückgang tun. Also fügen wir eine neue Eingabe hinzu und
nennen dies die Falte. Richtig buchstabieren, Menge
verringern. Da haben wir's. Und
das setzen wir auch auf eine Ganzzahl. Also innerhalb oder verringern
Sie, wie die Funktion wir unsere eigene
Gesundheit ausführen
können, hier abnehmen. Also machen wir das cool. Stecken Sie das hier ein, und dann
wollen wir einen verringerten Betrag erhalten. Also kopiere ich das
einfach und füge und stecke es hier ein. Dann
wollen wir für Gesundheit 0 die Nicht-Gesundheit 0. Also nennen wir das,
steck das hier ein. Und dafür haben wir keinen Eingang hinzugefügt
, sodass wir nichts anderes
anschließen müssen. Und dann gehen wir zu
unserer Erhöhung der Gesundheit. Und hier wollen wir
ungesunde Zunahme. Das schließen wir hier ein. Und wir werden den erhöhten
Betrag so bekommen. Wir werden das
auch hier oben einbinden , denn wenn wir unsere maximale Gesundheit
einstellen, werden
wir
sie auch erhöhen. Und das wird
eine weitere Funktion schaffen. Und ich nenne
das einfach Startgesundheit anwenden. Dann
werden wir hier unsere aktuelle Gesundheit überprüfen und
dies auf unsere Startgesundheit einstellen. Dann führen wir diese Funktion in unserem Event Graph auf Begin Play aus. Also schnappen wir uns das, was
für die
Startgesundheit gilt , und schließen es
hier so an. Und dann kompilieren wir das
und speichern es. Jetzt können wir weitermachen und unserem Charakter
unsere Gesundheitskomponente
hinzufügen . Also gehen wir zum
ThirdPersonCharacter Blueprint über. Dann mache ich dieses Fenster so ein
bisschen größer. Und wir werden eine neue Komponente
hinzufügen oder nach Gesundheit suchen. Wir fügen die BP-Gesundheitskomponente hinzu
und kompilieren dann. Und wenn unsere Gesundheitskomponenten im Detailbereich
ausgewählt sind, können
Sie sehen, dass wir unsere
Startgesundheit oder maximale
Gesundheit festlegen können und ob
die Gesundheitskomponente Schaden erleiden
kann oder nicht . Wie Sie sehen können, ist unsere
aktuelle Gesundheit auf 0 gesetzt, aber keine Sorge,
das wird
auf 100 gesetzt oder wo auch immer
Sie anfangen. Der Gesundheitswert ist, wenn
das Spiel beginnt. Und wir können leicht auf
diese Variablen und
unsere Funktionen zugreifen , indem wir sie einfach hineinziehen oder Komponenten herausziehen Wir können
zum Beispiel aktuell werden , wodurch wir darauf zugreifen können
Variable können wir unsere Funktion aufrufen, um die
Gesundheit zu erhöhen , die
unsere Funktionen ausführt. Und wir können es auch, wenn wir Ereignisse
an diesen
Event-Dispatcher binden wollten . Also haben wir geschaffen, damit
wir ein Zeichen setzen konnten, das
wir zum Beispiel auf Gesundheit
erhöhen könnten. Und das gibt uns eine Veranstaltung und
das Kaufereignis dafür. Und das läuft immer dann, wenn
unsere Gesundheit steigt. Und es gibt uns auch hier den
Erhöhungsbetrag wenn wir unser
Bind-Event oben ausgeführt haben. Aber im Moment werden wir diese löschen. Weiter. Wir müssen
unser Schadensereignis
in unserem Third-Person-Charakter einrichten . das zu tun, klicken wir mit der rechten Maustaste und suchen nach Schäden. Nutzt Ereignis und Schaden. Und wir werden uns
unsere Gesundheitskomponente schnappen und unsere Gesundheit um den Schadensbetrag
verringern ,
wenn dieses Ereignis ausgeführt wird. Also ziehen wir uns in die Länge und
suchen nach geringerer Gesundheit. Und wir verbinden das
mit dem Schaden. Dann wollen wir Schaden und schließen
es an, um die Menge zu verringern. Und Sie werden sehen, dass es
uns diesen Knoten gibt der den Float
in eine Ganzzahl
umwandelt. Dadurch wird der Wert abgerundet. Wenn
der Schaden zum Beispiel 1,5 wäre, würde
dies ihn auf eins abrunden. Aber wir könnten rausziehen und
runden und einen runden Knoten verwenden. Und dadurch wird
es tatsächlich auf die nächste ganze Zahl gerundet. Wenn es also 1,5 ist, glaube
ich, wird es auf zwei
aufgerundet. Wenn es sagen wir 1.2 wäre, würde es auf eins
abgerundet. Also verwenden wir
dafür around node, nur weil es ein bisschen intuitiver ist. Und jetzt, wann immer
eine andere Blaupause
das Ereignis Schaden anwenden
für unseren Charakter aufruft , wird
dieses Ereignis ausgeführt und unsere Gesundheit und
unsere Gesundheitskomponente
verringern. Jetzt richten wir in
unserem Level
eine Schadenszone ein, in der unser
Charakter
tatsächlich Gesundheit verliert, wenn
unser Charakter sie betritt . Also wird es das kompilieren. Aber zuerst fügen
wir hier einfach eine Druckzeichenfolge hinzu, da wir derzeit
keine Gesundheitsleiste
haben. Also fügen wir einfach eine Druckzeichenfolge hinzu. Und jedes Mal, wenn wir Schaden erleiden, wollen
wir nur
unsere aktuelle Gesundheit erhalten. Wir erhalten also aktuelle Gesundheit drucken den
aktuellen Gesundheitswert aus ,
damit wir genau wissen, wie
viel Gesundheit
wir haben, wenn wir Schaden nehmen . Ich werde dafür sorgen, dass der Text etwas länger
bleibt. Also setze ich die
Dauer einfach so auf fünf. Und dann werden wir kompilieren. Jetzt gehen wir
zum Content Browser. Wir werden
eine neue Blaupause hinzufügen,
den Blueprint-Klassenakteur . Und ich scrolle nach unten und
wir nennen diese BP-Unterstrich-Schadenszone. So wie das. Wir ziehen das in die
Ebene und öffnen es. Dazu fügen wir
einfach eine Box-Kollision damit wir wissen, wann
etwas sie überlappt. Also fügen wir eine Box-Kollision hinzu. Ich ziehe es ein bisschen nach oben, damit es bodenbündig ist. Dann gehen wir
zum Event Graph und löschen den Beginn
des Spiels und die Technik. Und wir werden den
Event-Schauspieler verwenden, der begonnen hat, sich zu überschneiden. Und wir werden uns
von anderen Schauspielern
zurückziehen, was
den Schaden anwenden nennen wird. Dies ist das Ereignis,
das tatsächlich
den Schaden in unserem
Third-Person-Charakter nennt den Schaden in unserem
Third-Person-Charakter Wir können den Schadensbetrag festlegen. Also werde ich es
ihm so sagen. Jetzt können wir
einen Event-Anstifter bereitstellen, und dies ist ein Spieler-Controller. Wir werden dies nicht nur
für die beschädigte Zone verwenden weil es keinen Spieler gibt
, der diesen Schaden verursacht. Es ist nur ein
Umwelteffekt. Dann haben wir grober beschädigt. Und dafür werden wir uns
hinziehen und uns selbst tun. Und das erlaubt uns im Grunde
nur zu wissen, welcher Schauspieler
den Schaden tatsächlich an unserem Charakter anrichtet
oder nicht, welchen Schaden du sehen
kannst. Das haben wir auch mit dem Stift
angezettelt. Als nächstes haben wir die Schadensklasse. Das ist jetzt ein
bisschen weiter fortgeschritten. Ich werde in dieser Lektion
nicht darauf eingehen, aber im Grunde können Sie
neue Schadensarten erstellen und Variablen
hinzufügen. Sie könnten zum Beispiel
eine Brandschadenklasse
für die Eisschadenklasse haben , und dann können Sie
diese Klasse hier und
dann auf der Empfängerseite festlegen . Bei jedem Event-Schaden könnten
Sie sich also von der Schadensart zurückziehen
und tatsächlich diese Variablen
erhalten, zum Beispiel Eisschaden oder
Feuerschaden. Aber im Moment belassen wir das einfach als EMT-Klasse. Aber im Moment
ist eine letzte Sache, die
wir tun werden, bevor er sagt, die Box-Komponenten auszuwählen und nach versteckt zu
suchen. Und wir wollen das
versteckte Endspiel deaktivieren nur damit es
die Zone sehen oder beschädigen kann. Jetzt sind wir bereit
, das zu testen. Wir werden Head to
unsere Third-Person-Map zusammenstellen. Und ich werde die
Schadenszone einfach ein bisschen vergrößern und sie hierher
verschieben. Und jetzt, wenn wir auf „Spielen“ klicken, können
wir in die
Schadensbox rennen und ihr seht, Gesundheit jedes
Mal, wenn wir diese Box tatsächlich betreten, um zehn abnimmt dass die
Gesundheit jedes
Mal, wenn wir diese Box tatsächlich betreten, um zehn abnimmt. So können wir also im Grunde
ein Gesundheitssystem einrichten und
diese
Hauslisten auch in anderen
Blaupausen verwenden . Jetzt wollte ich dir
ein kurzes Beispiel geben, wie wir diese
Bind-Events in unserem Charakter einrichten
können. Sagen wir zum Beispiel, jedes Mal, wenn dein
Charakter Schaden erlitten hat, wolltest
du
einen gewachsenen Sound spielen. Das könntest du mit den Bind-Events
ganz einfach machen. Also gehen wir zum
ThirdPersonCharacter, finden den Anfang und spielen sie ab. Am Ende von hier
können wir einen neuen Code hinzufügen. Damit unsere Bind-Ereignisse ausgeführt werden
können, müssen wir sie tatsächlich binden. Also werden wir
das bei Begin Play machen. Und wir werden uns
unsere Gesundheitskomponente schnappen sich in die Länge ziehen und nach
Bindung suchen , wenn die Gesundheit abnimmt. Und wir wollen diesen einen Treffer. diese Weise wird
dies mit unserem Viewport verbunden. Und jetzt brauchen wir ein
Ereignis, das
wirklich cool wird, wenn
meine Gesundheit abnimmt. Also ziehen wir uns in die Länge
und wir machen Brauch. Und wir wollen Kunden hinzufügen. Dann nennen wir das
die Falte, so. Jetzt wird dieses Ereignis jedes
Mal ausgeführt, wenn die Gesundheit abnimmt,
und wir können einfach
einen Sound hinzufügen , damit wir die Tonposition
abspielen können. Ich werde es an meinem
Charakterstandort machen, also wird es einfach
wieder an den Ort zurückkehren. Und wir können dies
auf einen Sound einstellen, den ich nicht wie gewachsene
oder unbekannte Sounds
habe, also wählen wir zum Beispiel einfach
kompiliert aus. Wir werden einfach kompilieren. Wenn wir jetzt auf „Spielen“ klicken, stoßen
wir auf eine beschädigte Box. Wir bekommen tatsächlich das Soundspiel. Und es wird jedes
Mal abgespielt, wenn wir Schaden nehmen. Abspielen eines Sounds
ist nur ein Beispiel. Sie könnten
Partikeleffekte haben. Sie könnten völlig anderen
Code ganz nach Ihren Wünschen ausführen . So
würden Sie Code in
Ihrem Charakter oder
einer anderen Blaupause ausführen Ihrem Charakter oder
einer anderen Blaupause , die Sie mit der
Gesundheitskomponente verwenden. Wenn die Gesundheit abnimmt, können
wir genau
dasselbe mit Erhöhung der
Gesundheit und auch
mit der Gesundheit 0 tun. Was wir jetzt tun
werden, ist eine
Gesundheitskomponente hinzuzufügen unserem Würfel- oder
Interaktionsbeispiel, das wir
in unserer letzten Lektion erstellt haben, eine
Gesundheitskomponente hinzuzufügen. Also gehen wir zu dieser
Blaupause und öffnen sie. Ich füge hier die
Gesundheitskomponente hinzu. Und genau wie wir es zuvor
in unserem Charakter-Blueprint getan
haben, werden wir
den Apply oder sorry hinzufügen, Es wäre jeder Schaden, das Ereignis irgendein Damage-Knoten. Wir schnappen uns unsere
Gesundheitskomponente. Von dort aus. Wir wollen die Gesundheit verringern. Wir ziehen uns aus
Dynamesh heraus und
suchen einfach nach der Umgebung. Und wir verwenden den runden Knoten. Stecken Sie das ein, um die Menge zu verringern,
und verbinden Sie es hier. Einfach so. Jetzt kann unser
Würfel Schaden erleiden, genau wie unser Charakter. Und was wir tun werden, ist, dass wir unsere aktuelle Gesundheit wieder
bekommen wie wir es in der Figur getan haben. Und wir fügen eine Druckzeichenfolge hinzu. Ich
füge hier einfach ein Append hinzu. Also machen wir append
und wir setzen einen Würfel. Gesundheit ist so. Und dann schließen wir unsere Gesundheit hier
ein, damit wir
den Unterschied zwischen
unserer Charaktergesundheit
und unserer Würfelgesundheit kennen den Unterschied zwischen
unserer Charaktergesundheit
und unserer , wenn sie
auf dem Bildschirm ausgegeben wird. Einfach so hat r
Cubed jetzt Gesundheit. Wir können diese
Bind-Ereignisse verwenden, wenn wir wollten, wie wir
es gerade in unserem Charakter getan haben. Wir können also binden, Gesundheit verringern und
wir könnten etwas völlig anderes in unserem Würfel passieren lassen,
wenn seine Gesundheit verringert wird. Das ist also die Macht
der Komponenten. Sie können sie zu
anderen Blaupausen hinzufügen. Und vorausgesetzt, Sie haben
sie modular eingerichtet, können Sie sie einfach hinzufügen und
sie sehr schnell arbeiten lassen. Anstatt für
jeden Blueprint, den
Sie Gesundheit haben möchten,
neue Gesundheitsvariablen erstellen jeden Blueprint, den
Sie Gesundheit haben möchten,
neue Gesundheitsvariablen zu müssen, und dann neue Funktionen, um diese Variablen zu
beeinflussen. Wir können einfach eine Komponente hinzufügen und
das alles sofort erledigen. Als nächstes werden wir
also
ein Projektil aufstellen , das unser
Charakter in die Richtung
abfeuern wird , in
die wir schauen, wenn ich bei diesem Projekt auf etwas treffe , das diesen Schadensknoten hat. Wir werden dem Objekt etwas
Schaden zufügen. Um das zu tun, gehen wir
zum Inhaltsbrowser. Wir klicken auf Hinzufügen und erstellen
eine neue Blueprint-Klasse. Ich wähle „Schauspieler“ aus. Und wir scrollen nach
unten und nennen dieses
BP-Unterstrich-Projektil so. Und wir werden es öffnen. Das erste, was wir
hinzufügen werden, ist eine Kugelkollision, und dies wird tatsächlich sein was unsere
Projektileinstellung
erkennt. Also wird es hinzufügen, nach einer Kugel
suchen, und wir werden diese
faire Kollision verwenden. Ich werde
es tatsächlich auswählen und auf das D ziehen, um die standardmäßig gesehene Route zu sehen. Und das wird uns
die Wurzel unserer Blaupause fürchten lassen. Als Nächstes möchten wir eine neue Komponente
hinzufügen. Ich füge eine Kugel hinzu
und sprach richtig. Da haben wir's, Sphere. Und
genau das
werden die Spieler während des Spiels sehen. Dies ist unsere visuelle Darstellung
unseres Projektils. Sie könnten eine statische
Mesh-Komponente verwenden. Wenn Sie sagen wollen, Sie
hätten eine Kugel oder eine Rakete, könnten
Sie stattdessen diese verwenden. Ich werde hier nur die Kugel
benutzen, also machen wir das. Und ich werde meins
ein bisschen kleiner machen. Also werde ich
es einfach ein bisschen so verkleinern. Ich werde auch meine
Kugel ein bisschen verkleinern. Also wähle ich die
Kugelkomponente und wir ändern
den Kugelradius, ziehe sie
einfach so ein
bisschen nach unten. Und jetzt, da unsere
Sphäre hier mit der
Kollisionskugel zu
tun haben wird , Static Mesh eigentlich keine muss
Static Mesh eigentlich keine Kollision haben
und wir wollen es auch nicht. Also wählen wir das
Kugelstapelmaß aus, scrollen nach unten und wir
finden die Kollisionsvoreinstellungen. Wir werden dies so einstellen, dass keine Kollision auftritt, und wir
werden „
Kann Charakter einspringen“ deaktivieren , um
zu wissen, und wir werden starten, um Überlappungsereignisse zu
generieren. Jetzt
hat unser statisches Kugelnetz überhaupt keine Kollision. Und die gesamte Kollision
wird durch
die Kugelkollision behandelt , die
wir zu Beginn hinzugefügt haben. Nur um die Dinge ein
bisschen weniger verwirrend zu machen, werde
ich
diese Ängste auswählen Static Mesh, und ich werde
das einfach in Mesh so umbenennen. Und dann benennen wir unsere
Kugelkollisionskomponente in eine solche Kollision um. Wir kennen jetzt den Unterschied
zwischen den beiden Komponenten. Jetzt müssen wir auch
einige Kollisionseinstellungen
für unser Projektil einrichten . Was wir also tun, ist, wir
gehen zur Kollision, wählen sie aus, gehen
zu Kollisionsvoreinstellungen. Für unsere
Projektilkollision werden
wir das also tatsächlich auf Brauch
umstellen. Dann stellen wir
sicher, dass Collision Enabled nur auf Abfrage eingestellt
ist. Dann haben
wir für den Objekttyp eigentlich keine
Projektilobjekttypen, also fügen wir einen
in unseren Projekteinstellungen hinzu. Also lass uns das machen. Wir gehen
zu Projekteinstellungen bearbeiten und wollen hier zur
Kollisionskategorie gehen. Dann fügen
wir in den Objektkanälen einen
neuen Objektkanal hinzu. Ich nenne das
Projekt Titel. So wie das. Wir möchten, dass die Standardreaktion
blockiert wird, da die
meisten Objekte auf der Welt unser Projektil blockieren
werden. Also wollen wir anfangen zu blockieren
und dann klicken wir auf Akzeptieren. Der Grund, warum wir
das tun, ist, dass wir wollen, dass bestimmte Dinge unser Projektil
ignorieren. also in unserem Charakter
zum Beispiel zum Wenn wir also in unserem Charakter
zum Beispiel zum Viewport gehen, wollen
wir nicht, dass unsere
Kapsel hier
Projektile blockiert , weil
sie tatsächlich größer ist als unser Charakter. Wir möchten, dass unser Charakternetz stattdessen die Projektile
blockiert. Wir fügen also einen neuen
Projektilobjektkanal hinzu, weil wir
dann unserer
Capsule Component
hier mitteilen können , dass sie das ignorieren soll. Und dann wollen wir, dass unser
Netz das blockiert. Kehren wir also zu unserem Projekt,
unserer Blaupause, zurück und wählen
unsere Kollisionskomponente aus. Hier drüben. Wir wollen den Objekttyp auswählen und diesen
zum Schutz ändern. Du kannst sehen, dass meins
nicht auftaucht. Wir können versuchen zu kompilieren und
sehen, ob es dort auftaucht. Das tut es. Wenn Sie dies immer noch nicht tun, können
Sie versuchen, einfach
alles zu speichern und den Motor
neu zu starten. Manchmal brauchen sie
ein bisschen, um aufzutauchen. Also kannst du das versuchen, wenn deins
nicht das ist, aber meins. Also wählen wir das aus und
dann kompilieren wir erneut. Und dann wollen wir das
so einstellen, dass alles blockiert wird. Also nehmen wir oben die
Option Blockieren. Und dann wollen wir, dass das ****
tatsächlich ignoriert. Also werden wir den Punkt ignorieren. Und der Grund, warum wir
das tun, liegt in unserem Charakter, diese Kapsel wird als
der Objekttyp**** betrachtet. Wir wollen, dass unser
Projektil die Kapsel komplett ignoriert und
nur das Netz trifft. Deshalb übernehmen wir
Ignorieren für****. Die letzte
Kollision, die besagt, dass wir seine Kamera
ignorieren
wollen, tun
wir das nur,
weil wir nicht wollen, dass unser Projektil unseren Kameraboom
beeinflusst. Denn wenn ein Projektil
durch den Kameragearm laufen würde, könnte
es dazu führen, dass Ihre
Kameras sehr schnell heranzoomen und dann herauszoomen, und
es würde nicht sehr gut aussehen. Stellen Sie also sicher, dass
dies für die Kamera ignoriert wird. Wir wollen auch Can
Character step on setzen,
wissen, dass wir verhindern, dass unser
Charakter versucht auf diesem Objekt
zu stehen, wenn es unserem Charakter
zu nahe kommt. Jetzt sind wir bereit, Code für
unser Projektil zu
schreiben. Also gehen wir
zum Event Graph. Wenn Sie diese Registerkarte nicht haben, können
Sie sie einfach hier öffnen. Jetzt inhärent, klicken
wir mit der rechten Maustaste und suchen nach Ereignis-Treffer. Dieses Ereignis wird nun
immer dann ausgeführt, wenn unsere Objekte hier unser Projektil
sind
oder ein anderes Objekt treffen. Und das gibt uns etwas Output. Wenn wir also auf etwas treffen, erhalten wir einen Verweis
auf die Komponente in unserer Blaupause, die
tatsächlich auf die anderen Objekte trifft. Für uns wird dies also
die Kollisionskomponente sein , denn das ist die einzige
, die eine Kollision hat. Dann haben wir andere, und
das gibt dir einen Hinweis auf den anderen Schauspieler, den wir getroffen haben, und wir werden dies verwenden,
um Schaden anzurichten. Dann haben wir eine andere Komponente. Dies gibt uns einen Hinweis auf die Komponente in dem
anderen Akteur, den wir getroffen haben. Und wir haben den Standort des Treffers. Das gibt uns nur den
Ort, an dem wir getroffen haben. Wir haben Normal getroffen, was die Richtung
ist, in die die Oberfläche, auf die
wir treffen, wir werden das nicht benutzen. Es ist ein bisschen weiter fortgeschritten. Und dann haben wir hier
unten tatsächlich ein angesagtes Ergebnis. Wenn wir also herausziehen und das
Break-Treffergebnis in C ausführen, ist
dies tatsächlich das gleiche
Hinweisergebnis, das wir für Tracer erhalten. So können wir auf all
diese Informationen
über das Objekt zugreifen , das wir mit unserem Projektil getroffen haben. Jetzt ist dies wieder ein
bisschen weiter fortgeschritten. Wir werden
hier einfach den anderen Stift
benutzen , um Schaden zuzufügen , dass wir aus
dem Ereignis hier
herausziehen, wir werden danach suchen, anwenden, Schaden wird diesen Knoten benutzen. Wir wollen, dass der beschädigte Schauspieler
der andere Pin hier ist. Wir sagen also, dass wir
eine Dimension auf den
Schauspieler anwenden wollen , den wir gehört haben. Wir können die Höhe des Schadens festlegen. Also werde ich einfach zehn Schadensursachen
festlegen. Wie ich schon sagte, dies wird
der Schauspieler sein , der tatsächlich
den Schaden anrichtet. Wir sind also im Projektil, das ist unser Selbst, also
ziehen wir uns hin und machen uns selbst. Und dann ein Anstifter für Ereignisse. Wir werden das tatsächlich
anschließen, weil ein Charakter unser
Projektil tragen wird. Was wir also tun können,
ist Anstifter zu bekommen. Wir kriegen keinen
Anstifter-Controller. Und das können wir in einen
solchen Anstifter einbinden. Und das funktioniert
so, wenn wir tatsächlich spawnen wird
unser Projektil die Möglichkeit haben ,
einen Anstifter zu liefern, und das werden wir tun und
das wird der Charakter sein. Und wenn wir jetzt einem anderen Objekt
Schaden zufügen, erhalten
wir den
Anstifterwert
, den wir beim
Spawnen unseres Projektils festlegen. Wir stellen das der anderen Blaupause
zur Verfügung, die Schaden angerichtet haben, nur für den
Fall,
dass sie darauf zugreifen wollen
, wer sie tatsächlich beschädigt hat. Jetzt fügen wir den
Druckstring hier hinzu, nur damit wir ein bisschen mehr
Informationen darüber haben, wen wir getroffen haben. Also fügen wir die Druckzeichenfolge und ziehen uns
daraus heraus do append. Und wir werden einfach
den oberen Projektil-Treffer erreichen. Und dann schließen
wir in der zweiten Zeile unsere Praxis an. Also kommen wir über den Schauspieler hinweg
und stecken das hier ein. Ich füge einfach ein
Leerzeichen am Ende eines Treffers hinzu. Es sind also zwei separate
Wörter wie dieses. Als Nächstes müssen
wir nicht wollen, dass unser Projektil
den Charakter trifft , der das
Projektil erzeugt hat. Um das zu tun,
werden wir
eine solche Anfangsspielnote erstellen . Ähm, wir holen uns unsere
Kollisionskomponente, ziehen uns davon zurück und
ignorieren den Schauspieler, während wir uns bewegen. Dies sagt
uns im Grunde nur die Kollisionskomponente, einen Akteur, den wir
ignorieren möchten , wenn sich die
Komponente bewegt. Also schließen wir das an. Wir
wollen einen Schauspieler zur Verfügung stellen. Wir benutzen „Get Owner“. Und das schließen wir hier ein. Und wir werden
übernehmen sollten es ignorieren. Jetzt ist get owner
eine weitere Variable , die wir festlegen, wenn wir tatsächlich ein Projektil
spawnen. Und dann greifen wir darauf und teilen der Kollision mit,
Hey, wir möchten, dass du
ignorierst, den Besitzer zu treffen. Als Nächstes
fügen wir eine neue Komponente hinzu. Also gehen wir zu Hinzufügen und
suchen nach einem Projektor. Und wir werden die
Projektilbewegungskomponente hinzufügen. Dies ist eine Komponente
, die in
den Motor eingebaut ist
und alle Berechnungen für
uns durchführt,
die es unserem BP-Projektil ermöglichen ,
sich tatsächlich wie ein Projektil zu bewegen. Zunächst werden
wir die Anfangsgeschwindigkeit auf dreitausend einstellen . Dies ist die
Startgeschwindigkeit eines Objekts. Dann setzen wir auch die Höchstgeschwindigkeit
auf den gleichen Wert. Wenn Sie möchten,
dass sich das Objekt langsamer oder schneller
bewegt, können
Sie diese Werte natürlich langsamer oder schneller
bewegt, erhöhen oder
verringern. Sie werden wahrscheinlich die gleichen
behalten wollen. Und dann haben wir hier unten
auch Geschwindigkeit. Ich werde hier auch den
ersten Wert
auf „Tausend frei“ setzen . Wenn du also
die Geschwindigkeiten hier oben ändern würdest, würdest
du sicherstellen wollen, dass du dasselbe auch für sie
tust. Wenn wir jetzt unser Projekt spawnen würden
, würde es
sich eigentlich nicht
selbst zerstören , wenn es auf etwas trifft. Also werden wir hier am Ende unseres Codes eine Destroy
hinzufügen . Also werde ich einfach
den Schauspieler zerstören. Und das würde nur
bedeuten, dass
unser Projektil, wenn es auf etwas trifft , dort
zerstört wird. Jetzt können wir das kompilieren
und speichern, und wir haben unser Projektil eingerichtet, und jetzt müssen wir
tatsächlich spawnen. Um das zu tun, gehen
wir zum ThirdPersonCharacter, dann zurück zum Event Graph fügen ein neues Eingabeereignis hinzu. Um das zu tun, gehe ich
zu Projekteinstellungen bearbeiten. Dann gehen wir zur Kategorie
Eingaben und fügen ein neues
Aktions-Mapping hinzu. Also fügen wir einfach eine neue Option hinzu. Und ich nenne meinen Feuer. Und dann kehren wir zum ThirdPersonCharacter zurück ,
der Ereignis Feuer machen
würde. Und das werden wir unter der
Aktion finden, solche Ereignisse. Jetzt müssen wir spawn sind Schauspieler. Also schiebe ich das
einfach her, damit sie mehr Platz
haben. Wir ziehen uns aus Pressed heraus. Wir machen einen Spawn-Schauspieler. Wir wollen die
Spawn-Acts aus der Klasse. Wir setzen die Klasse auf Projektil
unseres Projektils
in CPP-Protektor ein. Nun, die Spawn-Transformation, die
wir herausziehen und machen, transformieren. Jetzt der Ort,
ich werde nur den Standort meines Schauspielers
verwenden. Aber später, wenn Sie eine Waffe
herstellen, möchten
Sie wahrscheinlich zum Beispiel
ihren Mündungssockel verwenden . Aber im Moment werden wir
nur den Standort des Schauspielers
des Charakters verwenden . Also wird es, es wird dem Standort
zugeordnet. Und das schließen wir an
den Standort an. Und dann werden
wir für die Rotation die aktuelle Drehung der
Kamera verwenden. Holen Sie sich also die Kontrolle der Drehung. So schützen wir, wie
weit wir in der Richtung , in der wir derzeit nach Kollisionsbehandlung
suchen. Wir möchten dies so einstellen, dass immer
Kollisionen ignoriert werden. Und wenn Sie sich erinnern, verwenden
wir sowohl den Eigentümer als auch den Anstifter in
unserem Projektor für. Dieser Knoten hier und auch
für diesen Knoten hier. Also müssen wir die festlegen. Und wir verwenden nur einen Verweis
auf unseren eigenen Charakter. Also benutzen wir einfach self. Und wir wollen
das hier und hier so in beide stecken . Jetzt sind wir
bereit, das zu testen. Und eine
Sache habe ich in unseren Projekteinstellungen vergessen zu tun. Wenn wir also dorthin zurückkehren, habe ich ein neues Action-Mapping
erstellt, aber eigentlich keinen Key festgelegt. Also müssen wir
sicherstellen, dass wir das tun. Ich klicke
hier einfach auf
die Tastaturtaste und dann auf die linke
Maustaste, und das wird
das zuweisen. Jetzt können wir das tatsächlich
testen, also drücken wir die Wiedergabetaste und
drücken die linke Maustaste. Sie können sehen, dass
unser Projektil spawnt und es
herausfließt und in
welche Richtung wir schauen. Und wenn wir unseren Würfel abschießen, können
Sie sehen, dass unsere
Würfelgesundheit sinkt. Stellen Sie jetzt sicher, dass Sie beispielsweise auf
den Würfel treffen und nicht auf den
Boden. Es sollte also ein Beispiel für eine
Projektil-Treff-BP-Interaktion heißen,
wie es meins Das gleiche gilt für R1. Hier kannst du sehen, dass es einen anderen Gesundheitswert
hat als dieser und er
sinkt auch, wenn wir ihn treffen. Jetzt sind einige andere Schadensereignisse
in den Motor eingebaut. Wenn wir also zum
ThirdPersonCharacter gehen, werde ich diese einfach erklären. Wenn wir mit der rechten Maustaste klicken
und nach Punktpunktschaden
suchen können , können
Sie den
Event-Punktschaden finden. Nun, das funktioniert
ähnlich wie bei jedem Schaden. Wenn wir es hierher verschieben, können
Sie sehen, dass wir
einige zusätzliche Eingaben haben. Der Grund dafür ist, dass, wenn wir den Apply points damage
aufrufen, Sie sehen können, dass dies ähnlich wie der Knoten „Applied
Damage“ funktioniert , aber es gibt uns
einige zusätzliche Eingaben. Wir haben also einen Input für die Richtung und
auch für Hip-Info. Das wird dann
dieses Event ausführen und uns mit Informationen
versorgen. Es wird uns
einen Bone-Namen geben und dieser ist in
die Trefferinfo und Dinge
wie die Trefferrichtung integriert . Dieser Knoten ist also
etwas weiter fortgeschritten als der aufgebrachte Schaden
und der MD-Schaden, nur
weil er uns
ein bisschen mehr
Informationen liefert , die wir über den Schauspieler
erhalten können kommt hier. Und dann stellen wir
diese Informationen über den Apply Point Damage-Knoten und können
diese Werte hier eingeben. Jetzt gibt es einige
andere Schadensknoten, sodass diese gelöscht werden, wenn wir
mit der rechten Maustaste klicken und in Finde
den
radialen Schaden des Ereignisses nach radialem Schaden suchen . Dies wird jetzt
immer dann ausgeführt, wenn unser Charakter eine radiale Schadensart
erleidet. Und wenn wir mit der rechten Maustaste klicken und
nach Radio anwenden suchen, können
Sie sehen, dass es hier
zwei Optionen gibt. Wir fangen mit dem Besten an. Also müssen wir
radialen Schaden anwenden. Das ist ein wirklich
cooler Knoten,
weil er die ganze Arbeit für uns erledigt, für Dinge wie Explosionen. Wir geben also
einen Ursprung an und das ist so etwas wie das
Explosionszentrum. Wir können einen
Basisschaden festlegen und wir können festlegen wie groß die Schadenszone ist. Also werden alle Objekte innerhalb der, sagen wir, 300 Zentimeter des Ursprungs tatsächlich
den Grundschaden erleiden. Und wir können
Schauspielern die Möglichkeit geben, sie zu ignorieren wie zum Beispiel eine Linienverfolgung. Wenn wir also nur wieder herstellen, können
wir Schauspieler anschließen,
die wir
ignorieren möchten, wenn sie radialen
Schaden nehmen. Wir können auch vollen Schaden
anrichten. Das bedeutet nur, dass
es keine Rolle spielt wo die Objekte, die sich
in unseren beschädigten Bereichen befinden , den vollen Basisschadenwert
annehmen. Dann haben wir die Kanäle zur
Schadensverhütung. Möglicherweise wird eine Explosion
ausgelöst und es gibt eine Mauer zwischen Ihnen und dem Ursprung
der Explosionen.
Sie möchten wahrscheinlich, dass der
Schaden geblockt wird. Hier stellen wir also ein , welcher Kollisionskanal tatsächlich den Schaden
blockiert, den
unser radialer Schaden verursacht. Aber vielleicht hattest
du zum Beispiel ein Fenster zwischen dir und der Explosion. Sie möchten nicht, dass
das Glas den gesamten Schaden blockiert. Du würdest dein Mitspracherecht haben, den
Sichtbarkeitskanal
ignorieren und der Explosionsschaden würde deinen Charakter treffen. Und dann haben wir eine andere
Art von Funkschaden sodass wir mit der rechten Maustaste
nach radialen Schäden suchen können. Schon wieder. Wir verwenden radiale
Schäden mit Abfallen. Das funktioniert jetzt
ziemlich genauso. Es erlaubt uns nur,
einen Innen- und Außenradius zu haben. Nun nehmen Objekte innerhalb des inneren Radius vom Ursprung den vollen
Basisschaden und dann Objekte innerhalb
des äußeren Radius, aber außerhalb des Innenradius werden reduziert
Höhe des Schadens. Höhe des Schadens
hängt vom heruntergefallenen Schaden ab. Je höher dieser Wert ist, desto weniger Schaden erleiden Sie,
55. Gameplay-Systeme (Health: Hallo zusammen. In dieser
Lektion werden wir ein Widget für die Gesundheitsleiste hinzufügen , das
die Werte verwendet, die wir in unserer Gesundheitskomponente
eingerichtet haben . Und dann
fügen wir unseren Health Bar dem BP-HUD hinzu, das wir
in der Interaktionsstunde erstellt haben. Um loszulegen,
werden wir ein neues Widget erstellen. Also gehen wir zu Hinzufügen und dann
zur Benutzeroberfläche und
wählen Widget-Blueprint aus. Wählen Sie dann das übliche Widget aus. Und wir scrollen nach unten und ich nenne
einfach meinen BP Underscore Health, so. Wir machen es auf. Ich ziehe
meins einfach auf die oberste Auswahl. Für unseren Gesundheitsriegel. Ich werde einige Texte
erstellen, in denen
nur Gesundheit steht. Darunter haben
wir dann einen Fortschrittsbalken, der
anzeigt, wie viel Hilfe wir haben. Wir werden auch einen Text
hinzufügen
, der unsere aktuelle
Gesundheit und auch auf dem Mac selbst angibt. Zunächst werden
wir kein Canvas-Panel
verwenden, denn denken Sie daran, dass wir
unseren Gesundheitsbalken zu unserem HUD hinzufügen werden. Wir verwenden das also, um auszuwählen wo sich unsere Gesundheitsleiste auf dem Bildschirm
befindet. Also hier müssen wir nur unsere Health Bar-Widgets
hinzufügen. Wir beginnen also mit
einer vertikalen Box. Also gehe ich zum Panel
und dann schnappen wir uns das vertikale Feld und
fügen es einfach der Hierarchie hinzu. Wir schnappen uns ein paar Texte, also suche ich einfach nach Text. Wir legen das in
die vertikale Box. Dann hole ich mir ein Overlay. Also suchen wir nach Overlay und fügen es auch dem
vertikalen Feld hinzu. Und der Grund, warum ich ein Overlay
verwende ist, dass ich
einen Fortschrittsbalken haben möchte
und
dann etwas Text über diesen Fortschrittsbalken legen möchte. Also werden wir dafür
das Overlay verwenden. Jetzt schnappen wir uns unseren Fortschrittsbalken, also suche ich einfach nach Fortschritt und füge ihn unserer Überlagerung hinzu. Und dann hole ich mir noch etwas mehr Text
und füge diesen auch dem
Overlay hinzu. Wir beginnen also damit, hier
unseren Top-Text auszuwählen. Und ich werde das
einfach ändern, um Gesundheit wie diese zu sagen. Wir können die Einstellungen ändern.
Also wenn du willst, werde
ich
meins ein bisschen
kleiner machen , vielleicht 20. Als nächstes möchte ich
die Größe meines Fortschrittsbalkens festlegen, aber wir haben kein Größenfeld. zu tun, wählen
wir unser
Overlay mit der rechten Maustaste Wrap with aus. Und dann wollen wir die Größenbox hier
finden. Das ist also gerade
in einer Größenbox für uns hinzugefügt. Jetzt können wir wählen, wie groß unser Fortschrittsbalken sein soll. Also werde ich die Breite
überschreiben und die Höhe
überschreiben. Und ich stelle
die Höhe ein, um 30 zu sparen. Und dann setzen wir die Breite auf drei Fünftel. Vorerst. Jetzt
wählen wir unseren Fortschrittsbalken und sagen ihm einfach, dass er
den gesamten verfügbaren Platz belegen
soll ,
damit wir ihn
horizontal und
auch vertikal füllen . Derzeit sehen wir eine
Vorschau für einen Bildschirm der Größe
1280 x 720. Also werden wir das von
Phil Screen
ändern , um einfach die gewünschte
Größe auf dem Bildschirm so hinzuzufügen. Nur damit wir uns
ein besseres Bild davon machen können wie groß oder was
es derzeit ist. Als Nächstes
wählen wir
hier unser Lehrbuch aus, das sich über
unserem Fortschrittsbalken befindet. Und ich werde
das ändern, um 50
Slash 100s zu sagen, damit wir sehen können, wie es
aussehen wird. Ich werde die
Größe so ändern, dass sie viel kleiner wird. Also fangen wir mit, sagen wir, 14 bis 16 an. Und wir richten das auf
der rechten Seite aus. Und wir wollen auch so
in der Mitte ausrichten. Jetzt werden wir diesen Text mit Code
bearbeiten. Um das zu tun,
müssen wir es also als Variable verwenden. Also werde ich es
variabel annehmen und
den Namen in Gesundheitstext ändern . So wie das. Wir werden auch unseren Fortschrittsbalken
ändern. Also benenne ich das
einfach um. Sie können sehen, dass es bereits
angekreuzt ist, da es variabel ist. Also nenne ich
diese Gesundheitsleiste einfach so. Jetzt
füge ich auch ein bisschen
Padding auf der rechten Seite hinzu, weil ich nicht möchte, dass der
Text direkt am Rand
dieses Fortschrittsbalkens steht, das Padding
öffnet und setzt das Recht, fünf Pixel zu sagen. Oh, tut mir leid, wir müssen dort unsere Texte
auswählen, also stellen Sie sicher, dass Sie Text ausgewählt
haben. Und dann setzen wir
die rechte Seite auf ungefähr fünf Pixel,
oder vielleicht vier. Und das gibt uns nur
ein bisschen Abstand zwischen dem Rand unseres
Fortschrittsbalkens und unserem Text. Jetzt können wir das kompilieren
und speichern. Und wir sind bereit,
den Code zu schreiben , der
unsere Health Bar kontrollieren wird. Also gehen wir
zur Diagrammansicht. Um unseren
Gesundheitsbalken und unsere Gesundheitstexte zu aktualisieren, benötigen
wir einen Verweis auf die Gesundheitskomponente, die
wir unserem Charakter hinzugefügt haben. Um das zu tun, fügen
wir unserem Event Construct
etwas Code , der zunächst nur
diese beiden Notizen löscht , weil wir sie
nicht verwenden werden. Und dann kriegen wir
unseren eigenen Platz oder bekommst du Owning Player? Und das gibt uns den Controller
, der dieses Widget besitzt. Also von dem aus können wir
kontrolliert****. Und das gibt uns einen
Hinweis auf unseren Charakter, aber als Punktobjektreferenz. Und dann können
wir Komponenten nach Klassen abrufen. Und dann können wir überprüfen, ob unser **** die
Gesundheitskomponente hat? Wenn ja, dann
wollen wir das festlegen. Wir ziehen uns
aus dem Rückgabewert heraus. Werben Sie für eine Variable? Und wir nennen diese
Gesundheitskomponente so. Bevor wir das festlegen, wollen
wir ein paar Checks machen. Also wollen wir zuerst überprüfen, ob wir etwas kontrollieren. Also werden wir tun, ist
hier so gültig. Und wenn es gültig ist, werden wir zulassen dass die
Gesundheitskomponente so
eingestellt wird. Jetzt sind wir bereit, unsere Bind-Funktion zu
erstellen. Also kompilieren wir und kehren zur Designer-Ansicht
zurück. Und wir wählen zunächst hier
unseren Gesundheitsbalken aus. Und wir gehen
zum Bereich Details und
finden den Barwert. Dann wollen wir
die bind-Option verwenden und Binding erstellen. Zunächst möchten
wir überprüfen, unsere Gesundheitskomponente gültig
ist? Also bekommen wir die
Gesundheitskomponente und das ist so gültig. Das würde uns nur davon
abhalten, irgendwelche Fehler zu bekommen. Dann müssen wir
unsere aktuelle Gesundheit
und auch unser maximales Angebot erhalten . Es wird sich also hinziehen und
aktuelle Gesundheit erhalten und maximale Gesundheit erhalten, wie Klatschen. Und dann müssen wir
unsere aktuelle Gesundheit
durch r max Gesundheit teilen . Und das gibt uns
einen Wert von 0 bis eins. Das können wir dann
für unseren Fortschrittsbalken verwenden. Aber zuerst müssen wir diese
in Floats umwandeln. Also werden wir tun, um zu schweben. Das
wird uns diese Notiz geben. Das wird einfach kopiert
und hier eingefügt. Stopfer ganze Flosse oder
Imax-Gesundheit hier rein. Dann nutzen wir unsere aktuelle
Gesundheit und teilen uns. Teile, und wir teilen unsere
aktuelle Gesundheit durch r max out. Und das gibt uns
einen Wert von 0 bis eins. Und das wird unserem
Fortschrittsbalken sagen, wie weit wir sein müssen. Und dann können wir
das hier einfach so einstecken. Wenn unsere
Gesundheitskomponente dann nicht gültig ist, können
wir diesen Rückgabewert einfach kopieren und
einfügen und in „Nicht gültig“ einfügen
und wir geben einfach 0 zurück. Als nächstes brauchen wir einen
Ordner für unsere Texte. Wir kehren also zum
Designer zurück und wählen hier den Text in
unserem Fortschrittsbalken aus. Dann wird für den Textwert bind
ausgewählt und Binding
erstellen ausgeführt. Und wir werden dasselbe
mit unseren Gesundheitskomponenten machen. Also holen wir uns das und
überprüfen, ob es gültig ist. Und verbinde das so mit unserem
Startknoten. Dann wollen wir
unsere aktuelle Gesundheit erhalten. Holen Sie sich also
die aktuelle Gesundheit und erhalten Sie die maximale Gesundheit so, was Linie ist, diese
sind ein bisschen besser. Jetzt müssen wir tatsächlich einige Texte
zurücksenden. Also ziehen wir uns aus
unserem Rückgabewert heraus und verwenden den Format-Textknoten so. Dann brauchen wir einen Eintrag
für unsere aktuelle Gesundheit. Wir verwenden also eine offene Klammer, wir nennen das aktuelle Gesundheit. Und dann schließe die Klammer. Und wir drücken die Eingabetaste
und Sie können sehen, dass
dies einen neuen Wert für uns darstellt. Also werde ich unsere aktuelle
Gesundheit dort einstecken. Und dann machen
wir in unserem Wert für
Formattexte hier einen Schrägstrich und dann machen
wir offene Klammer, maximale Gesundheit und schließen dann
Klammer und geben jetzt ein. Und das schafft uns gesund einen
neuen Max. Und das
schließen wir hier so ein. Wenn es dann nicht gültig ist, kopieren
wir einfach einen
Knoten, fügen ihn ein oder geben ihn
zurück und lassen
diesen Wert einfach leer. Jetzt ist unser
gesamter Code eingerichtet. Wenn wir zum Designer zurückkehren, können
Sie so viel
Zeit darauf verwenden, dies zu
bearbeiten und es so aussehen zu lassen, wie Sie
es möchten. Ich werde eine
Sache tun und das hat die Farbe
unseres Gesundheitsbalkens
geändert. Also wähle ich
es aus und gehe
runter zu Füllung,
Farbe und Deckkraft. Und ich wähle
das einfach aus und ändere es eine schöne grüne Farbe, nur
um für Gesundheit zu stehen. Und dann drücke ich OK,
kompiliere und speichere das. Jetzt können wir das zu unserer Hütte hinzufügen, also kehren wir zum
Inhaltsbrowser zurück und öffnen das BP HUD. In der Palette
suchen wir nach Gesundheit und ziehen unsere
BP-Gesundheitsleiste so hinein. Und ich werde meine einfach
in die untere Ecke stellen . Ich werde auch den Anker
wechseln. Da dies der
nächste Ankerpunkt ist
, werde ich ihn verwenden. Also setzen wir es so auf die untere
linke Seite. Jetzt können Sie
die Größe des Schalters ändern. Wenn ich es also herausziehe, können Sie sehen, dass unser Health Bar
immer kleiner wird. Oder Sie können die
Größe des Inhalts anpassen. Und das wird nur sicherstellen
, dass das Widget immer die gleiche Größe hat wie in
diesem Widget-Editor hier. Jetzt können wir das also kompilieren
und testen. Also drücken wir auf „Spielen“. Und Sie können sehen, dass unser Wert bei 100 von
100
liegt . Wenn ich hier auf diese Box stoße
, können
Sie sehen, dass unsere Gesundheit jedes Mal
abnimmt, wenn
ich das Feld betrete. Wenn wir den
Plan-Editor ausatmen und zu
unserem Charakter-Blueprint gehen und hier unsere Gesundheitseinstellungen
ändern. Wenn wir also die
Gesundheitskomponente auswählen, sagen wir, ich setze die maximale Gesundheit auf 500 und die
Starthälfte auf 250. Sie werden sehen, dass, wenn
wir kompilieren und auf Play klicken, ich hoffe, dass es nur
automatisch aktualisiert wird,
es heißt 250 von es heißt 250 500 und unser Fortschrittsbalken ist ebenfalls
zur Hälfte fertig. Jetzt werde ich einfach X raus
und
setze diese Werte einfach auf ihren Standard zurück. Also ein 100-100. Wenn Sie jetzt weitere Anpassungen
vornehmen möchten, können
Sie
hier einfach zu
Ihrer Gesundheitsleiste gehen und die gewünschten
Änderungen vornehmen. Wenn Sie die
Größe des Fortschrittsbalkens ändern möchten, können
Sie das Größenfeld auswählen und wir können diese Werte hier ändern. Wenn Sie
die Größe des Textes ändern möchten, können
Sie
diese einfach auswählen und die Schriftgrößen hier
ändern. Und auch hier. Wir sind fertig für diese Lektion. Hoffentlich
verstehst du jetzt ein
bisschen mehr darüber, wie wir
Werte aus anderen Blueprints abrufen
und
sie dann in einem Widget anzeigen können Werte aus anderen Blueprints .
56. Gameplay-Systeme (Respawning): Hallo zusammen, in dieser
Lektion
werden wir ein Reaktionssystem einrichten. Und
dazu gehört auch ein HUD , das angezeigt wird, wenn wir sterben, wir können auf die Schaltfläche „Antworten“
klicken und das
uns einen neuen Charakter erschafft der
die Kontrolle übernimmt. Um loszulegen,
erstellen wir unsere Befragten. Also gehen wir
zum Content Browser, fügen hinzu und wir wollen eine
Benutzeroberfläche und ein Widget hinzufügen. Blueprint
wird ein Widget verwenden. Und wir scrollen nach
unten. Und ich nenne
meinen BP-Unterstrich, antworte HUD so. Und das machen wir auf. Ich ziehe meine einfach so
in die obere Leiste. Dies wird unser normales HUD
ersetzen. Also werden wir dafür ein
Canvas-Panel verwenden. Es wird also nach Canvas gesucht und das der
Hierarchie so
hinzugefügt. Jetzt
füge ich nur noch eine einfache Schaltfläche , mit der wir eine Antwort
sammeln können. Also schnappen wir uns einen Knopf. Ich werde
das einfach in die Länge ziehen. Ich werde den Ankerpunkt in
die Mitte ändern, weil ich
meinen Knopf in der Mitte haben möchte. Ich werde auch
die Ausrichtung auf 0,50.5 ändern, nur damit sich unsere Position in
der Mitte unseres Widget-Hip befindet. Und ich setze
das auf 0 und das x.
Und ich halte die Umschalttaste
gedrückt und ziehe es ein bisschen
nach unten, damit
es ungefähr hier ist. Und jetzt kann ich einige Texte hinzufügen, meine Buttons, damit nach Text gesucht
wird. Ich
ziehe einfach oben auf meinen Button. Und wir werden das sagen,
wieder, Sport wie dieser. Jetzt stoppe ich meinen Button
wieder und passe einfach die Größe des
Inhalts an , damit er größer wird
, um den Text hier anzupassen. Ich ändere
die Textfarbe Schwarz, damit sie ein
bisschen besser zu erkennen ist. Erneut Start-Taste.
Jetzt können Sie so viel Zeit
verbringen,
wie Sie möchten hier so viel Zeit
verbringen,
wie Sie möchten, damit dieser
Look so aussieht, wie Sie es möchten. Ich bin nur froh, ein bisschen Text, ich werde
wieder Anker in
der Mitte haben wird seine
Ausrichtung wieder auf 0,50.5 ändern. Und wir setzen das x auf 0. Und ich halte die Umschalttaste
erneut gedrückt und bewege es einfach nach unten. Und ich lasse diese Texte einfach sagen, dass du so etwas hast. Und wir werden das in
der Mitte und in der Größe auf den Inhalt ausrichten . Jetzt können wir unserem
Third-Person-Charakter
etwas Code hinzufügen . Also gehen wir zum
Inhaltsbrowser und öffnen ihn. Jetzt hier, wo ich mit
dem Spielen beginne, haben
wir einen Code, einen Spielsound
bindet,
wenn wir Schaden nehmen Ich werde das einfach löschen weil es ein
bisschen nervig ist. Also werden wir das vorerst löschen. Und wir werden eine
neue Bindung erstellen, wenn ich 0 treffe. Also greifen wir uns unsere
Gesundheitskomponente an, ziehen uns daraus heraus und binden
uns an die Gesundheit. Und wir wollen Bind Event auf
Gesundheit 0 hier, so. Dann werden wir aus dem Ereignis
herausziehen und benutzerdefinierte Aktionen ausführen. Und wir möchten einen Kunden hinzufügen. Dann nennen wir diesen
Charakter gestorben. So wie das. Als Nächstes
fügen wir einmal fällige Notizen hinzu, also ziehen wir sie heraus
und tun, einmal tun. Und das bedeutet nur, dass
dieser Code nur einmal ausgeführt wird. Dann wollen wir überprüfen, ob
unser HUD aktuell gültig ist? Das sollte es sein, aber wir
wollen es trotzdem überprüfen. Also werden wir tun ist gültig. Und
wir verbinden das hier oben. Und wir werden jetzt unseren Hub
entfernen. Also ziehen wir uns heraus und entfernen
es von den Eltern. Und dies dient als eine Möglichkeit
, ein Widget zu zerstören. Also fügen wir dies als gültig hinzu. Und dann wollen wir unsere Reaktion
tatsächlich hervorbringen. Also ziehen wir uns von hier aus, erstellen ein Widget und wir werden die Klasse so
einstellen, dass sie reagiert. Wir wollen, dass es ein Antwort-HUD ist, Der
gewinnende
Spieler bekommt einen solchen Spielercontroller. Dann wollen wir
unsere Antwort tatsächlich auf eine Variable setzen. Also ziehen wir uns aus
dem Rückgabewert fördern die Variable. Ich nenne das antworten. Dann müssen wir das
zum Player-Bildschirm hinzufügen. Also ziehen wir uns heraus und machen
„Zum Viewport hinzufügen“. Dann möchten wir sicherstellen
, dass die
PIN ist nicht gültig in unseren Knoten Widget
erstellen eingebunden ist. Und jetzt, um die Dinge in Ordnung zu halten , werden
wir all
dies hervorheben und auf eine Funktion reduzieren. Also klicken wir mit der rechten Maustaste und
machen eine reduzierte Funktion, und wir nennen das create
respawn, HUD so. gesamte Code ist jetzt in
dieser Funktion enthalten. Und wir können
das etwas kleiner machen. Wir können einige Umleitungsknoten hinzufügen. Zwei sind nicht gültig. Verdrahten Sie hier so. Nur um die Dinge aufzuräumen. Dann kompilieren wir das
und speichern es. Als Nächstes kehren wir
zum Event Graph zurück. Nachdem wir
unsere Antwort hier erstellt haben, möchten
wir alle
Bewegungseingaben für unseren Charakter deaktivieren. Also klicken wir mit der rechten Maustaste und
suchen nach Deaktiviert. Wir wollen die Eingabe deaktivieren. Und dann holen wir Player-Controller und verbinden dem
Player-Controller und setzen sie ein. Wenn wir
wollten, könnten wir hier
ein taubes Animationsspiel haben . Jetzt habe ich keine mehr, aber
stattdessen stellen wir eine Stoffpuppe auf. Wenn wir also sterben,
spielt unser
Charakter wie ein Rhabdo-Effekt. Um das zu tun, bekommen wir
unsere Mesh-Komponenten. Wir wollen also die
Netzkomponente aus
dem Bedienfeld „Komponenten“, die
wir herausziehen werden und wir werden die Set-Simulation durchführen. Wir wollen die Physik simulieren. Und wir verbinden das,
um die Eingabe zu deaktivieren. Wir wollen das übernehmen. Dann ziehen wir uns aus
Michigan heraus und
wollen alle Körper aufstellen. Richtig buchstabieren, Körper
simulieren Physik hier. Das wollen wir auch übernehmen. Dann wollen wir das
Kollisionsprofil ändern. Dafür werden wir uns
hinausziehen und Kollision festlegen. Und wir wollen
Kollisions-Profilnamen festlegen. Verbinde das hier oben. Wir wollen diesen
Kollisionsprofilnamen auf Stoffpuppe setzen . Also
buchstabierten Kapital R und dann Stoffpuppe genau so. Dieser Code ist eigentlich das,
was unsere Figur zu einer
Stoffpuppe
machen wird, wenn wir sterben. Also werden wir das auch zu einer Funktion
zusammenfassen. Also klicken wir mit der rechten Maustaste und
machen die Collapse- Und wir nennen das aber Start
Greg, so. Und noch einmal, lassen Sie uns
die Dinge einfach schön und ordentlich halten und
der ganze Code ist einfach in dieser Funktion
enthalten. diese Weise könnten wir Auf diese Weise könnten wir hier
auch eine Notiz
für unsere
Charakterbewegungskomponente hinzufügen . Damit wir uns das schnappen
und die Bewegung stoppen können. Und wir könnten die
Bewegung sofort stoppen. Das bedeutet nur, dass
unser Charakter
weiterhin
keine Bewegungseingaben erhält. Also wenn du fertig bist,
sollte es so aussehen. Zurück in unserem Ereignisdiagramm möchten
wir vielleicht, dass die Leiche
unseres
Charakters nach
einiger Zeit verschwindet. zu tun, können wir uns in die
Länge ziehen und die Lebensdauer verlängern. Wir wollen eine festgelegte Lebensdauer. Und so viele Sekunden,
nachdem dieser Knoten ausgeführt wurde, wird
der Akteur existieren,
bevor wir ihn zerstören. Wenn ich das
also auf zehn Sekunden setze, nach zehn Sekunden der Körper unseres
Charakters verschwinden. Jetzt möchten Sie vielleicht eine tote Variable , die nur ein boolescher Wert ist, der
wahr ist, wenn das Zeichen tot ist. Wir werden
es in diesem Beispiel nicht verwenden. Aber wenn du das tust, könnten wir
eine neue Variable erstellen , diese als tot bezeichnen. Wir könnten das auch hier festlegen, nur damit wir
eine Variable haben, uns
sagt, dass wir tot sind. Und das könntest du in
anderem Code verwenden, wenn du willst. Als Nächstes werden wir tatsächlich einen benutzerdefinierten Controller
einrichten. Und der Grund, warum
wir das tun, ist der Körper
unseres Charakters nach
zehn Sekunden verschwinden
könnte und wir
dann vielleicht auf dem
Antwortbildschirm inaktiv werden. Wenn unser Antwortcode in
dem Charakter enthalten wäre und er zerstört
worden wir auf die Schaltfläche „Antworten“ klicken, würde
nichts passieren, weil unser Charakter zerstört
worden wäre, aber der
Die
Platzkontrolle wird immer existieren. Also wollen wir unseren
Antwortcode darin einfügen. Um das zu tun, erstellen wir einen neuen benutzerdefinierten Controller, gehen zum Content Browser, fügen
dann die Blueprint-Klasse und dann wollen wir den
Player-Controller. Und das wird
uns eine neue Blaupause schaffen. Wir nennen diesen
BP-Unterstrich-Beispiel-Controller. So wie jetzt. Wir öffnen das und ich werde meins einfach in die Bar hier
ziehen. Dann gehen wir
zum Event Graph. Und dann
werden wir hier eine
neue Funktion erstellen , um den Ort zu
finden, an dem
wir auf unseren Charakter reagieren werden . Also werden wir eine neue Funktion erstellen. Ich nenne diesen
zufälligen Antwortpunkt. So wie das. Wir werden eine Ausgabe hinzufügen. Das wird ein Ort sein. Wir wollen also, dass dies
ein Vektor ist und wir nennen diesen Ort so. Dann werden wir diesen
Rücksendeschein vorerst
trennen oder daran arbeiten . Wir ziehen
uns davon zurück und bekommen oder Schauspieler der Klasse. Und damit verwenden wir
den Player-Start. Dies ist ein aktiver Wirkstoff, der in den Motor
eingebaut ist. Wir haben also nicht geschaffen, dass das eigentlich nur
mit der Engine geliefert wird. Dann wollen wir uns
herausziehen und Länge machen. Wir werden tun ist größer als 0. Also überprüfen wir nur
, ob es
mindestens einen Stern in unserem
Level gibt . Also machen wir f. Und wenn wahr, wird es nach
dem Zufallsprinzip laufen. Und wenn falsch,
müssen wir einfach zu einem Ort kommen. Dafür können wir also etwas wie
300 und Z
machen , nur um sicherzustellen, dass wir nicht durch den Boden
fallen. Dies wird jedoch nur verwendet, wenn wir keine
Spieler-Starts und das Level haben, idealerweise
möchtest du immer mindestens einen in deinem Level haben. Daraus
können wir also tatsächlich
eine lokale Variable erstellen, um dies zu speichern,
nur um die Dinge in Ordnung zu halten. Also ziehen wir uns von hier aus fördern eine lokale Variable. Wir nennen
diesen Spieler einfach Scott. Ich würde gerne ein
L an das Ende
lokaler Variablen setzen , damit man leicht erkennen kann, dass
sie lokal sind. Also werde ich die Spieler so mit
Kapital L beginnen. Verbinde das bis hier. Und ich nehme den Ausgang
und stecke ihn hier ein. Halte die Dinge einfach in Ordnung. Und dann holen wir das Pflaster. Wir wollen zufällig einen der Einträge
in diesem Array für unseren
Spieler
auswählen , spawnen. Dafür ziehen wir uns
in die Länge und wir werden wieder Länge bekommen. Und dann wollen wir eine zufällige Ganzzahl. Wir wollen eine zufällige Ganzzahl aus
einer zufälligen Ganzzahl im Bereich. Und dann wollen
wir für Minimum, dass dies 0 ist, und dann wollen wir maximal, dass dies
die Länge minus eins ist. Also subtrahiere eins. Das wird so unser Maximum sein. Dadurch erhalten
wir eine Zufallszahl zwischen 0 und was auch immer die aktuelle maximale Anzahl von Einträgen in
unserem Spieler beginnt. Und dann können wir das tun, wir können diese Variable kopieren und
einfügen, Lücke
machen und eine Kopie erhalten. Und dann stecken wir
das in die Ganzzahl ein. Das sagt uns, welche Spieler wir
starten wollen. Dann ermitteln wir einfach seinen Standort. Also kehren wir zum
Standort zurück, werden das zurückgeben. Also kopiere ich einfach und füge sie ein. Ich gebe den Knoten zurück,
stecke den Standort in den Standort und stecke das hier
drüben in true so ein. Wir können das
etwas klarer machen, das zusammenbinden, und dann werden wir es
zusammenstellen und speichern. Jetzt wird diese Funktion einen zufälligen Spielerstart
erhalten unser Charakter darauf reagiert , dass wir jetzt
zum Ereignisdiagramm gehen. Und wir werden beide
löschen weil wir sie nicht
verwenden werden. Dann erstellen wir
ein neues benutzerdefiniertes Ereignis
oder klicken mit der rechten Maustaste und führen benutzerdefinierte Ereignisse aus. Und wir möchten einen Kunden hinzufügen. Dann nenne ich diesen
Respawn-Charakter so. Und wir beginnen mit
unserem zufälligen Antwortpunkt. Also kriegen wir das so. Dann wollen wir unserem Charakter
antworten. Also ziehen wir uns
von hier aus und
spawnen Schauspieler aus der Klasse. Für die Klasse wollen
wir, dass dies das ist, was auch immer unser Standard**** in unserem Spielmodus
ist. Was wir also tun, ist nach dem Spielmodus zu
suchen. Daraus können wir ein Standardgedicht
bekommen. Und das wird die
Standardbauerklasse sein die
wir in unserem Spielmodus festgelegt haben. Also stecken wir das in den Unterricht ein. Dann ziehen
wir für die Spawn-Transformation heraus und
führen eine Make-Transformation durch. Ich schiebe
das nur ein bisschen zurück damit wir ein bisschen mehr Platz haben. Dann nehmen wir
den Standort von unserem zufälligen
Antwortpunkt und schließen ihn einen solchen Ort an. Und wir werden die
Standardkollisionsbehandlung festlegen um zu versuchen, die Position anzupassen, aber wir spawnen immer, weil wir immer wollen, dass unser
Charakter gespawnt wird. Dann klicken wir hier auf
den Abwärtspfeil und legen
den Besitzer als unseren Controller fest. Also benutzen wir einfach self und wir werden das auch an
den Besitzer anschließen. Jetzt, da wir
im Controller sind, wollen
wir nur diesen
neuen Charakter besitzen , auf den
wir geantwortet haben. Also ziehe ich mich aus dem
Rückgabewert heraus, besitzen Sie? Und wir können diesen
Charakter besitzen und
das Ziel selbst verlassen , weil
wir uns in einem Controller befinden. Jetzt kompilieren wir das
und speichern es. Und wir werden zu unserer
Antwort zurückkehren , denn hier
müssen wir Code hinzufügen, der
ausgeführt wird , wenn wir die
R-Antwort-Taste drücken, er wählt den Knopf
hier aus und wir gehen runter zum ungeklickten
im Bereich Details. Klick das an. Und dann
brauchen wir das hier, um
unser Response-Ereignis in
unserem Beispiel-Controller auszuführen . zu tun,
klicken wir mit der rechten Maustaste und
suchen nach Get Owning Player. Und das gibt uns einen
Hinweis auf unseren Controller. Alles was wir dann
tun müssen, sind die Kosten für den Beispiel-Controller. Verbinde das bis hier. Und das wird es uns ermöglichen,
unser Response-Charakter-Event zu nennen . Wenn wir jetzt hinzufügen, dass alle
hart reagieren, um einen Schrei zu spielen, möchten
wir, dass
unsere Maus losgelassen wird, damit wir unseren Antwortknopf tatsächlich
sammeln können. Um das zu tun, fügen
wir dem
Event Construct
etwas Code löschen
einfach
den Event-Tick und das vorkonstruierte Ereignis. Dann holen wir uns wieder den
Player-Controller. Also holen wir uns Owning Player. Und daraus
können wir die Show-Maus verwenden. Wir wollen den
show-Mauszeiger auf true setzen. Dann wollen wir den
Eingabemodus auf game und gy setzen. Dann schließen wir das hier ein. Und wir möchten, dass das
Widget-Haar selbst ist, also suchen wir selbst. Und das sagt uns nur
, dass unser Mauszeiger jetzt
sichtbar ist und wir
dieses Widget als Fokus verwenden. Ich werde die Option Maus
während der Aufnahme ausblenden deaktivieren , da
alles, was Sie tun, ist, wenn Sie die linke Maustaste
gedrückt halten und ziehen, während
die Widgets sichtbar sind, unsere Maus ausgeblendet
wird. Ich
persönlich mag das nicht, also deaktiviere ich das. Sobald wir geklickt haben, antworte
ich auf die Schaltfläche. Wir wollen, dass unsere Maus
wieder versteckt wird. Also werden wir diesen Code hier kopieren und er wird ihn hier einfügen. Und wir setzen unseren
Mauszeiger so, dass er nicht sichtbar ist. Und dann wollen wir
den Eingabemodus auf Spiel setzen. Also stellen wir Eingabemodus nur auf Spiel ein und verbinden
uns hier oben. Und schließlich möchten wir
unsere Antwort hart verbergen, sobald
wir die Antwort gesammelt haben. Also ziehen wir uns in die Länge und
wir werden zerstören oder entschuldigen,
nicht zerstören, Eltern entfernen, die von den Eltern
bewegt wurden. Und das wirkt wie
ein Zerstörungsknoten. Wenn wir also auf „Antworten“ klicken, teilt
berm unserem
Zeichencode
im Controller mit, dass er reagieren
oder unsere Maus verstecken soll. Und wir gehen nur in den Spielmodus
und entfernen dann unsere
Antwort, die wir vom Bildschirm gehört haben. Jetzt verwenden wir
unseren Beispiel-Controller noch nicht, also müssen wir in unseren Spielmodus wechseln. Also gehen wir zum
Inhaltsbrowser und
suchen den Third-Person-Spielmodus. Öffne das, du findest
den Player-Controller oder die
Standard-Player-Controller-Klasse hier. Und wir können das ändern, um
den BP-Beispiel-Controller zu sein. Dann kompilieren wir das
und speichern es. Eine weitere Sache, die
wir hinzufügen müssen, ist Kollision
unserer Charaktere, wenn sie gestorben sind. Wir wollen nicht, dass
unser Charakter ständig Dinge
blockiert,
wenn sie tot sind. Wir werden also ein
neues Kollisionsprofil hinzufügen. Also gehen wir zu
Projekteinstellungen bearbeiten. Und dann wollen wir hier
zur Kollision kommen. Und dann Presets. Wir werden ein neues Preset hinzufügen. Ich nenne
das toten****. Wir werden Kollision
aktiviert festlegen, um nur Abfragen durchzuführen. Wir werden den
Objekttyp für alles
andere, was ignoriert werden
muss, auf
**** setzen für alles
andere, was ignoriert werden
muss, auf
**** setzen . Und dann nehmen wir
Block für statische und dynamische. Wir werden
dieses Kollisionsprofil
für unsere Kapsel verwenden . Also, wenn der Spieler
stirbt, Fersenpuppe, aber seine Kapsel wird
immer noch dort sein, wo wir gestorben sind. Jetzt wollen wir nicht, wenn wir
darauf reagieren, dass wir zu unserem Körper
überrennen und in die Kapsel
schlagen. Das bewirkt also,
dass unsere Kapsel Kollision unseres
Spielers
nicht beeinträchtigt. Aber es wird verhindern, dass unsere Kapsel durch den Boden
fällt da wir keine wilde
statische und dynamische Blockade haben. Unsere Kapsel könnte
direkt durch den Boden fallen. Und jetzt müssen wir unsere Kapsel tatsächlich
so einstellen, dass sie das benutzt. Also klicken wir auf Akzeptieren und gehen
dann zur dritten Person. Und wir könnten das hier
in unseren Code aufnehmen, aber ich werde
meinen tatsächlich zur Start-Rollenpuppe hinzufügen. Also machen wir das
auf und
holen uns unsere Kapselkomponenten. Das war's also von unserem
Komponenten-Panel. Ziehen Sie heraus und machen Sie Kollision festlegen. Und wir wollen den Namen
des Vertriebsprofils. Und wir fügen
das einfach zum Frontzahnbereich hinzu. Das wird tot sein****, genau so
geschrieben. Eine weitere Sache, die
wir an
unserem Charakter im Event Graph ändern unserem Charakter im Event Graph ist,
dass dieser Code hier von unserem
Event begin play ausgeführt wird. Aber jetzt haben wir ein
Reaktionssystem. Wir wollen dies so ändern, dass wir
nur ausgeführt werden , wenn wir den Charakter
besitzen. So können wir mit der rechten Maustaste klicken und
nach Ereignis suchen. Und wir können Event besessen verwenden
und das hier einstecken. Und dann können wir das
beginnende Spiel tatsächlich löschen. Und jetzt, wenn dieser Charakter von einem Controller besessen
wird, wird er diesen Code ausführen. Eine weitere Sache, die wir
hinzufügen können, ist, wenn Sie sich erinnern, unser Lockout-Schauspieler
Tracy 30 Mal pro Sekunde rennen
wird , aber wir wollen das beenden,
wenn wir tauchen, weil wir es nicht
mehr sein werden
mit Dingen interagieren. Wenn Sie sich also erinnern, haben wir unseren Look at Act
a Timer
erstellt und können dies
verwenden, um ihn zu stoppen. Also hier drüben können wir
das einfach am Ende hinzufügen. Wir werden unseren Blick auf den Timer werfen, daraus ziehen und die
Zeit, die ich kaufe, löschen und ungültig machen. Und das wird unsere Spur tatsächlich
auf diese Weise stoppen. Und wir werden das zusammenstellen. Nun noch eine letzte Sache, die wir in unserem Gesundheitsbus ändern müssen , also gehen wir dorthin und unser Inhaltsbrowser wird sie hier oben
finden. Mach das auf. Dann gehen wir
zum Event Graph. Und wenn Sie sich erinnern,
erbt, wo wir unsere Bauern Gesundheit Komponente
bekommen. Das Problem dabei
ist, dass
wir jetzt ein
Antwortsystem oder eine Steuerung haben
oder möglicherweise nicht die Kontrolle
über das **** übernommen haben , wenn dieser Code ausgeführt wird. Alles was wir tun müssen, ist eine Ein-Frame-Verzögerung
hinzuzufügen. Also suchen wir nach Verzögerungen und verwenden die Verzögerung
bis zur nächsten Technologie. Und das alles fügt
eine einzelne Frame-Verzögerung hinzu,
wann dieser Code ausgeführt wird. Und bis dahin wird unser Controller die Kontrolle über unser **** übernommen
haben. Jetzt können wir
das testen. Wir kompilieren und kehren
zum Content Browser zurück. Ich werde den Schaden ändern,
den die beschädigte Zone verursacht, also öffne
ich ihn. Ich werde das erhöhen, um
zu sagen, dass 40 kompiliert werden. Und jetzt können wir auf Play klicken
und das testen. Wenn ich also in
die Schadenszone renne, kannst
du sehen, dass wir
40 Schaden erleiden. Und jetzt, wenn ich das letzte Mal
reinkomme, wirst
du sehen, wie unser Charakter stirbt. Stoffpuppen auf dem Boden. Wir können Reagieren drücken, um einen neuen Charakter zu
spawnen. Sie können sehen, dass unsere
Interaktion immer noch funktioniert. Wenn ich E drücke,
funktioniert das richtig. Wenn wir erneut in die Zone rennen, können
wir auch diesen
Charakter töten. Jetzt haben wir ein voll
funktionsfähiges Reaktionssystem. Jetzt möchtest du vielleicht
neue Spawnpunkte
für deinen Charakter hinzufügen . Um das zu tun, können wir aussteigen und hier zum
Dropdown gehen, dann zwei grundlegende und wir können
einen neuen Spieler hinzufügen ,
indem wir diesen einfach hineinziehen. Wir können eine zweite hinzufügen, also geht es wieder zu Basic, dann zu Player Start und
wir fügen hier einen hinzu. Wenn wir jetzt in diesem Schritt
auf „Spielen“ klicken, können
wir spawnen oder sogar einen
dieser neuen Punkte.
Also klicken wir auf „Spielen“. Sie können sehen, dass wir tatsächlich beim Original
gespawnt haben, aber wenn wir in
die Schadenszone rennen um uns umzubringen, können
wir reagieren. Und Sie können sehen, dass es
mir beim Original wieder antwortet. Aber wenn wir es noch einmal tun, haben wir an einem anderen
Spawnpunkt
reagiert. Das war's also für diese Lektion. Hoffentlich fanden Sie
die Informationen nützlich und wissen jetzt, wie
Sie ein Reaktionssystem
für Ihre zukünftigen Projekte einrichten können.
57. Gameplay-Systeme (Crouching): Hallo zusammen. In dieser Lektion zeige
ich dir, wie
du ein hockendes
System für deine Charaktere einrichtest. Jetzt können Sie alle geduckten
Animationen verwenden, die Sie mögen. Ich werde
die Unterrichtsanimationen verwenden , die wir zuvor
im Kurs verwendet haben. Und um
diese herunterzuladen, gehen Sie einfach auf den Link in der
Kursbeschreibung. Sie können diese Datei herunterladen dann extrahieren,
und am
Ende sollten Sie einen Ordner haben, der so
aussieht. Jetzt werden wir
diese zu unserem Projekt hinzufügen. Also klicken wir nur
mit der rechten Maustaste und kopieren. Dann geh zurück zum Motor. Dann klicken wir hier mit
der rechten Maustaste auf den Inhaltsordner. Und wir wollen im Explorer
zeigen gehen. Und das wird
unsere Projektdateien hier aufrufen. Und die
fügen wir einfach rein. Jetzt können Sie sehen, dass es hier im Motor angezeigt wird
. Jetzt können Ihre Firewalls
enthalten oder auch nicht. Wenn wir es also öffnen,
können Sie sehen, dass meine funktioniert, aber wenn Ihre
keine Animationen enthält, schließen Sie
einfach die Engine und öffnen
Sie sie erneut und
sie sollte angezeigt werden. Das erste, was
Sie tun müssen, ist einen neuen Verschmelzungsraum zu
erstellen, da die Unterrichtsanimationen eigentlich
keinen vorgefertigten Verschmelzungsraum
für unser Hocken enthalten, aber alle die Animationen, die wir
brauchen, um eine zu erstellen. Es wird also
ein neuer Verschmelzungsraum geschaffen. Jetzt klicke ich einfach
auf Hinzufügen gehe
dann zur Animation. Und wir wollen hier die Option
Verschmelzungsraum finden. Und wir müssen
unser Charakter-Skelett auswählen. Also das ist dieser hier. Sie können sehen, dass es Pfadspiel,
Charaktere, Schaufensterpuppen
und dann Maschen sagt . Also wählen wir das aus. Und wir werden diesen Verschmelzungsraum
benennen, ducken so. Und das machen wir auf. Ich ziehe meine einfach so
in die obere Leiste. Um loszulegen, müssen
wir
unsere Achse so einrichten , dass wir
mit der Horizontalen beginnen. Das
wird in alle Richtungen gehen. Suchen Sie also nach der Richtung. Wir setzen den
Minimalwert auf minus 180 und dann den positiven
Wert auf positive 180. Und wenn Sie sich erinnern, dass unser
Verschmelzungsraum weniger ist als, Das liegt daran, dass wir in der Lage
sein müssen, eine Animation
für all die
verschiedenen Richtungen festzulegen der Lage
sein müssen, eine Animation
für all die
verschiedenen Richtungen die unser Charakter gehen kann. Als nächstes brauchen wir die vertikale Achse, also öffnen wir sie und
stellen dies als Geschwindigkeit ein. Und wir belassen den
minimalen Achsenwert bei 0. Und dann ist unser maximaler
Achsenwert überall dort, wo Ihre Gehgeschwindigkeit ist
, wenn Sie in der Hocke sind. Wenn wir also auf 300 planen, setzen wir das auf 300. Das ist wichtig, denn
wenn ich das auf 600 setze und wir Animationen für
unser Ducken
auf diesen Wert von 600 setzen . Wenn unser Charakter bei 300
herumlief, als er sich duckte, dann
werden die Animationen, die gespielt werden, hier
im Mittelpunkt stehen. Wenn wir also unten und
oben Animationen hätten, würden
wir die Hälfte der Animationen
von oben und die Hälfte
von unten bekommen . Und dann
würden unsere Animationen nicht sehr gut aussehen. Deshalb möchten wir, dass unser maximaler
Zugriffswert hier oben der maximalen
Gehgeschwindigkeit beim Hocken entspricht. Für mich werde ich
auf 300 einstellen, also setze ich das auch auf 300. Ich werde auch Snap to Grid
sowohl für die vertikale
als auch für die horizontale Achse übernehmen . Wenn Sie sich an
unsere Animationsstunden erinnern, können
wir unseren
Crouch-Animation-Chat eigentlich nicht verwenden da wir unsere
Skelette so einrichten müssen, dass sie kompatibel sind. Um das zu tun, gehen wir
zu Charakteren, dann zu Schaufensterpuppen, Meshes. Wir werden die
SK-Schaufensterpuppe öffnen. Und dann wollen wir hier zu Windows
gehen und dann wollen wir
Asset-Details suchen und das abhaken. Für kompatible Skelette
möchten wir eine neue Option hinzufügen. Und wir möchten, dass
dies das Skelett ist, das mit den Unterrichtsanimationen
geliefert wurde. Das wird also
dieser hier sein, Sie können sehen, dass er weniger Pfad sagt
als Animationen. Also klicken wir darauf. Und dann
retten wir unser Skelett. Und wir können
diese Asset-Details schließen und zu
unserem Verschmelzungsbereich zurückkehren. Damit unsere Animationen jetzt im Asset-Browser angezeigt werden, müssen
wir möglicherweise
unseren Blend Space neu starten, also speichern wir ihn einfach und schließen ihn, und dann öffne ich ihn erneut. Das ist also in meinen
Unterrichtsanimationen. Und wir werden die Blend-Space-Hocke öffnen. Und jetzt sollten wir alle
unsere Animationen hier
im Asset-Browser finden
können . Es beginnt also nur mit der
Suche nach Hocke. Und das sollte all
unsere Hockanimationen hier zeigen . Wir beginnen also mit
der Leerlauf-Animation. Also werde ich diese für
die 0-Geschwindigkeit unten setzen. Also wird es das
Gewehr greifen, sich ducken, leerlaufen und das hier, hier
und hier so einstecken. Als nächstes brauchen wir die
Walk-Forward-Animation, und das wird in der Mitte
sein ,
weil das für Richtung 0 ist. Also
nehmen wir
hier die Ford-Option und ziehen sie so in die
obere Mitte. Dann wollen wir das Rückwärts, also greifen wir das
und das wird
sowohl in der minus eins AT-Richtung
als auch in der positiven 180-Richtung sein. Dann wollen wir die Linke. Also schnappen wir uns die linke Animation
und stecken sie hier ein. Und dann gleich hier drüben. Wenn wir jetzt die Kontrolle behalten, können
wir eine Vorschau unserer Animation und sicherstellen, dass alle korrekt abgespielt werden
, so wie es aussieht. Jetzt können wir das speichern und schließen. Wir sind auch in der Nähe unseres
Skeletts. Und wir werden zum ThirdPersonCharacter
Blueprint
übergehen . Das wird also im
Third-Person-Ordner sein, Blaupausen, und dann
finden wir den Third-Person-Charakter. Jetzt hat unser
Charakter-Blueprint tatsächlich ein eingebautes geducktes
System, das wir verwenden können. Wir
müssen also nur eine Eingabe hinzufügen. Also
suche ich nach Eingaben und dann buchstabieren wir sie und setzen das Eingabeereignis
, das wir kontrollieren. Ich benutze
die linke Steuerung. Dann klicken wir mit der rechten Maustaste
und suchen nach Hocke. Und wir wollen die Hocken-Funktion. Und ich werde
das in gedrückt einstecken und dann mit der rechten Maustaste klicken und
nach in der Hocke suchen. Und wir wollen,
dass die Hockenden so mit
der Veröffentlichung verbunden sind. Derzeit hat dieser
tatsächlich funktioniert, weil unser Charakter das
Ducken nicht aktiviert hat. Also geht es
hier zur
Charakterbewegung und sucht nach kann sich ducken. Und wir wollen
uns
unter solchen
Bewegungsmöglichkeiten ducken können . Jetzt können wir das testen. Wir kompilieren es und klicken auf „Spielen“. Und wenn ich jetzt die Strg-Taste drücke, können
Sie sehen, wie sich meine
Kamera nach unten bewegt. Und wenn ich mich bewege, gehe
ich langsamer,
weil wir
unsere Gehgeschwindigkeit in der Hocke verwenden, aber unsere Animationen
ändern sich tatsächlich , weil wir sie noch nicht
angeschlossen haben. Wir gehen also zum
Animations-Blueprint. Also wird es tatsächlich
planen Editor, gehen Sie zu Charakteren
als Mannequins, als Animationen und öffnen Sie das Geld Animation Blueprint. Und ich werde
meins einfach auf das Top-Paar ziehen. Jetzt haben wir, wie wir es im
Animationsabschnitt dieses Kurses getan haben, unsere Status-Lektion. Wir werden einen neuen Status
für unsere Crunch-Animationen hinzufügen. Also gehen wir zum
Anim-Graphen und dann zur Fortbewegung. Jetzt gibt es
eine ganze Reihe verschiedener Möglichkeiten, dies einzurichten. Wenn Sie hier nachschauen,
haben wir einen Status für alle Animationen, die
Sie tun, und dann gehe
ich mit einem Schrägstrich. Jetzt
hat unser Blend Space tatsächlich die
Idle-Animationen eingebaut. Wir können also einfach einen
Zustand zum Hocken benutzen. Und es wird aktualisiert
, ob wir uns
bewegen oder nicht . Aber wenn Sie
einen Verschmelzungsbereich verwenden , der diese Animationen
im Leerlauf nicht hatte. Und dann bräuchtest du
einen geduckten Ruhezustand und einen geduckten Bewegungszustand, wie wir es für unseren normalen Leerlauf tun. Und dann gehe ich mit einem Schrägstrich. Für uns. Wir klicken einfach mit der
rechten Maustaste und verwenden den Staat. Und wir werden das Hocken so nennen
. Wir öffnen es und schließen unseren Verschmelzungsraum an,
damit er sich herauszieht und der Raum verschmilzt. Und wir wollen Linspace
Claire hier haben. Und dann wollen
wir im Detailbereich den Verschmelzungsbereich auf unseren
verschmelzenden Raum in die Hocke setzen . Sie können sehen, dass es
für Richtung und Geschwindigkeit aktualisiert wurde. Wir werden einfach kompilieren und
wir werden unsere Geschwindigkeit bekommen. Also ziehen wir uns hin
und bekommen Geschwindigkeit. Und wir
werden die Startgeschwindigkeit verwenden. Jetzt müssen wir
eine Richtungsvariable einrichten. Also machen wir das jetzt weiter dem Event Graph und wir werden eine neue Variable
erstellen. Wir nennen diese Richtung. Wir müssen das
auf einen Float wie diesen setzen. Jetzt
fügen wir auch eine weitere Variable wenn der Charakter in der Hocke
ist. Also werden wir ein
neues erstellen und das
nennen wir hocken. Und das werden wir auch festlegen. Wir brauchen das, um so ein
Boolean zu sein. Um unsere Richtung zu bekommen, brauchen
wir jetzt unsere Geschwindigkeit. Also klicken wir mit der rechten Maustaste
und erhalten Geschwindigkeit. Und das sollte
hier ganz unten sein. Dann ziehen
wir uns heraus und suchen nach berechneter Richtung. Dies wird unsere Geschwindigkeit
und die
Rotation und Rückkehr
unserer Charaktere und die Richtung für uns erfordern. Also brauchen wir
die Zeichenvariable. Also werden wir Charakter bekommen. Und dann
wollen wir eine Rotation bekommen. Wir wollen den Akt der Get's Rotation und stecken das
in die Basisrotation. Und dann können
wir aus unserer
Berechnungsrichtung heraus unsere Richtung festlegen. Also werden wir die Richtung festlegen. Wir können das mit unseren Sequenzen verbinden. Also füge ich einen neuen Pin hinzu,
stecke ihn hier ein
und füge hinzu, um Wissen
umzuleiten, nur um die Dinge so aufgeräumt zu halten. Jetzt müssen wir R in die
kauernden Variablen setzen, also ziehen wir das hinein
und erstellen einen gesetzten Knoten. Dann kriegen wir Bewegung. Und wir wollen die Komponente „
Lückenbewegung“. Davon
werden wir uns ducken. Buchstabiere richtig ducken. Und wir wollen den
hockenden Knoten hier. Und wir
stecken das einfach in die
Hocke und fügen dann
einen neuen Stift hinzu, um ihn zu sequenzieren und
verbinden ihn hier oben. Nochmals, ich werde jetzt einfach eine Umleitung
hinzufügen, nur um die Dinge
ein bisschen zu ideell aussehen zu lassen. Jetzt können wir in unseren Zustand der Hocke zurückkehren
. Und hier müssen wir die
r-Richtung so einstecken. Und dann können wir kompilieren. Und jetzt müssen wir die Regeln
aufstellen, die tatsächlich für
die Menge von Interesse sind. Also gehen wir zur Fortbewegung. Dann ziehen wir vom
Leerlauf in die Hocke, und wir ziehen auch von Gehen, Schrägstrichlauf bis Hocken. Und wir werden die Regel des
Leerlaufs öffnen, um sich zu ducken. Dann
wollen wir hier nur noch das
Hocken bekommen und es
in die variable Hüfte stecken. Und dann machen wir
dasselbe in unserem Walk Slash Rum. Und das schließen wir hier ein. Dann brauchen wir Regeln
, um von
unserer Hocke in unseren Leerlauf
oder Walk Slash Run zurückzukehren . Also ziehen wir uns von Crouch in den Leerlauf und
öffnen dann diese Regel. Und dann wollen
wir einfach nur hocken, stimmt nicht. Also ziehen wir uns raus und machen kein Beryllium und stecken das hier rein. Und dann wollen wir dasselbe
tun. Wir haben uns von Crouch
zu Walk Slash Run gezogen. Öffne diese Regel. Und hier wollen wir
das Gleiche tun ist hocken, nicht wahr, also werden wir es
ausprobieren und nicht Boolean. Aber wir wollen auch
überprüfen, ob wir umziehen? Also ziehen wir uns von hier weg
und machen es und stecken das hier ein. Und dann wollen
wir uns bewegen,
also sollten wir umziehen,
steck das hier rein. Also sollte es so aussehen. Jetzt wird kompiliert und wir können das
tatsächlich testen. Also wählen wir die
Variable ist hockend aus, nimm das an. Sie können sehen, dass es auf
und ab geht, wie es sollte. Also werden wir das kompilieren und
tatsächlich im Spiel testen. Damit es auf
unsere Karte geht, klicken Sie auf „Spielen“. Und jetzt, wenn ich die Strg-Taste drücke, können
Sie sehen,
dass wir uns tatsächlich ducken , die
Leerlaufanimation abgespielt wird. Wenn ich vorwärts
und Seite an Seite gehe, werden auch
Bewegungsanimationen abgespielt. Derzeit blickt unser Charakter nur noch in die Richtung
, in die wir uns bewegen. Und der Grund
dafür ist, wenn Sie sich erinnern, ich bin gegangen Slash Run
Blend Space ist ein 1D, also hat es nur vorwärts
und rückwärts. Es gibt keine
Side-Side-Animationen wie unsere Hocke. Wenn wir also
unsere Seitenanimationen
abspielen wollen , während wir in der Hocke sind, müssten
wir die
Bewegungseinstellungen
unseres Charakters ändern . Um das zu tun, werden Planeten
ausatmen, und wenn wir zu
unserem ThirdPersonCharacter zurückkehren, können
wir die
Charakterbewegung auswählen. Und hier suchen
wir nach orientierter Rotation zur Bewegung. Sie können sehen, dass es
derzeit aktiviert ist,
was bedeutet, dass der Schauspieler immer dann, wenn sich unser
Charakter in eine Richtung bewegt, in
diese Richtung zeigt. Schalten Sie das aus und
kompilieren Sie auf Play. Du wirst sehen, dass
unser Charakter nicht mehr in die Richtung
blickt, in die
wir uns
bewegen, wenn ich mich von einer Seite unser Charakter nicht mehr zur anderen bewege. Und der Grund, warum ich das mache, ist dass wir nur Vorwärts
- und Rückwärts-Animationen haben. Aber wenn wir uns ducken und
uns von einer Seite zur anderen bewegen, können
Sie sehen, dass unser Charakter tatsächlich die
richtigen Animationen platziert. Und das liegt daran, dass wir
einen 2D-Verschmelzungsraum mit
Animationen für jede Richtung hocken . Wenn ich die Kamera jetzt
in eine andere Richtung schaue, spielt
es keine Rolle, wohin ich schaue. Unser Charakter
wird immer auf die gleiche Weise konfrontiert sein. Was wir also tun können, um
dies zu ändern , ist, hier zum
ThirdPersonCharacter zu gehen und
dann
hier die oberste Komponente auszuwählen, dann
hier die oberste Komponente auszuwählen um unsere Kostenstandardwerte zu erhalten. Und dann können wir hier nach
York suchen und die Controller-Rotation übernehmen. Wenn wir jetzt auf
Kompilieren klicken und auf Spielen klicken, können
Sie sehen, dass ich mich von einer Seite zur anderen
bewegen kann und Schrägstrich nicht
sehr gut läuft , aber unsere Hocke schon. Und wenn ich in eine
andere Richtung schaue, sieht
man, dass unser
Charakter tatsächlich in diese Richtung
schaut. So können wir die Richtung ändern, in die
wir jetzt schauen. Natürlich können Sie all diese
Einstellungen
während der Laufzeit ändern , wenn
bestimmte Dinge passieren. Vielleicht wolltest du zum Beispiel
nur die Drehung
auf Bewegung ausrichten aktivieren oder deaktivieren, wenn du dich duckst.
Du könntest das tun, indem du einfach die
Charakterbewegung hier
abrufst, herausziehst und
suchst orientieren Sie sich, scrollen Sie nach unten. Und Sie können die Ausrichtung der
Rotation auf Bewegung setzen. Wir können dies auf wahr setzen, wenn wir uns ducken, und auf unwahr
, wenn wir uns ducken. Oder wir könnten das ändern. Sie stellen hier ein, dass wir
innerhalb unserer Klassenstandardwerte aktiviert sind. Das könnten wir ändern. Also könnten wir einstellen, die
Kontrolle der Rotation verwenden. Du bist, und wir können das ein- oder
ausschalten, wann immer wir wollen. All diese Einstellungen sind
persönliche Vorlieben. Es hängt ganz davon ab, wie
sich Ihr Charakter bewegen soll und wie der Spieler ihn steuern kann
. Nun, wenn Sie die
Bewegungsgeschwindigkeit
Ihres Charakters in der Hocke ändern möchten, können
wir das in der
Charakterbewegung hier tun, wodurch diese Suche beseitigt wird. Wir können einfach nach der Hocke
suchen und die maximale
Gehgeschwindigkeit
finden Sie hier. Sie können auch Ihre
geduckte halbe Höhe ändern. So groß wird also
die Kapselkomponente innerhalb des Charakters
sein, wenn Sie in der Hocke sind. Und Sie können auch drehen
, ob der Charakter wild hockend von einem Felsvorsprung gehen
kann oder nicht. Auch diese Dinge können im Code geändert
werden. Sie können einfach die
Charakterbewegungskomponente
greifen , herausziehen , die maximale Hocke einstellen und
die maximale Gehgeschwindigkeit im
Code ändern ,
wenn Sie möchten. Nun zum Schluss, vielleicht möchten
Sie die
Hocke so einrichten , dass sie umschalten
statt halten. können wir machen. Also
löschen wir diesen Code hier und trennen sie
vorerst und verschieben sie zurück. Wir verwenden gedrückt und
machen einen Zweigknoten. Und hier wollen wir überprüfen, ob
der Charakter
gerade geduckt ist . Um das zu tun, werden
wir Charakterbewegungen
bekommen, die Hocken bekommen oder Hocken wird das hier
reinstecken. Und wenn wir gerade hocken,
als wir uns ducken wollen, und wenn wir gerade nicht
hocken, wollen wir uns ducken. Also wird es
diese so neu anordnen. Wenn ich jetzt auf „Spielen“ klicke, wirst
du sehen, ob ich die Hocke drücke. Ich bleibe in der Hocke. Und
wenn ich mich in die Hocke krieche, gehen
wir aus Crouch raus und müssen
es nicht mehr gedrückt halten. Das ist also das Ende
dieser Lektion. Hoffentlich
verstehst du jetzt, wie du
ein einfaches Hockensystem für
deine zukünftigen Charaktere einrichtest .