Unreal Engine 5: Erste Schritte mit Blueprints | Defuse Studios | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Unreal Engine 5: Erste Schritte mit Blueprints

teacher avatar Defuse Studios

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Intro (Vorschau)

      2:29

    • 2.

      Intro (Übersicht)

      3:05

    • 3.

      Intro (Erstelle von Blueprints)

      12:29

    • 4.

      Intro (Event

      7:58

    • 5.

      Variablen (Übersicht)

      6:03

    • 6.

      Variablen (Booleans)

      9:56

    • 7.

      Variablen (Ganzzahlen und Schwimmer)

      18:18

    • 8.

      Variablen (Namen, Text und Zeichenfolgen)

      14:40

    • 9.

      Variablen (Vektoren, Rotatoren und Transformationen)

      25:05

    • 10.

      Variablen (Schauspieler und Objekte)

      12:55

    • 11.

      Variablen (Arrays und Schleifen)

      21:40

    • 12.

      Grundlagen (Funktionen)

      18:04

    • 13.

      Grundlagen (Makros)

      10:10

    • 14.

      Grundlagen (Strukturen und Enen)

      17:40

    • 15.

      Grundlagen (Veranstaltungen)

      9:51

    • 16.

      Grundlagen (Erbe des (Blueprint

      11:51

    • 17.

      Grundlagen (Casting)

      17:15

    • 18.

      Grundlagen (Event

      17:07

    • 19.

      Grundlagen (Schnittstellen)

      11:02

    • 20.

      Grundlagen (Komponenten)

      17:06

    • 21.

      Grundlagen (Player

      14:58

    • 22.

      Grundlagen (GameMode)

      8:16

    • 23.

      Grundlagen (Utility

      9:44

    • 24.

      Grundlagen (Game

      10:31

    • 25.

      Zusätzliche Kursinhalte (Spuren)

      20:09

    • 26.

      Zusätzliche Kurse (Daten-Tabellen)

      17:54

    • 27.

      Zusätzliche Kurseinheiten (Overlap

      6:31

    • 28.

      Zusätzliche Unterrichtsstunden (Eingaben)

      12:57

    • 29.

      Zusätzliche Unterrichtsstunden (Verbesserte Eingaben)

      24:32

    • 30.

      Zusätzliche Unterrichtsstunden (Schlagwörter)

      8:46

    • 31.

      Zusätzliche Lektionen (Spawning

      10:45

    • 32.

      Zusätzliche Kurse (Code

      11:08

    • 33.

      Zusätzliche Kurse (Debug

      15:57

    • 34.

      Zusätzliche Kursinhalte (Zeitpläne)

      21:34

    • 35.

      Zusätzliche Kursinhalte (Sockel)

      19:26

    • 36.

      Zusätzliche Kursinhalte (Bewegungskomponente)

      14:47

    • 37.

      Zusätzliche Unterrichtsstunden (Audio-Effekte)

      24:47

    • 38.

      Zusätzliche Kursinhalte (Partikeleffekte)

      13:56

    • 39.

      Widgets (Übersicht)

      10:09

    • 40.

      Widgets (Layouts)

      19:46

    • 41.

      Widgets (Widgets erstellen)

      18:38

    • 42.

      Widgets (Bindungen)

      9:58

    • 43.

      Widgets (Grenzen, Überlagerungen und Raster)

      15:11

    • 44.

      Widgets (Drag & Drop)

      18:55

    • 45.

      Animation (Übersicht)

      15:18

    • 46.

      Animation (Montages)

      18:30

    • 47.

      Animation (Mischknoten)

      15:13

    • 48.

      Animation (Notifies)

      16:41

    • 49.

      Animation (Staaten)

      15:12

    • 50.

      Animation (Blende Räume)

      14:28

    • 51.

      Animation (Aim

      18:19

    • 52.

      Animation (Kurven und Metadaten)

      10:37

    • 53.

      Gameplay-Systeme (Interaktion)

      24:40

    • 54.

      Gameplay-Systeme (Schaden)

      32:19

    • 55.

      Gameplay-Systeme (Health

      9:42

    • 56.

      Gameplay-Systeme (Respawning)

      18:36

    • 57.

      Gameplay-Systeme (Crouching)

      14:16

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

1.047

Teilnehmer:innen

--

Projekt

Über diesen Kurs

Erste Schritte mit Blueprints

In diesem Kurs beginnen wir mit den Grundlagen wie der Blaupausen und der Navigation im blueprints in Unreal Engine 5, bis hin zur Erstellung von Spielsystemen und dem Lernen, wie man viele der Hauptmerkmale von Blaupausen verwendet.

Das Ziel dieses Kurses ist es, dir nützliche Informationen und Kenntnisse zu vermitteln, damit du deine eigenen Gameplay-Systeme für dein zukünftiges Projekt planen und erstellen kannst, sowie andere peoples lesen, die den Lernprozess wirklich beschleunigen können. Kein vorheriges Programmierwissen erforderlich!

Was lernst du in diesem Kurs?

  • Was sind Blaupausen
  • So navigieren Sie in der Unreal Engine 5-Blaupause
  • Welche Variablen sind und wie man sie anwenden
  • So verwenden Sie Funktionen, Makros und Veranstaltungen, um dein Projekt sauber und effizient zu halten
  • Die Unterschiede zwischen den blueprints wie Charakteren, Spielmodi und Schauspielern
  • Blueprints Kommunikation einschließlich Casting, Schnittstellen und event
  • So richte ich player ein, einschließlich der neuen Verbesserten Eingaben
  • Wie man eine widget auf einem Bildschirm der Spieler erstellt und einrichtet
  • Die Grundlagen der animation
  • Spawning Partikel und Soundeffekte einschließlich der neuen MetaSounds
  • Wie man eine Gesundheit, Wechselwirkung, health, Schaden Spielsysteme
  • Code

Triff deine:n Kursleiter:in

Teacher Profile Image

Defuse Studios

Kursleiter:in

Hello, I'm James also known as Defuse Studios. I have been a full time Unreal marketplace creator for the last 5 years, and during that time I have provided support to hundreds of beginners learning UE4.

This has helped me gain insight into some of the things people struggle with when learning game development. I hope to use that knowledge in my future course to provide people with the best information possible, in an easy to follow way to help you on your path to creating the next big indie game or get your dream job!

Vollständiges Profil ansehen

Level: Beginner

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

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 .