Unreal Engine 5 Blueprints: Multiplayer 2D RPG Platformer | Pixel Helmet | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


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

Unreal Engine 5 Blueprints: Multiplayer 2D RPG Platformer

teacher avatar Pixel Helmet, Game Developer & Publisher

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.

      Einführung

      2:09

    • 2.

      Unreal Engine herunterladen

      1:51

    • 3.

      Erstellen eines neuen Projekts

      2:13

    • 4.

      Unreal Engine 5 Übersicht

      17:37

    • 5.

      Schaffung eines neuen Levels

      2:07

    • 6.

      Import der Umweltgüter

      3:11

    • 7.

      Erstellen eines a

      3:07

    • 8.

      Erstellen einer Tile

      4:31

    • 9.

      Gestaltung der Umwelt

      14:07

    • 10.

      Das Flackern entfernen

      2:12

    • 11.

      Platzieren der Tile auf dem Level

      4:07

    • 12.

      Volumen des Prozesses

      5:34

    • 13.

      Anti-Aliasing entfernen

      2:06

    • 14.

      Zusammenstöße hinzufügen

      8:26

    • 15.

      Sprites erstellen

      5:12

    • 16.

      Flipbooks erstellen

      2:46

    • 17.

      Blueprint Einführung

      1:08

    • 18.

      Blaupause Kurse

      5:23

    • 19.

      Spielmodus und Player

      3:47

    • 20.

      Eltern- und Child

      5:12

    • 21.

      Blueprint Graph Übersicht

      4:16

    • 22.

      Veranstaltungen und Funktionen

      7:51

    • 23.

      Variablen

      17:22

    • 24.

      Setting

      8:15

    • 25.

      Grundlegende Spielerbewegung

      6:18

    • 26.

      Spieler springen

      8:29

    • 27.

      Animationen für die Bewegung von Spielern

      22:49

    • 28.

      Spieler springen Animationen

      8:25

    • 29.

      Benutzerdefinierte Variable Eingabe

      4:27

    • 30.

      Strukturen

      4:33

    • 31.

      Die Zeichenbewegung abschließen

      8:30

    • 32.

      Das zweite Zeichen erstellen

      6:52

    • 33.

      Hinzufügen von Jump

      21:21

    • 34.

      Blueprint Schnittstelle

      8:42

    • 35.

      Widget Blueprint Einführung

      6:32

    • 36.

      Zeichenauswahl UI

      18:34

    • 37.

      Benutzeroberfläche in den Viewport hinzufügen

      7:33

    • 38.

      Zeichenauswahl

      27:33

    • 39.

      UI aus dem Viewport entfernen

      3:12

    • 40.

      Den Spawn erstellen

      12:06

    • 41.

      Erstellen des Camera

      2:02

    • 42.

      Die Kamera Spawning

      11:00

    • 43.

      Die Position der Kamera aktualisieren

      12:24

    • 44.

      Verstecken der Camera

      15:52

    • 45.

      Verbesserung der Kamerabewegung

      8:25

    • 46.

      Kartengrenzen hinzufügen

      2:14

    • 47.

      Die Enemy erstellen

      4:06

    • 48.

      Einrichtung der feindlichen Pfauen

      3:26

    • 49.

      Navigation Mesh Grenzen Volumen

      3:37

    • 50.

      AI

      1:52

    • 51.

      Tafel und Verhaltensbaum

      3:20

    • 52.

      Einen zufälligen Punkt in beweglichem Bereich finden

      19:04

    • 53.

      Feindlicher Bewegungszustand

      13:39

    • 54.

      Beheben von Bewegungen Fehler und Clipping

      3:03

    • 55.

      Hinzufügen des Rope

      5:14

    • 56.

      Rope überlappt Ereignis

      12:36

    • 57.

      Auf- und Abbewegung

      4:08

    • 58.

      Climb Conditioning

      19:06

    • 59.

      Aktualisieren des Bewegungsmodus des Spielers

      14:40

    • 60.

      Climbing aufzählung

      7:51

    • 61.

      Benutzerdefinierte Collision

      6:39

    • 62.

      Anpassen des Climb Standorts

      10:10

    • 63.

      Herausnehmen Klettern aufs Spammen

      7:53

    • 64.

      Verursachen der kletternden Animation

      14:04

    • 65.

      EXTRA: Bereinigen deiner Codes

      11:27

    • 66.

      Die Flipbooks vorbereiten

      7:25

    • 67.

      Hinzufügen der Attack

      9:44

    • 68.

      Für jede Schleife

      3:01

    • 69.

      Spieler anwenden

      14:35

    • 70.

      Angriff Animation stoppen

      3:38

    • 71.

      Feind erhalten Schaden

      8:36

    • 72.

      Feindlicher Treffer

      9:56

    • 73.

      Stopping in den Baum

      7:14

    • 74.

      Feind den Spieler jagen

      6:22

    • 75.

      Feindliche Verfolgung des Spielers

      14:00

    • 76.

      Feind anwenden

      9:27

    • 77.

      Spieler erhalten Schaden

      8:51

    • 78.

      Spieler Gott Modus

      4:07

    • 79.

      Spieler treffen VFX

      15:22

    • 80.

      Spieler treffen Impuls

      10:18

    • 81.

      Spieler Tod

      17:52

    • 82.

      Die Haupt-Benutzeroberfläche erstellen

      17:18

    • 83.

      Hinzufügen der Haupt-Benutzeroberfläche in den Viewport

      5:16

    • 84.

      Aktualisieren der Health

      15:42

    • 85.

      Den Death aktualisieren

      11:14

    • 86.

      Spieler Respawn

      10:53

    • 87.

      Bestehende Fehler beheben

      26:27

    • 88.

      Player auf dem Tod entfernen

      3:43

    • 89.

      Feindlicher Tod und Respawn

      19:10

    • 90.

      Feindlicher Respawn verblassen

      14:13

    • 91.

      Platzierung auf feindlicher Ebene

      6:54

    • 92.

      Hit, Tod & Respawn SFX

      16:58

    • 93.

      Fixieren des Ladder Death Bugs

      14:30

    • 94.

      Strukturen mit Erfahrung

      3:49

    • 95.

      Einführung in die Datentabellen

      3:04

    • 96.

      Datentabellen durch Google Sheets

      6:01

    • 97.

      Erstellen einer Funktionsbibliothek

      7:19

    • 98.

      Fügen Sie Erfahrung auf feindlichem Tod

      3:31

    • 99.

      Das Erlebnis aktualisieren

      2:19

    • 100.

      Level aktualisieren

      8:10

    • 101.

      Erstellen der Level

      4:41

    • 102.

      Level UI Funktionalität

      6:54

    • 103.

      Vervollständigung des Leveling

      6:28

    • 104.

      SFX und VFX aufheben

      10:37

    • 105.

      Fixieren der letzten Fehler

      10:31

    • 106.

      Die sich bewegende Text erstellen

      6:29

    • 107.

      Hinzufügen von UI Animation

      5:49

    • 108.

      Schwebende Text

      4:19

    • 109.

      Erstellen des schwimmenden Text

      7:01

    • 110.

      Schwebender Text Logik

      7:30

    • 111.

      Schwebende Text

      7:19

    • 112.

      Floating Text

      8:39

    • 113.

      Actor

      2:43

    • 114.

      Das Projekt bereinigen

      5:36

    • 115.

      Nützliche Ressourcen

      5:57

    • 116.

      Zukünftige Kursinformationen

      2:14

  • --
  • 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.149

Teilnehmer:innen

5

Projekte

Über diesen Kurs

****IMMER AKTUELL mit neuen Kursen ****

Beginne deine game mit Unreal Engine 5.

Unreal Engine 5 Egal, ob du ein Anfänger und Programmierer, oder Designer bist, Unreal Engine 5 bietet dir alles, was du brauchst, eine der beliebtesten und am meisten verwendeten Spielautomaten von Profis zu sein. Dieser Kurs ist für alle an der Spieleentwicklung für alle Skill-Levels beteiligt, da wir nicht nur programmieren, sondern ein 2D-Spiel von Anfang bis Ende entwickeln und entwickeln.

Springe mit seiner Schlüsselfunktion direkt in die game ein: Unreal Engine 5 Blaupausen. Programmiere ein komplettes Spiel ohne das Schreiben einer einzigen Zeile Code Keine Erfahrung nötig!

Viel Spaß beim schnellen Lernen mit einem Unreal Engine 5 Multiplayer 2D RPG Plattformer. Du wirst sehen, wie einfach es ist, in den ersten Schritt zu gehen und wie schnell du deine eigenen Spiele erstellen kannst. Verwenden Sie die gleichen Tools AAA-Studios in ihren blueprint Alles ist kostenlos.

Am Ende dieses Kurses hast du einen 2D RPG Platformer der Unreal Engine 5 mit einem Multiplayer 2D Engine erstellt und codiert, der einfach und detailliert in Videos verfolgt wird. Du lernst neue Workflows, Tools und Fähigkeiten, um deine eigenen 2D-Spiele in Unreal Engine 5 zu machen.

Dieser Kurs umfasst alles, was du wissen musst, um 2D-Spiele zu entwickeln, darunter:

  • Unreal Engine 5 Übersicht und Navigation

  • Unreal Engine 5 Pläne

  • Unreal Engine 5 Multiplayer

  • Import von 2D-Assets

  • Umweltdesign mit Fliesen und tilemaps

  • Zeichenerstellung & Bewegung (springen, laufen, schlagen, schlagen..)

  • Feinde Erstellung mit Unreal Engine AI

  • Zeichenanimation mit Sprites & Flipbooks (für Spieler und Feind)

  • Unreale Engine Gesundheit und damage (für Spieler und Feind)

  • Erfahrung und Levelsystem

  • Benutzerschnittstellen (Gesundheit und Erfahrung Balken, bars, character ..)

  • Video- und Soundeffekte (VFX und SFX)

  • Unreal Engine Kamerasystem

  • Climbing für Seile und Leitern

  • Schwebender Kampftext

  • Nützliche Ressourcen (die deinen game erleichtern

Außerdem stelle ich dir das fertige Projekt zur Verfügung, damit du es nach Belieben prüfen kannst, während du den Kurs befolgst.

Lerne die beste game von einem veröffentlichten Entwickler an.

Mein Name ist Moustafa und ich bin der Direktor und Entwickler von Farmtale auf Steam mit den Unreal Engine Blueprints. Mit jahrelanger Erfahrung in der Spieleentwicklung und in der Unterricht, bin ich für dich bei jedem Schritt der Art. Es gibt viele Möglichkeiten, Spiele zu entwickeln und zu codieren, einige besser als andere. Ich zeige dir verschiedene Optimierungstools und Tipps, um spielfertige Leistung zu erzielen.

Melde dich jetzt an, erhalte Zugang zu unserer exklusiven game und siehst echte Ergebnisse.

Bis in den Kurs 1!

Moustafa Nafei

Triff deine:n Kursleiter:in

Teacher Profile Image

Pixel Helmet

Game Developer & Publisher

Kursleiter:in

Pixel Helmet is a video game developer and publisher based in Denmark. We have recently released our first game Farmtale on the Steam platform.

We decided to get on Skillshare to create high-quality courses and share our knowledge with the game development community. Learning can be tedious at times and we aim to create a fun learning experience.

We offer to create courses within Modeling, Texturing, Unreal Engine, Blueprints, C++, Game Design, and much more. If you need any help during a course, please let us know through Skillshare or connect with us on Discord, Twitter, or LinkedIn.

Vollständiges Profil ansehen

Level: All Levels

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. Einführung: In diesem Kurs lernen wir, wie man einen Multiplayer für die Pixel außerhalb der Plattform entwickelt, indem wir Blueprints und Unreal Engine Phi Phi Phi verwenden, um Plattform entwickelt, indem wir Blueprints und Unreal Engine Phi Phi Phi verwenden eine Mini-Version des bekannten 2D-Spiels Maple Story nachzubilden . Dieser Kurs enthält alles, was Sie wissen müssen, um mit dem Multiplayer zur Spieleentwicklung in Unreal Engine Five zu beginnen Multiplayer zur Spieleentwicklung , einschließlich und Unreal Engine Five, Überblick und Navigation. Importieren in das Asset-Umgebungsdesign mithilfe von Kachelkarten, oder? Einige kippen Bücher um, um die Pixel-Assets zu animieren. Die Grundlagen von Blaupausen, Charaktererstellung und Bewegungen wie Springen, Laufen und Schlagen eines Kamerasystems für den Charakter, wodurch Feinde durch die Arbeit mit KI geschaffen werden. Blendende Mechanik für Seile und Buchstaben. Gesundheitsschaden und Tod sind sowohl der Spieler als auch der Feind. Und erleben und nivellieren System, Erstellen von Benutzeroberflächen, Laden von Kampf, Text, visuellen Effekten und Soundeffekten sowie nützliche Ressourcen, die Ihnen bei Ihrem Spielentwicklungsprozess helfen . Ich stelle Ihnen auch das fertige Projekt zur Verfügung, damit Sie es nach Ihren Wünschen überprüfen können, während Sie dem Kurs folgen. Mein Name ist die meiste Angelegenheit und ich bin CEO, Spieldirektor und Designer von Pixelhelmen. Ich arbeite seit acht Jahren in Unreal Engine und habe kürzlich Fan Tail on Steam veröffentlicht , der sehr positiv zugenommen hat. Ich habe auch zwei Jahre damit verbracht, mein persönliches Projekt Board Craft zu entwickeln . Und momentan lege ich Regie und programmiere den neuen Titel meines Unternehmens , der ein unangekündigter 3D-Platformer ist. Am Ende dieses Kurses können Sie getrost Ihr eigenes Multiplayer-2D-Spielprojekt von Grund auf neu erstellen . Ich habe diesen Kurs für alle entwickelt, die daran interessiert sind, Spiele zu entwickeln, und Unreal Engine fünf kämpft damit, ein Spiel zu entwickeln , das den aktuellen Industriestandards entspricht. Ich hoffe, du meldest dich an und begleite mich an diesem Kurs. Und denken Sie daran, dass ich während des gesamten Kurses hier bin , um Ihnen zu helfen. Ich hoffe, wir sehen uns bald. 2. Unreal Engine 5 herunterladen: Gehen Sie Install Unreal Engine fünf, Sie müssen zu Epic Games.com gehen. Also, richtig, Epic Games.com, innerhalb Ihres Internetbrowsers. Und drinnen von hier haben Sie rechts einen blauen Knopf namens Download. Wenn Sie also auf diesen Download-Button klicken, wird der Epic Games Launcher installiert. Jetzt werde ich die Installation abbrechen , weil ich sie bereits installiert habe. Und hier ist der Launcher auf meinem Desktop. Also werde ich den Epic Games Launcher starten. Jetzt werden Sie aufgefordert, sich anzumelden, und Sie können sich mit einem kostenlosen Epic Games-Konto anmelden, wenn Sie keines haben Sie können sich auch mit allen anderen Optionen anmelden. Aber ich melde mich mit meinem Epic Games-Konto an, weil ich bereits eines erstellt habe. Wenn ich hier klicke, schreibe ich meine E-Mail und führe mein Passwort aus. Und sobald Sie sich beim Epic Games Launcher angemeldet haben, sieht es so aus. Was Sie tun möchten, ist, auf diese Registerkarte Unreal Engine zu klicken. Und drinnen hier möchten Sie auf die Bibliothek klicken. Anstelle der Bibliothek können Sie alle Epic Game alle Unreal Engine-Versionen anzeigen . Und Sie können auf diesen Plus-Button klicken, wenn Sie die Unreal Engine-Version installieren möchten. Wenn Sie darauf klicken, können Sie sehen, wie diese angezeigt wird und auf die Nummer klicken, können Sie auswählen, welche Version von Unreal Engine Sie installieren möchten. Jetzt können Sie sehen, dass ich die Unreal Engine 55.2 bereits installiert habe. Dies könnte eine andere Zahl sein wenn Sie dieses Video ansehen, vielleicht ist es 0.4 oder 5.1, und das spielt keine Rolle. Dieser Kurs wird mit jeder Version funktionieren , die Sie hier installiert haben. Stellen Sie also einfach sicher, dass Sie Unreal Engine fünf hier unten installieren . Sie können Ihre vorherigen Projekte sehen. Dies sind also meine vorherigen Projekte und dies wird leer sein, wenn Sie die Engine noch nicht benutzt haben. Sobald Sie Unreal Engine fünf installiert haben , machen wir weiter. 3. Ein neues Projekt erstellen: Lasst uns weitermachen und Unreal Engine Five starten. Sobald Sie die Engine gestartet haben, erscheint dieses Fenster. Hier. Du kannst deine letzten Projekte eröffnen, aber im Moment erstellen wir ein ganz neues Projekt und ein ganz neues Spiel. also hier auf den Tab Spiele klicken, können Sie auch ein unerbittliches sehen, Sie können Dinge wie Film und Video, Automobil, Design, Architektur und so weiter machen . So sehr cool. Aber im Moment interessieren wir uns für Spiele. Wenn Sie also hier und rechts klicken, sehen Sie verschiedene Vorlagen , mit denen Sie beginnen können. So können Sie beispielsweise mit einer Ego-Vorlage beginnen. Wenn Sie einen Ego-Shooter erstellen, können Sie mit einer Vorlage für Dritte, einer Fahrzeugvorlage usw. beginnen . Aber Sie können sehen, dass es keinen für Picks-Slot oder ein 2D-Spiel gibt. Und das ist okay. all diesen Vorlagen können Sie sie tatsächlich selbst erstellen, können Sie sie tatsächlich selbst erstellen wenn Sie wissen, was Sie tun. Dies ist also nicht sehr schwer zu erstellen. Und was ich normalerweise für meine Projekte, für meine Kurse mache, beginne ich normalerweise mit einem leeren Projekt weil ich dir alles von Grund auf neu beibringen möchte. Und sobald Sie alles von Grund auf neu gelernt haben, können Sie all diese Vorlagen selbst erstellen. Lassen Sie uns also ein leeres Projekt erstellen. Und für die Codierung wählen wir Blueprint aus. Die Zielplattform ist Desktop, die Qualitätsvoreinstellung ist maximal. Und für diese Daten stimmen Sie zu, wenn dies für Sie angekreuzt ist Nur für Tickets, also haben wir hier nichts. Wir wollen nur ein leeres, leeres Projekt und wählen nun einen Namen für das Projekt aus. Und dafür erstellen wir eine kleine Version einer Ahorngeschichte. Nennen wir es also Maple Story wie diese. Und Sie können natürlich auswählen, wo Sie es speichern möchten. Aber ich speichere es einfach am Standardspeicherort. Also mach weiter und klicke auf Erstellen. Sobald das Projekt gestartet ist, sieht es so aus und es heißt: Möchten Sie dieses Projekt aktualisieren? Ich klicke einfach auf Update. Und für die Plugins klicke ich einfach auf „Verwerfen“. Und das ist wahrscheinlich nicht für den Einsatz geöffnet. Ich verstecke es schnell. Ihr Motor sieht wahrscheinlich so aus. Und jetzt, da wir unser erstes Projekt erstellt haben, gehen wir zur nächsten Lektion über. 4. Unreal Engine 5 Übersicht: Bevor wir mit der Erstellung unseres 2D-Projekts beginnen, wir uns einen kurzen Überblick über diese Engine. Das Wichtigste hier in der Mitte ist das Darstellungsfenster. Und innerhalb des Ansichtsfensters können Sie Ihr Spiel visuell ansehen. Denken Sie daran, dies ist eine 3D-Engine, also befinden wir uns in einer 3D-Welt. Dies ist die Standard-Start-Map innerhalb von Unreal Engine fünf. Und hier innerhalb des View-Ports können Sie herumnavigieren. Halten Sie also die rechte Maustaste gedrückt, halten Sie also die rechte Maustaste gedrückt und klicken Sie auf der Tastatur auf W, um Sie voranzubringen. die rechte Maustaste gedrückt halten und auf S klicken, werden Sie rückwärts bewegt. Sie auf D klicken, gelangen Sie nach rechts und wenn Sie auf A klicken, werden Sie nach links verschoben. Denken Sie also daran, die rechte Maustaste gedrückt zu halten und Sie können sehen, Sie können sich umsehen, Sie können sich bewegen mit W. D ist ein, und das benutze ich die ganze Zeit. So navigiere ich innerhalb des Motors herum. Sie können aber auch die rechte Maustaste gedrückt halten und die linke Maustaste gedrückt halten. also beide Tasten gedrückt halten, können Sie sehen , dass Sie sich auch so bewegen können. Wenn Sie nur die linke Maustaste gedrückt halten, können Sie so vorwärts und rückwärts gehen. die rechte Maustaste gedrückt halten und auf der Tastatur auf E klicken, auf der Tastatur auf E klicken, bewegen wir Sie nach oben und halten die rechte Maustaste gedrückt und klicken, bis ich Sie auf Ihrer Tastatur nach unten bewege. Und als letztes kannst du mit dem Mausrad ein- und auszoomen. Wenn Sie das an Ihrer Maus haben, können Sie ein- und auszoomen. Und wieder ist die grundlegendste Steuerung, die ich verwende, die rechte Maustaste gedrückt zu halten und auf W, D, S und A zu klicken . So finde ich es also, der einfachste Weg zu navigieren, aber Sie sind herzlich willkommen um deinen eigenen Stil zu finden. Das ist okay. Als nächstes haben wir ein paar Schaltflächen hier oben im Ansichtsfenster. also auf den ersten hier klicken , können Sie beispielsweise die Frames pro Sekunde anzeigen und Sie können sehen, wie viele Frames pro Sekunde Ihr Spiel gerade läuft . Also genug darüber jetzt, Lasst uns das FPS entfernen. Es gibt auch etwas, das als Spielansicht bezeichnet wird. Und die Spielansicht erhöht alle Icons im Spiel. Wenn Sie also hier auf dieses klicken, können Sie sehen, dass das Symbol verschwunden ist. Die Verknüpfung ist ein G auf der Tastatur, also klicken Sie auf G. Sie können alle diese Symbole anzeigen und ausblenden. Und das ist ziemlich cool , wenn du dein Spiel tatsächlich ohne Icons visualisieren willst . Du kannst dir vorstellen, wenn du ein großes Spiel hast, kannst du viele Icons in deinem Level haben. Wenn Sie also auf G klicken, können Sie Ihr Spiel ohne all diese Icons sehen . Sie können auch hier unten in den immersiven Modus wechseln, die Verknüpfung ist wenn 11, und dies maximiert das Ansichtsfenster. Klicken Sie also auf G, um die Icons auszublenden. Wenn Sie auf „11“ klicken, wird das Ansichtsfenster minimiert oder maximiert. Und Sie können das Spiel hier im Vollbildmodus ohne Symbole sehen Vollbildmodus ohne Symbole und Sie können sehen, wie es aussieht. Also klicke ich erneut auf F7 und klicke erneut auf G, um die Icons anzuzeigen. Als nächstes befinden wir uns im perspektivischen Modus, aber es gibt auch etwas, das als orthographische Ansichten bezeichnet wird. So können wir das Spiel von links sehen. So sieht es also von links aus. Wenn Sie verkleinern, sieht es so von oben aus und so weiter. Gehen wir zurück in den perspektivischen Modus. Ich möchte dir nur zeigen, dass das existiert. Gehen wir also zurück in den perspektivischen Modus. Sie haben die Anzeigemodi gerade hier wir sehen es im Dalit-Modus an. Mit der Beleuchtung können wir es also auch ohne Beleuchtung beobachten. Wenn Sie also auf unlit klicken, sieht das Spiel aus. Ohne Beleuchtung können Sie sie im Drahtgittermodus verwenden. Sie können in den Lead-Modus zurückkehren und so weiter. Als nächstes, sehr wichtig, haben wir verschiedene Tools, die wir ständig verwenden. Das erste ist das Auswahlwerkzeug. Und bevor ich das mache, wollte ich tatsächlich etwas in meinem Level hervorbringen . Also lasst uns fortfahren und auf diese Schaltfläche „ Zu Projekt hinzufügen“ klicken. Klicken Sie auf hier gehen Shapes. Und ich möchte nur einen einfachen Würfel hinzufügen. Wenn Sie also auf diesen Würfel klicken, wird er Ihrem Ansichtsfenster hier in der Ebene hinzugefügt . Auswahlwerkzeug ist nur ein Werkzeug , mit dem Sie Elemente auswählen können. So selbsterklärend. Wenn Sie auf das Verschieben-Werkzeug klicken, können Sie Elemente verschieben. Klicken Sie also hier auf dieses Feld oder auf diesen Cube, und Sie können hier einen Drehpunkt sehen. Und Sie können aus der verschiedenen Größe ziehen und Sie können es bewegen. Oder wir können darauf klicken, diesen weißen Kreis in der Mitte und Sie können ihn auf einmal in alle Richtungen verschieben. Wenn Sie es jedoch in eine Richtung verschieben möchten, können Sie diese Pfeile ziehen. Als Nächstes haben Sie das Drehwerkzeug. Und wieder können Sie dieses Feld drehen, indem Sie diese Winkel hier ziehen. Und dann haben Sie das Maßstabswerkzeug, mit dem wir die Box in verschiedenen Winkeln skalieren können . Und wenn Sie es wieder einheitlich skalieren möchten, können Sie hier in der Mitte klicken. Und Sie können es auf alle Seiten gleichzeitig skalieren. Jetzt ist es sehr, sehr wichtig, sich an die Verknüpfungen für diese Tools zu erinnern. Wenn Sie also auf der Tastatur auf q klicken, wählen wir das Auswahlwerkzeug aus. auf w klicken, wählen Sie das Verschieben-Werkzeug aus, klicken Sie auf der Tastatur auf E, wir wählen das Werkzeug Drehen aus und klicken auf R, um das Skalierungswerkzeug auszuwählen. Und du kannst sehen, dass es dadurch viel schneller wird. Anstatt hier hochzuklicken und es zu verschieben, klicken Sie erneut hierher und drehen Sie es und so weiter. Das dauert ewig. also auf w klicken, können wir es beispielsweise wie ein E verschieben. Wir können es drehen. auf unsere klicken möchten Sie es vielleicht vergrößern, klicken Sie auf W, um es erneut über den Boden zu bewegen. Und Sie können sehen, dass die Arbeit viel schneller ist, sodass Sie nicht ständig hier hochklicken müssen. Denken Sie jedoch daran, dass Sie die Verknüpfungen Q, W, E und R verwenden können W, E und R Wenn Sie also ein vollständiges Dokument aller dieser Verknüpfungen wünschen, können Sie sie auf meiner Website finden. Als nächstes haben wir die Fangwerkzeuge. Dieser ist also das Move Snapping. Sie können also sehen, wenn ich auf w für mein Verschiebewerkzeug klicke und meine Box bewege, können Sie sehen, dass es sich nicht reibungslos bewegt, es fängt an etwas ein. Und das ist das Fangwerkzeug, wenn Sie es deaktivieren. Wenn Sie also hier klicken, können Sie sehen, dass ich es reibungslos verschieben kann. Wenn ich es wieder aktiviere, schnappe ich jetzt. Sie können dieses Fangen auch erhöhen, indem Sie auf diese Zahl klicken und dann die Zahl erhöhen. Jetzt können Sie sehen, dass es viel mehr schnappt. Und dies ist sehr nützlich , wenn Sie Gegenstände wie nebeneinander an einem bestimmten Ort platzieren möchten . Eine weitere Verknüpfung ist also, dass Sie Alt auf Ihrer Tastatur halten und klicken und ziehen können. Und dies wird im Grunde genommen das Element einfach so kopieren . Und vielleicht möchten Sie Gegenstände wie diese platzieren , wie Alt halten, sie so ziehen und platzieren. Das ist sehr cool, wo man das Schnappen hier benutzen kann. Aber wenn Sie etwas reibungslos verschieben möchten, können Sie es einfach deaktivieren. Und vielleicht möchten Sie es gezielt so platzieren oder was auch immer Sie hier tun. Als nächstes haben wir das Rotationsschnappen. Klicken Sie also noch einmal auf E. Sie können sehen, dass es sich alle zehn Grad dreht. Sie können es deaktivieren und jetzt können wir es reibungslos drehen. Schon wieder. Sie können die Fangmengen auch beispielsweise alle 30 Grad erhöhen . Jetzt schnappt es alle 30 Grad. Jetzt können Sie sie wieder auf den Normalwert setzen, zum Beispiel zehn hier, und das war erst hier. Und das Gleiche gilt für die Skalierung. Sie können auch das Einrasten für die Skalierung machen. Das Letzte, was wir haben, ist die Kamerastrehzahl. Sie können also sehen, wenn ich meine Kamera im Ansichtsfenster bewege, sagen wir, Sie haben diese große offene Welt und es wird ewig dauern, bis ich den ganzen Weg dorthin bewege. So können Sie die Kamerageschwindigkeiten erhöhen. So können Sie es zum Beispiel auf acht setzen. Kann jetzt sehen, dass ich mich in meiner Welt viel schneller bewegen kann. Und das ist sehr nützlich, wenn Sie eine große Welt haben. Aber ich bezweifle, dass wir so viel für unser 2D-Spiel verwenden werden , weil wir nicht wirklich eine so große Welt haben. Aber in einem 2D-Spiel möchten Sie sich vielleicht auf etwas sehr Kleines konzentrieren. Und hier ist es sehr nützlich, die Kamerageschwindigkeit auf etwas sehr Langsames zu reduzieren . Denn vielleicht schaut man sich manchmal in 2D-Spielen sehr kleine Details an. Und das ist gut, um es auf sehr langsam zu setzen, damit es sich tatsächlich in die Nähe von Gegenständen bewegen kann. Okay, genug über das Ansichtsfenster. Dies war das Wichtigste innerhalb des Motors. Hier kannst du das Spiel sehen. Als nächstes haben wir das Detailbedienfeld, und hier können Sie verschiedene Details zu Elementen anzeigen , die Sie im Ansichtsfenster ausgewählt haben. Sie können also sehen, wenn ich hier unten den Boden auswähle, erhalte ich verschiedene Details. Wenn ich diesen Würfel auswähle. Auch hier verschiedene Details. Details wie Standort, wo befindet sich dieser Würfel in meiner Welt? Was ist die Rotation dieses Würfels? Wie hoch ist die Waage? Und denken Sie daran, dass wir diese Würfel skaliert haben. Ich werde meine Kamerastempote nur noch ein bisschen erhöhen . Also dieser Würfel hier, denken Sie daran, dass wir ihn auf und ab skaliert haben. Und wenn Sie es zurücksetzen möchten, können Sie einfach hier zur Skala im Detailbedienfeld kommen . Und du kannst einfach so 111 schreiben. Und jetzt sind wir wieder bei dem , was dieser Würfel war. Es lag also im Maßstab von 111. Wenn Sie sich gedreht haben, können Sie sehen, dass wir den Würfel um zehn Grad und die Z-Achse gedreht haben. Und du kannst sehen, was x ist, indem du die Maus darüber hältst. Die rote ist also die X-Achse und das Grün ist die Y-Achse und das Z ist die blaue. Der blaue hier oben ist das Z, das X ist dieser rote Pfeil, und der grüne hier ist die Y-Achse. Auch hier können Sie die Rotation zurücksetzen, indem Sie 000 schreiben, und jetzt haben wir ihre Rotation zurückgesetzt. Und wenn Sie den Cube an einer bestimmten Stelle platzieren möchten, können Sie den Standort hier bearbeiten. Sie können die Standortbearbeitungen sehen, wenn Sie diesen Cube im Ansichtsfenster so verschieben, schauen Sie sich einfach an, dass es jetzt der Y-Wert ist. Aber wenn Sie es gezielt auf 1 Tausend platzieren möchten, können Sie auch nur tausend so. Und Sie können sehen, dass der Würfel speziell auf 1 Tausend platziert wurde . Es ist also sehr nützlich, das Detailbedienfeld hier zu verwenden. Wenn Sie bestimmte Nummern haben, in denen sich die Artikel befinden sollen. Und wenn Sie nach unten scrollen, können Sie all diese verschiedenen Details sehen diese verschiedenen Details , die Sie zu diesem ausgewählten Element anzeigen und bearbeiten können . Sie sich also vorerst keine Sorgen um all diese Details. Wir werden später im Projekt mit all dem arbeiten . Hier oben im World Outliner kannst du sehen, was du gerade in deinem Level hast. Wenn Sie also zum Beispiel auf diesen Würfel klicken, können Sie sehen, dass er ihn auch innerhalb des Outliners auswählt. Wenn Sie diesen Würfel hier bei ausgewählt auswählen, automatisch innerhalb des Outliners. Sie können die Elemente auch auswählen, indem Sie hier im Outliner klicken. Und ich benutze das hauptsächlich , wenn ich einen bestimmten Artikel finden möchte und auf diesen Artikel klicke. Zum Beispiel ist das Richtungslicht das Sonnenlicht. Und wenn ich darauf klicke, sehe ich, dass es hier unten mit all den anderen Icons ist. Also sehr, sehr einfach. Der World Outliner zeigt alle Elemente an, die Sie derzeit in Ihrem Level haben. Wenn ich auf diesen Würfel klicke und auf meiner Tastatur auf Löschen klicke, klicke ich auch auf diesen Würfel und klicke auf meiner Tastatur auf Löschen. Sie können sehen, dass sie aus dem World Outliner verschwinden weil Sie sie nicht mehr in der Welt haben. Hier oben haben wir die Symbolleiste mit den grundlegenden Schaltflächen. Wenn Sie also auf die Datei klicken, können Sie eine neue Ebene erstellen. Sie können das Projekt auch speichern und ein neues Projekt erstellen. Innerhalb der Bearbeitung haben Sie die Editor-Einstellungen. Und innerhalb der Einstellungen der Registerkarte Bearbeiten können Sie Einstellungen für Ihren Editor bearbeiten. Wenn ich zum Beispiel dieses Feld auswähle, sehen Sie, dass die Auswahllinie orange ist. Ich kann im Grunde hier drauf klicken, diese orange Farbe hier drüben. Ich kann darauf klicken und ich kann die Farbe tatsächlich ändern. Und Sie können sehen, dass ich die Auswahlfarbe in meinem Ansichtsfenster ändern kann . Jetzt musste ich noch nie etwas bearbeiten, also werde ich es tatsächlich wieder schließen, aber es ist schön zu wissen, dass Sie diese Option innerhalb der Projekteinstellungen haben . Sie können Einstellungen innerhalb dieses Projekts bearbeiten. So können Sie beispielsweise das Startsymbol für dieses Projekt bearbeiten . Sie können einen Firmennamen schreiben, Sie können eine Support-Kontakt-E-Mail schreiben. Wenn Sie das Spiel beispielsweise auf Steam veröffentlichen, wissen die Leute, an wen sie sich wenden müssen, wenn sie Fehler im Spiel haben oder ob sie Sie tatsächlich kontaktieren möchten. Sie können auch einen Film hinzufügen. Also, weißt du, wenn du ein Spiel öffnest, hast du diesen Startfilm, vielleicht fünf Sekunden. Sie können also tatsächlich einen hier hinzufügen. Also viele Dinge, die Sie hier speziell für dieses Projekt bearbeiten können . Die Editor-Einstellungen sind also Einstellungen für Ihren Editor und die Projekteinstellungen sind Einstellungen speziell für dieses Projekt, die Maple Story-Projekte, die wir gerade erstellen. Und dann haben wir Plugins und damit wollen wir jetzt arbeiten. Also mach dir darüber keine Sorgen. Als nächstes innerhalb des Fensters können Sie mehrere Fenster öffnen. Dies ist sehr nützlich, wenn Sie mehrere Monitore haben. Zum Beispiel können wir zum Viewport wechseln und auf Port zwei anzeigen klicken. Und dies öffnet hier ein zweites Ansichtsfenster. Und ich kann hier dieses Ansichtsfenster sehen, das ist sehr nützlich. Ich kann mein Spiel im Vollbildmodus ansehen und kann es in meinen anderen Monitor legen . Und jetzt kann ich mir dieses Spiel hier ansehen. Und auf meinem zweiten Monitor habe ich dieses Ansichtsfenster, das ich ständig geöffnet habe. Mach dir darüber keine Sorgen. Wir werden das erst später im Projekt anfassen. Und am Ende der Hilfe können Sie sich die Dokumentation für Unreal Engine fünf ansehen. Ich denke, es fehlt gerade ein bisschen und schwer zu verstehen, aber du kannst einen Blick darauf werfen, wenn du willst. Hier unten in der Symbolleiste haben Sie verschiedene Tools , zwischen denen Sie wechseln können. Zum Beispiel können Sie Landschaften schaffen, Laub wie Gras und Bäume und so weiter erstellen . Aber wir möchten keines dieser Tools wirklich anfassen, denn denken Sie daran, dass wir ein 2D-Spiel und kein 3D-Spiel erstellen . Behalten wir diese Tools vorerst bei. Für diesen Button können Sie verschiedene Artikel hinzufügen. Wir haben die Kugel oder den Würfel hinzugefügt, eigentlich den Würfel darin. Sie können aber auch andere Gegenstände wie Beleuchtung hinzufügen. Und du kannst Kinematik hinzufügen. So können Sie Kameras Volumen und visuelle Effekte hinzufügen. Und wir werden hier ein paar Dinge hinzufügen. Aber denken Sie noch einmal daran, dass wir 2D-Spiele erstellen, also werden wir nicht all diese Beleuchtung verwenden. Aber ich würde das Coole sagen, ein 2D-Spiel innerhalb einer 3D-Engine zu erstellen . Sie können sich vorstellen, dass Sie ein 2D-Spiel mit 3D-Lichteffekten erstellen können . Es gibt einige coole Dinge , die Sie in einer 3D-Engine tun können , wenn Sie 2D-Spiele erstellen. Hier drüben sind die Blaupausen. Dies ist die Codierung und wir werden später damit arbeiten. Also mach dir darüber keine Sorgen. Und hier drüben kannst du auf den Play-Button klicken , um das Spiel zu spielen. Und im Moment haben wir nicht wirklich viel los. Es gibt also nicht viel zu sehen. Wenn Sie auf Escape klicken, wird der Spielmodus beendet. Und als letztes, was ich Ihnen zeigen möchte, ist der Inhaltsbrowser. Und hier werden alle Dateien sein , die wir importieren werden. Wenn Sie also hier nach links gehen, haben Sie etwas, das als Inhaltszeichnung bezeichnet wird, indem Sie auf diese Schaltfläche klicken, wird dieses Fenster innerhalb dieser Inhaltszeichnung angezeigt. Alle Artikel, die wir importieren, werden hier drin sein. Also alle Charaktere, die wir haben, die gesamte Musik, alle visuellen Effekte, alle Dateien werden hier unten im Inhaltsbrowser sein. Und jetzt können Sie sehen, dass Sie hier unten klicken müssen, um dies zu öffnen. Und ich denke für mich ist es ein bisschen nervig, denn wenn ich auf etwas im Ansichtsfenster klicke, wird dies verschwinden. Manche Leute denken, dass das cool ist, und das hängt alles vom Stil ab. Aber ich denke für mich ist es ein bisschen nervig, dass es ständig verschwindet, wenn ich hier drüben auf etwas klicke. Und auch für den Kurs denke ich, dass es großartig sein wird, dies ständig zu haben. Also klicke ich auf ausgegrabenes Layout. So war es auch in Unreal Engine vier. Und das wird die ganze Zeit wach bleiben obwohl ich hier drüben auf die Dinge klicke. Und ich bevorzuge es, das ständig zu haben, damit ich meine Dateien im Inhaltsbrowser sehen kann . Sie können auf diese Schaltfläche „Hinzufügen“ klicken und verschiedene Dinge hinzufügen. Zum Beispiel können wir eine Blueprint-Klasse hinzufügen, und dies ist die Programmierung, die wir später durchführen werden. Sie können auch Dinge über die Animation, Dinge über Blueprints, Laubeffekte und Benutzeroberflächen für die Benutzeroberfläche hinzufügen Dinge über Blueprints, Laubeffekte . Und das mag überwältigend aussehen, weil Sie so viele Dinge haben, die Sie hinzufügen können, aber Sie werden nur verwenden, ich würde etwa fünfundzwanzig Prozent von all dem sagen. Sie sich also keine Sorgen um all diese Knöpfe. Du wirst nicht alles benutzen. Und ich würde sagen, dass Sie einfach anfangen sollten , die Grundlagen zu lernen und einfach von dort aus weitermachen und es sich hier und das Papier 2D leichter machen, damit wir arbeiten werden. Das ist also die Pixelkunst, das 2D-Spiel, mit dem wir arbeiten werden. Sie können auch Elemente im Inhaltsbrowser hinzufügen , indem Sie hier mit der rechten Maustaste klicken. Sie können also sehen, dass Sie dasselbe sehen können. Normalerweise klicke ich nie auf diesen Button. Ich klicke einfach mit der rechten Maustaste hier rechts. Sie können auch verschiedene Ordner hinzufügen indem Sie hier mit der rechten Maustaste klicken. Und oben können Sie auf Neuer Ordner klicken und neue Ordner erstellen. Und ich werde diesen nur löschen , indem ich vorerst auf meiner Tastatur auf Löschen klicke. Und wenn Sie möchten, können Sie fortfahren und auf diesen gelöschten Cube klicken und diesen ebenfalls löschen. Jetzt kennen wir die Grundlagen dieser Engine und wie sie aufgebaut ist. Es ist also viel einfacher für uns , mit unserem Projekt zu arbeiten. 5. Eine neue Stufe erstellen: Um eine neue Ebene zu erstellen, erstellen wir zuerst einen Ordner. Hier drüben im Inhaltsordner. Klicken wir mit der rechten Maustaste und klicken Sie auf Neuer Ordner. Und nennen wir es einfach Maps. Anstelle dieses Maps-Ordners hier rechts können Sie mit der rechten Maustaste klicken und dann auf Level klicken. Nennen wir das jetzt. Ich möchte allen meinen Dateien geben, mit denen ich ein Präfix erstelle. Also nenne ich es zunächst einfach Map. Und das macht es einfacher, wenn Sie viele Dateien haben, können Sie tatsächlich viel einfacher nach ihnen suchen , indem Sie das Präfix schreiben. Nennen Sie es also Map und nennen wir es einfach main. Ich nenne es einfach die Hauptkarte. Ich weiß nicht, welchen Namen ich ihm jetzt geben möchte, also nennen wir es einfach Main Map. Und hier oben kannst du übrigens alles sparen, also speichere alles. Und wenn Sie innerhalb dieser Ebene Änderungen vorgenommen haben, bevor wir Cubes bearbeiten Wenn ich also einen gelöschten Kubaner hinzufüge und Sie versuchen zu speichern, Sie aufgefordert, diese Karte hier zu speichern , weil Sie Änderungen vorgenommen haben. Und eigentlich möchten wir diese Map nicht wirklich speichern , da wir diese Standardkarten nicht verwenden werden . Ich doppelklicke auf meine neue Map, die ich erstellt habe. Es wird mich bitten, dieses Level hier zu speichern. Ich klicke auf „Nicht speichern“. Jetzt bin ich in meinem neuen Level und du kannst hier in meinem Outliner World, Outliner sehen , nichts wirklich haben weil du gerade nichts in diesem Level hast. Bevor wir dieses Video beenden, legen wir diese Ebene als unsere Standardkarte fest. Also werde ich bearbeiten und innerhalb der Projekteinstellungen kannst du auf Karten und Modi klicken. Und hier sehen Sie, dass der Editor Start-Map derzeit die standardmäßige offene Weltkarte ist . Klicken Sie hier an und ändern Sie es in unsere Karte, die wir erstellt haben, sowohl die Start-Map als auch die Standardspielkarte. Einfach so. Wenn Sie es jetzt schließen, klicken wir einfach auf Datei und speichern Sie alles. Wenn Sie nun die Engine schließen und erneut öffnen, wird er standardmäßig auf dieser Ebene geöffnet. 6. Importieren der Environment: Importieren wir nun die Umweltanlagen , die wir in den zukünftigen Lektionen verwenden werden. Hier drüben klicke ich erneut mit der rechten Maustaste in den Inhaltsordner und erstelle einen neuen Ordner. Und nennen wir das eine Vermögenswerte. Anstelle dieses Assets-Ordners ich mit der rechten Maustaste und erstelle einen neuen Ordner. Und nennen wir das eine Umgebungen in Draht-Resten. Okay, es ist also sehr gut, innerhalb Ihres Projekts organisiert zu bleiben , denn sobald das Projekt groß wird, wird es schmerzhaft sein herumzulaufen Wenn Sie nicht wissen, wo die Dateien darin befinden von diesem Umgebungsordner klicke ich darauf. Wir möchten unsere Dateien importieren. Ich habe dir diese Kursunterlagen gegeben. also innerhalb der Kursmaterialien Wenn Sie also innerhalb der Kursmaterialien in den Ordner Environment gehen können, habe ich Ihnen einige der Dateien zur Verfügung gestellt. Möglicherweise gibt es weitere Dateien , die Sie hier sehen. Ich lege diese Dateien einfach in diesen Ordner, während ich gehe. Was ich möchte, dass du nur diese importierst, die Drachenstraße und die „Sea Dragon Road“, BG für den Hintergrund. Diese beiden hier können Sie einfach klicken und ziehen und im Ordner Environment platzieren. Denken Sie daran, wenn Ihre Dateien immer noch in einem seltenen oder ZIP-Format vorliegen, können Sie nicht direkt aus einem Zip-Ordner hier ziehen , Sie müssen diese Dateien möglicherweise auf Ihren Desktop extrahieren oder an welchem Ort Sie möchten. Und dann können Sie sie einfach, genau wie ein normaler Ordner hier, in das Projekt ziehen. Okay? Wenn Sie hier im Projekt sind , können Sie sehen, dass wir unsere beiden Texturen haben und wenn Sie darauf klicken, ich zum Beispiel auf diesen PGY1 und Dopants auf meinem zweiten Monitor. Dies ist diejenige, die wir verwenden werden. Jetzt könnte das haben, du kannst sehen, wenn ich hineinzoome, es ist verschwommen. Es ist nicht wirklich viel Auswahl. Und wie Sie wissen, ist Pixelkunst nicht so verschwommen. Es sind sehr klare Pixel, die wir wollen. Und das erreichen wir gerade, denn Sie befinden sich wieder in einer 3D-Engine und die 3D-Engine bläst sie aus, um alles gut aussehen zu lassen. Aber im Falle eines 2D-Spiels wollen wir nicht wirklich, dass es verschwimmt. Das ist sehr einfach. Klicken Sie einfach auf beide. Klicken Sie also auf diese Taste, halten Sie Control gedrückt, klicken Sie auf die zweite, ich kann mit der rechten Maustaste klicken, zu Sprite-Aktionen gehen und Papier auf die Einstellungen anwenden sagen. Und das wird diesen Unschärfe-Effekt im Grunde entfernen. Wenn ich also wieder hierher gehe und hereinzoome, kannst du sehen, dass der Unschärfe-Effekt jetzt verschwunden ist und du kannst jedes einzelne Pixel sehen. Und jetzt klicken wir auf Datei und Alles speichern, und das war's für dieses Video. Daher ist es sehr wichtig, aus diesem Video zu nehmen, wenn Sie Pixel-Art-Dateien importieren, denken Sie daran, mit der rechten Maustaste zu klicken, zu Sprite-Aktionen zu wechseln und Pepper 2D-Einstellungen anzuwenden, um den Unschärfe-Effekt zu entfernen, den die Engine standardmäßig anzeigt. 7. Ein Tile erstellen: Jetzt, da wir unsere Assets bereit haben, sind wir bereit, einen Kachelsatz zu erstellen. Und im nächsten Video werden wir etwas erstellen , das als Kachelmap bezeichnet wird. Der Unterschied zwischen einem Handtuchset und einer Kachelkarte besteht also darin, dass Tell gesagt hat, dass Sie es sich vorstellen können. Wenn Sie das Handtuchset malen, sind Ihre Farben und die Kachelkarte ist Ihre Leinwand. Also müssen wir Sets mitteilen , um eine Kachelzuordnung zu erstellen. Lassen Sie uns die Handtuchsets erstellen, die Farben, mit denen Sie tatsächlich malen möchten , auf der Kachelkarte , die wir später erstellen. Also klicken wir mit der rechten Maustaste auf diesen ersten hier. Diese sind die Kacheln. Klicken wir mit der rechten Maustaste darauf. Gehen wir zur Sprite Action und klicken wir auf Handtuchset erstellen. Ich benenne es um. Normalerweise lösche ich diesen Kachelsatz und das Ende hier. Und ich nenne es einfach ts oder Handtuchset. Und lasst uns das Gleiche hier mit dem Hintergrund machen. Gehe zu Sprite-Aktionen und wende einen anderen Ort an. Sehr tolle Toolsets. Und nochmal, benennen wir diese beiden Stufen von Anfang an um. Jetzt müssen wir also Sets erzählen. Lass uns den ersten hier gehen, unsere Kacheln. Jetzt können wir sehen, dass dies die Fliesen sind und wir können hier nicht viel machen, anstatt ein Handtuchset. Denken Sie daran, dass der Kachelsatz wir nur erstellt haben, damit wir diese Kacheln tatsächlich verwenden können , um auf unserer Kachelkarte zu malen. Und jetzt können Sie auf diese verschiedenen Fliesen klicken und Sie können die Handtücher tatsächlich sehen , wenn Sie darauf klicken. Sie werden hier rechts angezeigt, damit Sie das Handtuch sehen können und wie es aussieht. Aber die Größe stimmt nicht. Sie können hier die Kachelgröße auf der rechten Seite sehen. Sie müssen das auf 30 Pixel mal 30 Pixel einstellen da ich weiß, dass es 30 Pixel sind. Ich komponiere sie in Photoshop, also stelle ich sie hier in einer Textur zusammen. Ich weiß also, dass die Gesamtgröße 30 Pixel beträgt. Pixel. Wenn Sie Dinge aus dem Internet herunterladen, geben sie normalerweise an, wie groß sie sind. Hier hast du sie also eingestellt. Also 30 mal 30. Jetzt ist das richtig und wenn Sie auf die Kacheln klicken, können Sie sehen, wie sie aussehen. Und das werden wir später verwenden , um auf unserer Kachelkarte zu malen. Schließen wir das ab und gehen wir zu dem Titel, der für den Hintergrund festgelegt wurde. Die Kachelgröße beträgt ebenfalls 30 mal 30, also müssen wir dies auf 30 mal 30 Pixel ändern. Das war also das Wichtigste. Wir legen unsere Fliesengröße innerhalb dieses Kachelsets fest. Und jetzt, da wir diese Kachelsätze haben, lassen Sie mich tatsächlich mit der rechten Maustaste in diesen Ordner einen neuen namens Texturen erstellen. Und ich möchte diese Textur in meine Texturen legen , weil wir das nicht mehr wirklich brauchen werden. Löschen Sie es nicht, da diese tatsächlich von dieser Textur abgeleitet sind. Denken Sie daran, dass wir mit der rechten Maustaste geklickt und ein Handtuch Aber ich habe sie einfach in Texturen gelegt , weil wir es dann nicht wirklich wieder sehen müssen. Ebenso mit diesem Hintergrund verschieben Sie es in diesen Ordner, und wir müssen nur diese Kachelsätze sehen. Klicken wir also auf Datei, Alles speichern und lassen Sie uns fortfahren. 8. Eine Tile erstellen: Wir können jetzt mit der rechten Maustaste auf unser Toolset klicken. Und wenn Sie mit der rechten Maustaste klicken, können Sie hier sehen, dass Sie die Möglichkeit haben eine Kachelzuordnung zu erstellen. Erstellen wir also eine Kachelzuordnung. Und wieder lösche ich diese Map hier am Ende, das sie legt. Und ich nenne es einfach TM für Kachelzuordnung als Präfix. Und Sie können auf die Kachelkarte doppelklicken , um hier hineinzukommen. Bevor ich hier etwas rechts mache, denken Sie daran, dass Sie die Schwanzbreite und -höhe auf 30 mal 30 einstellen müssen. also einfach sicher, dass das korrekt ist. Und das ist nur, um es genauso zu setzen wie dieses. Was auch immer Sie hier im Set festlegen, Sie müssen in der Kachelkarte dasselbe festlegen wie für die Kartenbreite und -höhe, Sie können wählen, wie groß Ihre Karte sein soll. Wie breit sollte Ihre Karte B sein? Und dafür denke ich, dass ich mit 60 und der Breite und 40 und der Höhe gehen werde. Dies ist also die Karte, in der wir links arbeiten werden. Sie können die Handtuchsets sehen. Im Moment ist das aktive Kachelset dieses, die Drachenstraße, auf der wir unsere Kacheln haben. Und du kannst hier irgendwo klicken und etwas auswählen. Und wenn du es hier links auswählst, hast du es jetzt hier als Pinsel in deinen Kachelkarten. Also kann ich hier klicken und du siehst, wann du es auf deiner Kachelkarte anklickst . Es gibt keine schnelle Möglichkeit, es zu löschen. Du musst es aber eins nach dem anderen löschen. Klicken Sie also auf e, um den Radiergummi auszuwählen. Und Sie können auch hier oben klicken die Farbe, das Rasiermesser und die Füllung sagen, indem Sie auf e klicken, um den Radiergummi auszuwählen. Sie können diese löschen und auf der Tastatur auf B klicken , um den Pinsel auszuwählen. Also B für den Pinsel und klick auf IE, um diese Pinsel erneut zu löschen. Was auch immer mir hier auf der linken Seite auch gefallen hat, du kannst es jetzt hier auf der Kachelkarte malen. Und innerhalb der Kachelkarte besteht es aus Layern. Wenn Sie also in Photoshop gearbeitet haben , wissen Sie, was das ist. Wenn Sie den Namen einer Ebene ändern möchten, können Sie auf der Tastatur auf F2 klicken. Sie können mit der rechten Maustaste klicken und den Namen ändern, aber normalerweise klicke ich auf F2, um Dinge umzubenennen. also auf F2 klicke, kann ich es zum Beispiel den Basislayer nennen. Ich kann eine neue Ebene erstellen, indem ich auf diesen Button klicke. Und ich kann dies zum Beispiel in Hintergrunde's in der Basisebene umbenennen. Wenn Sie dies ausgewählt haben, malen wir hier einfach ein paar zufällige Kacheln. Tun wir so, als wären dies die Bodenfliesen, die wir haben. Ich kann jetzt in den Hintergrund gehen und sagen wir mal, ich möchte den Hintergrund malen. Und sagen wir nur zufällig, mein Hintergrund ist das. Ich kann das malen. Sie können sehen, dass es jetzt im Vordergrund steht, weil Layer so funktionieren. Der vordere wird also vorne sein. Wenn Sie also möchten, dass dies der Hintergrund ist, müssen Sie es unter die Basisebene legen. Klicken Sie also auf den Hintergrund. Sie können auf diesen Pfeil klicken. Es heißt „Rückwärts senden“, und es wird es hier rückwärts legen. Und was auch immer Sie malen, Sie können sehen, dass Sie nicht darüber malen können weil dies Ihr Hintergrund ist. Wenn Sie jetzt auf den Basis-Layer klicken, malen Sie mehr. Sie können sehen, Sie können vor Ihrem Hintergrund malen. Denn denken Sie daran, dass dies der Hintergrund ist und dies sind zwei separate Ebenen. Wenn Sie also hier auf der Basisebene auf das Auge klicken, können Sie sehen, dass dies der Hintergrund ist. Sie können den Hintergrund auch ausblenden und so weiter. Also sehr, sehr nützlich. Wir werden diese benutzen, um unsere Karte zu malen. Und das ist es im Grunde genommen für die Kachelkarte. Also nichts komplexes. Wir haben ein paar Kacheln. Wir können unsere Karte hier zeichnen und sie großartig aussehen lassen. Und wir können diese Schichten verwenden, um es zu malen. Also der Hintergrund, die Basis, wir haben vielleicht einen Vordergrund und so weiter. Denken Sie daran, die Breite und Höhe Ihrer Karte nach Ihren Wünschen festzulegen. Ich möchte, dass meiner 60 mal 40 ist, und der Turm müsste 30 mal 30 sein da diese Kacheln 30 mal 30 Pixel groß sind, man kann einfach den Hintergrund löschen. Wenn Sie also hier hochklicken und auf meiner Tastatur auf Löschen klicken, hat es meine Engine zerquetscht. Lass es mich einfach neu starten. Es passiert manchmal mit Unreal Engine. Manchmal zerquetscht es einfach zufällig. Also lass mich zurück zu meinem, zu meinem Kachelset und du kannst sehen, dass alles es bereits gelöscht hat. So passiert das manchmal, also Unreal Engine, ich muss es neu erstellen. Wenn ich also die Kachelkarte erstelle, werde ich einfach das Ganze noch einmal erstellen, okay, jetzt bin ich wieder da, wo ich bin. Ich habe meine Einstellungen hier festgelegt und wir sind zurück. Lassen Sie uns also zur nächsten Lektion übergehen und lassen Sie uns die Umgebung gestalten. 9. Entwerfen der Umgebung: Lassen Sie uns jetzt mit der Gestaltung unserer Umgebung beginnen. Um loszulegen, gehen wir zurück zu unserer Kachelkarte. Und wenn Sie hier kein Handtuchset ausgewählt haben, wie Sie auf meinem Bildschirm sehen können, können Sie auf diesen kleinen Button klicken. Hier wechseln Sie hier auch zwischen Ihren Hintergrundkacheln und Ihren normalen Zellen. Fangen wir also vorerst mit diesen normalen Kacheln an. Wormit ich anfangen werde, ist diese Ebene vier Buchten zu nennen. Also klicke ich auf F2 nenne es diese Basisschicht. Hier drin werden wir malen. Aber bevor ich male, was ich hier in den Kartenhöhen gerne mache, füge ich gerne ein bisschen mehr Kacheln als Pufferkacheln hinzu. Denn wenn unser Charakter es ist, kannst du dir vorstellen, dass dies unsere Karte ist und das sind die Grenzen. Wenn der Charakter hier im Spiel steht. Und die Kamera ist so und beobachtet den Charakter. Das Ding hier unter der Karte wird dunkel sein. Und wir wollen nicht, dass der Spieler diesen unteren Teil hier ansieht. Ich möchte, dass der Charakter so steht, die Kamera hier nie unter diese Linie geht. Ich füge gerne ein bisschen mehr Kacheln als das, was ich hier geschrieben habe, nur um ein paar Pufferkacheln zu haben, damit die Kamera nie unter den Boden geht. Also füge ich hier gerne zehn Kacheln unten und auch zehn Kacheln oben hinzu. Also die Kamera und geht hier nie über diese Linie. Was ich also tun kann ist, zehn plus zehn sind offensichtlich 20 und es sind 60. Etwas sehr Cooles und Unreal Engine. Sie können tatsächlich plus 20 schreiben und die Eingabetaste drücken, und es fügt es automatisch hinzu und es heißt 60. Ich glaube nicht, dass wir hier und hier einen Puffer brauchen denn was ich tun werde, ist, dass ich die Kamera anhalten werde. Wenn der Spieler es so läuft, halte ich die Kamera hier an. Es geht also nie hinter diese Linie, aber wir können es immer größer machen, wenn Sie möchten. Okay, also lasst uns hier zählen. Wir haben hier zehn Puffer, zehn Pufferkacheln hinzugefügt . Also 123412345678910. Also hier drüben um 50 Uhr. Wenn wir also hier ein Handtuch malen, bin ich bei 50. Die Pufferkacheln gehen also hier hoch und die eigentlichen Kacheln sind oben genau hier. Was Sie also tun können, ist einfach diese Kacheln hierher zu nehmen und von links zu beginnen. Sie können also einfach mehrere Kacheln auswählen. Sie müssen nicht nacheinander auswählen. Sie können mehrere Kacheln gleichzeitig auswählen, klicken und mit der Maus bewegen und auswählen. Und Sie können sie hier in unserer Basisschicht platzieren , die wir erstellt haben. Jetzt habe ich das platziert, du kannst so weiter platzieren. Aber als Abwechslung klicke ich auf Control Z, um rückgängig zu machen. Als Abwechslung können Sie sehen, dass Sie ein paar davon haben. Sie können also nach dem Zufallsprinzip eine solche auswählen und platzieren. Es kann ein zufälliges wählen, platzieren, dies gibt Kacheln ein wenig Abwechslung. Sie können also hier sehen, dass Sie ein bisschen Variation haben und Sie können feststellen, dass es sich um den gleichen Titel handelt. Also wähle ich hier einfach nach dem Zufallsprinzip aus. Es spielt keine Rolle , welche Sie wählen , nur um zufällige auszuwählen. Wir eliminieren also die sich wiederholenden Muster, die wir manchmal in Pixel-Los sehen. So sehr gut, verschiedene Kacheln zu haben , auf die man sie legen kann. Okay, ich werde diesen Prozess beschleunigen. Ich mache das hier den ganzen Weg. Und du musst es auch den ganzen Weg hier machen. Also mach das einfach weiter. Das dauert vielleicht fünf Minuten. Okay, jetzt bin ich hier fertig. Ich mache die letzten Kacheln. Jetzt habe ich diesen unteren Teil hier fertig. Okay? Wenn Sie also mit diesem Teil fertig sind, erstellen Sie schon hier oben das Gras. Also hier unten wegen des Grases, das Gleiche. Sie haben eine Variation , die Sie hinzufügen können. Und Sie können alle drei auswählen, klicken und auswählen. Und denken Sie auch daran, diesen oberen Teil auszuwählen , denn wenn Sie hier klicken, können Sie sehen, dass Ihnen hier oben das Gras fehlt wenn Sie diesen oberen Teil nicht auswählen. Klicken Sie also auf beide und wählen Sie dies und das darüber aus. Also diese sechs Kacheln. Und dann können Sie einfach wie zuvor hier klicken und eine andere Variante auswählen und daneben klicken. Und mach einfach weiter bis ich eigentlich nicht will , dass du es hier den ganzen Weg machst. Ich möchte, dass du irgendwo hier anhältst, also werde ich nur ein bisschen vorwärts gehen. Okay. Also werde ich hier anhalten und gegen 3947 angehalten. Dies sind die Koordinaten, die Sie nicht genau wie ich machen müssen, aber wenn Sie möchten, sind dies die Koordinaten, mit denen ich aufhöre. Sie können Ihr eigenes Design machen. Das ist in Ordnung. Du musst nicht dasselbe tun. Aber was ich hier machen möchte, wir haben hier unten ein paar Rampen in der Textur. Und wir möchten diese Kacheln hinzufügen. Ich möchte hier eine Rampe hinzufügen, damit wir etwas Abwechslung haben können. Also nochmal können Sie hier klicken und hier so auswählen. Und du kannst die Rampe hier hinzufügen. Und dann lasst uns mit den Kacheln fortfahren, diese auswählen und einfach wie zuvor fortfahren. Wählen Sie weiterhin eine Variante wie diese aus. Man sieht, dass es einige Zeit dauert, aber es ist auch, ich denke, es ist der lustige Teil. Mit der Map, die Sie erstellen, können Sie kreativ sein. Und du kannst etwas cooles Aussehen kreieren. Wir fehlen also hier oben ein paar Kacheln. Jetzt. Lasst uns weitermachen und genau wie zuvor , füllen wir einfach diese leeren Lücken. Okay, also ist dieser Teil erledigt. Nun, was ich tun möchte, da der letzte Teil auf einer Plattform erscheint. Lassen Sie uns also noch einmal eine Plattform hinzufügen, wählen wir diesen unteren Teil aus. Wenn Sie also eine davon auswählen, können Sie sehen, dass Sie auch hier Variationen haben. also den unteren Teil auswähle, weiß ich es nicht. Ja, wir müssen hier auch den unteren Teil auswählen hier auch den unteren Teil weil Sie sehen können, dass sich darunter einige kleine Kacheln befinden. Genau wie das Gras, in dem wir hier sechs Stücke auswählen, müssen wir auch hier sechs Stücke auswählen. Und für die Plattform müssen wir es nur sehen, wo der Charakter ist. Und ich glaube so etwas wie hier oben. Und nochmal, lasst uns ein paar Variationen auswählen und diese einfach zusammenfügen. Denken Sie daran, den ganzen Sex auszuwählen und nicht nur hier oben, denn sonst fehlen Ihnen hier unten die Kacheln. Wählen Sie also hier aus, machen Sie einige Variationen und überspringen Sie die Plattform ein wenig voraus. Okay, jetzt, da ich diese lange Plattform hier oben habe, kannst du das Gras hinzufügen und genau wie zuvor, wähle einfach aus, was wir hier unten gemacht haben. Wählen Sie eine Variation aus. Und jetzt vermissen wir diese Kacheln hier rechts. Ich konnte sie nicht wirklich finden. Ich habe es versucht und versucht und ich konnte sie nicht finden. Aber was wir tun können, ist einfach einige dieser Kacheln hinzuzufügen , um diesen Teil hier zu beenden, da dies wie Sie sehen können, abgeschnitten ist und es nicht gut aussieht. Und ich habe das Schneidteil nicht wirklich. Diese funktionieren damit nicht wirklich. Also müssen wir unser eigenes machen und lass uns das einfach benutzen. Was ich tun werde, können Sie hier sehen, wenn ich das auswähle und darüber hinaus hinzufüge, wie hier, können Sie sehen, dass ich meine aktuellen Kacheln lösche und das ist nicht etwas, was wir tun möchten. Denken Sie daran, wir hatten Schichten, mit denen wir arbeiten konnten. Sie können also eine neue Ebene erstellen. Und nennen wir das eine Marke. Und mit dieser vorderen Ebene können wir diese Kacheln jetzt zum Beispiel hier auswählen. Und zum Beispiel können Sie auf dieser Seite sehen, dass Sie jetzt klicken und hinzufügen können, und Sie löschen die Kacheln, die Sie zuvor gemacht haben, nicht . Und das liegt daran, dass du jetzt auf dieser vorderen Schicht malst . Du malst nicht mehr auf dieser Basisschicht. Denken Sie daran, diese vordere Ebene auszuwählen und hier oben darauf zu malen. Und wähle auch diese Kacheln hier aus, nur die drei hier unten. Und lass es uns oben hinzufügen. Und du kannst sehen, dass es irgendwie funktioniert. Es ist besser als nichts. Jetzt lassen wir die Handtücher den Schnitt hier schließen. Und ich wähle den nächsten aus, füge ihn darüber hinzu und wähle den unteren Teil aus, der zu diesem passt. Ich kann jetzt sehen, dass wir eine Plattform haben. Es könnte besser sein, wenn wir die Abschlusstitel hätten , aber es ist in Ordnung. Es ist nur zum Üben. Okay, also das nächste, was du hier hinzufügen kannst , ist der Hintergrund. Und was wir tun können, ist eine weitere Ebene hinzuzufügen. Und ich nenne es eigentlich Sky. Ich benutze diese Ebene nur für den Himmel und setze sie, du kannst auf diesen Pfeil klicken, daran erinnern und ihn in den Rücken legen, weil wir wollen, dass dies ein Hintergrund für diesen Kerl ist. Denken Sie daran, dass wir uns in den normalen Kacheln befinden. Sie möchten zum Hintergrund wechseln. Auch hier können Sie auf diese kleine Schaltfläche klicken und zwischen dem Hintergrund und den normalen Kacheln wechseln. Wenn du also in den Hintergrund gehst, hast du dieses kleine blaue. Das ist eigentlich der Himmel. Klicken Sie also einfach auf diesen, klicken Sie auf G für das Füllwerkzeug oder wählen Sie es hier aus. Denken Sie daran, dass Sie die Tools hier oben auswählen können. Und dann denk daran, zuerst auf diesen Kerl zu klicken. Und hier drin können Sie oben auf das Hören klicken, sehen, wie Sie die Lücke füllen und jetzt haben wir den Himmel. Was wir hier hinzufügen können, ist ein bisschen langweilig, also müssen wir einige Hintergrundelemente hinzufügen. Nun möchten Sie eine neue Ebene erstellen, denn wenn Sie malen, sollten Sie dieses Gras anheften und auf B klicken, um das Pinselwerkzeug auszuwählen, und Sie hängen es hier an, können Sie sehen, dass und auf B klicken, um das Pinselwerkzeug auszuwählen , und Sie hängen es hier an, können Sie sehen der Himmel entfernt wird weil du nicht drauf malen kannst. Lassen Sie uns also eine neue Ebene erstellen und lassen Sie mich sie einfach Hintergrund und engen Hintergrund nennen . Das sind nur Back-Requisiten. Nennen wir es einfach Hintergrund und mal sehen, ob wir den Namen ändern müssen. Also lasst uns versuchen, etwas zu entwerfen. Also fange ich mit diesem Gebäude an. Also wähle einfach das ganze Gebäude hier aus und platziere es einfach irgendwo hier. So sieht es also ein bisschen interessant aus. Okay, jetzt haben wir diesen und du kannst hier sogar einen Lichtmast hinzufügen. Es geht also nur darum, kreativ zu sein und versucht zu tun, was immer Sie wollen. Du musst mir nicht wirklich hierher folgen. Ich versuche nur Dinge zu erschaffen, während ich gehe, und ich werde ein bisschen voraus gehen. Genau wie zuvor. Wählen Sie einfach aus, was Sie irgendwo hinzufügen möchten. Vielleicht willst du diesen Lichtmast hier oben hinzufügen. Also versuche dein eigenes Ding zu machen und wir sehen uns in ein bisschen. Okay, also habe ich ein paar Gegenstände hinzugefügt. Du kannst sehen, dass meine Karte so aussieht. Jetzt habe ich hinzugefügt. Hier drüben ist ein Gras. Ich habe es gerade hier zur Seite hinzugefügt. Es sieht also ein bisschen abgeschnitten und interessant aus. Und ich habe diese Gegenstände hier hinzugefügt, die Blumen und nur die eine Seite, die ich zuvor hinzugefügt habe. Ich möchte also nicht zu viel in der Umgebung hinzufügen . Ich halte es gerne einfach, weil es gruppiert wird, wenn du zu viel zur Umgebung hinzufügst und es meiner Meinung nach nicht gut aussieht. Jetzt haben wir diese minimalen Elemente, die wir in eine Umgebung eingefügt haben. Was ich möchte, dass du machst, ich möchte den Hintergrund hier füllen, damit er nicht zu blau ist. Ich möchte es mit diesen großen Hintergründen füllen. Also mach weiter und wähle dieses große Ding hier aus, einfach so und du kannst sehen, dass du es platzieren kannst. Jetzt wollen wir es hier nicht auf unsere Artikel legen. Also füge ich hier eine weitere, eine weitere Ebene hinzu, und ich nenne sie einfach BG für den Hintergrund 01. Ich glaube, wir müssen zwei davon machen und du wirst sehen warum. Also BG 0102, ich gehe einfach 0 unter den 01. Und dieses, anstatt es Hintergrund zu nennen, nennen wir es BG-Requisiten, also Hintergrund-Requisiten oder ähnliches. Wenn Sie also auf den ersten klicken, ist der Hintergrund 01. Ich möchte das Ganze hier nicht so hinzufügen. Was ich machen möchte, ist, ich es einfach so hinzufügen möchte. Ich sehe also nur den Baum ohne all das, ohne das ganze Gebäude darunter. Also nur die Bäume sehen und den Hintergrund damit füllen. also für den Hintergrund 01 zu sehen, Versuchen wir also für den Hintergrund 01 zu sehen, ob wir es interessant aussehen lassen können, etwa so. Und 0 zu, ich glaube nicht, dass wir es immer noch mit 01 füllen können. Eigentlich können wir es hier füllen. Füllen wir tatsächlich 0, um zuerst auf 0 zu klicken, ich möchte es nur besser visualisieren. Also so etwas vielleicht. Versuchen wir es noch einmal mit 01. Der Grund, warum ich nicht noch einmal 02 mache, denn denken Sie daran, dass Sie nicht so auf Ihre Ebenen malen können. Rückkehr auf 0101 war hier drüben. Jetzt können wir hier übermalen, ohne irgendetwas zu beeinflussen. Also so etwas. Ich denke, das funktioniert, das sieht gut aus. Also lasst uns wieder hierher gehen. Ich wähle nur den Radiergummi aus, damit ich mir das nicht alles ansehen muss. Aber du kannst hier sehen, ob der Charakter herumläuft, das sieht gut aus, unser Hintergrund ist voll. Du kannst natürlich, ich habe keine Wolken, aber du könntest natürlich, wenn es da ist, um es bei Wolken hier oben interessanter zu machen. Aber ich denke, das ist okay. Das ist wie wenn wir hier herumlaufen, es nicht wirklich schlecht aus und es sieht interessant aus. Sie können hier sogar Ihre Requisiten anpassen, der Hintergrund fordert Sie vorher auf. Sie können sie anpassen , wenn Sie möchten. Und das war eigentlich für die Gestaltung der Umwelt gedacht. Also der Grund, warum ich hier nichts hinzugefügt habe, oder vielleicht hier oder hier drüben. Wir könnten einige dieser leeren Stellen verwenden , um später Portale hinzuzufügen damit wir uns in verschiedene Bereiche teleportieren können , und ich kann Ihnen zeigen, wie man ein Portalsystem macht. Und damit gehen wir zur nächsten Lektion über. 10. Flackern entfernen: Gehen wir nun zurück zu unserer Kachelkarte. Ich möchte Ihnen etwas zeigen, das Sie hier sehen können, wenn ich mich bewege, wenn ich mit der rechten Maustaste klicke und herumschwenke, sieht man, dass der Himmel flackert und meine Fliesen auch. Es ist sehr subtil. Aber zum Beispiel können Sie hier die Linie sehen, sie schneidet meine Fliesen ab. Manchmal flackern die Kacheln auch. Und wir möchten dieses Flackern entfernen , denn dies wird Ihnen auch im Spiel passieren. Also lassen Sie uns diese Kachelkarte hier schließen. Und was Sie tun möchten, ist diese Kachelsets einfach mit der rechten Maustaste auf das Handtuchset klicken und auf Bedingung Title XI-Textur klicken. Jetzt wird es etwas Neues für dich schaffen. Drücken Sie einfach die Eingabetaste und es wird dies für Sie erstellen. Diese sind also gepolstert, sodass sie die Handtücher automatisch für Sie aufpolstert. Sie können also sehen, dass es nicht wirklich anders aussieht als zuvor. Aber der Unterschied ist, wenn ich zurück zu meinem Kachelset gehe, wenn ich jetzt auf meine Kachel klicke, bevor es die Kachel hier an den Seiten ausgewählt habe, aber du kannst sehen, dass der Motor deine Kacheln automatisch gepolstert hat, damit sie sie wird niemals flackern , weil wir diese Paarungen auf jeder einzelnen Kachel haben. Dasselbe, was es für alle anderen Kacheln getan hat , die Sie haben. Machen wir das Gleiche für den Hintergrund. wir mit der rechten Maustaste auf das Handtuchset und klicken Sie auf Bedingung Handtücher, Laken Textur und lassen Sie uns auf Enter klicken. Okay, jetzt war ich mit dem Malen meiner zweiten Textur fertig. Es hat einige Zeit gedauert, weil es eine so leichte Textur war und es fast so aussieht, als wäre Ihr Motor abgestürzt, aber das ist es nicht. also zurück in die Umgebung gehen und jetzt auf meine Kachelkarte klicken, können Sie sehen, wenn ich hineinzoome und mich bewege, können Sie sehen, dass das Flackern verschwunden ist. Und das gilt auch für das Spiel. Also haben wir dieses Flackern entfernt. Wenn Sie also einige Handtücher importieren, die Sie für Ihre Karten hinzufügen möchten, denken Sie daran, mit der rechten Maustaste auf den Kachelsatz zu klicken und auf Bedingung Handtuchstruktur zu klicken. Und es wird diese Textur automatisch für Sie auffüllen. Und Sie werden all diese flackernden Probleme beseitigen. 11. Platzieren der Tile: Lassen Sie uns nun unser Level, das wir hier erstellt haben, innerhalb unserer Karte platzieren . dies schließen, denken Sie daran, dass wir hier eine Karte erstellt haben, eine Ebene namens main. Doppelklick darauf, um sicherzustellen, dass du hier drin bist. Du kannst es auch sehen. Hier auf der rechten Seite befinden Sie sich in der Map Main. Gehe einfach in die Umgebung und klicke und ziehe deine Kachelkarte. Also nicht das Handtuch-Set , sondern die Kachelkarte. Also klicke und ziehe und du kannst es hier in der Umgebung ablegen. Denken Sie an unsere Navigation bevor Sie mit der rechten Maustaste klicken und halten können, um sich zu bewegen. Und Sie können sehen, dass dies die Kachelkarte ist, die wir hinzugefügt haben. Jetzt entferne ich dieses Raster gerne , weil ich nicht wirklich sehen kann, was los ist. Wenn Sie also im Detailbedienfeld auf diese Kachelzuordnung klicken, können Sie hier unter Rendern suchen, pro untergeordnetes Raster anzeigen, wenn ausgewählt, ich deaktiviere das Häkchen, damit ich meine Karte sehen kann. Und das ist die Map , die wir erstellt haben. Was ich gerne mache, ist, dass ich es gerne an der Stelle von Nullen, Nullen 0 platziere. Das ist also meine erste Karte. Ich fange gerne bei 000 an. Das ist einfach es. Wir haben die Map erstellt. Und da es sich um eine 3D-Engine handelt, denken Sie daran, dass es sich nicht um eine 2D-Engine handelt. Sie können hier sehen, wenn Sie sich die Seite Ihrer Kachelzuordnung ansehen, dies sind tatsächlich Layer-Kachel. Denken Sie also daran, dass wir in der Kachelkarte unsere Layer erstellt haben. Und so können Sie sehen, wie sich alle diese Ebenen hier in einer 3D-Umgebung zusammenstapeln. Was ich tun möchte, ich möchte diese Ebenen trennen , weil wir später sicherstellen möchten, dass wir kein Problem haben , wenn sich der Spieler bewegt. Und ich werde hier und hier runter gehen, und diese Trennung pro Schicht, ich werde sie einfach auf etwas Extremes erhöhen , damit Sie sehen können, was los ist. Also so etwas wie 50 und ich werde sparen. Sie können diese Layer jetzt tatsächlich sehen, sie sind voneinander getrennt. Was ich jetzt gerne hier in der Trennung mache, schreibe ich gerne zehn und ich möchte dir zeigen, warum ich zehn schreibe, oder du kannst auch 15 schreiben. Das ist okay. Es spielt keine Rolle. Aber ich möchte dir zeigen, warum ich nicht damit gehe, warum ich zum Beispiel mit zehn gehe. Wenn Sie also hier klicken, können Sie sehen, dass wir den Layer getrennt haben. Sie können sich also vorstellen, wie der Charakter hier auf dem Boden steht , auf diesen Kacheln. Sie stehen technisch gesehen auf diesem Basis-Layer, den wir erstellt haben. Es gibt zehn Pixel von dieser Ebene hier bis zur vorderen Ebene hier. Jetzt ist die Trennung, seit wir zehn geschrieben haben, seit wir zehn geschrieben haben, die Trennung zehn Pixel für jede Ebene. Sie haben also die Freiheit, Dinge zwischen diesen Ebenen hinzuzufügen. Wenn Sie zum Beispiel ein Objekt vor diesem Hintergrund hinzufügen möchten , aber Sie möchten hinter dem herumlaufenden Spieler bearbeiten. Offensichtlich müssen Sie die Zahl auswählen , die sich zwischen diesen beiden Ebenen befindet. Je größer Sie diese Ebenen erstellen, desto mehr Freiheit haben Sie Elemente neben oder zwischen diesen Ebenen zu platzieren. Also glaube ich nicht, dass wir mehr als zehn brauchen. Ich brauchte nie mehr als zehn, also schreibe ich stattdessen zehn, um sicherzustellen, dass meine Bodenfliesen bei 0 sind, da dies es uns später beim Programmieren leichter machen wird . Ich möchte diese Ebene einfach hierher schieben. Das sind meine Kacheln, zwei vor hier, also ist es in der Mitte. So können Sie hier am Drehpunkt sehen, wenn Sie das Verschieben-Werkzeug ausgewählt haben, wenn Sie darauf klicken, haben Sie das Verschieben-Werkzeug ausgewählt. Sie können sehen, ob Sie sich in diese Richtung bewegen möchten, müssen Sie sie um zehn verschieben. Und jetzt ist es tatsächlich richtig. Denken Sie daran, dass unser Fangwerkzeug alle zehn Grad einrastet, zehn Pixel und nicht in Grad. Jetzt ist es eigentlich nicht richtig denn mit dem Schnappen haben wir es auf zehn geschafft. Sie können also sehen, dass es jetzt ist, jetzt liegt der Hintergrund bei 000. Wenn Sie zehn hier im Y schreiben, haben Sie die Dosis, dosieren Sie neuartige Kacheln als 000. Und das wird es uns später, wenn wir programmieren, viel einfacher machen. 12. Post: Okay, das Problem, das wir gerade in unserem Level haben , ist, dass die Beleuchtung und die Farben nicht korrekt sind. Wie Sie hier sehen können, können Sie den Unterschied zwischen dieser Kachelkarte, den richtigen Farben und wie sie aussieht, sehen Sie, wenn ich meine Kachelkarte öffne und wenn ich hier hineinzoome Unterschied zwischen dieser Kachelkarte, den richtigen Farben und wie sie aussieht, sehen Sie, wenn ich meine Kachelkarte . Und das ist unser Niveau, also sieht es definitiv falsch aus und die Beleuchtung ist zu stark. Und hier kommt das Post-Process-Volume ins Spiel. Also hier oben und schnell einen Button hinzufügen. Klicken wir hier hoch und gehen dann zu visuellen Effekten. Und fügen wir dieses namens Post-Process-Volume hinzu. Also das Post-Process-Volume, was es ist, Es ist genau wie in Photoshop. Wenn Sie ein Bild in Photoshop einfügen, können Sie die Bildwissenschaftler bearbeiten, Sie können die Sättigung und die Helligkeit des Bildes dort bearbeiten . Das Gleiche gilt hier in Unreal Engine, wir verwenden ein Post-Process-Lautstärke, um die Beleuchtung und die Farben zu ändern und so weiter. Also fast genau wie die Farbkorrektur. Wir haben also das Post-Process-Volumen und was wir tun wollen, ist hier nach unten zu scrollen. Und wir wollen dieses so genannte unendliche Ausmaß annehmen. Was das bewirkt, ist, dass es die ganze Welt betrifft. Wenn Sie dies nicht drücken, funktioniert dies nur, wenn Sie sich in diesem Feld befinden. Um es Ihnen zum Beispiel zu demonstrieren, werde ich diese Blüte erhöhen. Also geht es um die Intensität von zehn, also sehr extrem. Und wenn ich hier in meine Box gehe, kannst du sehen, dass die Blüte wirksam wird, diese verträumten Effekte. Und wenn ich diese Lautstärkebox nach dem Prozess verlassen würde, wird es wieder normal, sodass Sie den Unterschied erkennen können. Okay, anstatt hineinzugehen, nicht diese Box hier und vielleicht versuchen, diese Box in das Level zu bringen. Das müssen wir nicht wirklich tun. Wir möchten nur auf diese sogenannte unendliche Ausdehnung klicken. Und es wird die ganze Welt betreffen. Wir müssen also nicht in dieser Box sein , damit sie wirksam wird. Okay, also was wir tun wollen, ich setze dieses Post-Process-Volume einfach auf 000. Eigentlich spielt es keine Rolle, aber das mache ich einfach gerne. Und dann lasst uns alle diese Einstellungen durchgehen. Und ich brauchte ungefähr sechs bis sieben Stunden, um das tatsächlich mit den richtigen Einstellungen festzuhalten. Also hier in der Blüte, setze es uns auf 0. Wir wollen wirklich keine Blüte innerhalb unseres Levels. Als nächstes gehen wir auf die Exposition. Und innerhalb der Belichtung, Nehmen wir die minimale Helligkeit und maximale Helligkeit. Und lasst uns beide auf zwei setzen. Also 22. Und dann lasst uns runter zu Lens Flare gehen. Klicken wir auf die Intensität und legen sie auf 0 fest. Und wir brauchen nicht wirklich eine Linsenfackel. Als Nächstes klicken wir auf Bildeffekte und weitere Schadenseffekte. Wir können die Vignette auf 0 setzen bevor wir eine Farbkorrektur vornehmen. Lassen Sie uns das vorerst ein bisschen überspringen. Sie gehen unter und ich werde die Umgebungsokklusion finden. Aber die Umgebungsokklusion, die wir auf 0 setzen wollen , brauchen wir das nicht. Und auch die Bewegungsunschärfe, ich setze auf 0. Okay, wir haben also nicht wirklich mehr Einstellungen, mit denen wir hier unten spielen können. Gehen wir also zurück zur Farbabstufung. Und wieder habe ich sieben Stunden damit verbracht. Begründen Sie also mit Zufallszahlen. Es liegt nicht daran, dass ich richtig vermute, es liegt daran, dass ich versucht habe , hier die richtigen Zahlen zu finden. Also hier können wir zuerst auf der globalen Seite darauf klicken. Und nehmen wir diese , die Sättigung genannt wird. So können Sie vergrößern, Sie können sehen, dass Sie die Sättigung des Bildes erhöhen und verringern können . Und dafür war 1.980 die perfekte Nummer. Und lasst uns ein bisschen hier unten im Schatten scrollen. Klicken Sie also auf die Schatten und nehmen sowohl die Sättigung als auch den Kontrast und das Gamma. Was ist Sättigung? Wir wollen mit 0,9 mitmachen. Und mit dem Kontrast gehen wir mit 0,9 für das Gamma, Lass uns mit 1,01 gehen. Und lass uns jetzt runter gehen. Und in den mittleren Tönen haben wir eigentlich nichts anderes als in den Highlights, wenn wir auf diesen klicken, wollten wir nur dieses Highlights Minimum nehmen. Also setze ich es auf eins ein. Und dann gehen wir auf Verschiedenes hinaus. Ich nehme diesen Tone Curve Betrag, und wir werden das auf 0 senken. Sie können sehen, dass sich das in unseren Farben stark ändert . Gehen Sie also auf 0, und das sollte alle unsere Probleme beheben. Klicken wir nun auf die Kachelkarte und Sie können hineinzoomen und einen Blick darauf werfen. Und du kannst dir unser Level hier ansehen, und du kannst sehen, dass sie jetzt perfekt gleich aussehen. Sie sind jetzt ein kleines Problem, und das werden wir in der nächsten Lektion beheben. Wie Sie sehen können, sind diese pixelig, aber Sie können sehen, dass es in unserem Level eine Art Glätte gibt, die nicht zu pixelig ist. Und das liegt an dem Anti-Aliasing, das wir entfernen müssen. Aber Sie können hier sehen, wenn Sie in den Live-Modus wechseln und in den nicht verknüpften Modus wechseln, so sieht die richtige Textur aus. So sieht es also ohne Beleuchtung aus. Wenn Sie also in den Lead-Modus zurückkehren, können Sie versuchen, die beiden zu vergleichen. Das ist es, was wir also erreichen wollen. Wir versuchen zu erreichen, dass der Elite-Modus die gleiche Farbe wie der unbeleuchtete Modus hat. So sehr nahe beieinander. Das einzige ist, dass der Live-Modus aufgrund des Anti-Aliasing glatter ist . Und das werden wir in der nächsten Lektion beheben. 13. Entfernen von Anti-Aliasing: Okay, lassen Sie uns das Anti-Aliasing verschieben, das diesen glatten Effekt innerhalb unseres gesamten Levels verursacht . Und wir brauchen keine Glättung wenn wir mit Pixel-Los arbeiten, wir wollen die wahren Pixel beobachten. Also gehen wir weiter, um zu bearbeiten und gehen wir in unsere Projekteinstellungen ein. Im Inneren können wir nach unten scrollen und diese namens Rendering innerhalb des Engine-Renderings und im Inneren finden Rendering innerhalb des Engine-Renderings . Nun, das ist Anti-Aliasing, aber das ist für Mobilgeräte und wir machen gerade kein mobiles Spiel, also spielt das keine Rolle. Aber ich gehe hier runter. Und wir möchten diese eine Standardeinstellungen finden solange wir dabei sind. Lasst uns tatsächlich ein paar Dinge entfernen, die blühen. Wir haben es bereits auf 0 gesetzt, aber auch hier können wir auch die Umgebungsokklusion immer deaktivieren . Dies ist die automatische Belichtung und wir können auch die Bewegungsunschärfe entfernen. Also alle diese wurden entfernt. Und das ist die wichtige, die Anti-Aliasing-Methode. Ich weiß nicht, ob du einen Unterschied sehen kannst, wenn ich ihn einfach hier auf die Seite lege und du kannst sehen, ob etwas passiert, wenn ich es deaktiviere. Also diese zeitliche Superauflösung, wenn ich auf Keine klicke, kannst du den Unterschied erkennen. Natürlich kannst du es beibehalten, wenn du willst, dass dein Spiel so geglättet wird. Aber für echte Pixelkunst hast du das eigentlich nicht. Wenn Sie also auf keine klicken, werden die wahren Kacheln angezeigt, wie sie in der Pixel-Art-Software erstellt werden. Wenn wir also in den unbeleuchteten Modus und den Modus gehen, denken Sie daran, dass wir dies erreichen wollen, dieselben Farben. Sie können sehen, dass es jetzt keinen Unterschied gibt, und das wollen wir. Wir möchten, dass der Lit-Modus der gleiche ist wie der unbeleuchtete. Und wenn Sie den Unterschied sehen möchten, klicken Sie auf dieses Post-Process-Volume, mit dem wir in der vorherigen Lektion gearbeitet haben . Wir können auf diese Option klicken, um es zu entfernen, und Sie können den Unterschied erkennen. Jetzt ist dies der OnLoad-Modus. Dies ist eine wahre Farbe. Dies ist der Live-Modus. Und wenn wir es aktivieren, machen wir es genau so, wie wir es wollen. 14. Kollision hinzufügen: Lassen Sie uns nun die Kollision für unsere Kacheln aktivieren. Was also Kollisionen sind, ist das, was diese Kacheln tatsächlich begehbar macht. Sie können sich also vorstellen, wenn wir in Zukunft einen Charakter hinzufügen, der Charakter derzeit nicht auf diesen Kacheln laufen , da sie keine Kollision haben. So wird der Charakter tatsächlich durch die Kacheln folgen und durch den Boden fallen. Wir müssen also eine Kollision hinzufügen damit der Charakter auf diesen Kacheln laufen kann, und das ist sehr einfach. Gehen wir also rüber zum Kachelset. Also lasst uns zur Tulsa Dragon Road fahren. Und innerhalb dieser Kachel sagte, denken Sie daran, dass das einzige, was wir beim letzten Mal gemacht haben , nur die Fliesengröße auf 30 einzustellen. Bakterien können tatsächlich auch Kollision hinzufügen. Klicken Sie also auf diese Schaltfläche, die kollidierende Kacheln genannt wird. Jetzt können Sie die Kollision sehen. Jetzt. Im Moment kannst du nichts sehen, weil wir keine Kollision haben. Klicken Sie also hier auf die erste Kachel, und diese zum Beispiel, klicken Sie auf dieses Feld „Hinzufügen“. Und jetzt hast du tatsächlich eine Kollision hinzugefügt. Wenn ich also auf Jetzt speichern klicke und dir nur zeigen wollte , dass es tatsächlich eine Kollision hinzugefügt hat. Wenn ich also auf klicke, tauche hier auf und klicke auf Kollision, jetzt kannst du nichts sehen und das liegt daran, dass du innerhalb des Kachelsatzes daran denken musst, auf Maps aktualisieren zu klicken. Dadurch werden alle Ihre Kachelkarten aktualisiert. Und jetzt können Sie sehen, dass es tatsächlich Kollision hinzufügt. Jetzt kann man diese Boxen hier oben sehen. Und das ist die Kollision, wir fügen es einfach hinzu und wir müssen das tun, damit der Charakter tatsächlich auf diesen Kacheln laufen kann. Technisch gesehen läuft dieser Charakter in der Programmierung auf diesen kleinen Boxen, aber es sieht so aus, als würde der Charakter auf den Kacheln laufen. also wieder hierher gehen und wir haben, gibt es leider keine Methode, bei wir alles auswählen und hier hochklicken können. Wir müssen es manuell machen, aber wir wollen lange dauern. Klicken Sie also hier an, schauen Sie sich die Box an, ganz einfach. Wir fügen diesen Kacheln nur Kollisionen hinzu. Und du musst das für alle Kacheln tun , die du benutzt hast. Einfach so. Zum Beispiel müssen wir keine Kollision für diese Kacheln hinzufügen , da wir sie nicht verwendet haben. Wenn Sie sie jedoch in Ihrer Karte verwendet haben, müssen Sie auch Kollisionen für sie hinzufügen. Wir fügen also keine Kollisionen für diese hinzu, da der Spieler offensichtlich nicht auf diesen Spielfeldern laufen wird. Wenn ich also hier speichere und Maps aktualisiere, siehst du hier, dass die Kacheln additiv sind, die Kollisionen werden hinzugefügt und wir müssen hier unten keine Kollision hinzufügen , denn dann wird der Spieler niemals eine Kollision hinzufügen geh hier runter. müssen wir also nicht wirklich. Jetzt möchte ich meine Kollisionsbox größer machen, weil Sie sich vorstellen können, wenn der Spieler hier auf diesen Boxen läuft, besteht die Möglichkeit, dass sich um eine 3D-Engine handelt. Es besteht die Möglichkeit, dass der Spieler so geschoben wird der Spieler hier zur Seite fällt und vom Boden fällt und von den Kollisionskästen fällt. Um dieses Risiko zu beseitigen, möchte ich die Kollisionsbox vergrößern. Das können wir innerhalb der Kachelkarte machen. Innerhalb der Kachelkarte können wir hier unten gehen , Kollisionsdicke. Stellen wir fest, dass es 254 ist. Klicken wir nun auf Speichern. Und wenn wir minimieren, können Sie sehen, dass die Kollisionsboxen viel länger sind und wir haben keine Chance, dass der Spieler vom Boden fällt , weil dies jetzt abgedeckt ist. Okay, lasst uns dem Rest eine Kollision hinzufügen. Ich glaube, wir glauben, ich glaube uns dieser Teil hier fehlt. Gehen Sie also zum Werkzeugsatz und drinnen von hier, fügen wir auch Kollision zwei hinzu. Das ist, dass wir diese tatsächlich vermissen, also füge hier oben eine Kollisionsbox hinzu, mach dasselbe mit diesem. Wir müssen auch hier eine Kollision hinzufügen, also die Seite, also klicken Sie auf das Feld Hinzufügen, können Sie hier an der Seite sehen, wir brauchen keine Kollision wenn ich die Karte aktualisiere, damit wir sie sehen können. Jetzt hat es hier drüben Kollision hinzugefügt. Das brauchen wir nicht wirklich. Wir müssen nur die Fliese abdecken. Was wir also tun können, ist, auf diesen zu klicken und dann diese beiden Scheitelpunkte zu lecken und zu saugen und auszuwählen. Und wir können klicken und ziehen. Genau wie unser Ansichtsfenster werde ich vielleicht das Fangen deaktivieren. Mal sehen. Oder eigentlich ist es in Ordnung. Genau so ist das perfekt. Mach das Gleiche hier. Ich füge Kollisionsfeld hinzu und nehme diese beiden Scheitelpunkte und reduziere sie so. Jetzt kannst du die Map aktualisieren und du siehst, wie sie aussieht. So sieht es aus. Die Kollision ist also zwei hier. Und wenn wir das Gefühl haben, dass dies zu viel ist, können wir immer zurückgehen und es kleiner machen. Jetzt vermissen wir das hier. Fügen wir ein Kollisionsfeld hinzu. Und lasst uns diese auswählen, um sie näher an dasselbe zu bringen. Bringen Sie sie einfach so näher. noch einmal daran, auf Maps aktualisieren zu klicken. Das Letzte ist, dass uns diese Steigung hier fehlt , weil wir diese auch benutzt haben. Also klicke ich zuerst auf dieses und lass uns eine Box hinzufügen. Jetzt ist dieser etwas kniffliger, also wählen wir diese Scheitelpunkte aus. Dieser Scheitelpunkt hier oben, wenn Sie auf Ihrer Tastatur auf Löschen klicken, wird er gelöscht. Und jetzt haben wir nur drei Scheitelpunkte. Jetzt kannst du einfach so nach unten gehen. Und lass uns mit dem nächsten übergehen. Also hier klicken Sie auf Feld hinzufügen. Wir wollen diesen nach unten bewegen, vielleicht einfach so, und diese auch zur Seite bewegen. Wir brauchen hier nicht wirklich eine Kollision. Und ich werde mein Schnappen reduzieren , weil ich es nicht hier in der Mitte bewegen lässt. Also reduziere ich es auf fünf statt auf zehn. Und ich denke, so etwas funktioniert für mich. Jetzt klicken wir auf diesen. Sie können sehen, dass Pisten etwas schwieriger zu arbeiten sind. also auf diesen klicken, möchten wir hier eine kleine Kollision hinzufügen , damit der Spieler nicht fällt. Wenn Sie also erneut auf das Feld Hinzufügen klicken, können wir diesen Scheitelpunkt auswählen auf der Tastatur auf Löschen klicken. Wir können das nehmen und näher bringen. Wenn ich es also hier treffen kann, näher und nehme dann diesen Scheitelpunkt und bewege ihn einfach so nach unten. Und dann können wir den nächsten hier nehmen und eine Schachtel hinzufügen. Wir können diesen Scheitelpunkt nehmen und ihn nach unten bewegen. Und das können wir einfach sein lassen. Ich denke, das ist eine gute Kurve. Und der letzte, es gibt einen kleinen Bug. Ich habe es vorhin getestet. Wir müssen hier auch eine sehr kleine Kollision hinzufügen eine sehr kleine Kollision , sonst wird der Spieler tatsächlich tun, wenn ich die Karte aktualisiere und ich dir zeigen kann, wird der Spieler tatsächlich hier stecken bleiben. Ganz oben. Es gibt eine sehr, sehr kleine Lücke, die wir nicht sehen können. Und wir müssen hier eine Kollision hinzufügen. Und offensichtlich liegt das daran, dass ich das schon einmal getestet habe. Was wir hier einfach tun wollen, ist, dass wir den Scheitelpunkt hier oben löschen möchten, genau wie zuvor. Wir können diese sehr eng bewegen. Um nun die spezifische Nummer dafür zu sehen, können Sie hier runter gehen. Und die Daten, und die Indexkollisionsdaten, gehen zwei Formen nach unten. Klicken Sie auf diesen Index und sehen Sie sich diese Scheitelpunkte an. Sie können sehen, wenn ich diesen Scheitelpunkt hier nach oben verschiebe, diese Anzahl von Änderungen. Ich möchte also nur, dass diese Zahl 14,9 ist. Sie können also sehen, dass wenn ich das Schnappen entferne, desto näher bewege ich es nach unten. Die letzte Zahl ist 15, offensichtlich hier. Also möchte ich es auf einen 5.9, 14 verschieben. Und das auch. Also sehr, sehr, sehr nah dran. Wenn ich es einfach bewege, um zu sehen, welches es ist, ist es hier unten. 14.9. Und ich weiß nicht warum ich 15.914 gesagt habe, genau so. Beide sind also 14,9. Hier gibt es also ein kleines College , das den Spieler nicht durch den Boden geht. Und das liegt daran, dass ich es vorher bei meinem Vorbereitungsprojekt getestet habe . Jetzt haben wir die ganze Kollision eingestellt. Ich erinnere mich nur daran, dass ich immer auf die Refresh Map klicke und auf Speichern klicke, alles speichern. Und jetzt bist du bereit zu gehen. Sie können also einen Blick auf Ihre Karte werfen. Sie können sehen, dass es hier oben Kollision gibt. Wir müssen diesen vielleicht reduzieren. Vielleicht ist es zu weit draußen. Und du kannst es dir auch hier ansehen. Aber normalerweise müssen wir einen Charakter haben , um um die Welt zu rennen und dies zu testen , bevor wir es mit Sicherheit sagen können. Aber jetzt haben wir die erste Kollision erledigt und wir können mit der Schaffung unseres Charakters fortfahren. 15. Sprites erstellen: Es ist jetzt an der Zeit, die Charakter-Assets zu importieren. Also habe ich dich hier wieder für dich bereitgestellt, innerhalb der Kursmaterialien gibt es einen Ordner namens Zeichen. Klicken Sie also auf diesen Ordner. Und fangen wir mit Serena an. Was ich vorerst möchte, ist einfach den Leerlauf, den Sprung und die Run-Animationen zu importieren . Bevor wir das tun, gehen wir zuerst zum Assets-Ordner. Lassen Sie uns einen neuen Ordner namens Zeichen erstellen. Und dann machen wir drinnen wieder ein neues namens Serena. Und dann können wir hier unsere Vermögenswerte importieren. Also möchte ich den Leerlaufsprung ziehen und rennen und in dein Projekt ziehen. Und wenn Sie loslassen, importieren Sie diese Texturen. Also werden wir tatsächlich etwas erstellen, das sich Sprites und Flip Books nennt. Also lasst uns einen neuen Ordner erstellen und ich nenne ihn die Texturen. Und ich werde diese in diesem Ordner haben. Und all die Flip-Bücher, die wir machen, werden hier draußen sein. also anstelle von Texturen daran, wenn Sie Texturen importieren, und wenn Sie erneut darauf doppelklicken und vergrößern, können Sie sehen, dass Unreal Engine diese Pixel glättet. Und wie ich dir schon sagte, musst du sie alle auswählen. Und wenn Sie sie so auswählen möchten, können Sie auf eine Umschalttaste klicken und auf die letzte klicken. Es wird alle auswählen. Und Sie können mit der rechten Maustaste auf Sprite-Aktionen und Papier auf die Einstellungen anwenden. Wie zuvor können Sie sehen, dass es die Glätte entfernt und Sie können die Pixel klarer sehen. Jetzt können Sie sehen, dass die Textur mit dieser Animation geliefert wird. Sie haben also die Animation, Sie haben die laufende Animation und sie sind in einer Textur zusammengefügt. Und jetzt musst du daraus Sprites erstellen. Fangen wir also mit dem Leerlauf an. Sie können mit der rechten Maustaste klicken und Aktionen inspirieren. Man kann sagen, Sprites extrahieren. Und hier drin musst du hier nach oben rechts gehen und auf Raster anstatt auf Auto klicken. Und dann müssen Sie angeben, wie groß das Raster ist. Jetzt habe ich das in Photoshop gemacht, damit ich weiß, dass das Netz achtzig, einachtzig ist. Und wenn Sie etwas aus dem Internet herunterladen, werden sie Ihnen sagen, wie groß dieses Raster ist, einachtzig, einachtzig. Und es wird diese Animationen als einzelne Frames extrahieren. Wenn Sie also hier unten auf Extrahieren klicken, können Sie sehen, dass sie in einzelne Frames extrahiert werden und diese heißen Sprites. Sprites sind statische Bilder. Hier in unserem Level konnten Sie also nicht wirklich eine Textur ziehen und sie hier ablegen , weil Sie sehen können, dass sie alles ersetzt, was Sie ziehen, und sie oben drauf ziehen. Also klicke ich auf Control Z. Aber Sprites sind statische Bilder und es kann diese tatsächlich innerhalb des Levels ziehen. Wenn Sie also etwas Statik haben, zum Beispiel ein Fass, das sich nie bewegt, können Sie das hier in Ihrem Level hinzufügen. Aber unser Charakter hat Animationen, daher möchten wir statische Bilder nicht wirklich ziehen , da dies eigentlich Animationen sind, aber wir werden später im nächsten Video mit den Animationen arbeiten . Also lasst uns löschen. Ich werde dieses Material löschen, das es erstellt hat wenn ich diese Textur darauf gezogen habe , einfach so. Jetzt benenne ich die Sprites um. Normalerweise lösche ich das vorne. Denken Sie daran, dass Sie auf die Zahlen achten müssen. Das ist also Nummer 0123. Also musst du das in der richtigen Reihenfolge machen. Und hier, der erste, ich S für Sprite nenne , ist untätig und 01 einfach so. Wir sind also ein bisschen organisierter. Dieser ist jetzt 02 und 0304. Einfach so. Jetzt haben wir das Idol. Und lass uns das Gleiche mit dem Sprung machen. Du kannst es selbst machen, nur zum Üben, wenn du willst. Sie können hier mit der rechten Maustaste klicken und zu Aktionen suchen und Sprites extrahieren. Wählen Sie hier oben Raster aus und extrahieren Sie erneut 180 die Sprites. Und nochmal, achte auf die Zahlen. Es heißt 0123. Denken Sie also nicht, dass Sie hier reingehen und diese 10 nennen können, denn dieser ist Nummer drei. Manchmal klicke ich einfach vom Ordner weg. Klicken Sie also woanders weg und gehen Sie zurück zum Ordner. Und du kannst sehen, dass es sie so sortiert, wie du es willst. Dies ist also der erste, ist r1, 01. Und das Gleiche mit den anderen machen. Es dauert also ein wenig Zeit, um Ihre Ordner zu organisieren. Aber am Ende, wenn sie organisiert sind, wird es Ihnen leicht fallen, damit zu arbeiten. Jetzt ist der letzte der Sprung. Und dieser kann man sehen, dass der Sprung nur eine Animation hat. Es macht also keinen Sinn, mit der rechten Maustaste zu klicken und Sprites extrahieren zu sagen , da Sie wirklich nur ein Sprite haben. Sie möchten also mit der rechten Maustaste klicken und einfach auf Sprite erstellen anstatt auf Sprite erstellen anstatt Extrahieren klicken, da Sie nur ein Sprite haben. Und nennen wir das „Sprung“. Okay, jetzt haben wir unsere Sprites erstellt. Lasst uns alles speichern und lass uns zur nächsten Lektion übergehen. 16. Flipbooks erstellen: Jetzt, da wir Sprites für unseren Charakter erstellt haben, ist es jetzt an der Zeit, diese Sprites zu animieren. Was Sie also tun möchten, ist zum Beispiel mit dem Leerlauf zu beginnen. Sie können sie alle auswählen. Also entweder eins, du kannst die Kontrolle halten. Ich würde zu drei oder vier gehen. Oder eine schnellere Möglichkeit, dies zu tun, ist, auf das erste zu klicken, Umschalttaste gedrückt zu halten und auf die letzten auf die Nummer vier zu klicken . Und wir wählen das Ganze hier in der Zeile aus. Jetzt können Sie mit der rechten Maustaste klicken. Und hier oben heißt es „Flip Book erstellen“. Wenn Sie also auf „Flip Book erstellen“ klicken, wird eines erstellt. Und normalerweise schreibe ich anstelle von S und vorne FB für ein Flipbook. Dies ist das Idle Flip Book. Sie können jetzt auf das Flipbook doppelklicken. Und Sie können sehen, dass dies animiert ist, aber im Moment ist es zu schnell animiert. Ich möchte also, dass du die Frames pro Sekunde hier nach oben rechts änderst . Also habe ich gestern Maple Story gespielt und gesehen, wie schnell die Animation war, und es waren ungefähr zwei Frames pro Sekunde. Schreiben Sie also an, und Sie können jetzt sehen, dass es animiert ist. Dies ist die Leerlauf-Animation. Lasst uns das Gleiche für den Lauf machen. Um Nummer eins bis vier auszuführen, kann es mit der rechten Maustaste klicken, ein Flipbook erstellen es FP run nennen. Und du kannst noch einmal darauf doppelklicken. Und für die Run-Animation sind es sechs Frames pro Sekunde. Natürlich kannst du es schneller machen. Wenn du es zum Beispiel bist, wenn du willst, dass dein Charakter so schnell läuft oder die Animation einfach so schnell sein lässt, kannst du das tun. Aber für mich versuche ich Maple Story so gut ich kann nachzuahmen. Und es sieht so aus, als wäre es eine Animation etwa sechs Frames pro Sekunde, genau so. Okay, lass es uns schließen. Und der letzte, den wir haben den Sprung. Jetzt können wir daraus ein Flipbook erstellen und wir müssen es tun, denn später, wenn wir unsere Charaktere erstellen, will der Charakter ein Flipbook und Eingabe. Also können wir dieses Sprite nicht wirklich gebrauchen. Denken Sie daran, das ist ein Sprite, das ist ein Flipbook. Wir müssen dies zu einem Flipbook machen, da der Charakter später ein Flipbook benötigt. Obwohl es sich um einen Frame handelt, müssen wir ein Flipbook erstellen. Lasst uns also mit der rechten Maustaste klicken und ein Flipbook aus dem Sprung erstellen. Und nennen wir es FB, jump, so. Und offensichtlich ist dies nur ein Frame, also werde ich einfach diesen einen Frames pro Sekunde in eins ändern und wir können es schließen und wir können alles speichern. Jetzt haben wir unsere Flip Books erstellt. Ich verschiebe diese Flip Books aus dem Texturordner. Also verschiebe ich sie hier nach Tsarina und klicke auf Move here. Jetzt haben wir diese Flip Books und diese Sektoren, wir müssen sie nicht wirklich wiedersehen. diesem Grund habe ich einen Textures-Ordner erstellt, damit es einfacher zu betrachten ist, da wir nur diese Flip Books wirklich brauchen. 17. Einführung in die Blaupause: Blueprint ist die visuelle Skriptsprache in Unreal Engine. Und wenn Sie Blaupausen schreiben, ob Sie es glauben oder nicht, sind Sie ein Programmierer. Du programmierst. Anstatt traditionelle Codezeilen zu schreiben, können Sie das gesamte Spiel programmieren, indem einfach Notizen hinzufügen und miteinander verbinden. Es ist also eine visuelle Skriptsprache. Blueprint ist so leistungsfähig wie alle anderen Programmiersprachen, egal ob C plus C-Sharp oder jede andere Sprache, Sie können mithilfe von Blueprint erstellen, was Sie wollen. Im Moment erstellen wir eine Mini-Version von Maple Story. Sie können aber auch Fortnite, Metal Gear, Solid, Rost oder sogar Aldon Ring herstellen . Sie können jede Idee mit Blueprints programmieren. Das einzige , was dich einschränkt , ist deine Vorstellungskraft. Was auch immer Sie programmieren möchten, das können Sie mit Blueprint machen. Und es ist auch optimiert und läuft gut damit, lasst uns gleich die Grundlagen von Blaupausen lernen. 18. Blaupause: Sprechen wir jetzt über Blueprint-Kurse. Also hier in jedem zufälligen Ordner klicke ich mit der rechten Maustaste. Ich wollte dir vorerst nur die Blueprint-Kurse zeigen. Sie können mit der rechten Maustaste klicken und hier oben auf Blueprint-Klasse klicken. Sie finden dies auch unter Blueprints, diesen namens Blueprint-Klasse. Also das Gleiche, aber es ist schneller, einfach hier hochzuklicken. Dies sind also die verschiedenen Klassen , die Sie in Blueprint erstellen können. Und ich möchte mit dem ersten anfangen. Der erste, den wir haben, ist ein Schauspieler und Sie können die Beschreibung hier rechts sehen . Es besagt, dass ein Schauspieler ein Objekt ist , das in der Welt platziert oder hervorgebracht werden kann. So kann ein sehr einfacher Schauspieler zum Beispiel ein Tisch sein, es kann ein Stuhl sein, es kann ein Hammer sein. Also alles, was in die Welt gebracht werden kann , nur ein Objekt. Der nächste ist ein Bauer. Und auf ist ein Akteur, der besessen werden kann und Eingaben von einem Controller empfangen kann. Und was das bedeutet, ist etwas, das der Spieler kontrollieren kann. Also in einem anderen Kurs, den ich gemacht habe , den Sie hier auf der Website sehen können , ist, dass ich einen Ball oder eine Kugel erstelle. Bewegen Sie sich. Diese Sphäre, die sich bewegt, ist im Gange, weil ich wollte, dass der Spieler diese Angst kontrolliert , um sich mit der Tastatur zu bewegen. Also n upon ist ein Akteur, der besessen werden kann und Eingaben von einem Controller empfangen kann. Also musst du alles, was du willst, in einen Teich bringen. Wenn Sie möchten, dass der Spieler dieses Objekt steuert, können Sie keinen Schauspieler machen und möchten, dass der Spieler dieses Objekt kontrolliert, dass Sie es stattdessen zu einem Punkt machen müssen. Als nächstes haben wir einen Charakter. Und ein Charakter ist eine Art von ****. Sie können also sehen, dass es eine Beziehung gibt. Ein Charakter ist also tatsächlich dran. Ein Charakter ist eine Art von ****, die die Möglichkeit beinhaltet, herumzulaufen. Wann immer du also einen Charakter machen willst, kannst du dir nur vorstellen, dass ein Mensch mit zwei Armen und zwei Beinen herumläuft. Du musst einen Charakter machen. Aber wenn du deinen Charakter so etwas wie einen Ball oder eine Kugel machen willst deinen Charakter so etwas wie einen Ball oder eine Kugel , die auf der Welt herumrollt hat er keine zwei Arme, zwei Beine. Sie können weitermachen und einen Punkt erstellen. Dies ist also die einfachste Differenzierung. Wenn Sie also einen Charakter haben, zwei Arme zwei Beine herumlaufen, und zwei Beine herumlaufen, können Sie stattdessen einen Charakter erstellen. Dann hast du etwas namens Player-Controller. Und Apply Controller ist ein Akteur, der für die Kontrolle verantwortlich ist , wenn er vom Spieler benutzt wird. Also musst du dir das überlegen. Dies ist nicht wirklich der Controller , den Sie zu Hause haben, oder Ihr Xbox-Controller oder Ihr PlayStation-Controller. Das heißt, du kannst dir das als das Gehirn des Charakters vorstellen. Das ist also das Gehirn des Charakters. Alle Charaktere , die du auf der Welt spawnst , wird einen Spieler-Controller haben. Und hier können Sie Codes wie Benutzeroberflächen hinzufügen . Oder wenn du ein Einzelspieler-Spiel machen willst, erstellst du fantastische Bewegungen. Das kannst du hier machen, aber wir werden mit all diesen Briefen arbeiten. Also mach dir darüber keine Sorgen. Dies ist vorerst nur die grundlegende Erklärung. Dann heißt der letzte, über den ich sprechen möchte , Spielmodus, und das ist fast selbsterklärend. Die Spielmodusbasis definiert das gespielte Spiel, seine Regeln, die Wertung und andere Facetten des Spieltyps. Wenn wir zum Beispiel ein Shooter-Spiel haben, haben Sie die Flagge erobern. Du hast wie viel Zeit du pro Runde hast. zum Beispiel in Maple Story Wenn wir zum Beispiel in Maple Story eine Veranstaltung machen wollten, können wir definieren, wie viel Zeit dieses Ereignis in Anspruch nehmen wird und so weiter. Also nur die Spielregeln. beispielsweise in Capture the Flag Wenn Sie beispielsweise in Capture the Flag die Flagge von einem Team erobern, erhalten Sie einige Punkte. Und diese Punkte können auch innerhalb des Spielmodus aufgeschrieben werden , da dies die Spielregeln sind. Jetzt, da wir gerade mit 2D arbeiten. All dies sind also 3D. Da wir mit 2D arbeiten, müssen Sie darauf klicken, dieser nennt alle Klassen. Und hier kannst du nach Papier suchen. Sie können sehen, dass wir viele Klassen haben und das sind nur die grundlegenden, die wir ständig benutzen. Und du gehst fast nie hier rein es sei denn, du arbeitest mit fortgeschrittenen Sachen. Zum Beispiel ein Spar - und Ladesystem, das wir hoffentlich später tun werden. In allen Klassen können Sie hier nach Papier suchen. Und Papier ist nur das Pixellot 2D hier in Unreal Engine. Anstelle dieses Schauspielers hier oben, der 3D ist , können wir zum Beispiel diesen „ Paper Sprite Actor“ erstellen . Oder wir können einen Flipbook-Schauspieler erstellen wenn wir ein Flipbook haben, denken Sie daran, dass Flipbooks die animierten Sprites zusammengestellt waren . Wenn Sie also eine Animation haben, möchten Sie ein Flipbook verwenden. Wenn Sie ein statisches Element haben, möchten Sie ein Sprite verwenden und haben dann auch einen Charakter. Anstatt dieses Zeichen hier oben zu verwenden, da es sich um ein 3D-Zeichen handelt, müssen wir dieses Zeichen verwenden, das als Papierzeichen bezeichnet wird. Und dieses beinhaltet ein Flipbook. Wir haben Flipbooks für unseren Charakter gemacht, die wir hier in unseren Papiercharakter stecken können. Dies sind also die Grundklassen, die wir verwenden möchten, und meistens werden wir diese hier oben nicht verwenden. Wir werden einen Spieler-Controller und einen Spielmodus hinzufügen , da diese nicht erforderlich sind. Aber für all diese würden hier unten meistens in unserem Papiercharakter, dem Papiersprite und unserem Papier-Flipbook funktionieren . 19. Spielmodus und Player: Beginnen wir nun damit, unsere ersten Blueprints zu erstellen. Um das zu tun, gehen wir in den Inhaltsordner. Sie können hier mit der rechten Maustaste klicken und einen neuen Ordner namens Blueprints erstellen. Und in diesem Ordner können Sie übrigens eine volle Dosis Farben geben. Wenn Sie also hier unter Blueprints Ordner mit der rechten Maustaste klicken können, können Sie auf Farbe festlegen klicken. Manchmal mache ich das nur um mich selbst zu organisieren, ich wähle einfach eine blaue Farbe aus. Ich weiß also, dass es zum Beispiel Entwürfe wie diese sind. Und du kannst es hier klar sehen. Sie können erneut mit der rechten Maustaste klicken und Blueprint-Klasse auswählen. Und lasst uns einen Spielmodus erstellen. Jedes Spiel, das du erstellst, hat einen Spielmodus und einen Spieler-Controller. Dies sind die grundlegenden Dinge, mit denen Sie in einem Spiel beginnen. Lasst uns also einen Spielmodus erstellen. Und nennen wir es g, m als Präfix für den Spielmodus. Und normalerweise nenne ich es den Namen des Spiels. Also Maple Story für diese. Der nächste, klicken Sie erneut mit der rechten Maustaste auf Loop und class. Klicke auf den Spieler-Controller und nenne es PC für den Spieler-Controller, nenne es erneut den Namen des Spiels. Also Maple Story. Jetzt müssen Sie natürlich mehrere Spielmodi erstellen , wenn Sie mehrere Spielmodi haben. So hast du zum Beispiel in Counter-Strike etwas namens Death Match. Du hast die Flagge erobert, du hast fünf gegen fünf Spieler. Du hast also verschiedene Spielmodi. Und du kannst mehrere Spielmodi erstellen. Sie können natürlich, anstatt sie den Spielnamen zu nennen, sie für einen DN nennen, Capture the Flag. Nennen Sie es also den Namen des Spielmodus. Aber für diesen haben wir nur einen Spielmodus. Also nenne ich es einfach Maple Story. Damit dieser Spielmodus auf unserem Level funktioniert, müssen Sie zuerst alles speichern. Also Datei Alles speichern. Und lass uns zu Edit gehen. Und innerhalb der Projekteinstellungen. Und in den Projekteinstellungen kannst du hier oben auf Karten und Modi klicken. Denken Sie also daran, dass wir in Karten und Modi zuvor die Startkarte auf unsere Matte bearbeitet haben . Was wir jetzt tun wollen, ist auch unseren Standardspielmodus einzustellen. Dies ist die Basis, die der Motor verwendet. Also klicke ich darauf und klicke dann auf GM Maple Story, das ist unsere benutzerdefinierte. Dann möchte ich, dass du auf diesen kleinen Pfeil neben dem ausgewählten K-Modus klickst . Jetzt müssen Sie die Standardklassen ändern. So können wir hier sehen, dass die Spieler-Controller-Klasse steht , wir haben gerade eine gemacht. Klicken Sie also hier an und ändern Sie es in PC Maple Story. Wir müssen auch unsere Standardteichklasse definieren, aber wir haben gerade nicht wirklich an, also werden wir dies vorerst überspringen. Und lasst uns das schließen. Jetzt, innerhalb dieser Karte, in der du dich befindest, musst du auch daran denken, zu den World-Einstellungen zu gehen. Wenn Sie diese World-Einstellungen nicht geöffnet haben, können Sie auf Fenster klicken. Und dann können Sie auf diese namens World-Einstellungen klicken , um das Fenster zu öffnen. Aber hier in den Welteinstellungen musst du auch daran denken, diesen Spielmodus zu überschreiben. Klicken Sie also hier, klicken Sie auf GM Maple Story, und ich klicke auf diesen Pfeil, um sicherzustellen , dass der Spieler-Controller korrekt ist. Genau das, worauf ich es in den Projekteinstellungen eingestellt habe. So PCM-fähige Story. Sie können hier auch sehen, wenn Sie auf den Spielmodus doppelklicken, sehen Sie hier rechts in den Klassenvorgaben. Hier rechts siehst du, ob ich das verkleinere. Es heißt, Player-Controller ist PC, Maple Story. Es sagte es automatisch , weil wir es innerhalb der Projekteinstellungen gemacht haben . Okay, wir wollen gerade nicht wirklich hier arbeiten, also schließen wir es. Jetzt haben wir den grundlegenden Spielmodus und den grundlegenden Spieler-Controller erstellt . Lassen Sie uns also in der nächsten Lektion fortfahren und den Charakter erstellen. 20. Blueprints für Eltern und Kinder: Jetzt ist es an der Zeit, den Charakter hinzuzufügen. Genau wie das, was ich dir vorher gesagt habe. Klicken Sie mit der rechten Maustaste hier und gehen Sie hier zu Blueprint-Klassen oder Klassen. Wenn Sie hier auf alle Klassen klicken, suchen Sie nach Papier. Anstatt diesen Charakter zu machen, denken Sie daran, dass wir in 2D arbeiten, also müssen wir einen Papiercharakter erstellen. Klicken Sie also hier darauf und klicken Sie auf Auswählen. Jetzt müssen wir es etwas nennen. Und vorerst möchte ich Ihnen erklären, was Eltern- und Kinderpläne sind. Also zuerst hier, lass es uns erstellen und es Charakterbasis nennen. Jetzt haben wir hier eine Charakterbasis und klicken wir mit der rechten Maustaste darauf. Und jetzt kann man sehen, dass Create Child Blueprint-Klasse steht. Also lass mich es erstellen und ich möchte dir erklären, was ich mache. Also PSA, nennen wir es BP Player Base. Und lasst uns hier noch eins aus der Charakterbasis machen. erneut mit der rechten Maustaste darauf und erstellen Sie Child Blueprint Klasse. Nennen wir das eine VP-Feindbasis. Okay, also was ich hier mache ist, dass ich zuerst alles speichern lasse. Was ich hier mache , ist, dass wir einen Basischarakter erstellt haben , und daraus habe ich mit der rechten Maustaste geklickt und untergeordnete Blaupausen erstellt. Was für untergeordnete Blaupausen sind, ist, wenn Sie etwas innerhalb des Charakters codieren, wird dieser Code automatisch auf den des Kindes übertragen. Denken Sie daran, dass die gegnerische Basis und die Spielerbasis beide untergeordnet sind. Was habe ich also programmieren oder ich innerhalb der Charakterbasis mache , wird auch auf jede Basis angewendet und eine Basis spielen. Dies ist sehr nützlich, sodass Sie nicht immer wieder dasselbe codieren müssen. Wenn ich zum Beispiel hier etwas zitieren möchte, hier etwas zitieren möchte, und ich möchte, dass dasselbe hier und das Gleiche hier ist. Das wäre viel Arbeit und es wäre nicht so optimiert. Stattdessen habe ich „Blueprints“ erstellt. Was auch immer ich hier mache, wird auch automatisch auf den Feind und den Spieler übertragen . Und zum Beispiel können Sie auf Zeichenbasis darauf doppelklicken. Und wir haben etwas, das als Charakterbewegungskomponenten bezeichnet wird . So können Sie zum Beispiel drinnen jede Bewegung des Charakters steuern. Wie schnell sollte dein Charakter zum Beispiel laufen? Und wenn ich zum Beispiel schreibe, sagen wir 200 statt 600. Und das Kompilieren ist nur zu sparen. Darüber werden wir in der nächsten Lektion sprechen. Also kompilieren und speichern Sie hier. Und wenn ich das minimiere und meinen öffne, sagen wir Player. Und ich schaue mir die Komponente der Spielerbewegung an, du kannst sehen, dass sie automatisch auf 200 gesunken ist. Denn denken Sie daran, dass es ein Kind von charakterbasiert ist. Was auch immer ich innerhalb des Charakters mache, es wird auf den Spieler angewendet. Also wenn ich hierher zurückgehe und auf diesen kleinen Pfeil klicke , um zur Standardeinstellung zurückzukehren, geht es zurück auf 600. Wenn ich jetzt zum Spieler gehe, kannst du im Spieler sehen, dass er sich auch wieder auf 600 geändert hat. Das ist also sehr nützlich. Und was wir jetzt machen wollen, innerhalb der Spielerbasis, möchten wir hier mit der rechten Maustaste klicken. Und jetzt wollen wir die Spieler erschaffen, denn jetzt haben wir eine Basis für die Spieler. Klicken wir mit der rechten Maustaste. Und ich möchte diese namens Tsarina erschaffen. Und wir haben auch einen anderen Charakter namens Luke. Wir werden später mit ihnen zusammenarbeiten, aber wir können ihn jetzt erschaffen. Erstelle also erneut Child Blueprint vom Player und nenne es BP Luke. Okay, jetzt diese beiden Kinder, wenn wir etwas in der Spielerbasis codieren, zum Beispiel die Bewegung, wollen wir die Bewegung hier nicht wirklich für die for-Schleife codieren . Und dann wollen wir die gleiche Bewegung für Serena codieren, denn diese beiden Spieler haben die gleiche Bewegung. Sie laufen auf die gleiche Weise. Sie springen mit demselben Knopf. Klicken Sie beispielsweise auf das Leerzeichen, um zu springen oder klicken Sie auf die Tastaturpfeile, um herumzulaufen. Das wollen wir nicht zweimal machen. Wir müssen dies nur innerhalb der Spielerbasis codieren. Nun wäre es nicht sinnvoll, die Bewegung innerhalb von zeichenbasierten zu codieren. Denn denken Sie daran, dass wir eine gegnerische Basis haben und der Feind nicht so läuft wie Sie als Spieler, der Feind benutzt keine Tastatur. Der Feind hat keine Maus, mit der er sich umsehen kann, daher ist es nicht sinnvoll, die Spielerbewegung innerhalb des Feindes zu programmieren , weil es sich um künstliche Intelligenz handelt. Es hat nicht wirklich eine Tastatur, es ist kein Mensch. Es wäre also sinnvoller, die Spielerbewegung innerhalb der Spielerbasis zu programmieren . Okay, jetzt haben wir die Eltern - und Kind-Blueprints erstellt. Und noch einmal, denken Sie daran, wenn Sie jemals Hilfe benötigen, können Sie immer in meinen Discord-Server gehen und ich bin mehr als bereit, Ihnen bei all dem zu helfen. Lasst uns also mit der rechten Maustaste klicken und einen neuen Ordner erstellen. Und ich nenne es einfach Player. Und ich mache einen neuen namens Feind. Also bleiben wir organisiert. Ich setze diese feindliche Basis anstelle des Feindes. Wir werden später KI erstellen. Und dann bringt Luke, die Spielerbasis und Serena in den Spieler. Jetzt klicken wir nun auf Datei und Alles speichern. Und lasst uns zur nächsten Lektion übergehen. 21. Übersicht über die Blueprint: Wir fahren fort, lassen Sie uns einen Überblick über den Blueprint-Graph verschaffen. Gehen wir also zu unserem Blueprints-Ordner innerhalb des Spieleratlas. Geh einfach in diese, die Spielerbasis genannt wird. Jetzt wird es so geöffnet, aber Sie müssen auf Vollständigen Editor öffnen klicken , einen Blueprint-Editor. Und das passiert immer dann, wenn Sie noch keinen Code hier haben . Klicken Sie also hier an und Sie können sehen, dass dies der Blueprint-Graph ist. Und hier drin hast du den Event Graph. Und innerhalb des Ereignisdiagramms schreiben Sie hier Ihren gesamten Code. Sie können hier sehen, dass Unreal Engine Ihnen standardmäßig sehr einfache Ereignisse zur Verfügung stellt . Um innerhalb des Ereignisdiagramms zu navigieren, können Sie mit der rechten Maustaste gedrückt halten und Sie können so herumschwenken und mit dem Mausrad vergrößern und verkleinern. Sie können auch mit der rechten Maustaste klicken , um Funktionen hinzuzufügen. Später werden wir dies verwenden, um Code hinzuzufügen, aber machen Sie sich darüber keine Sorgen. Das sieht wahrscheinlich überwältigend für dich aus. Es gibt viele Dinge, die Sie hier hinzufügen können, aber wir werden während des gesamten Kurses damit arbeiten . Abgesehen von dem Ereignisdiagramm, in dem wir den Code schreiben, haben wir auch ein Ansichtsfenster. Und im Ansichtsfenster fügen wir hier unsere Artikel hinzu. So können Sie hier auf der linken Seite sehen, dass wir etwas namens Komponenten haben. Und innerhalb dieser Komponentenregisterkarte hier, zum Beispiel dem Sprite, werden wir hier ein Flipbook hinzufügen, damit wir im Detailbedienfeld sehen können, genau wie ich es dir hier in diesem Detailfenster erzählt habe wenn wir hier in unserem Level auf Dinge klicken, können wir Elemente bearbeiten und beispielsweise den Standort, die Drehung, die Skala bearbeiten. Wir können auch Dinge über die Kollision bearbeiten. Das ist das Gleiche hier in der Blueprint-Klasse. Wenn wir auf eine Komponente klicken, können wir innerhalb der Details Einstellungen zu dieser Komponente hinzufügen . So zum Beispiel das Sprite. Später werden wir den Charakter hinzufügen. Und Sie können sehen, wenn ich auf dieses Quellen-Flipbook klicke , können Sie sehen, wir die Animationen für den Charakter sehen können dass wir die Animationen für den Charakter sehen können, den wir in einer früheren Lektion erstellt haben. So wie zuvor. Wir haben ein Detailfenster , in dem wir Einstellungen bearbeiten können , und später werden wir weitere Komponenten hinzufügen. Und dies kann durch Klicken auf diese Schaltfläche „Hinzufügen“ geschehen. Und du kannst sehen, dass du eine Menge Dinge hinzufügen kannst. Zum Beispiel ein Würfel, eine Kugel. Sie können Beleuchtung, Audio und viele Dinge hinzufügen . Hier unten. Wir können unsere Ereignisse sehen, die wir erstellt haben, in unserem Event Graph. Wenn Sie also hier zum Ereignisdiagramm zurückkehren, können Sie sehen, dass Unreal Engine Ihnen diese standardmäßig zur Verfügung stellt. Und Sie können auch diese Ereignisse namens Begin Play sehen, Schauspieler, beginnen sich zu überlappen und zu nehmen, und Sie können sie hier sehen. Später, wenn wir Funktionen hinzufügen, können Sie unsere Funktionen auch hier sehen. Sie können die Makros sehen, Sie können Variablen sehen, und ich werde diese in einer späteren Lektion erläutern. Und danach haben wir diese Toolbar auch hier drüben. Das Wichtigste ist dieser Button namens compile. Und wann immer du irgendeinen Code schreibst, also wenn ich einfach etwas zum Spaß schreibe, kannst du hier sehen, dass es dir ein Fragezeichen gibt und es heißt, dass Dirty neu kompiliert werden muss. Es sagt Ihnen also, dass Sie auf diese Schaltfläche klicken müssen , wenn Sie mit dem Schreiben Ihres Codes fertig sind, ich muss auf diese Schaltfläche klicken. Und dieser Button ist, er prüft nur, ob der Code, den Sie geschrieben haben, gut ist oder nicht. Wenn ich also darauf klicke und es mir dieses Häkchen gibt, bedeutet das, dass ich keine Fehler in meinem Code habe und bereit bin, Play zu drücken und mein Spiel zu spielen. Aber wenn du etwas falsch machst, wird es dir ein Kreuz geben und es wird dir sagen, dass du etwas falsch gemacht hast. Und wenn Sie einen Fehler erhalten, wird es Ihnen hier unten und die Compiler-Ergebnisse geben. Sie können hier sehen, dass es gelungen ist. Im Moment haben wir keine Fehler. Wenn Sie jedoch einen Fehler haben, wird er hier unten angezeigt und es wird Ihnen sagen, was Ihr Fehler ist. Jetzt werde ich diesen Knoten gerade auswählen , der nur zum Testen gedacht war. Ich klicke auf „Löschen“. Und wieder, hier in der Symbolleiste, können Sie Ihr Projekt speichern. Natürlich können Sie nach Blaupausen suchen. Sie können zu den Klasseneinstellungen wechseln, zu den Standardeinstellungen der Klasse wechseln und so weiter. Und wir werden mit all dem während dieses Projekts arbeiten . 22. Events und Funktionen: Werfen wir einen Blick auf Ereignisse und Funktionen. Ich gehe zurück zu meiner BP-Spielerbasis. daher standardmäßig Unreal Engine gibt Ihnen diese Standardereignisse und Ereignisse sind immer rot markiert. Also fahre ich jetzt mit dem Mauszeiger darüber und klicke auf meiner Tastatur auf Löschen. Ich brauche sie momentan nicht. Aber du hast diesen, den ganz grundlegenden namens begin play. Dieses Ereignis. Es sagt dir, was ich tun soll wenn ich hier auf das Spiel klicke, wann immer, wann immer ich anfange, mein Spiel zu spielen. So zum Beispiel sehr einfach. Sie können es von diesem Ausführungspin ziehen und „Drucken“ herausziehen und sagen. Also auf der Suche nach Druck. Dies ist die sehr grundlegende Funktion , die Sie von Anfang an lernen werden, und sie druckt nur etwas Text auf den Bildschirm. Klicken Sie also auf diese Funktion. Das ist also eine Funktion und Sie können sie hier oben an der f sehen. Das ist also ein Ereignis, das ist eine Funktion. Sie benötigen immer, immer in Blueprint Ereignisse, um Code auszulösen. Und der Code besteht aus mehreren Funktionen. immer ein Ereignis benötigen, um Code sonst auszulösen, weiß Ihr Motor nicht, wann Sie diesen Code auslösen möchten. Wenn ich das also getrennt hätte und du kannst das tun, indem du Alt auf deiner Tastatur hältst und hier klickst. Dies wird sie trennen. Wenn ich wie hier gehe, der Motor, werden wir nie wissen, wann wir diesen Code abfeuern sollen. Wenn Sie kein Ereignis haben, das damit verbunden ist, ziehe ich es hierher zum anderen Ausführungsstift und verbinde es, indem ich auf kompiliert klicke. Denken Sie daran, das zu tun. Sie können auch hier klicken, anstatt ständig zu kompilieren und zu sparen, anstatt ständig zu kompilieren und zu sparen, diese drei Schaltflächen sind Punkte und sagen Speichern beim Kompilieren, nur erfolglos. Und was das bedeutet, ist, wann immer Sie jetzt kompilieren, automatisch für Sie gespeichert, wenn dieses Häkchen angezeigt wird. Was jetzt passiert, ist bei Begin Play, mein Bildschirm wird Hallo sagen. Ich werde das ein wenig minimieren und du musst hier nach oben links schauen. Klicken Sie also auf Play und Sie können sehen, dass nichts passiert. Und das ist eigentlich ein kleiner Fehler von mir. Lasst uns also tatsächlich die Spielerbasis hinzufügen. Denken Sie daran, dass ich Ihnen tatsächlich gesagt habe, dass wir den Teich hinzufügen wollen . Lasst uns also hier auf das Kreuz klicken. Lasst es uns jetzt machen, bevor wir es vergessen. Um also die Projekteinstellungen zu bearbeiten und in den Karten und Modi, die hier oben gehen, denken Sie daran, dass ich Ihnen gesagt habe, dass wir dies später hinzufügen müssen, wenn wir einen Charakter erstellen und jetzt einen haben. Also klicke hier und lass uns unseren Charakter vorerst Serena machen. Wir werden es programmieren Serena. Also werden wir momentan keine Spielerbasis erstellen . Also wollen wir Serena später in die Welt spawnen. Also wähle ich einfach meine Standard-Gedichtklasse aus, nur Serena. Aber später werden wir einen Charakterauswahlbildschirm haben. Und wenn wir das haben, schaffen wir es einfach zu keiner, denn dann wählt der Spieler den Charakter aus und er wird entweder als Zarin oder Luke spawnen entweder als Zarin oder , je nachdem, was er ausgewählt hat. Aber im Moment haben wir keinen Charakterauswahlbildschirm. Also werde ich standardmäßig als Tsarina spawnen. Ich klicke auf Crosshair, gehe zu den World-Einstellungen und stelle sicher, dass hier und im gesamten Spielmodus Serena auch hier angewendet wird. Klicken wir nun noch einmal auf Play. Und du kannst sehen, wie mein Bildschirm sagt, hallo. Jetzt fällt er durch den Boden. Du siehst hier, dass ich durch den Boden ziehe weil ich keinen Spielerstart habe. Und wir können auch einen hinzufügen, nur damit wir hier nicht durch den Boden fallen. Und sie fügen schnell einen Button hinzu, gehen zu Basic und fügen diesen Spielerstart hinzu. Hier können wir also hier anfangen. Und wenn Sie auf G klicken, können Sie daran denken, die Symbole ein - und auszublenden. Dies ist der Spielerstart. Ich werde es hier in meiner Welt platzieren, lass uns das y 0 machen. Also ist es hier vorne. Und dann können wir, ich werde es jetzt kleiner machen , denn wenn Sie diese Kapsel in der Mitte Ihrer Kollisionskacheln haben , wird es schlechte Größe sagen. Ich werde die Skalierung hier unten auf 0,25,25,25 reduzieren. Und dann ziehe ich es einfach hier unten in Bodennähe. Wenn wir jetzt auf Play klicken, können Sie sehen, wo durch den Boden fällt, aber wir fallen nicht den ganzen Weg weil wir unsere Kollision haben. Okay, also zurück zu den Blaupausen haben wir jetzt Hallo gesagt und du kannst hier oben links sehen, dass auf meinem Bildschirm Hallo steht. Der Code funktioniert gerade und er durchläuft diese Spielerbasis. Andere Ereignisse, die wir haben, sind etwas, das als Ereignis-Tick bezeichnet wird. Sie können also hier danach suchen, wenn Sie mit der rechten Maustaste in das Diagramm klicken, wie ich es Ihnen zuvor gesagt habe, können Sie hier danach suchen. Und wenn Sie nur eine Veranstaltung schreiben, können Sie alle Ereignisse sehen, die wir auf unseren Code anwenden können. Zum Beispiel ein Ereignis-Hit oder wenn Ihr Schauspieler beginnt, etwas zu überlappen, oder wenn Ihr Charakter gesprungen ist, möchten Sie etwas tun. Vielleicht haben wir das gerade, wenn du anfängst, das zu spielen . Und vielleicht heißt das Event Tick, das möchte ich jetzt zeigen. Dieses ist etwas, das du niemals benutzen solltest. Und wann immer Sie es benutzen, liegt dies wahrscheinlich daran, dass Sie es irgendwann verwenden müssen, aber versuchen Sie dies zu vermeiden, verwenden Sie es niemals in Ihrem Spiel. Was ich damit meine, ist, dass dieser deinen Code 60 Mal pro Sekunde ausführt. Wenn ich also auf Control X klicke, um dies zu kopieren , und Control V, um es hier einzufügen. Wenn ich das hier verbinde, so dass das Ereignis krank ist, kannst du sie sehen, wenn ich so oft auf Diesen Platz spielen klicke und es spielt 60 Mal pro Sekunde. Es kann sich also vorstellen, wenn Sie Code haben, der 60 Mal pro Sekunde gespielt wird , wird Ihr Spiel zurückbleiben. Und wenn Sie mehrere davon haben, wird es Ihrem Spiel mehr gefallen und die Spieler werden das Bein spüren. Also versuche das niemals, niemals, niemals zu benutzen. Es gibt immer eine bessere Lösung als die Verwendung eines Ereignisses sechs. Ich lösche das hier. Ich benutze es nie in meinen Spielen. Und es gibt einige Zeiten, in denen du es benutzen musst, aber das ist immer dann, wenn dein Spiel sehr groß ist und du in eine Situation kommst , in der du eigentlich nichts anderes tun kannst, als dies zu tun. Aber ich würde sagen, ein sehr großes Spiel, benutze es nur einmal. Also benutze das niemals. Versuche es zu löschen. Denk nicht einmal darüber nach, dieses Ereignis. Und wie Sie sehen können, gibt es viele Funktionen, die Sie Ihrem Spiel hinzufügen können. Wir haben Datentabellen, also haben wir Bräutigam, wir haben Schichten und so weiter. Also viele Dinge, die Sie hinzufügen können , werden wir wahrscheinlich 10% von all dem verwenden. Sie sich also keine Sorgen um all das, obwohl es überwältigend aussieht. Auch wenn ich hierher gehe und Print-String schreibe, gibt es eine andere Funktion namens Delay. Also kann ich hier verzögern. Wenn ich Verzögerung schreibe , können wir zum Beispiel um zwei Sekunden verzögern. Und dann können wir eine andere Zeichenfolge drucken. Und hier nenne ich es fertig, so etwas. Und du kannst auf diesen Pfeil klicken, um ihn länger spielen zu lassen. Zum Beispiel möchte ich es zehn Sekunden lang auf meinem Bildschirm spielen . Ich möchte die Farbe rot machen. Sie haben also einige Variablen, die Sie ändern können. Und ich kompiliere, denk daran, das zu tun. Und dann kannst du auf Play in deinem Spiel klicken. Ich kann sagen, es heißt hallo und nach zwei Sekunden wird es „fertig“ sagen. So sehr einfach, das ist Blueprint. Sie können sehen, dass es sehr einfach ist, damit zu arbeiten. Und sobald Sie die Grundlagen erlernt haben, können Sie sehr mächtige Spiele erstellen. jetzt in der Pflanze Lassen Sie uns jetzt in der Pflanze alles löschen, kompilieren und speichern, und lassen Sie uns weitermachen. 23. Variablen: Wir richten den Charakter weiter ein. Sprechen wir über das Letzte, was Variablen genannt wird. Und das ist das Hauptprinzip bei Programmierung in Blaupausen und welcher Sprache Sie schreiben. Gehen wir also wieder zur Spielerbasis und nach links, wie Sie zuvor gesehen haben, gibt es etwas, das als Variablen bezeichnet wird. Und ich möchte, dass Sie sich Variablen als Container vorstellen , die irgendeine Art von Informationen enthalten. Sie können zum Beispiel enthalten, wie viel gesünder Charakter hat, welche Art von Waffe Ihr Charakter hält, Ihre Bewegungsgeschwindigkeit, ob Sie Münzen haben, die genug sind, um einen Gegenstand im Shop zu kaufen oder nicht. Also ein Container, der enthält wie viele Münzen du hast. Variablen sind also Container , die bestimmte Informationen enthalten, unabhängig von Informationen, die Sie speichern möchten. Und um eine Variable zu erstellen, müssen Sie auf diese Plus-Button klicken. Und wenn Sie eine Variable erstellen, müssen Sie ihr einen Namen geben. Und auf der rechten Seite sehen Sie alle Arten von Variablen. Erstellen Sie beispielsweise einen booleschen Wert. Und nennen wir das boolean hat Waffe. Und normalerweise beginne ich meine Booleans mit einem b. Und das liegt daran, dass dies normalerweise das ist , was in C plus plus gemacht wird. Und wenn Sie dies herausziehen, können Sie es in das Diagramm ziehen. Und wenn Sie loslassen, können Sie diese Variable entweder auswählen , um sie auf etwas Bestimmtes festzulegen. Also lasst uns einfach diese Variable bekommen. Jetzt haben wir diese Variable und wenn Sie kompilieren, können Sie hier unten im Detailbedienfeld sehen, Sie haben einige Einstellungen, die Sie dafür ändern können. Sie können den Variablentyp ändern, Sie können den Namen ändern , den wir gerade gesagt haben. Sie können eine Beschreibung und Replikation hinzufügen. werden wir später anfassen. Das ist Multiplayer. Und jetzt heißt es bitte kompiliere die Blaupausen. Und wir werden hier kompilieren. Und es wird Ihnen zeigen, wie der Standardwert ist. Was ein Boolescher Wert ist, ist etwas, das entweder wahr oder falsch sein kann. Es kann also entweder falsch sein oder ich kann es nehmen und der Standardwert wird wahr sein. Zum Beispiel können wir prüfen, ob der Spieler die Waffe hat oder nicht. Und wir können vielleicht standardmäßig anfangen, falsch zu sein. Der Spieler hat also nicht die Waffe, aber später, wenn der Spieler die Waffe aufhebt, werden wir diese auf „true“ setzen. Okay, also nehmen wir zum Beispiel hier ein Beispiel. Lass uns das Begin-Play-Event noch einmal machen. Wenn Ihre Rechte beginnen, spielen Sie hier weiter. Nehmen wir das jetzt und wir können Print-String sagen. Wenn wir diese Zeichenfolge drucken, was Sie tun können, anstatt Hallo zu sagen, können Sie diese ziehen und hier anschließen. Und es wird Ihnen sagen, dass ich diese boolesche Variable in eine Zeichenfolge umwandeln werde , da eine Zeichenfolge tatsächlich auch eine Variable ist. Sie können hier sehen, dass es eine Variable namens string gibt. Sie können dies also ziehen und es wird in eine Zeichenfolge konvertieren, was nur in Text bedeutet. Und ich drucke diesen Text auf den Bildschirm. Wenn Sie die Variable jetzt anschließen, können Sie jetzt auf Play klicken. Und es wird falsch sagen, und das ist der Wert des Booleschen. Sagen wir später, sagen wir nach fünf Sekunden. Also mache ich den Delay-Knoten und mache fünf Sekunden. Nach fünf Sekunden möchte ich eigentlich sagen, dass der Charakter die Waffe in die Hand genommen hat. Also kann ich das ziehen und dann set sagen. Ich kann es hier verbinden und auf true setzen. Lassen Sie uns nun die Druckzeichenfolge noch einmal machen. Also klicke ich hier auf Control C, Control V. Und ich verbinde jetzt meine Variable, den Wert. Und es wird das auf den Bildschirm drucken, kompilieren und auf Play klicken. Es wird also falsch sagen. Und nach fünf Sekunden wird es hier oben wahr sagen, okay? Es wird also falsch sagen und dann wird es wahr sagen, weil wir dies später auf wahr setzen. Und so setzen wir Variablen dynamisch. Erstens, der Spieler geht später in unsere Waffe, wir werden zum Beispiel die Waffe auf wahr setzen. Also lasst uns das alles vorerst löschen. Wir haben also diesen booleschen Wert , der entweder wahr oder falsch sein kann , und Sie können die Dinge damit überprüfen. Sie haben die anderen, Sie haben eine Voreingenommenheit, Sie haben eine Ganzzahl, Ganzzahl 64 und einen Float. All dies für unsere numerischen Werte. Versuchen wir zum Beispiel, eine Ganzzahl zu erstellen. Ziehen wir es raus. Schon wieder. Klicke auf „Abrufen“. Anstatt ständig auf Abrufen und Einstellen zu klicken, können Sie auf der Tastatur auf der Tastatur auf der Tastatur klicken und ziehen und gedrückt halten. Dies wird es automatisch bekommen. Sie können auch Alt auf der Tastatur halten und klicken und ziehen, und dies wird automatisch eingestellt. Anstatt also auf Set zu ziehen und zu klicken, können Sie entweder die Strg- oder Alt-Taste gedrückt halten. Okay? Alle diese numerischen Werte, also die Ganzzahl, ganze Zahl 60 für den Float, das Byte, all dies sind numerische Werte. Und wenn ich kompiliere und hier darauf klicke, können Sie sehen, dass es eine Zahl ist, es braucht eine Zahl in dieser, wir könnten vielleicht den Namen ändern, klicken Sie auf F2, um den Namen zu ändern. Und dieser könnte eine Menge an Münzen sagen. Vielleicht sammeln wir also Münzen. Und ich kompiliere sagt bitte kompiliere das Blueprint-Kompilieren. Und hier siehst du die Anzahl der Münzen. Also beginnen wir mit 0, und als wir in Münzen gegangen sind, werden wir dieser Variablen Münzen hinzufügen. Wir haben also ein paar Betreiber. Und wenn Sie darauf klicken und ziehen, können Sie beispielsweise Plus speichern. Und du kannst sehen, dass wir Münzen hinzufügen können. Wenn Sie Minus schreiben, können Sie Münzen subtrahieren. Wenn Sie das geteilte Zeichen schreiben, können Sie sehen, dass es dividieren heißt. Wir haben auch das Multiplizieren wie diese. So können wir zum Beispiel Plus so sagen. Und in Maple Story kannst du die Münzen sammeln. Ich glaube, es heißt Micelles. Micelles, ich bin mir nicht sicher. Ich bin mir nicht ganz sicher , wie es heißt. Nennen wir es einfach Coins. Und zum Beispiel kann ich hinzufügen, ich jedes Mal, wenn ich darauf gehe, zehn Münzen wie diese hinzufügen kann. Wenn ich jetzt einfach von hier ziehe und eine Druckzeichenfolge schreibe, kann ich diese jetzt mit meiner Druckzeichenfolge verbinden, und es wird die ganze Zahl in eine Zeichenfolge konvertieren , die eine Textvariable ist. Jetzt wird es zehn ausdrucken. Lassen Sie mich die Dauer hier also noch viel mehr machen. Lass mich die Farbe Rot machen. Diese Kompilierung speichern. Und wenn ich auf Play klicke, siehst du hier oben zehn, weil ich zehn Münzen habe. Die ganze Zahl. Sehr cool. Du kannst Zahlen schreiben. Wir können diese Operatoren verwenden , um diese Variablen zu ändern. Und ein anderer variabler Typ ist der Float, sehr wichtig, können wir zum Beispiel die Ebenengesundheit sagen. So können wir es nennen. Wir können es herausziehen, Kontrolle halten und es hier automatisch rausholen. Wenn Sie also jetzt kompilieren, das Coole an unserem Float im Vergleich zu ist das Coole an unserem Float im Vergleich zu einer Ganzzahl, dass ein Float Dezimalstellen enthalten kann. So kann ich zum Beispiel hier 50.5 schreiben. Und der Standardwert, wie für die Münzen, wenn ich versuche, Dezimalstellen zu schreiben, zum Beispiel 50,5, wird automatisch in 50 konvertiert, da Sie keine Dezimalstellen innerhalb eines ganzzahlige Zahl. Wann immer Sie also eine Zahl mit Dezimalstellen wünschen, müssen Sie einen Float auswählen. Dies ist das einzige, aber wenn Sie etwas wünschen, das eine volle Zahl ohne Dezimalstellen ist , können Sie eine ganze Zahl oder etwas, das größer und eine ganze Zahl 64 ist, wählen . Was den Biss angeht, kannst du nur die Nummer einstellen. Wenn ich die Variable hier ändere. Was den Biss betrifft, können Sie die Zahl nur auf maximal 255 ändern . Für die Spielergesundheit ist es jetzt ein Byte. Auch wenn ich Dezimalstellen schreibe, wird es es nicht akzeptieren. Es ist nur der Float, der Dezimalstellen akzeptiert. Und dieser kann die Zahl 200 nur bis zu 255 halten. Wenn ich also 256 schreibe, wird es auf 255 geändert, damit ich eine beliebige Zahl schreiben kann, die Knie 255. Aber wenn ich oben etwas schreibe, wird es es nicht akzeptieren. Sie können sich also vorstellen , wie diese verwendet werden. Wenn ich zum Beispiel einen Charakterauswahlbildschirm habe und ich habe, sagen wir mal, ich habe vielleicht 60 Frisuren und Maple Story, kann ich den Biss benutzen. Aber wenn ja, sagen wir am Sonntag, ich habe aus irgendeinem Grund 600 Frisuren. Ich kann keinen Bissen mehr gebrauchen, weil ich nur bis zu 255 Frisuren haben kann . Okay, das sind also die numerischen Werte und wir haben auch andere Werte. Wir haben den Namen, die Zeichenfolge, den Text und fragen nach dem Namen. Lasst uns das schaffen. Und wenn ich den Namen hier rausziehe, können Sie sehen, dass jede einzelne Variable , die wir erstellen, unterschiedliche Farben hat. Wenn ich also hier oben nur Zufallsvariablen erstelle und diese in eine Zeichenfolge ändere, ändere diese in einen Text, Whoops, Texte. Und wir können die rausziehen. Wir können diese eine Erfolgs-ID beispielsweise nennen. Wir können, wir können den zweiten Servernamen nennen, und wir können die letzte Chat-Nachricht aufrufen. Okay, also der Unterschied zwischen diesen können Sie kompilieren und Sie können sehen wenn Sie auf diese Variablen klicken, es sind nur einige Texte, die Sie hier schreiben können. Das Gleiche gilt für den Servernamen und das Gleiche gilt für den Spieler. Die Spieler-Gesundheit Ashley, wir müssen kompilieren. Kompilieren Sie das ist der falsche. Stattdessen ziehe ich das hier. Und Sie können hier diese Erfolgs-ID sehen, es heißt momentan keine. alle sind also Textvariablen und Sie können hier eine Art von Texten schreiben. Der Unterschied zwischen diesen besteht darin, dass Sie diese Namensvariable immer wählen müssen , wenn Sie eine Art von Texten haben , die sich im Spiel nie ändern. Zum Beispiel die Erfolgs-ID. Vielleicht heißt eine Leistung , die Sie haben ID 273 oder welche Zufallszahl Sie haben. Mit dieser ID müssen Sie sie im Spiel nie ändern. Und hier kannst du einen Namen benutzen, denn was auch immer du hier schreibst. Kann im Spiel nie geändert werden, aber dies ist bei dem Servernamen nicht der Fall. Wenn ich zum Beispiel Maple Story schreibe, besten Server, melde dich jetzt an oder so ähnlich. Jetzt diesen Text, den ich hier schreibe, können Sie ihn ändern. Zum Beispiel ist ein und Beispiel ich Ihnen geben kann, ein Servername. Wenn der Player dies also als Servernamen schreibt, können wir den Text, den der Spieler berechtigt, hier tatsächlich ändern . Wenn Sie aus dieser String-Variable ziehen und nur eine Zeichenfolge schreiben, können Sie alle Funktionen sehen , die Sie mit einer Zeichenfolge verwenden können. Wenn Sie nach oben scrollen, können Sie sehen, dass dies die Kategorie namens String ist. Und hier haben Sie alle Funktionen , die Sie mit dieser Zeichenfolge verwenden können. So können Sie beispielsweise prüfen, ob der geschriebene Text hier leer ist. Wenn die Variable also leer ist und leer ist, können Sie die rote sehen. Denken Sie daran, dass es tatsächlich ein boolescher Wert ist, also kann es entweder wahr oder falsch sein. Wenn der Servername beispielsweise leer ist, geben Sie dem Spieler einen Fehler an , der ihm auffordert, einen Servernamen zu schreiben, da Sie keinen leeren Servernamen erstellen können. Wir können es wieder ziehen, wir können String schreiben und wir können es noch einmal überprüfen. Sie können beispielsweise alle Zeichen in Kleinbuchstaben oder in Großbuchstaben setzen. Oder Sie können den Text sogar teilen. Und vielleicht etwas. Wofür ich es verwende ist, wenn der Spieler ein schlechtes Wort schreibt, zum Beispiel das Innere, und ich möchte nicht, dass der Spieler das im Spielernamen schreibt. Ich kann hierher ziehen. Und ich kann „finden“ sagen. Es gibt etwas hier in dieser Zeichenfolge namens find substring. Und ich kann nach innen schreiben. Das will ich hier auf dem Video nicht wirklich machen . Und es wird dieses Wort innerhalb des Spielerservers finden . Was auch immer der Spieler hier geschrieben hat, er wird dieses Wort finden. Und wenn ja, kannst du etwas damit machen. Und in diesem Fall können wir den namens replace verwenden. Also können wir auch ersetzen, stattdessen können wir das einfach tun, den Teilstring finden. können wir auch tun. Ersetzen Sie also das Innere durch etwas anderes und Sie können es einfach leer lassen und es wird zeigen dass es durch nichts ersetzt wird, was bedeutet, dass es das Wort löscht und hier nichts hineinsteckt. Sehr cooles Zeug. Sie können die String-Variablen nach Belieben ändern, aber das können Sie hier nicht tun. Wenn Sie davon ziehen und den richtigen Namen kennen, können Sie im Namen sehen, dass Sie nicht viel haben, was Sie tun können. Sie haben also nicht das ist leer, Sie haben nicht den Ersatz. Sie können also nur Strings ändern und nicht die Namensvariable. Das Letzte, was Sie haben, ist der Text und der Text. Das einzige, was ich dazu anders als die Zeichenfolge sagen möchte , ist, dass Texte Sie lokalisieren können, damit Sie sie in verschiedene Sprachen übersetzen können. Angenommen, Sie möchten Ihr Spiel ins Deutsche, Japanische oder Chinesische übersetzen . Egal welchen Text Sie übersetzen möchten, Sie müssen eine Textvariable verwenden, unabhängig davon, wie Sie in eine Zeichenfolgenvariable schreiben. Dies kann später im Spiel nicht übersetzt werden. Bevor Sie also anfangen, Ihr Spiel zu machen, denken Sie darüber nach, ob ich mein Spiel ins Deutsche übersetzen möchte? Wann bin ich fertig? Wenn ich möchte, welchen Text Sie übersetzen möchten, müssen Sie ihn in eine Textvariable schreiben. Was den Servernamen angeht, glaube ich nicht, dass wir den Servernamen übersetzen müssen. Nehmen wir zum Beispiel an, wir haben unser Spiel beendet. Es ist nicht wirklich sinnvoll , einen Servernamen zu übersetzen. Das ist genau was, unabhängig von den Spielerrechten. Aber was eine Chat-Nachricht angeht, sagen wir zum Beispiel, jemand sagt: Hallo, wie geht's dir? Oder vielleicht sagt ein NPC das? Und jetzt wollen wir diese Botschaft ins Japanische übersetzen , weil jemand aus Japan sehen muss, was das bedeutet. Also werden wir das in Japanisch umwandeln. Aber wenn du das hier hineinschreibst , kannst du es nicht übersetzen. Sie müssen es in eine Textvariable schreiben. Und dann fragst du vielleicht, warum benutzen wir das nicht ständig? Warum müssen wir das oder das überhaupt benutzen? Und das dient zur Optimierung. Der Name verbraucht weniger Speicher und kommt dann die Zeichenfolge. Und derjenige, der am teuersten ist, ist der Text. Natürlich wird es nichts beeinflussen, wenn Sie nur ein oder zwei in Ihrem Spiel verwenden. Aber wenn du ein großes Spiel hast, arbeitest du seit drei Jahren und du benutzt es nur die ganze Zeit. Natürlich wirkt sich das auf dein Spiel aus. Dieser benötigt also den geringsten Speicher. Also versuche immer damit zu gehen. Wenn Sie Texte haben, die sich beispielsweise nie ändern, eine Erfolgs-ID, sondern danach eine Zeichenfolge verwenden. Und zum Beispiel kannst du es auch für einen Spielernamen verwenden. Da der Spielername wieder der Name ist, müssen Sie den Namen ändern. Wenn sie ein schlechtes Wort schreiben, müssen Sie in ihrem Namen danach suchen . Und wenn Sie möchten, dass Ihr Spiel übersetzt wird und Sie Texte haben, die übersetzt werden müssen, müssen Sie es schreiben in eine Textvariable schreiben. Okay, so genug darüber. Lassen Sie uns das vorerst löschen. Und wieder können Sie mehr Wertvariablen erstellen. Und die letzten, die wir haben, sind der Vektor, der Rotator und die Transformation. Wir können dies später im Projekt verwenden. Ich werde das vorerst nicht behandeln, aber für den Vektor sehr, sehr einfach, wenn Sie ihn gerade erstellen und auf kompilieren klicken. Sie können sehen, dass es mit drei Zahlen kommt. Und normalerweise verwenden wir ihn hier, wofür wir einen Vektor verwenden. Wenn Sie hier auf irgendetwas klicken, sehen Sie an dem Ort, an dem wir normalerweise einen Vektor verwenden, um einen Standort zu ändern oder nach einem Ort zu suchen, da der Standort drei Zahlen hat. Und dafür verwenden wir normalerweise Vektoren , weil es drei Zahlen hat. Zum Beispiel können wir den Speicherort der Zeichen festlegen , wenn sie ein Portal nutzen, wir können es auf einen bestimmten Ort einstellen. Das Gleiche gilt für den Rotator. Wenn ich dies in einen Rotator ändere, hat es drei Werte, genau wie hier im Detailbedienfeld. Immer wenn ich auf irgendetwas klicke, haben sie eine Rotation. Dies ist also ein Rotator und Sie können eine Drehung einstellen oder erhalten. Und als letztes hast du eine Transformation. Und dies wird verwendet, wenn Sie Dinge in die Welt bringen. So spawnen Sie zum Beispiel das Zeichen in die Map. Dann müssen Sie den Speicherort der Zeichen festlegen , an dem Sie das Zeichen spawnen möchten , welche Rotation dieses Zeichen haben sollte und welche Skala das Zeichen haben sollte. Okay, das waren also die wichtigsten Variablen und ich werde sie alle löschen. Wir werden mehr benutzerdefinierte Variablen erstellen. Und ich möchte diese sehr grundlegenden zunächst behandeln, denn das wird es Ihnen später sehr leicht machen. Also lösche ich hier alles. Lassen Sie uns kompilieren. Jetzt. Lassen Sie uns mit der Einrichtung des Charakters fortfahren und Sie werden all dies Schritt für Schritt in diesem Kurs lernen. 24. Einrichten der Figur: Um unseren Charakter einzurichten, gehen wir zuerst zu unserem Blueprints-Ordner zurück und lassen Sie uns Serena einrichten. Anstelle von Spieler haben wir diese Blueprint-Klasse namens Tsarina erstellt . Dies war ein Papiercharakter und dies war ein Kind der Spielerbasis. Hier müssen wir für BP Tsarina diese Vermögenswerte hinzufügen. Denken Sie daran, dass wir diese Flip-Bücher erstellt haben und diese zu unserem Blueprint-Kurs hinzufügen können . Gehen Sie also zurück zum Player-Ordner klicken Sie auf Serena, wenn dies geöffnet wird, liegt dies daran, dass es leer ist. Das Detailbedienfeld füllt also den gesamten Bildschirm aus, sodass Sie auf Alle Blueprint-Editor öffnen klicken müssen. Und wir sind hier drin. Sie können sehen, dass wir gerade nichts codieren müssen, also gehe ich zum Ansichtsfenster. Hier. Serenas Flipbook wird erscheinen. Sobald du es hinzufügst. Du fügst die Flip Books hier auf der linken Seite hinzu. Sie können sehen, dass wir ein Sprite haben und wir können hier tatsächlich Serenas Flipbook hinzufügen. Wir haben auch Charakterbewegungen, bei der wir die Bewegung später kontrollieren können , wenn wir Bewegung hinzufügen. Klicken wir also auf das Sprite und hier im Flipbook gibt es zwei Möglichkeiten , ein Flipbook hinzuzufügen. Sie können entweder hier klicken und es auswählen. Dies wäre momentan der einfachste Weg. Oder wenn Sie dies ein wenig minimieren und es ein bisschen größer machen. Sie können auch zu Ihrem Assets-Ordner wechseln, und Sie können auch klicken und ziehen, und Sie können sehen dies für Sie hervorgehoben wird, und Sie können es diesem Slot hinzufügen. Also überlassen Sie, wenn Sie es auf diese oder diese Weise hinzufügen möchten. Ich sehe, dass wir unser Flipbook hinzugefügt haben und das wird schon funktionieren. Wenn Sie es also einfach hier testen, klicken Sie einfach auf Kompilieren und Speichern. Und wieder stellt es sicher , dass Sie hier in den Projekteinstellungen keinen Fehler machen . Genau wie zuvor, als wir den Spielmodus hinzugefügt haben. Hier. Denken Sie daran, dass Sie auch die Standardklasse **** für Serena hatten die Standardklasse **** , da wir dies gerade testen, nur um sicherzustellen, dass Sie diese Lektion befolgt haben. Okay, also musst du jetzt einen Spieler hinzufügen , um wieder zu spawnen. Sie haben also diese Arena, die sie auch hier in den Welteinstellungen überprüfen kann , um die Standard-Pawn-Klasse zu überprüfen , um sicherzustellen, dass es sich um Tsarina handelt. Und auch dass du einen Spieler hast, startet hier im Level. also auf Jetzt spielen klicken, können Sie sehen, dass wir innerhalb des Levels spawnen, aber wir können den Charakter immer noch sehen, aber der Charakter ist tatsächlich da. Und das liegt daran, dass es die gewünschte Ansicht nicht kennt , weil Sie keine Kamera hinzugefügt haben. Gehen wir zurück zu Tsarina. Und auf diesem hellen können Sie hier darauf klicken und tatsächlich auf die Kapsel klicken. Wir möchten die Kamera nicht oben drauf anbringen. Klicken Sie also auf die Kapsel und klicken Sie auf Hinzufügen. Und der erste, den wir hinzufügen möchten, ist etwas Frühling an einer Quelle bezeichnet. Sie können sich dies als Halter für die Kamera vorstellen, also hält es die Kamera. Wir können den Federarm und klicken dann erneut auf Hinzufügen und klicken auf eine Kamera. Also hier, Kamera. Also haben wir diesen brennenden Arm und die Kamera befindet sich in diesem Federarm. Es ist also ein Kind des Federarms. Und Sie können sehen, dass die Kamera ein bisschen falsch ist, gedreht. Wir sehen den Charakter gerade so an. Also müssen wir die Kamera drehen. Und denken Sie daran, dass viele Leute einen Fehler machen, indem sie hier klicken und die Kamera drehen, indem sie E auf der Tastatur drücken. Sie können sehen, dass Sie diese verschiedenen Tools haben. Auch hier, genau wie im Ansichtsfenster. Viele Leute machen den Fehler , die Kamera hier zu drehen, aber Sie müssen den Federarm tatsächlich drehen. Klicken Sie also auf den Federarm und drehen Sie es, drehen Sie das Z so, dass sich die Kamera davor befindet, also minus 90 Grad. Genau so. Und lassen Sie uns kompilieren und speichern. Du kannst auf Jetzt spielen klicken und sehen, was passiert. Also klicke auf Play. Jetzt können wir sehen, dass du den Charakter sehen kannst. Die Kamera funktioniert also, aber die Standardeinstellungen sind falsch, also müssen wir sie bearbeiten. Okay, also lasst uns das alles beenden. Was Sie also tun müssen, ist auf den Federarm hier an der Kamera zu klicken und Sie müssen die Kamera tatsächlich in die Perspektive umstellen. Was Sie also hier mit der Kamera tun müssen, müssen Sie dies in die orthogonale Ansicht ändern , da wir nicht mit 3D arbeiten. Wir arbeiten mit 2D zusammen. Klicken Sie also auf die orthogonale Ansicht. Und hier können Sie für die Ortho-Breite ändern, wie nah Sie an der Kamera sind. Je niedriger es ist, desto niedriger die Zahl, desto näher bist du dem Charakter. Sie können sehen, dass das jetzt sehr riesig ist. Und je größer es ist, desto weiter wirst du vom Charakter entfernt sein. So können Sie hier sehen, wenn Sie gerade zufällige große Zahl anprobiert haben, werden Sie weiter weg kommen. Was willst du hier machen? Ich habe es in Maple Story getestet, ich habe es gespielt und die Kameralänge getestet und es ist ungefähr 1304. Auch das ist etwas, das ich gesehen habe und als ich Maple Story getestet habe, also ist es vielleicht 201.250, vielleicht ist es 1300. Das kann ich im echten Spiel nicht mit Sicherheit sagen, aber es sieht so aus, als wäre es um 1304. Ich habe ein paar Mal versucht, das Spiel zu spielen und die Kamera zu testen. Und als nächstes möchten wir auf den Federarm klicken und diesen namens Kollisionstest deaktivieren diesen namens Kollisionstest , weil es die Kamera stört. Nehmen Sie das weg, klicken Sie auf Kompilieren und klicken Sie auf Speichern. Wenn du jetzt auf Play klickst, siehst du, dass dies der Charakter ist. Und wenn Sie sich daran erinnern, können wir auf FL1 klicken, um das Ansichtsfenster zu maximieren. So sieht es aus. Gerade jetzt. Der Spieler fängt nicht mit dem Spielerstart an und es könnte etwas mit unserer Kollision zu tun haben . Wenn wir also wieder auf Serena gehen, haben wir diese Kapsel hier, Sie können diese Kapsel sehen und das ist die Kollisionskapsel, diese Kapselkomponente. Also müssen wir das verkleinern, um zu unserem Charakter zu passen. Sonst kollidiert es mit den Kacheln und es funktioniert nicht richtig. So kannst du diese Kapsel halb Höhe ändern und sie kann den Radius ändern, um mehr zu unserem Charakter zu passen. Ich schreibe hier 16 auf. Und den Kapselradius schreibe ich 33 Jahre. Es ist also ein bisschen kleiner und es passt mehr zu unserem Charakter. Klicken Sie nun auf Kompilieren und Speichern. Mal sehen, ob das das Problem war. Also klicke ich auf „Jetzt spielen“. Und es war das Problem, es kollidierte damit. Sie können hier sehen, dass wir Kollisionsdaten hier oben haben, wir haben Kollisionsdaten hier oben. Die Kapsel ist zu groß, sie kollidiert hier mit diesen beiden. Und es nervt es aus. Es fängt also stattdessen hier oben an. Aber jetzt, da wir unsere Kollisionskapsel repariert haben , zumindest die Größe , können wir jetzt auf Play klicken und Sie können sehen, dass der Charakter hier ist. Jetzt das kleine Problem, das wir gerade haben, können Sie sehen, dass die Füße des Charakters hinter dem Gras liegen und wir wollen die Füße vor dem Gras haben. Dies ist eine sehr einfache Lösung. Denken Sie daran, wir haben unsere Kacheln hier bei 000, denn wenn Sie hier aufschauen und wieder, können Sie auch einfach einen schönen Trick haben. Sie können auf dieses Fangwerkzeug klicken. Und Sie können die Zahl erhöhen. Und indem wir die Zahl auf etwas wie erhöhen , sagen wir 100. Sie können die Mittellinie hier sehen, an der ich interessiert bin, genau diese mittlere Linie. Man kann die Medulla sehen und geht durch die Kacheln. Diese zweite Schicht, die wir haben, die wir zuvor gemacht haben, und die zweite Schicht erinnern sich daran, dass wir einen Vordergrund haben. Dies war der Vordergrund. Und der mittlere Bereich , den wir bei Nullen haben, Nullen 0 sind unsere Kacheln. Und gerade jetzt, unser Laichen, hat unser Spielerstart die Position von 0 im y, aber wir müssen es nur ein bisschen weiter nach vorne schieben , damit der Charakter nicht hinter dem Gras liegt. Was ich also tun werde, ist ich das einfach machen werde. Ich schreibe einfach einen hier im Y, denn 0 ist im Grunde auf der Ebene dieser Titel. Aber wenn Sie einen schreiben, stehen wir technisch gesehen vor diesen Kacheln. Wenn du also nur einen für den Platzpunkt im Y schreibst, kannst du auf Play klicken. Du kannst jetzt sehen, dass du vor dem Gras bist. Jetzt, da wir unseren Charakter eingerichtet haben, gehen wir zur Spielerbewegung über. 25. Grundlegende Spielerbewegung: Lassen Sie uns jetzt die grundlegende Spielerbewegung erstellen. Gehen wir also zurück zum Blueprints-Ordner innerhalb des Players. Und erinnere dich daran, was ich vorher über die Kinderpläne und die Elternpläne gesagt habe . Der beste Weg, dies zu tun, ist die Codierung dieser Bewegung innerhalb der Spielerbasis innerhalb der Spielerbasis, denn wenn Sie die Maus darüber halten, können Sie sehen, dass die Elternklasse von Tsarina der Spieler ist, und die Elternklasse für Luke ist die Spieler-Basis. Wenn wir also die Bewegung innerhalb der Spielerbasis beschichten, werden Serena und Look diesen Code erben, weil es sich um Kinderpläne dieser Spielerbasis handelt. Okay, also lasst uns in die Spielerbasis gehen und die Bewegung kodieren. Also klicke hier. Öffnen wir nun den vollständigen Blueprint-Editor. Und jetzt befinden wir uns in diesem Ereignisdiagramm. Und wieder können Sie mit der rechten Maustaste klicken, halten und mit der rechten Maustaste klicken, um zu navigieren. dies zu codieren, beginnen wir mit dem sehr grundlegenden, und es heißt Add-Movement Input. Dies ist diejenige, die Sie immer in jedem Projekt verwenden werden , wenn Sie Bewegung hinzufügen möchten. also mit der rechten Maustaste und Sie können nach Bewegung suchen. Dies ist etwas, das manchmal sehr nützlich ist , wenn ich codiere und nicht weiß, wie die Funktion heißt. Und das habe ich auch gemacht, als ich Anfänger war. Ich denke nur darüber nach , was ich machen möchte? Vielleicht möchte ich etwas mit dem Standort machen, also klicke ich einfach mit der rechten Maustaste und suche den Standort. Dann versuche ich herumzuspielen. Manchmal dauert es lange, dies zu überfliegen. Aber dann finde ich es. Zum Beispiel wollte ich mir den Standort dieses Schauspielers besorgen und ich möchte diese Informationen für etwas verwenden. Und das können Sie tun, wenn Sie ein Anfänger sind. Man muss nicht wirklich wissen, wie all diese heißen. Sie können versuchen, nach dem zu suchen, was Sie tun möchten. So kann es zum Beispiel die Suche nach Rotation lösen wenn Sie versuchen, etwas mit der Rotation zu tun. Im Moment versuchen wir also, Bewegung hinzuzufügen. Auf der Suche nach Bewegung kann man immer versuchen durchzuziehen, ich weiß, wie es heißt, aber ich wollte sehen, ob ich es jetzt finde, die Bewegung ist hier etwas schwer zu finden. Als Bewegungseingabe versuchen wir dies zu finden. Klicken Sie also auf Hier hinzufügen und fügen Sie Bewegungseingaben hinzu. Denk dran, was ich vorher gesagt habe. Sie können keine Funktionen ausführen, wenn Sie kein Ereignis haben. Und wir möchten, dass das Ereignis die Tastaturtasten ist. Und dann möchten Sie hier bearbeiten und Projekteinstellungen. Und innerhalb der Projekteinstellungen haben Sie diese Eingaben genannt, und hier fügen Sie Ihre Tastaturtasten hinzu. Klicken Sie also auf Eingaben. Hier im Zugriffs-Mapping haben Sie auch diese namens Action Mapping. Der Unterschied zwischen der Aktionszuordnung und der Zugriffszuordnung besteht darin, dass Sie sich die Achsenzuordnung als kontinuierlich vorstellen können. Ein kontinuierliches Klicken, eine kontinuierliche Bewegung. Also werden alle Bewegungen hier unten sein. zum Beispiel auf W, um vorwärts zu gehen, klicken Sie auf D, um nach rechts zu wechseln und so weiter. Sie haben, das sind Zugriffszuordnungen. Wenn Sie beispielsweise nur ein Ein-Klick-Ereignis wünschen , drücken Sie die Leertaste, um zu springen, oder drücken Sie die Maustaste, um Ihre Waffe zu schießen. Dies sind Aktionszuordnungen, Bewegungen , Zugriffszuordnungen und Ein-Klick-Ereignisse. Sie sind in den Aktionszuordnungen oben. Fügen Sie hier immer die Bewegungen zu den Zugriffszuordnungen hinzu. Also möchten wir zum Beispiel hinzufügen, nach rechts und links bewegen. Da es sich um ein 2D-Spiel handelt, bewegen wir uns auf diesem Platformer nach rechts und links. Und hier unten müssen Sie Schlüssel zuweisen , was Sie verwenden möchten, um sich nach rechts und links zu bewegen. Sie können entweder hier klicken und hier klicken und den Schlüssel finden. Eine andere nützliche Methode ist jedoch, auf diese Schaltfläche zu klicken und dann auf die Taste auf Ihrer Tastatur zu klicken. Also klicke ich auf meiner Tastatur auf D. Dadurch wird der Charakter nach rechts verschoben, und ich klicke auf diesen Plus-Button, schaue auf diese Tastatur und klicke auf meine Tastatur, um nach links zu gehen. Und Sie müssen die Skala für die Linke auf minus eins einstellen. Sie können es sich also als zwei verschiedene Richtungen vorstellen. Es ist also plus eins, wenn Sie sich nach rechts bewegen und es ist minus eins, wenn Sie nach links gehen, genau wie ein Diagramm mit X- und Y-Achse. Okay, also schließen wir die Projekteinstellungen und gehen wir hierher zurück. Wenn Sie nun die Achsenzuordnung dort hinzugefügt haben, können Sie jetzt mit der rechten Maustaste hier klicken und denselben Namen wie den Namen in den Projekteinstellungen schreiben der rechten Maustaste hier klicken und denselben Namen wie . Also nenne ich es nach rechts und links bewegen. Und Sie können hier sehen, dass ich die Achsenereignisse sehen kann. Sie möchten also dieses namens Access-Ereignisse hinzufügen, nicht die Achsenwerte. Und Sie können sehen, dass Ereignisse immer dieses Icon haben. Also kann ich drauf klicken. Schon wieder. Ereignisse werden immer als gelesen markiert. Sie wissen also, dass dies ein Ereignis ist. Jetzt können Sie es hier mit dem Bewegungseingang verbinden. Das nächste, was Sie über Funktionen lernen müssen , ist dieses Ziel. Sie sind sehr wichtig. Und Sie können hier sehen, dass hier oben steht, das Ziel ist ****. Es möchte also einem Bauern Bewegung verleihen. Und denk an unseren Charakter. Wir befinden uns hier im Charakter, der Spielerbasis. Und diese Blaupause, die wir gemacht haben, ist ein Charakter, Es ist ein Papiercharakter. Und genau wie vor dem, was ich hier in der Blueprint-Klasse gesagt habe , ist ein Charakter eine Art Teiche. Es ist also eigentlich eine Art Telefon. Man wird einen Charakter erzeugen , bei dem wir bereits das richtige Ziel haben. Man kann sehen, dass es sich selbst sagt. Selbst bedeutet diese Blaupause. Sie sind bereits dabei, also versuchen Sie, dem Entwurf, in dem wir uns bereits befinden, Bewegung hinzuzufügen , also ist das richtig. Und was die Richtung angeht, in die wir Bewegung hinzufügen möchten, können Sie hier mit der rechten Maustaste klicken und wählen Sie Steuerdrehung abrufen. Also versuchen wir, die Rotation unseres Controllers zu erreichen. Und dann können wir sagen, Get Forward Vector. Und jetzt können wir es hier mit der Weltrichtung verbinden. Also versuchen wir, die Vorwärtsrichtung unseres Controllers zu erreichen . Nun, was den Skalierungswert angeht, können Sie diesen Achsenwert hier mit ihm verbinden. Und jetzt hast du die Bewegung. Also lasst uns kompilieren und speichern und versuchen wir zu bewegen. also auf Jetzt spielen klicke, gehe ich zu Person D, um nach rechts zu gehen und auf das Alter zu klicken und nach links zu gehen. Sie können also sehen, dass die Bewegung jetzt niederknien. 26. Player: Lasst uns jetzt den Sprung für die Spieler hinzufügen. Klicken Sie also zurück hier in der Spielerbasis. Und denken Sie daran, dass wir eine Veranstaltung brauchen. Gehen Sie also zurück zu den Bearbeitungs- und Projekteinstellungen von hier in Eingaben. Da es sich bei dem Sprung um ein Ein-Klick-Ereignis handelt, werden wir es hier im Action-Mapping hinzufügen. Denken Sie daran, dass es nur Bewegungen sind, die wir in Access Mappings hinzufügen. Klicken Sie hier auf das Plus für die Aktionszuordnung. Lass es uns hier hinzufügen. Nennen wir es springen. Und ich füge hier meine Leertaste hinzu. Sie können eine weitere Schaltfläche hinzufügen, wenn Sie möchten. Ich werde es schließen. Und jetzt können wir mit der rechten Maustaste klicken und springen sagen. Und hier unten sehen Sie es in den Aktionsereignissen, die Sprünge sagen. Also klicke hier und jetzt haben wir unsere Events. Als Nächstes haben Sie bereits eine integrierte Funktion innerhalb von Unreal Engine namens Sprünge. Sie können also von diesem Ausführungsstift ziehen und Jump schreiben, und Sie haben diese Funktion bereits Sprünge genannt. Also klicke darauf. Kompilieren Sie jetzt speichern. Und du kannst auf Play klicken. Und du siehst, wenn ich auf den Weltraum drücke, springst du. Offensichtlich müssen wir die Animation Slater hinzufügen, und wir müssen auch die Bewegungen bearbeiten. Wie viel springen wir und was ist die Schwerkraft, wofür das später ist. Also lass uns jetzt zurückgehen und ich möchte dir etwas zur Optimierung zeigen. Also füge ich hier eine Druckzeichenfolge hinzu. Also wird es jedes Mal Hallo sagen, wenn ich auf Sprung klicke, wenn ich auf Jetzt spielen klicke und auf Leertaste klicke, kannst du oben links sehen, es heißt Hallo jedes Mal, wenn ich auf Leertaste klicke, jetzt klicke ich auf Space all in allem was ich jetzt kann. Und du kannst dich sehen. Ich kann auf den Weltraum klicken und springen obwohl ich in der Luft bin. Und das möchte ich nicht um der Optimierung willen tun. Ich möchte den Code nicht ständig ausführen. Ich möchte den Code nur einmal ausführen. Und wenn ich auf dem Boden lande, erlaube ich dem Spieler, wieder zu springen. Denn wenn ich dem Spieler erlaube ständig auf Leertaste zu drücken, können Sie sehen, dass wir den Code ausgeben können. Dies ist nicht wirklich optimiert, daher möchte ich nur, dass der Spieler diesen Code nur ausführt, wann immer der Spieler kann, wenn der Spieler im Untergrund ist. Und wir haben etwas namens fällt. Wenn Sie also diese Charakterbewegungskomponente verwenden, können Sie sie anklicken und in dieses Ereignisdiagramm ziehen. Und Sie können sehen, dass dies auch eine Variable ist. Denken Sie daran, bevor Sie diese sehr grundlegenden Variablen gelernt haben. Aber diese ist eigentlich auch eine Variable, wenn man sie hierher zieht. Jetzt können wir also etwas mit der Charakterkomponente machen. Du kannst es herausziehen und du kannst sagen, dass er fällt. Und jetzt können wir prüfen, ob dies überprüft, ob der Spieler in der Luft ist. Und denk daran, dass der rote Stift hier ein Boolean ist. Sie können also von diesem booleschen Wert ziehen und auf b klicken, und es kann diesen als Zweig bezeichnet werden. Ein Zweig ist, prüft nur, ob dieser Wert wahr oder falsch ist , und Sie können etwas damit machen. Jetzt sagst du, dass du die Charakterbewegung nimmst, du überprüfst, ob der Spieler fällt und ob es stimmt, ja, der Spieler fällt. Wir wollen nicht springen, weil der Spieler bereits in der Luft ist. Aber wenn der Spieler nicht mehr fällt , dann überprüft er, fällt der Spieler? Es sagt nein, der Spieler fällt nicht. Okay, dann darfst springen, weil du am Boden bist. Jetzt kannst du sehen, ob ich kompiliere und auf Play klicke, lass uns hier oben eine Drucksaite hinzufügen , damit du sehen kannst , dass der Spieler fällt und wir nicht wirklich springen können. Eigentlich ist das hier unten. Das ist ein besseres Beispiel. Es wird also nur Hallo sagen, wo immer wir gesprungen sind. Also klicken wir auf Sprung. Jetzt. Klicken Sie auf Space. Du siehst, dass ich meinen Platz nicht ausgeben kann. Ich kann den Code nur ausführen, wenn ich vor Ort bin. Das ist also optimiert. Jetzt ist der Code optimiert und der Spieler kann den Code nicht ständig ausführen. Lesen zu erleichtern , kann ich dies jedoch löschen und die Verbindung aufheben, indem ich Alt gedrückt halte und auf diesen Ausführungspin klicke. Anstatt es hier zu tun, möchte ich es jetzt richtig machen, weil ich es besser lesen kann , wenn ich diese Funktion auf true gesetzt habe. Aber jetzt müssen wir hier noch einen booleschen Wert machen. Also heißt es jetzt, fällt der Charakter? Was wollen wir sagen, wenn wir es mit dem Wahren verbinden, fällt der Charakter nicht? Wenn das stimmt, fällt der Charakter nicht, die Zeichen auf dem Boden. Wir können dazu springen, nur um das Gegenteil zu machen. Wir können hierher ziehen und Nüsse sagen. Und Sie können nicht sehen, dass dieser nicht gleich ist, wir müssen diesen nicht boolean verwenden. Und was das sagt ist, wenn der Spieler verrückt fällt, wenn das stimmt, dann mach weiter und du kannst springen. Und ich denke, das ist viel einfacher zu lesen, als dies falsch zu machen. Okay, also das Letzte, was ich dir beibringen möchte , ist ein Erstellen von Funktionen. Bevor Sie also sehen können, haben wir viele Funktionen, die wir hinzufügen können, die vorgefertigt sind, aber Sie können auch Ihre eigenen Funktionen erstellen. Und ich möchte diese zu einer Funktion machen und du kannst diese verkürzen. Und normalerweise tun wir das , um den Code aufzuräumen. Sie können hier mit der rechten Maustaste klicken. Und Sie können sagen, dass Kollaps funktioniert. Anstatt hierher zu gehen und die Funktion zu erstellen, wird es sie tatsächlich für Sie erstellen. Wählen Sie also alle diese drei aus, rechten Maustaste und sagen Sie „ Ausblenden“, um zu funktionieren. Jetzt können Sie sehen, dass es eine Funktion gemacht hat und normalerweise schreibe ich F als Präfix für Funktionen. Nennen wir das hier. Springt nicht. Das ist also was es ist. Es überprüft, ob du springst. Es heißt nur, dass du jetzt doppelklicken kannst. Übrigens habe ich es vielleicht zu schnell gemacht. Sie können auf diese erstellte Funktion doppelklicken. Und jetzt sehen Sie die Funktion hier. Es fängt an. Ich ziehe das hier runter, damit es einfach so organisierter ist . Das ist also die Funktion. Es fängt hier an, es endet hier und es gibt einen Rückgabewert. Und der Rückgabewert, wenn Sie zum Ereignisdiagramm zurückkehren, wird hier herauskommen. Dies ist der Wert, der hier überprüft wird. Das ist also ein bisschen organisierter. Sie verstecken diesen Code in dieser Funktion und nur diese Funktion wird angezeigt. Denken Sie daran, dass Sie diese dem Ausführungsstift hinzufügen müssen , da Sie im Blueprint das nicht wirklich tun können weil Sie die Verbindung nicht verbunden haben, eine nicht verbundene Funktion und dies wird renne nie, wenn du es so hast. Der beste Weg wäre also, es wie hier zu machen und es dann durch den Code zu führen. Sie können dies jedoch ein bisschen besser machen. Ich weiß, dass ich Ihnen in diesem Video viele Informationen gegeben habe , aber ich möchte Ihnen die beste Codierungsmethode beibringen. Hier haben Sie jetzt diese Funktion erstellt und sie läuft korrekt durch den Code. Sie können also sehen, ob ich auf Play klicke, nichts stimmt wirklich nicht mit meinem Code. Ich kann springen und es funktioniert einwandfrei. Aber Sie müssen es hier nicht wirklich mit Ausführungspins verbinden. Weil Sie normalerweise in diesen blauen Funktionen sehen können, dass wir grüne Funktionen haben und blaue Funktionen haben. Die grünen Funktionen geben Ihnen nur einige Informationen, die Sie für etwas verwenden können. Zum Beispiel haben wir hier die Steuerdrehung. Wir haben den Vorwärtsvektor, also die Vorwärtsrichtung. Und dann bekommen wir diese Informationen und verwenden sie als unsere Weltrichtung. So werden grüne Funktionen verwendet, um Informationen zu erhalten. Und die blauen Funktionen werden jedoch verwendet, um Informationen einzustellen. Also haben wir Funktionen eingestellt und wir haben Funktionen erhalten. Zum Beispiel stellt die Sprungfunktion den Sprung ein. Und hier verkaufen wir eigentlich nichts. Wenn Sie also auf diese Funktion klicken, die wir erstellt haben verkauft sie nichts, sondern nur, ob der Spieler fällt oder nicht. Es bekommt also Informationen. Es macht also keinen Sinn, dass es hier blaues Licht ist und man kann es ändern. So können wir auf diese Funktion klicken und Sie können auf diese Funktion namens pure klicken. also auf Pure klicke bekomme ich Informationen von dieser Funktion. Ich muss es nicht wirklich einstellen. Ich stelle keine Informationen ein, ich verstehe sie nur. Der Spieler fällt oder nicht. also hier zum Diagramm zurückkehren, können Sie es jetzt so verbinden und Sie können sehen, dass es optimierter ist. Jetzt. Du bekommst nur, ob der Spieler fällt oder verrückt ist, und wenn der Spieler nicht fällt, wenn das stimmt, kannst du springen. 27. Animationen der Spielerbewegungen: Wir sind jetzt bereit, die Bewegungsanimationen für den Charakter hinzuzufügen . Ich hoffe, du bist vollkommen wach, weil ich dir in dieser Lektion viel zu erteilen habe. Wenn wir also zu unserem Spieler und innerhalb der Spielerbasis zurückkehren. Also möchten wir die Animationen hier hinzufügen, also fügen wir die Bewegung hinzu, aber wir möchten auch die Animation hinzufügen. Aber jetzt wird es ein bisschen komplexer, aber weil wir jetzt einen echten Multiplayer bekommen. Wenn ich das zuerst minimiere, bevor wir irgendetwas tun, möchte ich Ihnen etwas über Aufzählungen beibringen, wir mit der rechten Maustaste hier und lassen Sie einen neuen Ordner namens Enums für Aufzählungen erstellen. Sie können in diesen Ordner gehen, Sie können hier mit der rechten Maustaste darauf klicken und Blueprints, Sie können diesen namens Enumeration erstellen. Aufzählung ist, ist nur eine Liste von irgendetwas. Wenn du es also einfach schaffst und ich es dir zeigen kann, beginne ich normalerweise Aufzählungen, Präfixe, indem ich E schreibe, und nenne es uns Bewegungszustände. Wir erstellen eine Liste von Bewegungsstatus. Eine Aufzählung ist also nur eine Liste von irgendetwas. Sie können hier oben auf diesen Button klicken. Sie können jedes Mal sehen, wenn Sie darauf klicken, eine Liste hinzufügen oder ein Element zu dieser Liste hinzufügen. Eine Aufzählung ist also nur eine Liste von allem, von dem Sie eine Liste erstellen möchten. Zum Beispiel Lebensmittel. Du kannst deinen Apfel, Orangen oder Gurke oder was auch immer du schreiben willst schreiben. Sie können Autos schreiben, zum Beispiel eine Liste von Autos. Du kannst sie hier schreiben und vielleicht die Modelle der Autos. Du kannst eine Liste von Waffen und eine Liste von allem schreiben. Ich werde eine Liste der Gegenstände machen. Aber um dieser willen schreiben wir hier eher eine Liste der Lauf- oder Bewegungszustände. Die erste, die ich im Leerlauf rufe. Wir haben also eine Animation im Leerlauf und dann haben wir eine Runrights Animation. Wir haben eine Run Left Animation und dann haben wir eine Sprunganimation. Und wir haben auch eine Herbstanimation. Und eigentlich haben wir nicht wirklich eine gefallene Emission, weil wir nur gemacht haben, lasst uns zurück zum Asset-Charakter zurückkehren. Wir haben eine untätige Animation gemacht, eine Run-Animation. Obwohl es Run heißt, sind wir beide rechts und links herum gelaufen. Und dann haben wir die Jump-Animation hier. Aber wir haben nicht wirklich eine Herbstanimation. Aber in Maple Story ist die vollständige Animation dieselbe wie der Sprung. Also werden wir diesen Sprung einfach als unsere vollständige Animation nutzen . Klicken wir also auf Alles speichern. Jetzt haben wir unsere Aufzählung gemacht, wir haben die Liste erstellt. Gehen wir nun zurück zur Spielerbasis. Jetzt können Sie hier die Aufzählung hinzufügen. Wenn Sie also eine Variable erstellen und nennen wir sie Bewegungszustände. Und Sie können die Variable hier ändern. Und um Ihre benutzerdefinierte Variable zu finden, können Sie sie wie auch immer Sie genannt haben, die Aufzählungsdatei nennen . Also e als Präfix und du kannst Bewegungen schreiben, Datum, und du kannst sehen, du kannst deine Aufzählung hier sehen. Sie haben normalerweise diese dunkelgrüne Farbe. Diese E Bewegungen geben also an, dass dies unsere Aufzählung ist, indem Sie darauf klicken, und jetzt ist es eine Variable, die Sie kompilieren können. Wenn Sie sehen möchten, wie es aussieht, können Sie es immer hier rausholen und auf klicken, um die Informationen abzurufen. Sie können hier nachschauen, auf Set klicken und Sie können sehen, dass Sie es auf all diese verschiedenen Listenelemente einstellen können diese verschiedenen Listenelemente , die Sie hier in der Liste festgelegt haben. Wenn Sie also noch eine Sache hinzufügen und auf Speichern klicken, können Sie hier diese neue Sache sehen ich hier kompilieren muss, kompilieren und speichern. Jetzt kann ich darauf klicken und Sie können das neue Listenelement sehen , das hinzugefügt wurde. So fügst du also Dinge auf der linken Seite hinzu. Sie können es auch hier löschen. Wir können erneut kompilieren und speichern. Und jetzt können Sie sehen, dass dies die Liste ist, die wir haben. Okay? Im Grunde wollen wir diesen Achsenwert nehmen. Jetzt lass es mich auf den Bildschirm drucken damit ich dir zeigen kann, was los ist. Also lasst uns jetzt drucken. Wenn Sie diesen Achsenwert ziehen und mit der Druckzeichenfolge verbunden sind. Jetzt wird dieser Achsenwert immer dann gedruckt, wenn Sie laufen. Wenn du also auf Play klickst und rennst, kannst du sehen, dass es eins ist, wenn ich nach rechts gewechselt bin und es ist minus eins, wenn ich nach links gehe. Denken Sie daran, dass wir dies in den Projekteinstellungen geschrieben haben und Eingänge. Eine, die sich nach rechts bewegt. Ich möchte nur nach links gehen und wenn wir still stehen, ist es 0. Okay? Aber diese Informationen , die wir jetzt haben, werden wir jetzt viel cleverer. Wenn es also ist, wenn dies gleich 0 ist, stehst du still, du bist im Leerlauf. Nehmen Sie dies heraus und schreiben Sie das Gleichheitszeichen, oder Sie können gleich schreiben, wenn Sie möchten. Sie können diesen Operator hier dazu bringen, gleich zu sagen. Wenn diese Zahl also gleich 0 ist, kann ich wieder hierher ziehen und b oder einen Zweig schreiben. Wenn diese Zahl gleich 0 ist, wenn das stimmt, was wollen wir tun? Und letztendlich was wir tun wollen. Wir möchten dieses Listenelement auf Leerlauf setzen da wir jetzt wissen , dass der Spieler im Leerlauf ist , weil der Spieler still steht der Achsenwert gleich 0 ist. Aber wenn es nicht gleich 0 ist, bedeutet dies, dass Sie sich bewegen. Ja, du bewegst dich. Aber wenn ich dieses Steuerelement einfach kopiere dann bewegst du dich nach rechts oder bewegst du dich nach links? Also das müssen wir auch überprüfen. Sie können zum Beispiel von diesem Achsenwert ziehen , und Sie können sagen, je größeres Zeichen wie dieses größer ist? Sie können sich also für dieses entscheiden. Es ist dieser Achsenwert, ist er größer als 0? Und wir können dieses Jahr ziehen, ich wäre für die Filiale. Und Whoops, es ist rausgezoomt. Ich weiß nicht, was so passiert. Wenn dieser x-Wert also größer als 0 ist, bedeutet dies, dass wir nach rechts gehen. Verbinden wir das also mit dem Falschen. Was wir jetzt sagen, ist dieser x-Wert gleich 0. Wenn ja, dann ist es untätig. Wenn dies nicht der Fall ist, überprüfen Sie diesen, dann ist der Überwert größer als 0 hier unten , was wir überprüfen . Wenn es größer als 0 ist , bewegen Sie sich nach rechts. Wenn Sie sich jedoch bewegen, wenn es weniger als 0 ist, bewegen Sie sich tatsächlich nach links, weil es minus eins ist. Okay, das ist also das Hauptprinzip. Jetzt müssen wir ein bisschen mehr arbeiten , damit es im Multiplayer funktioniert. Ich werde diesen Sprung bewegen, Jump IF-Funktion hier, springe Logik hier unten. Also habe ich hier oben mehr Platz. Also dieses möchte ich eigentlich zu einer Funktion machen. Also gehe ich hier runter und klicke mit der rechten Maustaste. Und Sie können auch, wie Sie hier gesehen haben, wenn Sie Ereignisse geschrieben haben, eine Veranstaltung auswählen können, die hinzugefügt werden soll, aber Sie können Ihre eigenen Events erstellen. Wenn Sie also ein Kostüm schreiben, können Sie sehen, dass Sie ein benutzerdefiniertes Ereignis hinzufügen können und es so nennen, wie Sie möchten. Ich nenne diesen einen festgelegten Bewegungsstatus , weil wir das versuchen. Stellen Sie also den Bewegungszustand ein und wir haben jetzt dieses Ereignis. Okay, also möchte ich einen davon nehmen, also klicke ich auf Control X um es auszuschneiden und hier unten einzufügen . Alternativ möchte ich, dass Sie meinen Bewegungsstatus hier und das Ereignis festlegen. Und eine coole Sache, die du hier machen kannst. Sie haben gesehen, dass Sie hier Variablen hinzufügen können, aber Sie können Funktionen auch Variablen hinzufügen. Kann all diese vorgefertigten Funktionen sehen. All dies sind eigentlich Variablen. Sie können also auf diese benutzerdefinierten Ereignisse klicken. Sie können eine neue Variable hinzufügen, aber Sie können es auch einfach hinzufügen, indem Sie diesen Pin ziehen und über Ihre benutzerdefinierte Funktion ablegen. Sie können sehen, dass diese Variable automatisch für Sie erstellt wird . Wenn Sie es manuell hinzufügen möchten, können Sie hier immer auf das Plus klicken und ihm einen Namen geben. Also zum Beispiel name. Sie können sehen, dass es den Namen ändert und Sie können erneut auswählen E. Bewegungen sind geblieben und Sie hätten es so auswählen können. Ich lösche diesen einfach. Ich habe es dir gerade gezeigt. Also Verbindungen Sparen Sie jetzt. Also was du jetzt hier oben machen kannst. Anstatt diese Aufzählung schreiben zu lassen, können Sie dies herausnehmen und den Namen des Ereignisses schreiben , das Sie hier aufgeschrieben haben. So rufen Sie also ein benutzerdefiniertes Ereignis auf. Legt Bewegungsstatus fest. Und Sie können hier die aufgerufene Funktion sehen , den Status Bewegungen einstellen. Anstatt diese Aufzählung direkt ausgeführt zu haben, wird dieses Ereignis tatsächlich ausgeführt, das diese Variable auf das setzt, was Sie hier auswählen. Diese Informationen, die Sie hier auswählen, werden also hier durchlaufen. Und es setzt Ihre Variable auf die Informationen ein, die sie hier oben durchläuft. Okay, also sehr, sehr coole Sachen, aber wir müssen ein bisschen mehr tun , weil wir im Multiplayer sind. Dies ist kein Einzelspieler-Spiel. Dies wäre im Einzelspieler perfekt funktioniert worden. Aber im Multiplayer legen wir normalerweise keine Variablen auf den Clients fest, also haben wir einen Client und den Server und normalerweise den Server, der Typ ist, der das Spiel macht. Wenn ich also Counterstrike spiele, erstelle ich einen Server. Ich bin der Server. IMD, das wahre Spiel. Also habe ich die Autorität des Spiels. Und man hört manchmal, dass es Cheats oder Hex gibt, das nennt man clientseitiger Angriff. Was wir normalerweise tun, ist Variablen über den Server zu setzen , weil der Server das Spiel steuert, Sie müssen immer daran denken, dass der Server in Unreal Engine die Kontrolle über das Spiel hat und was auch immer Sie tun, welche Logik du auch schreibst, du musst sie durch den Server laufen. Die Clients sind alle verbundenen Layer. Sie erstellen also den Server, Sie sind der Server und alle Spieler, die sich mit Ihrem Server verbinden. Sie werden die Kunden genannt. Und wenn Sie nicht den gesamten Code über den Server ausführen, also wenn Sie nicht überprüfen, was Sie tun, z. B. springen oder setzen Sie eine Variable ein. Wenn du es nicht zuerst überprüfst, , dem Client leichter, im Spiel zu schummeln. Wenn Sie dies also einfach durch den Client ausführen und diese Variable festlegen, hat der Client eine einfache Möglichkeit, innerhalb Ihres Spiels zu schummeln. Denken Sie also immer daran, dass der Server die Autorität des Spiels hat, dass der Server das wahre Spiel ist. Der Server prüft, ob Sie die Waffe geschlossen haben, dann sagt der Server, ja, dieser Client hat die Waffe tatsächlich geschossen. Dann mach weiter und füge diesem Charakter Schaden zu. Der Server muss diese Informationen also immer überprüfen, um sicherzustellen, dass der Client nichts Illegales tut. Also ein anderes Beispiel, kurz bevor wir zum Beispiel den Client fortsetzen , also die verbundene Ebene. Schießt ein Rollenspiel und weitesten entfernte Rollenspiel, die den Server durchsehen müssen. Der Server prüft. Hat dieser Spieler tatsächlich ein Rollenspiel in der Hand und schießt die Waffe ab? Dann prüft der Server und sagt, ja, dieser Client hat tatsächlich ein RPG in der Hand und schließt es. Dann sendet es diese Informationen an den Kunden zurück, der das Rollenspiel gedreht hat. Und es wird dem Kunden sagen , dass du diese Waffe schießen darfst, weil ja, du hast das Rollenspiel in der Hand. Regel-Engine. Sie haben diese Berechtigung, bei der der Server die Berechtigung hat und was auch immer der Client über den Server überprüft werden muss. Wir können es einfach hier einstellen. Dies ist, Sie können hier sehen dies der Client ist und Sie können ihn auch hier überprüfen, wenn Sie mit der rechten Maustaste klicken und eine Druckzeichenfolge schreiben. Und denken Sie daran, dass die Druckzeichenfolge so mächtig ist, obwohl sie nur eine Zeichenfolge druckt. Lassen Sie uns kompilieren und speichern. Und du kannst sehen, was ich sage. Anstatt jetzt auf „Jetzt spielen“ zu klicken, klicken wir auf diese drei Schaltflächen und ändern sie in eine Reihe von Spielern. Jetzt sind wir im Multiplayer. Lasst uns zwei schreiben. Klicken Sie hier im Netzmodus auf diesen namens Play als Listen-Server. Klicken wir erneut auf diese Schaltflächen und ich klicke auf dieses eine neue Editor-Fenster. Das ist es, was ich jetzt spielen werde. Ich werde nicht mehr im ausgewählten Ansichtsfenster spielen. Klicken Sie also auf ein neues Editor-Fenster. Jetzt können wir sehen, dass wir den Server haben. Du siehst es oben hier. Wir haben den Server. Ich habe dieses Spiel erstellt. Und Sie können den Client sehen, der mit meinem Server verbunden ist, den ich erstellt habe. Wenn ich hier anklicke, siehst du, dass ich mich als Server bewegen kann, und ich kann auch als Client hier rübergehen. Jetzt sind wir also im Multiplayer. Und wie Sie hier sehen können, druckt der Client Hallo und der Server auch Hallo. Dies bedeutet diese Information. bedeutet, dass dieses Ereignis auf dem Server und dem Client ausgeführt wird . Sie sagen beide Hallo. Und wenn ich Variablen setze, möchte ich sie nur auf dem Server einstellen. Ich möchte sicherstellen, dass der Kunde nicht betrügt. Also möchte ich niemals Variablen auf dem Client setzen. Und lasst uns das löschen. wir also mit der rechten Maustaste hier und sagen Sie weitere benutzerdefinierte Ereignisse. Lassen Sie uns ein benutzerdefiniertes Ereignis hinzufügen. Nennen wir es S RV pro Server. Normalerweise nenne ich sie als R V. und nennen wir es einfach den gleichen Namen wie diesen hier oben. Sagt Bewegungsstaaten. Einfach so. Um es nur durch den Server laufen zu lassen, haben Sie diesen im Multiplayer namens Replikation. Klicken Sie also hier und klicken Sie auf „Auf Servern ausführen“. Also wollen wir es nur auf dem Server ausführen und auf zuverlässig klicken. Ich werde dies trennen, indem ich Alt halte, diese trenne und das Set hier damit verbinde . Und was wir hier tun können, ist, diese Ereignisse durchzuführen. Also hier oben läuft unser v so und verbindet diese Eingänge einfach so. Okay, jetzt läuft es eigentlich richtig. Was wir jetzt tun ist, dass wir prüfen, ob der x-Wert 0 ist, also befindet sich der Spieler im Leerlauf, wenn das stimmt. Und diese Idol-Information. Jetzt führen wir dieses Ereignis aus, das als set move state bezeichnet wird, welches dieses ist. Also setzen wir diese Informationen im Süden im Leerlauf. Diese Informationen werden auf den Server ausgedruckt. Und der Server setzt diese Variable auf das, was Sie hier geschrieben haben oder was auch immer Sie hier gewählt haben. Okay, also das ist die richtige Methode, um es zu tun. Also, was wir hier tun müssen, also lasst uns diese löschen. Und wieder können Sie einfach den Namen dieses Ereignisses hier schreiben , um die Event-Sets aufzurufen. Bewegungen, Staaten wie diese und wählen Sie diesen aus, nicht diesen, also diesen hier. Und lass es uns kopieren und hier unten einfügen. Wenn also der Achsenwert größer als 0 ist, bedeutet dies, dass wir, wenn das stimmt, nach rechts laufen. Das ist falsch. Wir rennen einfach so nach links. Jetzt ist es also richtiger. Okay, also haben wir jetzt die Variable gesetzt was jetzt? Weil du sehen kannst, ob ich alles kompiliere , speichere und speichere, wenn ich auf Jetzt spielen klicken kann, passiert wirklich nichts. Und das ist okay. Denn im Wesentlichen, was Sie gerade tun , ist, dass Sie diese Variable festlegen, aber Sie haben den Supervisor wirklich nicht definiert. Wenn ich hierher zurückgehe, hast du diese Flip Books nicht wirklich benutzt. Denken Sie daran, dass Sie diese Variable nur auf die Informationen setzen diese Variable nur auf die Informationen Sie hier festlegen. Für Aufzählungen haben wir also etwas namens Switch on Enumeration. Also nur als Test, wenn ich diese Aufzählung einfach rausziehe und wenn ich sie hierher ziehe und switch sage, kannst du einen Schalter auf der Enumeration sehen. Was es ist, ist im Grunde, dass es Ihnen nur Ausführungspins gibt, je nachdem , was Sie hier auf der Liste geschrieben haben. Und du kannst verschiedene Aktionen ausführen. Und Sie können hier sehen, wenn wir im Leerlauf sind, können wir dieses Flipbook ausführen. Wenn wir es sind. Ich geh zurück. Wenn wir nach rechts laufen, kann ich dieses Run Flip Book ausführen und so weiter. So können wir verschiedene Aktionen ausführen, je nachdem, was wir sind was wir diese Variable gesetzt haben. Okay, also können Sie wieder innerhalb des Multiplikators auf eine Variable klicken. Und hier im Multiplayer, genau wie zuvor, wo Sie eine Replikation für das Ereignis haben, und sagen, dass auf Servern ausgeführt wird, speziell auf dem Client ausgeführt wird. Auch für Variablen können Sie diese replizieren. Wie Sie sich vorstellen können, muss der Client, wenn Sie hier eine Variable auf dem Server festlegen, wenn Sie hier eine Variable auf dem Server festlegen, irgendwie über diese Informationen Bescheid wissen. Und das ist es, was Sie mit diesem Replikationsfork verwenden. Denn wenn Sie diese Variable auf dem Server festlegen, wie würde der Client darauf hinweisen? Weil der Client keine Chance hat zu wissen, was Sie auch gesagt haben, weil Sie der Server sind. Sie haben die Informationen auf dem Server festgelegt, müssen diese Informationen jedoch an den Client zurücksenden, damit der Client weiß, worauf der Server sie eingestellt hat. Und hier kommt die variable Replikation ins Spiel. Wenn ich also darauf klicke und auf repliziert klicke, sehen Sie diese beiden Kugeln. Dies bedeutet, dass ich die Variable auf dem Server setze, und jetzt sende ich diese Informationen an den Client zurück, damit der Client weiß wie hoch der Wert für diese Variable ist. Das ist es, was repliziert wird. Jetzt ein bisschen komplex. Das Letzte, worüber ich dir beibringen möchte, bevor ich dir das Gehirn rausblase , ist dieser namens Rep, benachrichtigen. Und das schafft eine Funktion für Sie. Wenn Sie also auf Retinas sterben klicken, sehen Sie hier, dass diese Unwrap Funktion automatisch erstellt wird . Und was das tut, ist, dass diese Funktion jedes Mal ausgeführt wird , wenn Sie diese Variable festlegen. Jedes Mal, wenn Sie diese Variable festlegen, wird diese Funktion ausgeführt. Also doppelklicke ich auf diese Funktion. Und ich ziehe diese Bewegung hier drin und hielt die Kontrolle, ließ sie hierher fallen und ziehen sie jetzt hierher, indem ich sagte, Enumeration einschalten. Einfach so. Jedes Mal, wenn ich diesen Code ausführen werde , führe ihn hier durch den Server aus, der diese Variable einstellt. Jedes Mal, wenn sich dieser Wert ändert, wird diese Funktion ausgeführt. Was ich mit dieser Funktion machen möchte ist das Flipbook zu ändern. Denn denken Sie daran, dass wir in den Sprites eigentlich nicht hier sind, sind wir innerhalb der Spielerbasis. Wenn ich also zum Spieler Tsarina gehe, erinnere dich an die Sprites, wir haben dieses Source Flip Books. Es ist also ein Flipbook , das wir ändern. Was wir hier haben, ist etwas, das Sets Flip Book genannt wird. Und jetzt wird es dir sagen, dass es für das Sprite hier ist. Und du wirst auf Okay klicken, Ja, das ist für das Sprite und es wird das automatisch für dich erstellen. Du hättest es auch einfach anklicken und von hier ziehen können und Flip Book sagen können, das ist das Gleiche. Also werden wir dieses Flipbook hier auf das Idol setzen. Wenn wir im Leerlauf sind, wenn wir nach rechts laufen, kopiere ich das Einfügen verbinde es so mit dem Ziel. Wenn wir nach rechts laufen, führen wir die Run-Animation oder das laufende Flipbook aus. Ich kopiere das ein paar Mal einfügen. Der Lauf links ist eigentlich auch die Run-Animation. Und der Sprung ist die Sprunganimation wie diese, Sprung, Lipid wie dieses und der Herbst. Wir haben nicht wirklich eine neue Animation, also verbinde ich meinen Fall hier und benutze einfach dasselbe hier, das Sprung-Flipbook. Okay, denken Sie daran, das hell zu machen, Sie können entweder so machen und mit mehreren Orten verbunden sein oder manchmal ist es sauberer, nur mehrere solche zu verwenden. kannst du auch machen. Machen wir das einfach für diesen hier. Ich kopiere das ein wenig ein bisschen ein. Und verbinde den letzten hier. Ich werde das später sauberer machen, aber lasst uns jetzt einfach damit arbeiten. Zusammengesetztes Speichern, klicken Sie auf Play. Jetzt siehst du hier, wenn ich nach rechts renne, renne ich. Wenn ich nach links renne, sehe ich, ich renne aber ich laufe nicht die richtige Richtung , wenn ich springe. Richtig springen. Und das liegt daran, dass wir die Sprunganimation nicht wirklich gemacht haben und das gleich nach dieser Lektion tun werden . Aber konzentrieren wir uns auf das Rennen. Laufen funktioniert also, aber ich gehe in die falsche Richtung , wenn ich nach links renne. Und das liegt daran, dass dies ein Sprite ist und Sie Ihr Bild drehen müssen , damit es richtig läuft. Also möchte ich dieses Sprite einfach drehen, wenn ich renne. Wenn ich also hier nach links renne, läuft es nicht in die richtige Richtung. Was Sie also tun können, ist dieses Sprite hier zu nehmen und Sie können Rotation sagen. Denken Sie daran, wenn Sie nicht wissen, was Sie tun, suchen Sie einfach nach Rotation und Sie können versuchen, diese zu durchlaufen und zu sehen, was Sie tun möchten. Und die, die wir verwenden, ist die Einstellung der relativen Rotation. Wir wollen es drehen. Sie können hier etwas minimieren und auf alles klicken. Zum Beispiel startet dieser Spieler und klickt auf E für das Rotationswerkzeug. Und Sie können sehen, dass Sie das Z drehen müssen. Wenn Sie also möchten, dass sich etwas auf die andere Seite dreht, müssen Sie das Z um 180 drehen. Also klicke ich hier auf Control Z. Und das Z, du musst das Sprite um 180 drehen. Und Sie können hier verbunden anrufen. Es wird es also drehen, bevor es das Flipbook setzt. Und denk dran, für den Lauf müssen wir ihn zurückdrehen. Kopieren dieses Codes wird also chaotisch und bewegt sich auf diese Weise. Also hier drehen wir es zurück. Stellen Sie es also auf 000 ein und verbinden laufen Sie richtig, so. Jetzt sollte es richtig funktionieren, wenn ich kompiliere und tatsächlich vergessen habe, hier ein Ziel hinzuzufügen. Also lasst uns das kopieren so hier einfügen. Und Sie können sehen, wenn Sie einen Fehler haben, es schreibt hier den Pfeil und es heißt, dass Sie ein Ziel benötigen. Diese kompilieren und speichern. Einfach so. Und jetzt lasst uns spielen und sehen, ob ich nach rechts gehe, gehe nach links. Weil er jetzt unsere Animation einwandfrei funktioniert. Und jetzt verpassen wir die Sprunganimation, und das werden wir in der nächsten Lektion tun. 28. Player: Lassen Sie uns jetzt die Jump-Animation machen. Gehen wir also zurück zur Spielerbasis. Und hier drin, im Event Graph. Hier haben wir diese Bewegung mit der IAO gemacht, mit dem Lauf nach rechts und was sie nach links laufen. Was wir nicht wirklich zum Springen gebracht haben. Und weiter springen, wenn wir den Status „Set-Movements“ erneut ziehen , also ziehen wir diesen hier, damit der Bewegungszustand so gezogen wird, dass wir ihn zweimal herausziehen können. Also haben wir sowohl den Sprung hier als auch den Sturz. Wir müssen prüfen, ob der Spieler springt oder ob der Spieler fällt. Es ist das Gleiche. Es ist dieselbe Animation in Maple Story. Es spielt also wirklich keine Rolle. Aber wenn du dein eigenes Spiel erstellst und du zwei verschiedene Animationen für den Sprung und Fold hast. Das wäre wirklich schön zu wissen. Also nochmal, genau wie zuvor hier unten, in der Sprunglogik, überprüfst du in der Sprunglogik, ob der Spieler fällt oder nicht. Also müssen wir das Gleiche hier machen. Wenn wir zum Event Graph zurückkehren, müssen wir das Gleiche hier tun. Bevor wir also idol haben, ich Alt gedrückt und klicke hier, um die Verbindung zu trennen. Ich werde das ein bisschen weiter weg bewegen , denn jetzt können wir den Sprung hinzufügen. Also nehme ich die Charakterbewegung und überprüfe, ob der Spieler fällt. Also kriegen wir, wenn ich feststellen kann , dass es hier fällt, diesen zu bekommen. Und lasst uns einen Zweig wie diesen erstellen. Jetzt prüfen wir, ob der Spieler fällt und ob der Spieler fällt, springen wir. Also sind wir in der Luft. Und wenn der Spieler nicht fällt, was bedeutet, dass der Spieler im Untergrund ist, sind wir nicht im Sprung. Wir werden diesen laufenden Code einfach wie zuvor ausführen. Aber hier springen wir, wenn wir in der Luft sind. Jetzt müssen wir nachsehen. Springt der Spieler oder der Spieler fällt? Welches ist es? Wir können das tun, wenn wir die Geschwindigkeit dieser Akteure erhalten. Also klicke ich mit der rechten Maustaste und hole die Geschwindigkeit nach rechts , wie hier. Und wir bekommen die Geschwindigkeit. Und jetzt ist das ein Vektor. Sie können diesen Vektor jetzt brechen. Aber denn woran ich gerade interessiert bin, wenn wir den Spieler hier haben, bin ich daran interessiert, ob der Spieler hochspringt oder herunterfällt. Und wieder ist dies das Z, der blaue Pfeil hier ist der z. In der Z-Achse. Ich möchte sehen, geht es in die Plusrichtung, was bedeutet, dass der Spieler nach oben geht oder das Flugzeug nach unten fährt, was bedeutet, dass das Z tatsächlich im negativen Wert liegt. Also werde ich am Ende die Spielerbasis sein, diese Geschwindigkeit. Ich kann diesen Vektor nehmen und ich kann Break sagen. Sie können diesen Vektor auf x, y und z aufteilen. Denken Sie an einen Vektor, wenn ich Ihnen hier zeigen kann, als wir eine Vektorvariable erstellt haben, besteht ein Vektor aus drei Zahlen, genau wie der Ort hier, drei Zahlen. Wenn ich also zurückgehe, lass mich das einfach noch einmal löschen. Wir teilen diesen Vektor also in x, y und z auf, weil wir nur an dem z-Wert interessiert sind. Ich möchte überprüfen, ob das nach oben geht, was bedeutet, dass es im Plus oder nach unten geht, was bedeutet, dass es im Minus liegt. Also nehme ich das und sage größer. Ist das also größer als 0? Und erstelle wieder einen Zweig wie diesen. Wenn es also größer als 0 ist, bedeutet dies, dass der Spieler springt, weil Sie nach oben gehen , wenn er nicht größer als 0 ist, also ist es im Minus bedeutet, dass Sie herunterfallen. Und wenn der Spieler nicht fällt, führen Sie einfach diesen normalen Laufcode aus. Okay, also lass mich das jetzt ein bisschen näher bringen. Jetzt haben wir diese springende Logik und wir können immer, normalerweise eine ganze Lektion für eine Säuberung widmen , also mach dir keine Sorgen darüber, wenn es ein bisschen chaotisch aussieht. Aber hier können wir einfach kompilieren und speichern. Und jetzt möchte ich es dir erklären. Klicken wir einfach auf Play und sehen, was passiert. Wenn ich also auf Play klicke und gesprungen bin , siehst du, dass ich springe. Es funktioniert. Großartig. Okay, also was passiert ist du hier nachschaust und dann nach rechts, links gehst. Bevor Sie diese Move-Animation ausführen, prüfen Sie, ob der Spieler fällt. Und wenn der Spieler fällt, bedeutet das, dass du springst. Okay, das ist in Ordnung. Also ja, du springst. Es stimmt. Du fällst. Was dann? Hier nimmst du die Geschwindigkeit dieses Zeichens und du brechst diesen Vektor weil wir nur an dem Z-Wert interessiert sind. Wir prüfen, ob der Z-Wert über 0 liegt. Wenn ja, springst du. Wenn die Geschwindigkeit unter 0 liegt, was bedeutet, dass Sie sinken, bedeutet das, dass Sie fallen. Okay, was passiert hier? Sie führen dieses Event aus und stellen es so ein, dass es diese Informationen überspringt, Sie sitzen hier, wir werden diese Veranstaltung durchlaufen, weil dies letztendlich das Ereignis ist, das Sie ausführen. Stellen Sie Bewegungen fest Zustände, an die Sie sich erinnern, dass Sie dieses Ereignis aufrufen. Es läuft also durch diese Veranstaltung. Es setzt diese Informationen , die springen, auf die Sie sie gesetzt haben, hier laufen durch den Code. Es geht durch den Server. Der Server setzt diese Variable. Und denken Sie daran, dass wir diese Variable auf eine Wiederholungsbenachrichtigung setzen. Und noch einmal, wenn Sie sich nicht an eine Benachrichtigung erinnern, denn im Moment sind Sie der Server und der Server legt die Variable fest. Woher würde der Client wissen, was diese Variable ist, wenn Sie nichts tun, weil Sie sich daran erinnern, dass Sie sich auf dem Server befinden und der Client nicht wirklich sehen kann, worauf Sie ihn einstellen, es sei denn, Sie replizieren diese Entzündung. Sie replizieren die Informationen also zurück an den Client, damit der Client den Wert dieser festgelegten Variablen sehen kann . Was auch immer die Benachrichtigung ist, es benachrichtigt alle Kunden, worauf Sie es eingestellt haben und dies geschieht durch diese Ribner OnReceive-Funktion. Ein Vertreter benachrichtigt also, wenn Sie eine Variable auf rip benachrichtigen festlegen, wird diese Entpackungsfunktion erstellt. Und da drinnen, was auch immer Sie hier programmieren, werden alle Kunden diese Änderung sehen. diesem Grund stellen wir das Flipbook hier ein. Weil wir wollen, dass alle Kunden sehen, dass ich in meinem Idle Flip Book bin. Ich möchte, dass alle Kunden sehen, dass ich in meinem Jump-Flipbook bin und so weiter. Sie senden also all diese Informationen an den Kunden. Nun, die Information wurde hier gesetzt, ist Sprung, ging hier durch den Server, setzte die Variable und sie wird in die Entpackungsfunktion gehen, und sie wird in die Entpackungsfunktion gehen denn jedes Mal, wenn Sie eine Rep Notify Variable ändern, es wird die Unwrap Funktion ausführen. Und da Sie diesen Wert jetzt auf springen setzen, wird er nur durch diesen Sprungausführungs-Pin laufen. Es wird all dies ignorieren weil es nur sieht, dass Sie es jetzt so eingestellt haben, dass es springt. Es wird also diese Ausführungsnadel ausführen, und es wird das Flipbook dieses Hellen zum Springen bringen. Wenn Sie also auf Leertaste klicken und springen, wird Ihr Flipbook so eingestellt, dass es springt. Und um es auszuprobieren. Du kannst es sehen, es funktioniert. Ich kann es auch beim Kunden sehen. Um sicherzustellen, dass es funktioniert. Ich muss auch als Kunde herumlaufen und als Kunde springen um zu sehen, ob ich der Kunde bin und springen darf. Denn denken Sie daran, dass der Server überprüft was Sie als Client tun. Jetzt kannst du also sehen, dass ich als Kunde springen kann. Und auch wenn ich das ein bisschen runternehme, kannst du sehen, dass der Server das alles machen kann. Natürlich hat der Server wiederum die Berechtigung, irgendetwas im Spiel zu tun , weil der Server das wahre Spiel ist, der Server alle Clients auf das überprüft, was sie tun und den Server ist in der Lage alles zu tun. Es ist also eher wie der Kunde. Wir müssen uns auch beim Kunden erkundigen. Wenn der Kunde all das kann und der Kunde dies auch in der Lage ist, all dies zu tun. Es funktioniert also einwandfrei. 29. Benutzerdefinierte variable Eingaben: Jetzt möchte ich Ihnen einige benutzerdefinierte Variableneingaben zeigen. Wenn wir also zurück zur Spielerbasis und hier in deiner ungelesenen Bewegungsfunktion gehen , kannst du hier sehen, bevor wir jetzt das Leerlauf-Flipbook einstellen, wir setzen das Run-Flipbook, wir setzen das Jump Flip Book und so weiter. Aber was ist, wenn wir jetzt hierher gehen, um nachzuschauen? Wenn wir spawnen, schauen Sie sich den Server an. Jetzt können wir also sehen, dass wir als Tsarina antworten. Und das heißt, das ist großartig. Aber was ist, wenn wir Luke hervorgebracht haben? Luke hat dieses Flipbook nicht wirklich. Sieh mal. Ist dieses Mädchen nicht umgedreht? Wir müssen noch ein Flipbook für Luke machen. Und wie benutzen wir Lukes Flipbook anstelle von Serenas hier? Und deshalb kodieren wir fast nie Sachen in Spielen. Normalerweise hasse ich hartes Codieren so. Dies wird als Hardcoding bezeichnet oder wählen Sie einfach eine Variable aus. stattdessen einfach mit der rechten Maustaste hier und fördern Sie dies in eine Variable. Und jetzt kann man dies eine Variable nennen , etwas zum Beispiel, ich kann es als Leerlauf, Flip, nicht so guten Platz bezeichnen. Ich drehe das Buch um. Jetzt habe ich das in eine Variable verwandelt. Wenn ich nun kompiliere und du siehst, ob ich auf diese Variable klicke, ist der Standardwert jetzt dieses Flipbook, da ich hier ausgewählt habe, haben wir das Run-Flipbook ausgewählt. Wenn ich jetzt mit der rechten Maustaste klicke und eine Variable bewirbt, wird dies als Standard festgelegt. Jetzt können wir dies als Standard für diesen entfernen. Jetzt klicke ich einfach auf Löschen. Klicken Sie also auf den Leerlauf drehen Sie eine Variable , die Sie gerade erstellt haben. Sie können auch sehen, dass es zu einem Papier-Flipbook-Typ gemacht hat. Sie können hier anklicken, ich klicke auf Löschen. Jetzt ist der Standardwert nichts. Okay? Woher wissen wir von hier aus, welches Flip Book für Serena laufen soll und woher wissen wir, was wir für Luke laufen sollen? Jetzt, seit du es in eine Variable verwandelt hast. Und denken Sie daran, dass wir im Bass des Spielers sind. Spielerbass ist der Elternteil für die for-Schleife und für Serena. Das sind also die Eltern. Jede Variable, die Sie innerhalb des Elternteils erstellen, wird auch in den untergeordneten Elementen angezeigt. Wenn ich also zuerst auf Tsarina klicke und wenn ich zu den Klassenvorgaben hier rechts gehe, kannst du sehen, dass ich sowohl den Bewegungsstatus das Leerlauf-Flipbook habe, denn in der Spielerbasis haben wir sowohl das variablen Bewegungen, Status und das Leerlauf-Flipbook. Hier kann ich zum Beispiel für Serena die Leerlauf-Animation für das Leerlauf-Flipbook auswählen. Aber wenn ich jetzt zurück zu Luke gehe, öffne ich den vollständigen Blueprint-Editor für Luke. Wenn ich zu den Standardwerten der Klasse gehe, kann ich ein anderes Leerlauf-Bücher auswählen. Im Moment tue ich es nicht wirklich, wir haben noch nicht importiert, es sieht Animationen aus. Aber ich kann eine benutzerdefinierte Leerlauf-Animation auswählen. Und hier könnte ich Lukes Idle Flip Book auswählen , wenn ich es geschafft habe. Anstatt also hier die Codierungsvariablen hart zu codieren, mache ich es normalerweise in eine Variable. Und Sie können diese Animation jetzt ständig einstellen , je nachdem, ob Sie dies getan haben Nehmen wir an, Sie haben zehn Charaktere jetzt können wir auf alle zehn Charaktere klicken und sie hier als benutzerdefiniertes Flipbook für den Leerlauf festlegen sie hier als benutzerdefiniertes Flipbook für den Leerlauf Sie können wieder zurückgehen und mit der rechten Maustaste hier klicken und diese in eine Variable für den Sprung hochstufen. Und dann kannst du das Jump-Flipbook für jeden der Charaktere einstellen . So können wir sehen, ob ich mit der rechten Maustaste auf alle diese klicke und eine Variable fördert. Und wenn ich mit der rechten Maustaste hier klicke, wenn ich sie nur in eine Variable bekomme, können Sie sehen, dass ich viele Variablen bekomme und Sie können sich mithilfe einer Struktur Speicherplatz aus all diesen Variablen sparen sich mithilfe einer Struktur Speicherplatz aus all . Darüber werden wir in der nächsten Lektion sprechen , wir werden über Strukturen sprechen. Also lösche ich die hier noch einmal. Wenn ich sie einfach lösche, möchte ich nicht zu viele Variablen diese Animationen erstellen. Es heißt, dass Sie daraus eine Variable erstellen können, aber Sie können tatsächlich eine so genannte Struktur verwenden , die effizienter ist. Und ich zeige dir in der nächsten Lektion, wie man eine macht. 30. Strukturen: Megastruktur. Lassen Sie uns jetzt mit der rechten Maustaste klicken und einen neuen Ordner erstellen. Ich erstelle einen Ordner namens structs. Dies sind für die Strukturen und Doppelklick darauf, und statt hier können Sie mit der rechten Maustaste in Blueprints klicken. Sie können diese als Struktur bezeichnen. Wenn ich das schaffe, zeige ich dir, was das ist. Fangen wir mit dem STS an, dem Präfix. Und dafür wird diese Struktur alle Variablen für die Spieler enthalten. Ich nenne es Spieler-Info. Also alle Informationen über diesen Spieler. Jetzt können Sie innerhalb der Struktur beliebig viele Variablen hinzufügen. Zum Beispiel nennen wir es die erste Animation im Leerlauf. Ohne ein Leerzeichen. Eigentlich nenne ich es einfach so. Ich klicke auf eine neue Variable und mache eine für die Run-Animation. Und lasst uns vorerst einfach damit arbeiten. Also hier ist das Recht. Sie können den Animationstyp ändern. Und für die Animationen, denken Sie daran, dass wir mit 2D arbeiten, also sind es Paper Flip Books. Und wenn ich es hier finde, wenn du nur Papier schreibst, dieses eine Papierkippbuch und wähle die Objektreferenz aus. Dasselbe gilt für dieses eine Papier-Flipbook. Wenn Sie nun eine neue Variable erstellen, wird sie automatisch so eingestellt, dass ein Flipbook geebnet wird, da dies das ist, was Sie zuvor ausgewählt haben, die Sprunganimation. Fügen wir auch die Herbst-Animation hinzu. Okay, also haben wir diese Animationen jetzt. Also vorher, anstatt mit der rechten Maustaste zu klicken und alle diese in eine Variable zu befördern. Und du siehst hier unten hatten wir viele Variablen. Sie können sich Speicherplatz sparen, wenn Sie all diese Variablen in eine Struktur einfügen. Jetzt heißt die Struktur, die wir verwenden können, Player-Info. Später können wir es also auch für so etwas wie den Namen des Spielers verwenden . Wenn Sie eine Miniaturansicht für den Player haben, können wir das Bild hier platzieren. Wenn Sie einige springende Soundeffekte haben, können wir auch eine Variable für die Soundeffekte erstellen. Alle Spielerinformationen befinden sich also innerhalb dieser Struktur. Um nun eine Struktur zu verwenden, kannst du zur Spielerbasis zurückkehren. Und drinnen von hier kannst du eine neue Variable erstellen und du kannst sie aufrufen, nennen wir es Player-Info. Jetzt ändern wir diesen Typ in das, was Sie hier nennen, ist die Spielerinformationen. Es sind also keine Spieler-Info und Sie können es hier sehen. Dies ist die Struktur. Wenn Sie kompilieren und speichern, können Sie diese Struktur jetzt hier herausziehen auf Informationen abrufen klicken. Und Sie können aus dieser Struktur ziehen. Und was normalerweise geschieht, ist, auf die Bruchstruktur zu klicken. Indem Sie diese Struktur aufbrechen, können Sie alle Variablen sehen , die Sie der Struktur hinzugefügt haben. Und als eine sehr, sehr coole Sache, jetzt, da Sie diese Struktur hinzugefügt haben, denken Sie daran, wenn Sie Variablen hinzufügen Lassen Sie mich jetzt dieses Flipbook löschen, das Idle Flipbook, das wir zuvor erstellt haben Hier oben lösche ich es. Jetzt haben wir das nur noch. Was Sie jetzt tun können, sehr cooles Zeug ist, dass Sie diese jetzt in den Leerlauf stecken können. Also dieses war das Idol hier, und das ist die Run-Animation. Also werde ich den Lauf hier anschließen, den Lauf hier. Dies ist die Sprunganimation hier. Und die Herbstanimation ist die gleiche wie der Sprung, aber wir können sie einfach hier einstecken. Okay? Jetzt kann ich sehen, dass Sie all diese Variablen in einer Struktur haben und es sieht jetzt viel besser aus. Und genau wie das, was ich Ihnen zuvor gesagt habe, können Sie, wenn Sie der übergeordneten Klasse eine Variable hinzufügen, auch die untergeordnete Klasse erben. Wenn Sie also jetzt zu Serena gehen und auf die Standardwerte der Klassen klicken können, können Sie diese Player-Infrastruktur sehen. Und wenn Sie darauf klicken, können Sie alle diese Variablen sehen und Sie können sie auf das Flipbook einstellen , das Sie hinzufügen möchten. Für Luke können wir das Gleiche auch tun, wenn wir Loops und Animationen hinzufügen , wir können auch hier Lukes Papier-Flip-Bücher hinzufügen . Damit es funktioniert, gehen wir zurück zu Serena und Sie können hier auf Leerlauf klicken, um die Animation im Leerlauf zu erhalten. Für die gesamte Run-Animation können Sie Run, den Sprung auswählen , Sie können Java auswählen. Und für den Herbst ist es genau derselbe wie dieser Sprung wie dieser. Also kompilieren und speichern, alles speichern. Probieren wir es aus. Lasst uns auf Play klicken. Und jetzt, wenn wir herumlaufen, können Sie sehen, dass alle Animationen funktionieren und wir verwenden jetzt diesen Bruch. 31. Fertigstellung der Figurenbewegung: als letztes die Lassen Sie uns als letztes die Bewegung für den Spieler tatsächlich abschließen und weitermachen. Von hier aus gehen wir zurück zum Spieler, der Spielerbasis. Und was ich tun möchte, ist einfach die Charakterbewegung zu bearbeiten. also auf die Charakterbewegungen klicken, stellen wir die Skala Schwerkraftskala auf eins ein. Jetzt, als ich gesprungen bin, denke ich, dass meine Charaktere ein bisschen zu hoch fliegen. Es ist also, als wäre die Schwerkraft nicht hoch genug. Also werde ich die Schwerkraftskala hier in der Bewegungskomponente auf 1,9 erhöhen die Schwerkraftskala . Denken Sie daran, dass im Pleuraraum, wenn Sie ihn ändern, es auch für Serena und Luke gelten wird und Luke weil sie Kinder der Spielerbasis sind. Also hier in der Graustufe 1.9 und S für die Bewegungsgeschwindigkeit für Maple Story habe ich es getestet. Ich habe das Spiel gespielt und denke irgendwo etwa 155 in der Gehgeschwindigkeit. Und du siehst, ob ich auf Play klicke, jetzt arbeiten wir viel langsamer. Und es ist eher wie Maple Story. Dies ist die Geschwindigkeit, mit der Sie damit laufen werden. Wenn ich es also größer mache, kannst du es hier sehen. Das ist also eher wie Maple Story, der Sprung, aber ich denke, wir sollten ein bisschen höher springen. Also gehe ich zurück zu den Bewegungen der Spieler-Basischaraktere . Und hier unten im Sprung Z Velocity werde ich es senden und stattdessen auf 500 setzen. Okay, also kompilieren und speichern wir. Und ich denke, das ist es für die Bewegung. Wenn ich also auf Play klicke und sehe, dass dies die Bewegung ist und es kann springen. Im Moment werden wir auch von dem Charakter geblockt . Wir müssen das entfernen, damit Sie sehen können , dass es unseren Charakter ausbricht, gedrängt, unseren Charakter Bec. Aber lasst uns tatsächlich zur Spielerbasis zurückkehren und auf die Kapselkomponenten klicken. Das macht also die Kollision. Und lasst uns nach unten scrollen und Sie können sehen, wie diese Kollision genannt wird. Klicken wir auf diese Kollisionsvoreinstellung , um zu sehen, was los ist, und das ist die ganze Kollision. Also jetzt klicken wir hier und klicken auf Kostüm, weil wir das bearbeiten möchten. Jetzt können wir die Pons sehen. Das ist was es ist. Das ist ein Bauer. Die Teiche blockieren sich gegenseitig. Und das wollen wir nicht. Wir wollen, dass sich die Punkte vorerst gegenseitig ignorieren, ignorieren wir uns einfach gegenseitig. Lass uns kompilieren und mal sehen, ob der Job ist. Also klicke auf Play und renne herum. Ich sehe, dass ich mich jetzt nicht blockieren kann. Also wenn ich diesen Kunden nehme, ist das jetzt behoben, okay? Die Teiche können sich also nicht mehr gegenseitig blockieren. Das wollen wir also. Und du kannst sehen, dass alles gut funktioniert. Der Sprung, ich glaube, ich springe hoch genug. Aber auch hier ist das dein Spiel. Wenn du schneller laufen willst, wenn du willst, ist die Kamera näher. Denken Sie daran, dass Sie die Kamera bearbeiten könnten wenn Sie zu Tsarina gehen und wir sie tatsächlich falsch hinzugefügt haben. Ich kann sehen, dass ich die Kamera in Tsarina hinzugefügt habe, aber wir müssen die Spielerbasis hinzufügen , da Luke auch die Kamera braucht. Das ist also eine schnelle Lösung. Lassen Sie mich diesen Federarm löschen. Lösche die Kamera. Lass mich stattdessen zur Spielerbasis gehen. Klicken Sie auf die Kapsel und fügen Sie den Federarm hinzu. Sie in der Kamera einfach nach der Kamera. Jetzt haben wir den Federarm und wir haben die Kamera. Und klicken Sie erneut auf die Kamera, gehen Sie hier hoch und ändern Sie sie in die orthogonale Ansicht. Und denken Sie daran, Sie können ändern, wie nah und weit die Kamera entfernt ist, indem Sie diesen Wert ändern. Und genau so war es auf 130. Jetzt haben sowohl Luke als auch Tsarina diese Kamera. Bevor wir das beenden, gehen wir den Code einfach schnell durch weil ich die Dinge aufräumen möchte , damit es kein echtes Durcheinander ist. Also schaue einfach hier nach, so sieht es aus. Und um den Code zu bereinigen, können Sie auch auf diese Pins doppelklicken. Durch Doppelklick erstellen Sie diesen Umleitungsknoten, den Pin umleiten. Und Sie können hier doppelklicken und es etwas sauberer aussehen lassen. Und ich denke, das sieht gut aus und schaue hier, vielleicht einfach, wenn du es einfach hier aufstellst, so. Ein weiterer Trick ist, dass Sie hier auswählen können , was Sie wollen, und klicken Sie auf Warteschlange. Dadurch werden alle diese Notizen, die Sie ausgewählt haben, begradigen . Wenn Sie sie auswählen, klicken Sie auf Q, werden sie begradigt. Also haben wir den Sprung und wir haben den Fall hier nebeneinander. Und lassen Sie uns das ein bisschen weiter wegbewegen. Und wir haben auch die Walk-Animation. Ich denke das ist, das ist gut. Was wir jetzt tun können, kann ich das nach unten bewegen, und ich kann das auch nach unten bewegen. Auch hier können Sie all diese auswählen und auf Cue klicken, um sie so zu begradigen. Und Sie können es möglicherweise auch damit machen. Oder ich denke vielleicht so und wir können das weiter nach unten bringen. So sieht das wahrscheinlich viel besser aus. Und wir können das weiter wegbewegen, damit sie nicht so übereinander gruppiert sind. Und vielleicht kannst du das auch hier oben verschieben. So können Sie auch Umleitungsschneit für Ausführungspins erstellen , wenn Sie möchten. Aber ich glaube, ich lasse es tatsächlich so sein. Ich bringe es näher. Ich denke, das sieht ein bisschen komisch aus wie hier. Okay, jetzt haben wir das korrigiert. Und eine andere Sache ist, dass Sie alle diese Knoten mit der Maus bewegen können. Sie können auf sehen klicken , um einen Kommentar zu erstellen. Also klicke auf „sehen“. Du kannst diese eine Spielerbewegung nennen. Sie kann auch genauer sein, was Sie meinen. Also Claire Bewegung, ich nenne es nur etwas Kurzes für den Kurs damit die Videos nicht zu lang werden. Langsame Bewegung WAR eigentlich, es ist kein 3D-Spiel, also rechts und links zum Beispiel so etwas. Und dafür sind dies auch die Bewegungsphase, daher können wir sie in den Kommentar aufnehmen. Ich klicke und ziehe den Kommentar so nach unten. Und jetzt haben wir hier unten den Sprung. Ich klicke auf „Sieh“ und sage „Sprung“. Und leg es hier runter. Okay, also ist es jetzt etwas organisierter. Und Sie können auch zur Unwrap Funktion gehen. Vergessen Sie nicht, dass Sie auch zu den Funktionen gehen und diese Funktionen organisieren können. Dieser sieht wegen dieser Zeilen ein bisschen chaotisch aus, aber wir müssen wirklich viel dagegen unternehmen. So können wir also nicht wirklich Strukturen wie diese erstellen. Also denke ich, das sieht gut aus, aber man kann immer versuchen, sie ein bisschen weiter voneinander zu trennen . Versuche sie so untereinander zu stellen. Okay, ich denke, das sieht vorerst gut aus. Sie können jederzeit, wenn Sie es versuchen möchten, Umleitungsnotizen erstellen. Wenn du willst. Hören Sie für einen Doppelklick, versucht es, ich kann sogar Notizen umleiten, wenn Sie versuchen möchten , es so weit wie möglich zu reinigen. Aber ich denke, ich lasse es vorerst hier sein , wir wissen, was es gerade macht. Sie können auch einen Kommentar abgeben, wenn Sie möchten. Und lasst uns kompilieren und speichern. Und jetzt funktioniert alles. Und klicke auf Play hier. Und es wird dunkel und ich weiß warum ich vergessen habe, die Kamera zu drehen. Wenn ich also zuerst im Frühjahr wieder zur Spielerbasis gehe, werde ich wieder entfernt. Sie führen Kollisionstests durch. Und klicken wir in den Ansichtsfenstern auf den Federarm. Klicken wir auf E, um uns zu drehen. Und lass uns diese 90 minus 90 Grad drehen, also ist es davor, damit wir den Charakter sehen können. Und jetzt klicken wir auf Play. Und jetzt funktioniert alles richtig. Wir können springen, die Bewegung funktioniert. Und wieder müssen Sie es auch beim Kunden überprüfen. Wenn ich das also kleiner mache, musst du es beim Kunden überprüfen. Und der Kunde kann auch springen und rennen , damit du jetzt zusammen spielen kannst. Und jetzt funktioniert alles und lass uns zur nächsten Lektion übergehen. 32. Erstellen der zweiten Figur: Wir sind jetzt bereit, Luke als Charakter zu erschaffen. Jetzt habe ich das Wichtigste für dich in deinen Kursmaterialien. Wenn du wieder zu deinen Kursmaterialien, Charakteren Luke und in Luke gehst, möchte ich, dass du diese hier importierst. Gehen wir also zu den Asset-Charakteren hier. Lass uns einen neuen Ordner erstellen und ihn Luke nennen. Jetzt importieren wir alles, was sich in diesem Ordner befindet. Und du wirst wahrscheinlich mehr Animationen hier haben. Ich füge Animationen hinzu , während ich mit diesem Kurs fortfahre. Ziehen Sie sie also in Ihren Inhaltsbrowser und Sie haben sie importiert. als Übung, was ich von Ihnen tun soll, Versuchen Sie als Übung, was ich von Ihnen tun soll, diesen ganzen Prozess selbst durchzuführen , da dieser Prozess entspricht, was wir zuvor in den vorherigen Lektionen gemacht haben . Versuchen Sie also, Papier-2D-Einstellungen anzuwenden, versuchen Sie, die Sprites zu extrahieren, versuchen Sie, selbst Flip-Bücher zu erstellen. Versuchen Sie, sie in den von uns erstellten Papiercharakter von Luke Blueprint zu importieren . Und versuche das alles selbst zu machen und schau, ob es dir gelingt. Und wenn es dir immer noch schwer fällt, lass uns hier zusammen gehen und weitermachen, aber versuche es selbst zu machen. Es ist sehr gut , das auszuprobieren. Es tut niemandem weh. Du kannst einfach wieder hierher kommen und wir machen es zusammen. Wenn Sie sich also nicht sicher sind, wie es geht, ist es immer noch, wir können versuchen, es gemeinsam zu tun. Also klicke ich noch einmal auf alle von ihnen. rechten Maustaste auf Produktion, wenden Sie Papier auf die Einstellungen und gehen Sie dann jedes einzelne durch. Also im Leerlauf werde ich die Sprites extrahieren. Ich werde ein bisschen schneller gehen, weil wir das vorher gemacht haben, jetzt werden wir Tsarina. So steigt Raster die 180 um 180 um 180, um die Sprites so zu extrahieren. Und wieder benenne ich sie um. Okay, also habe ich sie alle in Sprites extrahiert . Und ich habe auch Flip Books erstellt. Denken Sie also daran, dass Sie zum Beispiel auswählen, ausführen und mit der rechten Maustaste klicken und ein Flipbook erstellen können. Also habe ich diese drei Flip Books erstellt und muss jetzt die Frames pro Sekunde ändern. Und für den Lauf oder eher für den Sprung machen wir einfach einen Frame pro Sekunde. Und für den Leerlauf waren es zwei Frames pro Sekunde. Und für den Lauf glaube ich, dass es sechs sind. Ich erkundige mich nur bei Tsarina hier. Ja, sechs Frames pro Sekunde. Also machen wir das Gleiche. Sechs Frames pro Sekunde wie diese. Jetzt erstellen wir hier einen neuen Ordner. Klicken Sie also mit der rechten Maustaste, erstellen Sie einen neuen Ordner namens Textures. Und ich nehme all das hier, sowohl diese Brights als auch die Texturen hier drin, wir haben nur die Flip Books. Als Nächstes können wir zum Blueprints Player gehen , Luke. Jetzt fügen wir das Flipbook hinzu. Öffnen Sie also den vollständigen Blueprint-Editor. Und lasst uns zu den Ansichtsfenstern gehen. Und drinnen hier klicken Sie auf die Sprites und fügen Sie dann schauen Sie hier hinzu. Also die ungenutzte Animation hier drüben. Wir müssen diese Kapsel wieder anpassen , damit sie nicht mit unseren, all unseren Kacheln kollidiert . Ich werde mich einfach auf Serena beziehen, um zu sehen, was ihre war. Oder vielleicht ist es besser, dass wir es in der Spielerbasis tun können . Es gilt also für alle Spieler Wenn du mehr Spieler hast. Also 33 von 16 gehe ich zurück zur Standardeinstellung und erinnere mich nur an die Zahlen 3316. Also mache ich das innerhalb der Spielerbasis, also müssen wir das nicht ständig machen. Vielleicht fügen wir später noch viel mehr Charaktere hinzu. Also klicke auf die Kapsel und schreibe 33. Und wir müssen diese Nummer hier unten tatsächlich zuerst ändern , sonst wird es Ihnen erlauben. Also 16 von 33. Und wenn wir diese untergeordneten Blueprints kompilieren , werden alle diese Größe haben. Okay, also sollte das getan werden. Und denken Sie daran, dass wir in der Spielerbasis innerhalb unserer Unwrap Funktion diese Struktur hinzugefügt haben. Denken Sie also daran , dass Sie einen Blick darauf werfen müssen , welche Animationen der Charakter hat. Und denken Sie daran, wenn Sie Variablen innerhalb einer übergeordneten Blueprint-Klassen erstellen , werden diese hier in Klassenvorgaben im untergeordneten Standard angezeigt . Also hier musst du genau wie Serena auswählen , wo wir diese Animationen ausgewählt haben. musst du auch machen, oder Luke. Jetzt kannst du sehen, wie cool das ist. Jeder Charakter, den wir haben können, unser Idol, unseren Custom Run, unseren benutzerdefinierten Sprung und unseren benutzerdefinierten Fall. Weiter weiter. Lass uns das machen. Und für den Sprung haben wir einen Sprung und für den Herbst benutzen wir auch das Gleiche hier. Okay. Also glaube ich nicht, dass wir irgendetwas verpassen. Versuchen wir zu spielen und zu sehen, was passiert. Und lasst uns zuerst zu den World-Einstellungen gehen. Denken Sie daran, dass wir Serena gerade als Standardklasse ausgewählt haben Serena gerade als Standardklasse , da wir noch keinen Zeichenauswahlbildschirm haben. Also lasst uns hier klicken und es so ändern , dass es stattdessen aussieht, damit du ihn testen kannst. Und klicken wir auf Play. Jetzt schauen die Befragten nach und Sie können sehen, dass Luke auch arbeitet. Alles funktioniert gut. Also schauen wir beide jetzt an und wir haben Tsarina im Spiel. 33. Hinzufügen von Jump: Okay, also für den Sprungeffekt habe ich wieder in den Kursmaterialien innerhalb von Audio importiert. Ich habe diesen namens SF6-Sprünge importiert. Also haben wir den Sprungeffekt und lassen uns einen neuen Ordner erstellen. Ich klicke auf diesen Inhaltsordner. Und hier draußen, machen wir einen neuen namens Audio. Und drinnen gehen wir zurück zum Audio und ziehen es uns in diesen Ordner. Und wir können es spielen und sehen, ob es zu laut ist. Ich denke, die Lautstärke ist nett. Wenn du also einen Sound importierst, lass uns versuchen, dieses Ding zu codieren , und ich zeige dir, wie das im Multiplayer geht. Also letztendlich, was Sie hier in der Blaupause machen möchten , Gehen wir zurück zum Spieler, der Spielerbasis. Wenn wir nun zum Event Graph zurückkehren, sind Sie vielleicht versucht, dies zu tun. Also hier für den Sprung. Jetzt mache ich es falsch damit du daraus lernen kannst. Hier im Sprung vergleiche ich im Einzelspieler Single Player und Multiplayer, vergleiche ich im Einzelspieler Single Player und Multiplayer damit Sie die guten Praktiken sehen können. Im Einzelspieler soll es also wie hier im Sprung sein. Wenn ich Jump präsentiere, werden wir diesen Soundeffekt hier natürlich machen, aber das ist im Multiplayer falsch. Und ich zeige dir warum hier. Um ein Geräusch zu machen, können wir sagen „Spielton“. Und Sie können entweder Ton an einem Ort abspielen oder Ton an d abspielen. Wenn Sie also möchten, dass die Leute den Ton hören, was der Unterschied ist, wenn Sie einen Ton an einem Ort abspielen. Wenn Sie also ein Spieler sind, hier auf diese Seite stehen und springt, wird der Ton von dieser Seite hier zu hören sein. Wenn also ein Spieler hier steht und hier dein Sprung hier ist , wird er hier das Geräusch aus diesem Bereich hören. Wenn Sie jedoch Sound 2D abspielen, wenn Sie also Delay Sound 2D wählen, wird er nicht an einem bestimmten Ort liegen, aber es wird wie ein 2D-Effekt abgespielt. Normalerweise verwenden wir dies als UI-Elemente. Und wenn Sie möchten, dass ein Ton an einem bestimmten Ort gehört wird, verwenden wir den Play-Sound vor Ort. Es hängt alles davon ab, ob du willst, dass die Leute dich springen hören. Und sagen wir, wir wollen das machen. Letztendlich möchten Sie also, dass es Sound an einem Ort abspielt. Sie möchten den Ton auswählen. Und anstatt die Schallwelle auszuwählen, gehen wir tatsächlich zurück zum Audio. wir mit der rechten Maustaste darauf. Und lasst uns eine Warteschlange erstellen. Und nennen wir es als C für Sound Cue und Jump. Sie können jetzt darauf doppelklicken, um es zu öffnen. Und das ist ein Sound-Cue, also kannst du hier oben auf Play klicken. Und es kann das Geräusch hören. Eine sehr coole Sache ist, wenn du hier Variation willst, kannst du davon ziehen. Sie können sehen, dass dies die Tonnoten sind, die Sie verwenden können. Sie können hierher ziehen und Modulator sagen. Sie können den Modulator auch hier sehen. Wenn Sie also auf den Modulator klicken und was das tut, ist, dass er hier jedes Mal klingt, wenn er gespielt wird. Also wählen wir hier die Tonhöhe, Minimum und Maximum. So zum Beispiel 0,9 bis 1.1. Und jedes Mal, wenn Sie auf Jetzt abspielen klicken, wird die Tonhöhe des Sounds geändert sodass es jedes Mal so klingt, als wäre es ein anderer Sound. Sie können also sehen, dass es eine kleine Variation ist, die Sie manchmal machen können. Aber ich möchte, dass der Sound derselbe ist, also lösche ich ihn einfach und mache das. Also denke ich, dass das vorerst in Ordnung ist. Und schließen wir diesen Sound Cue nach unten. Hier spielt sich also vor Ort ab. Wählen wir unseren Sound-Cue aus. Und wie ist der Standort? Und genau dort ist der Charakter. Also lassen Sie uns mit der rechten Maustaste klicken und sagen, wie folgt den Schauspieler-Standort abrufen und hier verbinden. Also bekommen wir diesen Schausteller-Standort wo immer du bist und du spielst dort den Sound. Okay, also versuchst du das zu tun, und dann klickst du auf Play und springst hierher. Es funktioniert. Und das ist der falsche Weg, dies zu tun. Weil denken Sie daran, dass Sie gerade im Mehrspielermodus sind. Wann immer du das tust, werden die anderen es nicht hören. Denken Sie also daran, dass wir diese Server - und Clientbeziehungen haben. Sie haben das also als Server und Sie haben dies als Client. Und Sie möchten den Sound abspielen und ihn dann an alle Kunden weiterleiten. Also platziert der Server den Sound und wirft ihn an den Client. Gehen wir also hin und wieder zurück, genau wie das, was ich dir zuvor gesagt habe, müssen wir alles mit dem Server überprüfen , damit die Clients nicht betrügen. Der Server ist das wahre Spiel. Der Server hat die Berechtigung , alles in diesem Spiel zu tun. Jeder Code, den Sie benötigen, muss also vom Server überprüft und dann auf die Clients repliziert werden. Sehen wir uns also ein Beispiel dafür an. Gehen wir zurück zum Spieler. Lassen Sie uns dieses einfach löschen. Vielleicht bist du also auch versucht zu sagen, okay, also bevor wir diese Bewegung hier gemacht haben und die Bewegungszustände durchlaufen haben, dann ging dieser Bewegungszustand durch den Server. Und der Server hat diese Variable festgelegt. Und es wird eine On-Ramp-Funktion ausführen, weil Sie daran denken, dass diese Variable als Wiederholungsbenachrichtigung repliziert wurde. Also wird der Server alle Clients über die Änderung dieser Variablen informieren . Innerhalb dieser Unwrap Funktion. All dies wird an alle Kunden repliziert. Vielleicht versuchen Sie also zu sagen, okay, all dies wird auf die Clients repliziert. Also kann ich hier meinen Place Sound hinzufügen und er wird an alle Kunden repliziert. Also haben wir einen Sprung hier. Wir haben das Jump Flip Book. Und vielleicht werden Sie stattdessen versucht, den Play-Sound hier drüben hinzuzufügen . Das kannst du machen und es wird funktionieren. Alle Kunden werden dich springen hören. Wenn Sie also der Server sind, wenn Sie der Client sind, ist das okay. Sie werden alle hören, wie du reinspringst. Dies funktioniert auch richtig. Aber es gibt einen kleinen Fehler und ich werde dir beibringen, dass dies das Letzte im Multiplayer ist, und wir haben etwas, das man Multicast nennt. Wenn ich also zum Event gehe und ich Ihnen den Unterschied zwischen einer On-Ramp-Funktion und einem Multicast mitteilen werde den Unterschied zwischen . Wir wissen also, dass wir etwas haben, das als Multicast bezeichnet wird. Wenn Sie also auf das Serverereignis klicken, legen wir fest, dass es auf dem Server ausgeführt wird. Aber du hast auch etwas, das man Multicast nennt. Versuchen wir also zuerst, den Code zu erstellen, und ich kann ihn Ihnen danach einfacher erklären. Lassen Sie uns diese Sprunglogik also hierher verschieben. Und hier werde ich ein neues individuelles Ereignis erstellen. Fügen wir dieses benutzerdefinierte Ereignis hinzu und nennen wir es MC für Multicast. Und ich nenne es einfach Jump weil wir den Sprung-Sound-Effekt erzeugen wollen. Okay? Jetzt können Sie auf diese Replikation klicken und Multicast auswählen und dann zuverlässig auswählen. Und hier, fügen wir diesen hinzu namens Play a sound an Ort. Lassen Sie uns jetzt für diesen Sound statt ihn so fest zu codieren. Denken Sie daran, wir haben eine Struktur hinzugefügt. Im Grunde genommen enthält die Struktur alle Spielerinformationen, sodass wir hier sogar Sounds hinzufügen können. Also kann ich in dieser Variable hier auf Add Variable klicken und es einen Sprung-As-Effekt für den Sprung-Soundeffekt nennen. Und lasst uns einen Sound-Cue hinzufügen, denn letztendlich war dies ein Sound-Cue, den wir erstellt haben. Es ist also ein Sound-Cue. Lass uns nach Sound Cue suchen. Und es ist hier, Objektreferenz. Okay, jetzt haben wir einen Sprung-Sound-Effekt und das können wir aus unserer Struktur verwenden. Also kannst du wieder zu gehen, lass uns zurück zum Spieler gehen. Für Luke. Seit wir dies hinzugefügt haben, kann jeder einzelne Charakter seinen eigenen Soundeffekt haben, aber das haben wir in Maple Story nicht wirklich. Fügen wir also diesen Sprungeffekt hinzu, oder Luke. Für Serena füge ich hier denselben Sprungeffekt oder Soundeffekt hinzu. Okay, also haben wir diese jetzt in der Struktur hinzugefügt. Und gehen wir zurück zur Spielerbasis. Und jetzt möchte ich Ihnen erklären, was ein Multicast ist, bevor wir fortfahren. Es war also nicht falsch , das hier zu tun. Also setzt der Server diese Variable hier und du gehst zurück zur Unwrap Funktion und fügst dann den Soundeffekt hier hinzu. Dies funktioniert so, als würden die älteren Kunden Sie springen hören. Der Server wird dich springen hören. Das wird also klappen. Der Unterschied besteht jedoch zwischen einer ungepackten Funktion hier und dem Multicast. Der Multicast hier macht das Gleiche. Also der Multicast, man kann sich vorstellen dass es alle Informationen an den Kunden zurückkostet. Die Informationen gehen also an den Server und der Server legt eine Variable fest. Und dann können Sie einen Multicast ausführen, um diese Informationen an alle Kunden zurückzukosten diese Informationen an alle Kunden zurückzukosten damit die Kunden wissen, was passiert. Hier kannst du also den Multicast ausführen. Also klicken wir hier und fügen hier einen DMC-Sprung hinzu. Und das Wichtigste, was Sie hier wissen sollten, ist Multicast-Ereignisse nur über den Server ausgeführt werden können. Sie können das hier nicht ausführen, zum Beispiel wird das nicht funktionieren. Denken Sie daran, dass wir es immer noch nicht wissen. Wenn Sie auch wissen möchten, ob Sie sich gerade auf dem Client oder auf dem Server befinden , können Sie einfach eine Zeichenfolge drucken. Das ist also sehr einfach, eine Zeichenfolge zu drucken. Und Whoops, ich ziehe das versehentlich. Und hier, klicken wir auf Play. Jetzt können Sie sehen, dass sowohl der Server als auch der Client niedrig sagen. Ich weiß also, dass ich nicht nur auf dem Server bin, sondern auch auf dem Client bin, also bin ich sowohl auf dem Server als auch auf dem Client bei diesem Ereignis. Aber wenn ich die Zeichenfolge hier unten drucke und da wir dieses Ereignis auf dem Server ausführen, wird nur der Server Hallo sagen. Also drucke ich String ist sehr nützlich , um zu wissen, wo du gerade bist. Und ein Multicast kann nur durch den Server ausgeführt werden. Sie können keinen Multicast auf dem Client ausführen. Das wird nicht funktionieren. Und das sagt dir auch hier oben. Server. Das wird also nur funktionieren, wenn es der Server ist, von dem Sie es ausführen. Jetzt können wir den Sprung-Soundeffekt an alle Kunden weitergeben, damit sie hören können, dass ich springe. Was ist der Unterschied zwischen dieser und der Unwrap Funktion? Weil sie beide dasselbe tun. Dieser funktioniert auch so, als würde es auch funktionieren, wenn Sie den Sprung-Soundeffekt hinzufügen. Was ist letztendlich der Unterschied zwischen diesem und diesem? Der Unterschied besteht darin, dass Sie, wenn Sie weit weg stehen eine große offene Weltkarte haben. Wenn Sie weit weg stehen und einen Multicast spielen, ist dies der richtige Weg, dies hier für den Sound zu tun. Denn wenn der Spieler, der weit weg steht , dir nahe kommt, wird er den Ton nicht mehr hören weil du vielleicht vor zehn Minuten gesprungen bist. Also, aber wenn du es hier in der Unwrap Funktion und der Spieler beim Springen weit weg steht machst und der Spieler beim Springen weit weg steht, ist das okay. Der Spieler kann es nicht hören. Wenn der Spieler jedoch zehn Minuten später in Ihre Nähe kommt, wird der Spieler den Soundeffekt hören, wird der Spieler den Soundeffekt hören obwohl Sie vor zehn Minuten gesprungen sind. Funktion „Entpacken “ aktualisiert den Player. Obwohl du das Ding vor einer Stunde oder vor zwei Stunden gemacht hast oder wie lange es her ist. Angenommen, ein Spieler hat sich noch nicht mit deinem Server verbunden und du springst, der Spieler verbindet sich zehn Minuten später. Dann kann der Spieler, der sich verbindet, dich springen hören. Obwohl du nicht springst, als ob du still stehst, aber vor zehn Minuten aufgesprungen bist , wird dieser Sprung-Soundeffekt vom verbindenden Player gehört. Und das ist nicht richtig , weil du vor zehn Minuten aufgesprungen bist. Du bist gerade nicht gesprungen. Dies passiert, wenn Sie es dem ausgepackten hinzufügen. Was ich möchte, dass Sie daraus ziehen, ist die Unwrap Funktion für visuelle Änderungen verwendet wird. So können Sie hier das Flipbook sehen, in dem ich bin, zum Beispiel wenn ich renne oder IM bin, sagen wir tanzen, springen, was auch immer. Alle visuellen Effekte werden im Unwrap ausgeführt. Nehmen wir an, ich habe eine Ampel und sie wechselt von rot zu grün oder rot zu gelb zu grün, diese Ampel. Du willst hinzufügen. Der visuelle Effekt ändert sich innerhalb des ausgepackten. Denn wenn ein Spieler fünf Minuten später eine Verbindung herstellt und sagen wir, Sie sind ein Licht, dauert es fünf Minuten, um die Farbe zu ändern. Sagen wir, es geht von rot nach gelb. Spieler, der sich mit dem Server verbindet kann sehen, dass dein Licht jetzt gelb ist. Aber wenn Sie hier visuelle Änderungen hinzufügen, wird der Multicast, diese gelbe Farbe für den verbindenden Player immer noch wie rot aussehen . Weil der Multicast nur für verbundene Spieler aktualisiert wird. Es wird nur für Spieler aktualisiert , die dir nahe stehen. Wenn also ein Spieler weit weg steht und das Licht von Rot zu Gelb wechselt, und dieser Spieler wird immer noch sehen, dass das Licht ist kommt der Spieler , der weit weg steht, dir jetzt nahe, und dieser Spieler wird immer noch sehen, dass das Licht lese, weil du das durch einen Multicast führst. Dies wird nur für Spieler in deiner Nähe und für Spieler aktualisiert , die mit dem Server verbunden sind. Was wir also normalerweise unreife Funktionen für unsere visuellen Änderungen verwenden , da dies für Spieler, die sich verbinden, visuell aktualisiert werden sollte. Nehmen wir an, ich verbinde mich zehn Minuten später und zehn Monate später, ich kann sehen, dass Sie sich hier im Laufzustand befinden , oder vielleicht halten Sie eine andere Waffe in der Hand. Wenn wir also mehr Flip Books hier haben, aber ich dich nicht hören will oder ich den Sprungeffekt , den du vor zehn Minuten gemacht hast, nicht hören möchte du vor zehn Minuten gemacht hast, , ergibt das keinen Sinn. Also jeder Soundeffekt, alle visuellen Effekte. So zum Beispiel ein Partikeleffekt, ein Feuereffekt und so weiter. Ich möchte, dass all diese im Multicast sind. Dies ist der richtige Weg, dies zu tun. Alle visuellen Änderungen werden im Unwrap vorgenommen. Also hier sind wir durch den Server, wir betreiben den Multicast. Und wieder kann der Multicast nur durch den Server laufen. Und anstatt den Sprung hier rüber zu setzen, verbinde ich ihn einfach hier. Eine sehr gute Vorgehensweise im Multiplayer ist es, diese Variablen bis zu den ersten Ereignissen auszuführen bis zu , damit sie korrekt funktionieren. Ziehen Sie diesen Ton also und fügen Sie ihn hierher hinzu, untermauern Sie ihn hier, damit es automatisch eine Variable für mich erstellt . Wenn ich also auf diesen Multicast klicke, kannst du sehen, dass er diese Variable erstellt. Und ich nenne es einfach hier statt Sound-Sprung-S-Effekten. Und ich ziehe diesen Ort auch, lege ihn hierher und nenne es vielleicht Spielerstandort. Jetzt kann ich den Soundeffekt hier machen. Und denken Sie daran, dass wir für den Soundeffekt unsere Spielerinformationen hatten. Ziehen wir also unsere Struktur. Und von hier aus brechen wir den Strukturstift auf, damit wir die Variablen sehen können. Ich werde das ein bisschen verschieben damit wir mehr Platz haben. Okay? Also hier klicke ich auf diesen Pfeil, um meine Variablen zu sehen. Sie können von diesem Sprung-Soundeffekt ziehen und er wird automatisch alles abspielen, was Sie haben. Fügen Sie hier in den Sprung als Effekte für Serena und vier Look ein. Denken Sie also daran, diese zu tun. Und ich gehe zurück. Für diejenigen, die Sie nicht verwenden, können Sie hier auf Nicht verbundene Pins ausblenden klicken und sie für Sie ausblenden. Das ist ein bisschen sauberer, damit zu arbeiten. Und wie ist der Standort? Wieder, bekommt Spieler oder nicht Spieler bekommen, Schauspielerstandort abrufen. Und so. Jetzt wird es also richtig funktionieren. Jetzt, da wir das getan haben, versuchen wir alles zu kompilieren und zu speichern. Und lasst uns auf Play klicken und sehen, ob es funktioniert. Okay, um dies zu vervollständigen, jetzt, anstatt es hier oben zu tun, dies jetzt, anstatt es hier oben zu tun, ständig spielen, denn im Moment wird ständig spielen, denn im Moment dies durch den Bewegungszustand gesetzt, die ganze Zeit hier platziert ist. Anstatt das zu tun, wird das deine Ohren verletzen. Nehmen wir das also und machen wir einen neuen namens Server. So springen benutzerdefinierte Palettenserver. Und das wird so durch den Server laufen. Und lasst uns miteinander verbunden sein. Der Server wird diese Multicast-Ereignisse ausführen. Und denken Sie daran, dass wir diese Struktur hatten. Lassen Sie uns es herausnehmen und daraus ziehen und sagen Bruchstruktur. Also können wir die Pins sehen. Hier. Sie können auf diesen kleinen Pfeil klicken. Ich werde das ein bisschen in die andere Richtung bewegen , damit wir sehen können, was los ist. Und jetzt kann ich diesen Sprung als Effekte in diese Variable ziehen . Und denken Sie daran, dass in Tsarina in den Klassenvorgaben Sie in Tsarina in den Klassenvorgaben den Soundeffekt hier hinzufügen müssen, damit er funktioniert. Wie auch für Luke die Klasse hier den Soundeffekt standardmäßig an. Stellen Sie einfach sicher, dass sie hinzugefügt werden. Das funktioniert also auch. Für die Pins, die Sie nicht mehr verwenden, können Sie auf diese klicken und auf Nicht verbundene Pins ausblenden klicken. Das wird viel sauberer sein. Und der Spielerstandort klickt und zieht wieder hierher und sagt, erhält den Standort des Schauspielers. So wie das. Jetzt hast du dieses Jump, Jump Event hier. Jetzt führen Sie dieses Event nirgendwo durch. Denken Sie also daran, dass Sie es nicht tun, Sie haben dieses Ereignis nicht wirklich kalt. Also phi und bevor wir fortfahren, klicken wir darauf. Repliziert zuverlässig, bevor ich es hier vergesse, und nur um sicherzustellen, dass die anderen riskieren. Wenn ich also auf Jetzt spielen klicke, siehst du, dass es nicht wirklich ein Geräusch macht. Und das liegt daran, dass wir das nie definiert haben. Wir haben diese Funktion oder dieses Ereignis nie hier aufgerufen. Um dieses Ereignis aufzurufen, rufen wir es im Sprung hier unten auf. Jetzt können wir das machen. Also Serversprung. Was sind wir jetzt gesprungen? Es wird durch den Server gehen und wir können das hier runter bringen , nur damit es besser organisiert ist. Gruppen. Ich ziehe das so nach unten. Okay, was jetzt passieren wird, ist, dass ich auf Sprung klicke. Der Sprung-Sound-Effekt wird durch den Server gehen. Und dann wird das durchgehen. Und eigentlich möchte ich meine Variablen hier durchziehen. Also klicke ich auf Control X, um sie auszuschneiden und hier einzufügen. Und lass mich das auch so durchmachen. Ich führe sie gerne bis zum Quell-Event hier aus. Jetzt können wir hier unsere Aktionen auswählen. Also lasst uns das hier drin verbinden, so. Also jetzt wird das durch den Server gehen. Der Server wird prüfen, darfst du das tun? Und wenn das stimmt, wird es durch den Multicast laufen , wo es die Informationen kostet, den Soundeffekt für alle Kunden. Und dann denken Sie daran, dass der Multicast für alle Clients gedacht ist, die in Ihrer Nähe sind , bereits mit dem Server verbunden sind. Für die Spieler, die dir nicht nahe stehen, werden sie dies später nicht spielen lassen , wenn sie dir nahe kommen. Und für die nicht verbundenen Spieler, wenn sie sich mit dem Server verbinden, werden sie dies nicht hören, wenn Sie dies vor fünf Minuten getan haben. Das ergibt also Sinn. Und letztendlich die Spieler , die dir nahe kommen, oder die Spieler, die sich zehn Minuten später verbinden. Sie werden die Änderungen nur hier sehen. Und wir wollen, dass sie das sehen. Wir möchten, dass sie unser aktualisiertes Buch sehen. Das ist in Ordnung. Aber wir wollen nicht, dass sie ein Geräusch hören , das vor zehn Minuten gespielt wurde. Das ist also etwas, das wir stattdessen durch einen Multicast laufen . Klicken wir also auf kompilieren und stellen Sie sicher, dass alles in Ordnung ist. Versuchen wir auf Play zu klicken und zu sehen, was passiert. Und du kannst sehen, dass der Sound gut abläuft. Okay, lass uns das Spiel hier verlassen . Machen wir es ein bisschen organisierter. Für diesen Sprung werde ich alle diese Knoten hier zusammen aufnehmen. Denn jetzt springt das alles. Und dafür hier, machen wir das so kleiner. Lassen Sie uns kompilieren und speichern alles und lassen Sie uns mit dem Kurs fortfahren. 34. Blueprint: Bevor wir also zum nächsten Abschnitt übergehen, möchte ich über Blueprint-Interfaces sprechen. Blueprint-Interfaces werden verwendet , um Ihr Projekt zu organisieren. Und es ist auch einfacher zu arbeiten, wenn Sie über Blueprint-Kommunikation sprechen. Und was meine ich mit Blueprint-Kommunikation? Was ich meine ist manchmal hier in der Spielerbasis, zum Beispiel, wenn wir hierher zurückkehren, manchmal innerhalb der Spielerbasis, müssen Sie etwas aus den Spielmodi verwenden. Im Moment haben wir hier nicht wirklich etwas getan. Und wenn ich in den Spielmodus gehe und ihn geöffnet habe, programmieren wir irgendwann etwas drin. Irgendwann in der Spielerbasis benötigen wir also einige Informationen, die in unserem Spielmodus gespeichert sind. Diese Informationen, auf die wir durch etwas namens Blueprint-Kommunikation zugreifen können . Dieser Blueprint-Schauspieler kommuniziert also mit diesem Blueprint-Schauspieler. Diese beiden Blueprints werden also gemeinsam kommunizieren. Und hier kommen Blueprint Interfaces ins Spiel. Aber im Moment möchte ich nicht zu viel über Blueprint-Kommunikation sprechen , weil wir sie noch nicht benutzt haben. Aber wir werden unsere Ereignisse aussortieren. Also hier in der Spielerbasis, was wir früher gemacht haben, ist dieser eine gesetzte Bewegungsstatus. Anstatt benutzerdefinierte Ereignisse wie diese zu erstellen, machen wir weiter und ein Blueprint-Interface. wir also mit der rechten Maustaste hier und lassen Sie uns zu Blueprints gehen und ein Blueprint-Interface erstellen. Eigentlich muss ich einen Ordner für erstellen, also lasst uns einen Ordner namens Interfaces erstellen. Und lassen Sie mich drinnen mit der rechten Maustaste auf Blueprints und Blueprint Interface klicken. Normalerweise fange ich mit int oder interface an. Und jetzt wollen wir einen für die Spielerbasis machen. Also nenne ich sie normalerweise den Namen der Blaupause. Ich möchte sie dafür benutzen. Ich möchte es für die Spielerbasis verwenden. öffne ich jetzt. Und Sie können sehen, dass es sich im Grunde um eine Funktionsbibliothek handelt. Also drin hier in der Grafik kann man eigentlich nichts tun. Du kannst das nicht schleppen. Und du kannst alles tun. Sie können sehen, dass Sie Ihre Funktionen hier haben , damit Sie eine neue Funktion hinzufügen können. Und Sie können die Details zu dieser Funktion hier unten sehen. Beginnen Sie also einfach mit, lassen Sie uns diesen Status „Set-Moctions“ erstellen. Anstatt es hier wie ein benutzerdefiniertes Ereignis zu erstellen, gehen wir zur Benutzeroberfläche und lassen Sie es uns hier schaffen Bewegungszustände wie diesen festzulegen, alles zu kompilieren und zu speichern. Um nun ein Blueprint-Interface hinzuzufügen, musst du zu diesem Blueprint gehen, also werden wir ihn verwenden und die Spielerbasis geht zu den Klasseneinstellungen. Und hier sehen Sie implementierte Schnittstellen. Lassen Sie uns so danach suchen und wir können die Schnittstelle hier auswählen. Jetzt kompilieren und speichern wir. Und jetzt gibt es dir einen Fehler. Und das liegt daran, dass Sie gerade eine Schnittstelle erstellt haben. Sie können es hier sehen, den Status „Bewegungen“ gesetzt haben, und jetzt liegt es daran, dass Sie zwei davon haben, also gibt es einen Fehler. Wir werden diesen löschen. Aber denken Sie daran, wenn dies nicht für Sie erscheint, denken Sie daran, zur Benutzeroberfläche zurückzukehren und auf Kompilieren zu klicken. Sehr, sehr wichtig, dass Sie Ihre Blueprints immer kompilieren. Gehen wir also zur Spielerbasis. Lassen Sie uns nun diese festgelegten Bewegungsstatus löschen und kompilieren. Und jetzt gibt es uns viel mehr Fehler. Und es sind tatsächlich diese , weil wir sie ersetzen müssen. Aber machen wir uns vorerst keine Sorgen um diese Pfeile. Nun, diese Schnittstelle, haben wir einen Bewegungsstatus erreicht. Wir können dies nennen, indem wir mit der rechten Maustaste klicken und sagen, dass Bewegungsstatus gesetzt wird. Und jetzt können wir sehen, dass wir dieses Ereignis haben wird Bewegungen Status gesetzt. Wenn Sie also darauf klicken und sich dieses Symbol am Pier befindet, bedeutet dieses Symbol, dass es von einem Blueprint-Interface stammt. Denn denken Sie daran, dass wir es hier geschafft haben , den Status der Bewegungen zu setzen. Wann immer Sie das Interface in Ihrem Blueprint hinzufügen , wird sie hier angezeigt und Sie können es als Ereignis aufrufen. Und du kannst auch hier sehen, wir können es nicht wirklich rausziehen. Das funktioniert also nicht. Wir müssen also mit der rechten Maustaste klicken und nach dem Namen suchen. Das Coole an Interfaces ist, wenn Sie ein neues erstellen, nennen wir es einfach zufällig. Ich wollte dir nur zeigen , wann es so ist. Und du gehst zurück zum Blueprint oder zur Spielerbasis, du kannst dieses zufällige Ereignis hier sehen. Wenn ich mit der rechten Maustaste klicke und zufällig schreibe und die Ereignisse finde, und du kannst hier sehen, das Ereignis zufällig hier. Aber wenn ich hier eine Ausgabe lege, also wenn ich auf Zufall klicke und hier eine Variable hinzufüge, klicke ich auf diesen Plus-Button und füge hier einfach eine zufällige Variable hinzu. Wenn ich jetzt kompiliere und speichere und zurück zu meiner Spielerbasis gehe, kannst du jetzt sehen, dass sie nicht mehr gelb ist. Wenn ich also, wenn Sie einem Ereignis hier eine Ausgabe hinzufügen, wird es in eine Funktion. Jetzt können wir dieses Jahr tatsächlich doppelklicken. Und Sie können sehen, dass es sich stattdessen um eine Funktion handelt, genau wie beim Erstellen Funktionen hier oben nicht springt. Zum Beispiel haben wir das früher erstellt. Sie können auch Funktionen innerhalb von Schnittstellen erstellen und verwenden. Wenn Sie also eine Ausgabe hinzufügen, zwei Funktionen im Inneren von hier, werden sie zu Funktionen. Und wenn Sie keine Ausgabe hinzufügen, werden sie zu Ereignissen. Also sehr, sehr gut, sich daran zu erinnern. Ereignisse sind gelb, die Funktionen haben diese Farbe, also löschen wir diese zufällige. Wir brauchen es vorerst nicht wirklich. Lassen Sie uns kompilieren und speichern. Und lasst uns hierher zurückkehren und diesen festgelegten Bewegungszustand verbinden. Jetzt hatten wir hier die Bewegung geblieben. Und genau wie zuvor bei den Kundenereignissen können wir die Variable nicht automatisch anklicken und ziehen und hinzufügen. So kannst du hier sehen, wenn ich klicke und ziehe, kann ich es nicht automatisch hinzufügen, also muss ich das selbst machen. Blueprint Interfaces benötigen also etwas mehr Zeit, um sie einzurichten, aber es sind optimierte. Dein Spiel wird viel schneller laufen. Gehen wir also zurück zum Blueprint-Interface. Klicken Sie auf diesen und fügen wir die Eingaben hinzu. Und es hieß E Moctions State. Das war also unsere Aufzählung. Also lasst uns hier anklicken und nennen wir es einfach so Bewegungsstaaten. Und jetzt kannst du sehen, dass es mich das nicht machen lässt. Also muss ich kompilieren und es mich noch einmal versuchen lassen. Manchmal ist es, es nervt so aus. Ich muss das Projekt wahrscheinlich schließen und wieder öffnen. Okay, ich habe das Projekt gerade geschlossen und geöffnet. Versuchen wir es also noch einmal, klicken Sie hier, Bewegungsphase. Es lässt mich das nicht immer noch hier machen. Ich denke, es liegt daran, dass wir es in der Spielerbasis bereits haben. Gehen wir zurück zu einer Spielerbasis. Lasst es uns herausfinden. Ich denke, es liegt daran, dass wir diesen sogenannten Bewegungsstaat bereits haben. Lassen Sie mich all diese löschen. Vielleicht kannst du ein Foto für dich machen , damit du dich daran erinnern kannst , was es gesagt hat. Aber jetzt kompilieren wir hier, speichern, zur Schnittstelle zurückkehren und nun versuchen wir es zu ändern Bewegungsstatus. Und jetzt hat es mich geführt, es liegt wahrscheinlich an den anderen Funktionen dort. Jetzt, da wir es haben, können Sie sehen, dass es dies zu unserer Schnittstelle des Ereignisses hinzugefügt hat. Und wieder, genau wie zuvor, können wir es verbinden. Und jetzt können wir es hier aufrufen. Also muss ich mich erinnern, was hier war. Es war untätig, als die Bewegung 0 war. Wenn Sie also den Namen Ereignisbewegungen hier ausführen, so werden Bewegungsstatus festgelegt. Und Sie können hier sehen, Sie diese Funktion aufrufen können, indem Sie int player base sagen. es also von der Schnittstelle aus rufe, kann ich es hier oben machen. Aber ich habe herausgefunden, als ich gearbeitet habe, dass es viel besser ist , diesen unter der Int-Player-Basis auszuwählen. Wenn Sie es durch den Innenraum anstelle der Kohlefunktion auswählen , diese automatisch aktualisiert. Wann immer Sie es hier in der Benutzeroberfläche aktualisieren, wird es Ihnen einen Fehler geben wenn Sie den anderen auswählen, nur ein Update automatisch. Also wähle ich immer dieses aus. Also das Idol hier, ich kann einfach hier klicken und kopieren Paste und verbundene Taschen. Also waren es Laufrechte und lief dann nach links. Und hier oben war es Sprung. Als es also nicht plus war, war es Müll und es war Herbst. Also einfach so. Jetzt haben wir das Blueprint Interface implementiert und wir haben die Funktion hier. Und es ist viel sauberer und du kannst alle deine Funktionen für die Spielerbasis haben . Vielleicht hast du es schon erraten. Später werden wir weitere Blueprint-Interfaces erstellen, eine für den Spielmodus, eine für den Spieler-Controller usw., wenn wir Dinge dort getötet haben. Okay, jetzt kann ich keine benutzerdefinierten Ereignisse mehr sehen , die wir hier gemacht haben, also ist alles gut und das war's vorerst. Lasst uns also zur nächsten Lektion übergehen. 35. Einführung in die Einführung in die Widget: Es ist jetzt an der Zeit, über das Laichsystem zu sprechen und zunächst über die Widget-Blueprints zu sprechen und Widget Blueprint ist der Ort, an dem Sie die Benutzeroberfläche erstellen. Also, womit wir anfangen wollen, erstellen wir hier im Inhalt einen neuen Ordner. Ich klicke mit der rechten Maustaste, um einen neuen Ordner zu erstellen und nennen wir ihn UI für die Benutzeroberfläche. Hier drin klicken wir mit der rechten Maustaste. Und hier unten in der Benutzeroberfläche können Sie einen Widget-Blueprint erstellen. Erstellen Sie dieses und wählen Sie hier oben Widget Blueprint aus. WB für Widget Blueprint schreiben. Und das erste, was wir erstellen werden, ist die Charakterauswahl. Also Charakterauswahl. Okay, also kannst du jetzt darauf doppelklicken. Und zunächst möchte ich über die Schnittstelle oder den Überblick darüber sprechen , woraus das besteht. Anstatt hier in der Mitte sieht man den Graphen. Und wieder können Sie mit der rechten Maustaste klicken und herumschwenken , um sich im Diagramm zu bewegen. Hier entwerfen Sie die Benutzeroberfläche. Und der zweite Teil davon besteht aus dem Graph. Sie haben also, dass der Designer die Benutzeroberfläche entwirft. Und dann haben Sie das Diagramm, in dem Sie der Benutzeroberfläche Funktionen hinzufügen. Sie können also sehen, dass uns das bekannt ist. Dies ist der Ort, an dem wir kodieren. Hier. Wir können unsere Variablen und Funktionen sehen und so weiter. Sie können auch die verschiedenen Details über beispielsweise eine Variable sehen , auf die wir klicken. Das ist uns jetzt sehr vertraut. Und im Designer ist das, was Sie hier haben, der Graph. Sie haben die Elemente, mit denen Sie Ihre Benutzeroberfläche entwerfen können. Und dann sehen Sie alle Elemente , die Sie hinzufügen, hier unten. Auch hier haben Sie ein Detailfenster, in dem Sie Details zu den Elementen ändern können . Sie können beispielsweise den Schriftstil, die Schriftgröße, das Bild ist Stil und so weiter ändern . uns nur für eine kleine Übung vor dem Ende versuchen, Lassen Sie uns nur für eine kleine Übung vor dem Ende versuchen, etwas hinzuzufügen. So haben Sie zum Beispiel einen Textblock, daher haben wir hier die gemeinsamen, gemeinsamen Vermögenswerte. Sie können versuchen, sie durchzuklicken und sehen, was Sie hier haben. Fühlen Sie sich nicht frei, Dinge in die Benutzeroberfläche hinzuzufügen. Du kannst es. Es ist immer schön, es auszuprobieren. Was Sie also tun können, ist, womit ich normalerweise beim Erstellen einer Benutzeroberfläche beginne beim Erstellen einer Benutzeroberfläche Normalerweise erstelle ich ein Canvas-Panel. Wenn Sie also hier nach Canvas suchen, haben Sie dieses eine Canvas-Panel. Also kannst du es rausziehen und hier unten platzieren. Es wird es einfach so zur Benutzeroberfläche hinzufügen. Und Sie können sehen, dass die Leinwand hinzugefügt wurde. Das ist eine sehr grundlegende Sache. Sie fügen eine Leinwand hinzu, die Leinwand, Sie fügen verschiedene Elemente hinzu. So können wir zum Beispiel diesen Text hinzufügen. Sie können es entweder hinzufügen, indem Sie auf die Leinwand klicken und es nach unten ziehen. Und Sie können sehen, dass der Text hinzugefügt wurde. Oder Sie können es an einer beliebigen Stelle in der Leinwand klicken und ziehen und platzieren. Normalerweise ziehe ich es gerne hier runter und klicke dann darauf. Löschen wir also einfach einen von ihnen indem wir auf meiner Tastatur auf Löschen klicken. Sie können beispielsweise auf diesen Text klicken und verschiedene Details zu diesem Text sehen. Sie können also die Position ändern, damit es klicken und ziehen kann und Sie die Position ändern können. Zum Beispiel können wir einhunderteinhundert und das y schreiben einhunderteinhundert und das y und Sie können die Farbe des Textes ändern. Sie können die Schriftart hier ändern, indem Sie auswählen, welche Art von Finanzierung ist, wie groß der Fonds ist und so weiter. Sie haben also verschiedene Details. Sie können sich über die Elemente ändern. Die häufigsten Elemente sind hier. Im Allgemeinen können Sie beispielsweise versuchen, eine Schaltfläche zu ziehen, und Sie können sehen welche Dinge Sie an einer Schaltfläche ändern können. Also immer schön, sie einfach hierher zu ziehen, ein Bild. Wir verwenden immer Bilder, damit Sie versuchen können, sich mit ihnen vertraut zu machen. Sie können sehen, dass Sie sie hier mit diesen hübschen Zusammenbausachen skalieren können, damit Sie es anklicken und ziehen können. Sie können beispielsweise auf diesen Pinsel klicken, um ein Bild zu erhalten, und Sie können auswählen, um welche Art von Bild es sich handelt. Wenn ich zum Beispiel hier klicke, kann ich auswählen, Lass uns mein Sprite sehen. Und Sie können sehen, dass das Sprite als Bild hinzugefügt wurde. Und Sie können die Größe für das Bild hier ändern. Sie können auch die Farbe des Bildes ändern. Sie haben also viele Möglichkeiten, mit denen wir später arbeiten werden. Andere coole Sachen, bevor ich das hier beende, hast du etwas, das man als horizontale Box bezeichnet. Ein horizontales Feld hier, das können wir hier hineinziehen. Und lasst uns vorerst alle löschen. Klicken Sie auf Löschen. Also haben wir diese horizontale Box. Ich ziehe es hier rüber und skaliere es. Also wird in dieser horizontalen Box, wo immer ich hier drin platziere, horizontal platziert. Wenn ich also diesen Text nehme und ihn hier unten in die Box lege, kannst du sehen, dass er sich jetzt in diesem horizontalen Feld befindet. Und wenn ich noch einen Text hinzufüge oder stattdessen ein Bild hinzufügen. Fügen wir ein Bild im horizontalen Feld hinzu. Jetzt können Sie sehen, dass Dinge horizontal hinzugefügt werden, damit sie sich nicht überlappen. Und wenn ich einen weiteren Text hinzufüge, können Sie jetzt sehen, dass er Elemente horizontal hinzufügt. Jetzt habe ich hinzugefügt, ich habe dies versehentlich hier unten hinzugefügt , damit ich es anklicken und in dieses Feld ziehen kann. Und Sie können sehen, fügt Elemente horizontal hinzu. Es gibt. Das Gleiche gilt für eine vertikale Box. Es fügt Dinge vertikal untereinander hinzu. Und wenn du willst, dass Teile zusammen überlagern. So haben wir zum Beispiel einen Button und wir haben ein Bild auf dem Button. Wir benutzen etwas, das man Overlay nennt. Also kann ich hier ein Overlay hinzufügen. Und lass mich einfach einen Button hinzufügen. Wenn ich also auf die Schaltfläche klicke oder nach einer Schaltfläche suche, füge sie dem Overlay hinzu. Sie können sehen, dass sich mein Button im Overlay befindet, und jetzt kann ich nach dem Bild suchen und es hier auf den Button legen. Jetzt kannst du sehen, dass ich Dinge übereinander überlege. Ich habe einen Knopf und ich habe ein Bild auf den Buttons. So kann ich zum Beispiel hier ein Bild auswählen und Sie sehen, dass ich jetzt ein Bild auf meinem Button habe , damit Sie sehen können, dass es nicht gut aussieht weil ich auf mein Overlay klicken und die Größe ändern muss und so weiter. Aber wir werden mit all dem arbeiten. Ich möchte dir nur die Benutzeroberfläche vorstellen. Fühlen Sie sich frei, hier einfach nach Dingen zu suchen, versuchen Sie diesen Fortschrittsbalken einzusetzen. Sehen Sie, was passiert, wenn Sie den Prozentsatz so erhöhen und versuchen, mit der Benutzeroberfläche herumzuspielen. Es ist immer schön, herumzuspielen. Und wenn Sie fertig sind, löschen Sie alle, einschließlich des Canvas-Panels, kompilieren und speichern Sie. Und dann gehen wir zur nächsten Lektion über und beginnen mit der Erstellung der Benutzeroberfläche für die Charakterauswahl. 36. UI für die Figurenauswahl: Beginnen wir mit der Erstellung der Zeichenauswahl-Benutzeroberfläche. Also hier drüben im Widget-Blueprint , den wir zuvor erstellt haben, klicken wir hier drauf. Also, was wir kreieren wollen, habe ich es vorher erstellt damit ich Ihnen zeigen kann, was wir schaffen wollen. Und es ist immer schön , dieses Ziel zu sehen, das wir anstreben. Wir streben danach, diesen Charakter zu erschaffen. Und dann haben wir zwei Tasten, mit denen Sie entweder eine Schleife oder Serena spawnen können , je nachdem, worauf Sie drücken. Das ist also die Sache, die wir erschaffen wollen. Und dann haben wir einen Hintergrund , der verschwommen ist. Dies ist also das Ziel , das wir schaffen müssen. Und es ist immer schön, sich das in Ihrem Kopf vorzustellen und zu versuchen, es zu brechen. Also habe ich in der früheren Lektion wieder über eine vertikale Box und eine horizontale Box gesprochen . Und zum Beispiel befinden sich diese beiden Tasten in einer horizontalen Box, weil sie zu spät nebeneinander liegen. Das Bild und die Schaltfläche befinden sich in einem Overlay , da Sie Dinge übereinander legen. Also sehr grundlegende Dinge, also sehr gut, sich vorzustellen, was Sie herstellen möchten , damit Sie wissen, welche Elemente Sie verwenden werden. Aber lasst uns rübergehen und unser eigenes Ding erschaffen. Zuerst müssen wir also einige Vermögenswerte importieren. Lassen Sie uns zuerst hier in der Benutzeroberfläche klicken, klicken Sie mit der rechten Maustaste und gehen Sie zu Neuer Ordner. Machen wir einen sogenannten Hintergründe. Lassen Sie uns einen weiteren Ordner namens Buttons hinzufügen. Fügen wir eine weitere hinzu namens Fonts. Und das letzte, nennen wir es Bilder. Vielleicht brauchen wir später eines namens Icons, aber das ist für später. Also hier im Hintergrund habe ich Ihnen diese Kursmaterialien hier zur Verfügung gestellt. also in den Kursmaterialien Springe also in den Kursmaterialien voraus und finde die Benutzeroberfläche. Und auch hier sind das die Ordner. Im Hintergrund kannst du das also hier hineinziehen. dazu nicht mit der rechten Maustaste und wenden Sie 2D-Einstellungen an. Dies ist kein Pick, das ist nicht pixelig. Dies ist im Grunde nur ein Bild. Gehen wir also zurück und in die Knöpfe. Importieren wir hier alle diese Schaltflächen. Wir werden also nicht alle verwenden, aber Sie haben eine Vielfalt, wenn Sie in Ihrer Version des Spiels verschiedene Farben verwenden möchten . Und dann gehen wir zu den Schriftarten, und gehen wir immer wieder hin, gehen Sie zu den Fonds und fügen Sie all diese Mittel hinzu. Und dann werden Sie gefragt, ob Sie erstellen möchten diese Gelder hier erstellen möchten und klicken Sie einfach auf Ja, Alles wird Geld für Sie schaffen. Und das Letzte sind die Bilder oder die Bilder. Und lasst uns zurückgehen und die Bilder hinzufügen, was ein Zufall und Serena ist. Wenn ich sie hier hinzufüge, werde ich mich auf diese Einstellungen anwenden , da es sich tatsächlich um eine Menge handelt. Klicken Sie also mit der rechten Maustaste darauf und wenden Sie die 2D-Textureinstellungen für Papier Einfach so. Wenn Sie sich fragen, wo Sie solche Schriftarten erhalten können, können Sie jederzeit nach Google-Schriftarten suchen. Ich benutze das, um meine Videospiele zu machen. So lustig. Google Fonts suchen danach. Hier haben Sie tolle kostenlose Schriftarten, die Sie kommerziell verwenden können, um sie auf Steam oder einer anderen Plattform zu veröffentlichen. All diese sind also kostenlos. Was auch immer Sie hier finden , Sie können versuchen, nach einem Fonds zu suchen, verschiedene Stile speziell zu finden und so weiter. Also sehr coole Website, wenn du es willst, finde sie in Google-Schriften. Natürlich können Sie Schriftarten für Geld kaufen und diese auch hier importieren. Also klicken wir auf Datei und speichern alles. Jetzt, da wir alles haben, gehen wir zurück zum Widget Blueprint und wir können hier anfangen. Also möchte ich zuerst eine vertikale Box hinzufügen. Suchen wir nach Vertikal und fügen Sie es hier hinzu. Und bevor wir das machen, habe ich tatsächlich vergessen, das Canvas-Panel hinzuzufügen. Fügen Sie also das Canvas-Panel immer als erstes Element hinzu. Und dann fügen wir das vertikale Feld hinzu. Wir brauchen immer zuerst eine Leinwand. Jetzt haben wir diese vertikale Box , in der alles drin sein wird. Also haben wir wieder, wenn ich das hier zurücknehme, haben wir die vertikale Box, in der wir diesen Titel hatten , und darunter haben wir die Knöpfe. Deshalb benutzen wir eine vertikale Box. Und im ersten Jahr müssen wir dieses Stück in der Mitte des Bildschirms zentrieren . Und um dies zu tun, verwenden Sie hier Ankerpunkte. Sehr wichtig, Ankerpunkte zu verwenden und sie für alle Ihre Elemente festzulegen. Klicken Sie also auf diesen Anker und stellen Sie ihn so in die Mitte des Bildschirms. Wenn Sie jetzt 00 schreiben, können Sie sehen, dass es hier an diesem oberen Teil ausgerichtet ist, aber wir möchten, dass es in der Mitte ist. Und hier kannst du mit der Ausrichtung spielen. Sie können die Ausrichtung im X und die Ausrichtung im Y sehen . Und es sieht so aus, als ob Sie jeweils 0,5 schreiben, wird es in der Mitte ausgerichtet, genau so. Okay, also fangen wir hier an. Lassen Sie uns ein Overlay erstellen und es hier in den vertikalen Fehlern platzieren , da Sie jetzt in einem Overlay Elemente überlagern. Also möchte ich ein Bild und einen Text darüber überlagern. Also lasst uns nach einem Bild suchen. Ziehen Sie es hier raus, platzieren Sie es in das Overlay und Sie können sehen, dass wir jetzt ein Bild haben. Wählen wir aus, welches Bild wir verwenden möchten. Dies ist nur der Hintergrund , den Sie verwenden möchten. Ich benutze einfach diesen „Button“. Eigentlich dieser eine flache Taste, Black Square Flat. Also benutze ich dieses und ich werde es dazu bringen, diese ganzen Segmente zu füllen. So können Sie hier sehen, dass Sie eine horizontale und vertikale Ausrichtung haben . Horizontal möchte ich es hier mit dem Ganzen füllen. Also jetzt, je nachdem wie groß Ihre vertikalen Boxen sind. Im Grunde werde ich das Ganze füllen. Dies sind vertikale und horizontale Ausrichtungen. Dann verwende ich etwas Text und lasse die Texte oben auf das Overlay fallen. Hier. Ich will den Text in der Mitte haben. Also werde ich diesen Text hier in der Mitte ausrichten , hier in die Mitte. Und nennen wir es hier im Text. Wähle ein Zeichen aus. Einfach so. Jetzt können wir die Farbe auswählen, ich denke, es ist in Ordnung. Dann können wir Dinge über die Schriftart auswählen. Was ich machen möchte, ist, verwenden wir diesen Source Sans Bold. Also benutze das hier. Und ich schaffe es 14 in der Größe. Wenn ich mir anschaue, wann ich die Benutzeroberfläche erstelle, ist es normalerweise am korrektesten , wenn Sie Zoom Plus zwei hier oben haben Wenn Sie sich das ansehen. Wenn Sie also verkleinern und hineinzoomen, ist es normalerweise um Zoom Plus zwei, aber manchmal korrigiere ich sie, nachdem ich sie dem Spiel hinzugefügt habe. Wähle also Charakter aus und lass uns ein paar Schatten machen. Ich habe gerne ein paar Schatten auf meinem Text. Also hier unten in der Schattenfarbe muss man Alpha aktualisieren, muss man Alpha aktualisieren das Alpha ist im Grunde die Deckkraft des Schattens. Wenn Sie also einen schreiben, können Sie sehen, dass Sie Schatten für unsere 0,5 Trübungen wie 50% haben , ich schreibe 0,35. Also 35 Prozent Schatten und den Schatten-Offset schreibe ich 22. Es ist also ein bisschen weiter vom Text entfernt , so etwas. Was ich jetzt machen werde, ist, dass ich hier auch ein Bild nur zum Styling hinzufügen werde. Also füge ich hier unter Overlay wieder ein Bild hinzu. Jetzt überlagerst du dich übereinander. Ich wähle jetzt den blauen aus, den Button, das blaue Quadrat flach. Was Sie jetzt tun können, ist, dass Sie die Größe hier im Y verringern können , damit es kleiner wird. Und ich möchte es auch horizontal so füllen. Ich werde die Größe nur fünf Pixel machen , einfach so. Und wenn Sie Ihre Benutzeroberfläche ohne diese gestrichelten Linien visualisieren möchten , können Sie hier oben klicken. Und ich denke manchmal ist es cool, das zu tun, damit ich sehen kann, wie meine Benutzeroberfläche tatsächlich aussieht. Ich habe das gerade zum Styling gemacht. Sie können hier auf dieses Bild klicken. Sie können es auch kleiner machen. Wenn ich also hier auf dieses Bild klicke, kannst du kleiner machen und das Y. Nur falls du denkst, dass das zu groß ist, werde ich es so etwas machen. Nun, dieser Text scheint nicht vollständig in der Mitte zu sein, denn wenn man ihn kleiner macht, kann man sehen, dass er diese Zeile fast schneller erreicht als hier unten. Wenn ich auf 61 zurückgehe, werde ich diesen Text ein wenig nach unten schieben. Hier oben in der Polsterung können wir die Dinge an die Seiten schieben. Also werde ich es von oben schieben. Du kannst dir vorstellen, dass jemand es von oben schiebt. Ich kann es auf Pixel schieben. Du siehst also, wenn ich zehn geschrieben habe, siehst du, dass es abläuft. Jemand schiebt es von oben. Hier rechts schiebt es jemand von rechts. Das bedeutet es also. Und die Paarung hier aus der Wanne wollte ich nur auf Pixel drücken , also ist es so weiter unten. Okay, als nächstes mache ich eine horizontale Box, damit ich diese beiden Knöpfe hier unten haben kann . Also auf der Suche nach Horizontal. Und ich werde es auf meinen vertikalen Dollar fallen lassen weil ich unter diesem Ding hier wollte, das ich geschaffen habe. Also diese horizontale Box wollte ich zwei Knöpfe haben. Lassen Sie uns unser erstes erstellen. Der Button besteht aus einem Button und einem Bild. Lassen Sie uns also zuerst ein Overlay erstellen, da wir zwei Elemente übereinander überlagern möchten. Wir wollen einen Button, ersten Knopf, und lassen Sie uns diese Schaltfläche auf das Overlay setzen. Und dann brauchen wir ein Bild oben auf dem Button, genau wie dieses hier. Also setze es bis zum Overlay. Wir haben also zwei Elemente, die sich überlagern. Klicken Sie also auf die Schaltfläche, wählen wir den Stil aus. Also hier drüben im Stil, im Normalfall, lassen Sie uns den Button auswählen und ich möchte den blauen Knopf hier verwenden, Button, blaues Quadrat, diesen. Nun können wir einige Einstellungen ändern. Die Tönung ist großartig. Ich will nicht, dass es das tut. Also werde ich den Farbton auf vollständig breit ändern, damit ich die wahren Farben meines Buttons verwenden kann. Und dann kann man anstelle von abgerundeten Bugs sehen, dass es eine seltsame Linie um meinen Knopf gibt. Und das liegt daran, dass es eine abgerundete Box ist. Stattdessen ändere ich es in eine Box. Ich kann sehen, dass es etwas niedrig aussieht, es ist verschwommen. Und das kann man tun, indem Sie die Marge erhöhen , um sie klarer aussehen zu lassen. 0,5 ist also die maximale Marge, die Sie erreichen können. Es liegt also zwischen 0,10123450. Also 0.5, der beste zu verwenden. Wenn ich in diesem Fall einfach so etwas herauszoome, sieht der Button so aus. Ich muss hier das Gleiche für den Hubbard machen und drücken. Anstatt also immer wieder dieselbe Schaltfläche zu finden, als kleiner Trick, können Sie rechten Maustaste klicken und diese kopieren, und dann können Sie mit der rechten Maustaste klicken und ihn hier einfügen. Eine Abkürzung dafür. Sie können sehen, ob Sie die Umschalttaste auf Ihrer Tastatur gedrückt halten und mit der rechten Maustaste klicken, können Sie kopieren. Halten Sie also die Umschalttaste gedrückt, klicken Sie mit der rechten Maustaste und kopieren Sie dann die Umschalttaste gedrückt und Und du kannst es hier einfügen. Damit kann es das also machen. Das kannst du auch mit der Tönungsfarbe machen. Klicken Sie also mit der rechten Maustaste auf Umschalttaste, und klicken Sie mit der rechten Maustaste, um die Umschalttaste zu kopieren , Darauf. Dasselbe mit den Rändern ist hier ein sehr schneller Workflow. Was die Tönung angeht, wenn ich schwebe. Wenn also jemand über meinen Knopf schwebt, möchte ich, dass er es tut, wollte ich ein bisschen Farbe ändern. Also so etwas. Okay, wenn du damit zufrieden bist, kannst du auf Okay klicken. Und hier in depressiv möchte ich eine etwas dunklere Farbe haben , wenn jemand den Knopf drückt. Und jetzt haben wir den Button hier und hier für dieses Bild, legen wir ihn hier in die Mitte des Buttons so. Lassen Sie uns das Bild auswählen. Und was ich verwenden möchte, ist hier in den Bildern, die wir Serena dafür verwenden möchten. Ich werde es tun, du findest Tsarina entweder hier in den Bildern wie diesem oder du kannst anklicken und ziehen. Manchmal ist es schneller wie in diesem Jahr. Okay, also haben wir das Bild hier. Ich werde es ein bisschen nach oben drücken weil du sehen kannst, dass wir das hier unten haben und ich muss es ein wenig nach oben drücken , damit es so aussieht, als wäre es in der Mitte des Knopfes. Also nochmal, was ich dir über das Padding beigebracht habe, wir drücken es von unten, von der Taste aus kann ich es einfach so auf Pixel nach oben drücken. Was ich hier machen möchte, möchte ich auf dieses horizontale Feld klicken und auf Ausfüllen klicken. Jetzt kann ich sehen, dass die horizontale Box tatsächlich das Ganze füllt. Und das Gleiche mit dem Overlay möchte ich auf das Loch füllen klicken. Overlay füllt hier unten den ganzen Bereich aus. Und soweit diese Schaltfläche hier angeht, klicken wir darauf und klicken wir einfach so horizontal und vertikal ausfüllen . Und dann brauchen wir einen Abstand zwischen diesen beiden. Sie können sehen, dass sie zusammengestellt sind und das wollen wir nicht. Hier oben kannst du also nach Abstandshalter suchen. Dies möchte ich zwischen Ohr und vertikaler Box zwischen dem Overlay und dem horizontalen Feld hier drüben legen. Und Sie können sehen, dass es jetzt zwischen diesen beiden Elementen liegt, indem Sie das auswählen, und das ist das x und das y, und es ist im y, wir brauchen etwas Abstand. Ich schaffe es zehn, so. Und Sie können sehen, dass wir einen gewissen Abstand zwischen ihnen haben. Du denkst vielleicht, warum hast du das Ganze hier unten gefüllt ? Und ich mochte, dass meine Benutzeroberfläche dynamisch war. Was ich damit meine , ist, wenn ich jetzt auf dieses vertikale Feld klicke , um die Größe zu ändern, können Sie sehen, dass die Größe meiner Benutzeroberfläche dynamisch geändert wird. Größe ändern Ich mache hier drüben. Anstatt also zu definieren, wenn ich auf die Schaltfläche klicke, anstatt die Größe durch dieses Bild zu definieren. Und später finde ich heraus, dass es mir gefällt, größer zu sein. Anstatt hierher zu gehen und die Größe der Dinge zu ändern, möchte ich einfach auf mein oberstes Element klicken und es einfach ändern und es gut aussehen lassen. Das ist also eine Woche, die wir machen müssen. Und ich denke, es ist auch sauberer, es so zu machen. Wir haben diesen Button jetzt brauchen wir noch einen Knopf. Wenn ich also auf dieses Overlay klicke und auf Control D klicke, oder du kannst mit der rechten Maustaste klicken und auf Duplizieren klicken. Das ist das Gleiche. Jetzt haben wir zwei Knöpfe. Jetzt möchte ich für dieses Bild den roten Knopf benutzen. Diese rote Schaltfläche, rotes Quadrat, klicken Sie mit der rechten Maustaste, während Sie die Umschalttaste gedrückt halten, klicken Sie mit der linken Maustaste, während Sie die Umschalttaste gedrückt Okay, jetzt habe ich das und für dieses Bild muss ich es ändern. Also werde ich jetzt auf dieses Bild schauen. Ich füge einen Abstandhalter zwischen diesen beiden Tasten hinzu. Also ein Abstandshalter zwischen diesen beiden Overlays wie diesem. Und jetzt ist dieser Abstandhalter im x. Ich werde für diesen um 15 steigen. Jetzt habe ich zwei Knöpfe und sie sind gut zusammengestellt. Jetzt kann ich das rausziehen und vergrößern. Ich kann es auch hier ändern. Ich denke, so etwas wäre sehr passend für mich. Wenn Sie nun auf das vertikale Feld klicken, stellen Sie sicher, dass es in der Mitte ist. Man sieht, dass es nicht ganz in der Mitte ist. Jetzt werde ich diese Position im x und y auf 00 ändern , genau so. Und jetzt ist es in der Mitte. Also lasst uns alles kompilieren und speichern. Also das Letzte, was wir hier tun müssen , da wir unsere Buttons haben, müssen wir einen Hintergrund hinzufügen. Und das ist einfach nur ein Bild. Wenn Sie dies also hier minimieren und wenn ich einfach ein Bild hinter alles ziehe, möchte ich, dass es den ganzen Bildschirm ausfüllt. Auch hier können Sie auf den Anker klicken und auf diesen klicken, um den gesamten Bildschirm auszufüllen. Und jetzt können wir einfach 0 in die Offsets schreiben, 00. Jetzt füllt es den ganzen Bildschirm und Sie können den Hintergrund ändern. Innerhalb des Ordners meines Hintergrunds kann ich meinen Hintergrund ziehen. Und jetzt füllt es den ganzen Bildschirm hier. Jetzt möchte ich das Bild verwischen. Und das kannst du machen. Wenn Sie hier oben Unschärfe schreiben und diese Hintergrundunschärfe genannt haben, füge ich das hier ein und Sie müssen den Grad der Unschärfe erneut angeben, Sie müssen auf die Ankerpunkte klicken lass es den ganzen Bildschirm füllen, rechts 00 und die Offsets. Und Sie können den Betrag schreiben, mit dem Sie es verwischen möchten. Jetzt können wir zum Beispiel zehn schreiben, und Sie können sehen, dass nichts passiert. Und das liegt daran, dass die Hintergrundunschärfe unter dem Bild liegen muss , um oben drauf zu sein, so hier. Jetzt können wir die Unschärfe sehen. Und so verwischen Sie Bilder. Und ich denke, eine Unschärfe von zehn funktioniert gut dafür. Was ich Ihnen jetzt empfehlen würde, können Sie zum Beispiel hier auf diesen Text klicken. Wenn ich ein ernsthaftes Projekt mache, ändere ich hier tatsächlich die Namen von all diesen. Denn wenn Sie zum Diagramm gehen, können Sie sehen, Sie tatsächlich die Elemente sehen können, die Sie erstellt haben. So können Sie alle Bilder und die beiden Schaltflächen sehen , die Sie erstellt haben. Gehen wir zum Beispiel zu dieser Schaltfläche, wenn Sie hier darauf klicken, und Sie können ihn auch hier auswählen, Sie können diese Schaltfläche in BTN ändern. Normalerweise verwende ich das als Präfix für Schaltflächen. Und ich nenne es für Serena. Und ich klicke auf den anderen und nenne es n. Schau, das ist sehr gut zu tun, denn wenn du jetzt zur Grafik gehst, können wir tatsächlich sehen, was diese Elemente sind. Dies ist der Button for Loop. Dies ist der Button für Serena. Ich habe keine Ahnung was das wenn ich ihnen keinen Namen gebe, also ist es unmöglich für mich zu wissen, was das sind. Und manchmal brauchen wir keine Variablen. Sie können also sehen, dass dies tatsächlich Variablen sind , die Sie hier im Ereignisdiagramm verwenden können. Aber manchmal brauchen wir sie nicht als Variablen. Zum Beispiel, dieses Titelfeld hier drüben, werden wir niemals etwas daran ändern. Also brauche ich es nicht wirklich, um eine Variable zu sein. Hier können Sie diese Option mit dem Namen ist variable deaktivieren . Es kann also das Häkchen deaktivieren. Ich kann das Gleiche machen mit diesem hier oben ist variabel. Und ich denke, wir können es auch damit machen. Lass es uns tatsächlich machen. Halten Sie also Strg gedrückt, wählen Sie beide aus, entfernen Sie diese Variable, Kompilieren und Speichern. Und Sie können in der Grafik sehen, jetzt haben wir all diese entfernt. Jetzt haben wir ein einziges Bild, das übrig ist. Wir können versuchen, diese Bilder zu erraten , und das ist wahrscheinlich der Hintergrund. Wenn man es sich also hier anschaut, Bild 1026, heißt es das Gleiche, 1026. Und wir müssen es auch nicht wirklich ändern. Also werde ich das entfernen ist variabel. Und das lässt das Ganze viel sauberer aussehen. Deshalb bleibe ich gerne innerhalb meiner Projekte sauber. Und es sind wahrscheinlich nur die Tasten , die wir als Variablen benötigen weil wir sie verwenden wenn der Spieler die Tasten drückt. Also das waren es Jungs für den Charakterauswahlbildschirm. Ich hoffe, du hattest Spaß beim Erstellen dieser Benutzeroberfläche und lass uns zur nächsten Lektion übergehen. 37. Hinzufügen von UI zum Viewport: Also lasst uns fortfahren und unsere Benutzeroberfläche zum Bildschirm hinzufügen. Also haben wir diesen Zeichenauswahlbildschirm und möchten ihn hier zum Ansichtsfenster hinzufügen. Wenn wir also jetzt auf Play klicken , passiert wirklich nichts. Wir sind wieder mit unserem Charakter hier, aber wir möchten den Charakterauswahlbildschirm hinzufügen. Um dies zu tun, fügen wir normalerweise eine Benutzeroberfläche im Player-Controller hinzu. Gehen wir also zu den Blaupausen und nutzen wir nun unsere Spielerkontrolle. Ich glaube, wir haben es noch nicht benutzt, also ist es immer noch leer, öffne den vollständigen Blueprint-Editor. Und innerhalb des Spieler-Controllers ist Ort, an dem wir UR hinzufügen, ist so wichtig, sich daran zu erinnern. Lassen Sie uns diese Standardereignisse löschen. Wir können sie immer hinzufügen, wenn wir wollen. Nun, sehr wichtig zu verstehen, ist die Benutzeroberfläche etwas clientseitiges. Es sind also nur du als Spieler, der deine eigene Benutzeroberfläche sehen wirst . Also jeder Spieler im Spiel als UI. Vielleicht hast du hier unten eine erfahrene Bar. Du hast hier unten etwas Nivellierung. Ich weiß nicht, irgendeine zufällige Benutzeroberfläche. Die gesamte Benutzeroberfläche, die Sie haben, ist clientseitig, also ist sie nicht serverseitig. Die gesamte Benutzeroberfläche ist also für jeden Spieler individuell. Gehen wir also hier zurück zum Spieler-Controller. Und das erste, lasst uns ein individuelles Ereignis machen. Machen wir also ein benutzerdefiniertes Ereignis und nennen es Initialisierungs-Widgets. Und noch einmal habe ich Ihnen vorher gesagt, anstatt diese benutzerdefinierten Ereignisse zu erstellen, ist es gut, ein Blueprint-Interface zu verwenden, aber lassen Sie es uns zuerst erstellen und danach mit einem Blueprint-Interface wechseln . Machen wir also noch ein anderes, ein anderes benutzerdefiniertes Ereignis und ich nenne es CL, initialisieren Widgets. Dies wird also eine kundenseitige Person sein , die keinen kundenseitigen verwendet hat. Das einzige, was wir verwenden, wenn wir jetzt zur Spielerbasis zurückkehren, das einzige, was wir bisher verwenden, ist eine serverseitige, also auf dem Server ausgeführt. Aber für die Benutzeroberfläche laufen sie auf dem Client. Klicken Sie also auf Ausführen auf Client besitzen und dann zuverlässig. Und jetzt, um eine Benutzeroberfläche zu erstellen, sagen wir, dass Widgets erstellt werden. Ui heißt Widgets. Wir erstellen Widgets. Erstellen Sie also ein Widget. Und so erstellen Sie eine Benutzeroberfläche innerhalb von Blueprint. Also lasst es uns hier verbinden. Und jetzt müssen Sie auswählen , welche Benutzeroberfläche Sie erstellen möchten. Und offensichtlich haben wir nicht viel. Wir haben nur diese, Charakterauswahl. Dies ist also diejenige, die wir hinzufügen möchten. Jetzt, da Sie es hinzugefügt haben, ist es immer schön, mit der rechten Maustaste hier zu klicken und es in eine Variable hochzustufen, damit Sie diese Variable später verwenden können, wenn Sie das Fenster erneut ein- oder ausblenden möchten. Fördert also eine Variable. Nennen wir es WB, das ist mein Präfix. Sie können wählen, was immer Sie wollen. Und ich nenne es Charakterauswahl. Dies ist also die Variable Widget Blueprint für die Zeichenauswahl . Jetzt zum Ansichtsfenster, also ist es sichtbar. Sie können hier sehen, wenn ich auf Jetzt spielen klicke, passiert nichts und das liegt daran, dass Sie es dem Ansichtsfenster hinzufügen müssen. Wenn ich also hierher zurückgehe, muss ich aus der Variablen ziehen und zwei Ansichtsfenster hinzufügen sagen. Und Sie können diesen Namen „Zu Ansichtsfenster hinzufügen“ sehen . Genau so. Wenn Sie also auf Play klicken und nichts passiert, denn denken Sie daran, dass Sie die Event aufrufen müssen , weiß LCD-Engine nicht, was Sie tun. Wenn Sie also von diesem benutzerdefinierten Ereignis ausgehen, haben Sie es vielleicht schon erraten. Wir müssen unsere clientseitige Veranstaltung hier anrufen. Also hat CL Widgets initialisiert. Es geht von einem normalen Ereignis, das auf dem Client läuft. Vom Client aus erstellen Sie also die Benutzeroberfläche und sie wird angezeigt. Aber natürlich müssen wir dieses Event auch ausführen da die Engine nicht weiß, was wann Sie dieses Event ausführen möchten. Und ich will es einfach am Anfang hier laufen lassen. Wenn ich also auf das Spiel spiele klicke, möchte ich hier meine Charakterauswahl zeigen. Rufen wir dieses Ereignis also hier initialisieren Sie Widgets genau so. Wenn ich jetzt auf Play klicke, wird dieses Event ausgeführt. Dieses Ereignis führt dieses Ereignis aus , das auf dem Client ausgeführt wird. Und dann erstellen wir die Benutzeroberfläche und fügen sie dann dem Ansichtsfenster hinzu. Lasst uns alles retten. Klicken wir auf Play. Und du siehst, wenn ich auf Play klicke, jetzt ist meine Benutzeroberfläche auf dem Bildschirm. Sie können jedoch sehen, dass ich den Mauszeiger auf die Tasten bewegen kann, aber meine Maus ist nicht sichtbar. Dies liegt daran, dass Sie im Player-Controller die Standardwerte der Klasse haben. Sie müssen auf diesen Mauszeiger anzeigen klicken. Klicken Sie also hier, Kompilieren und speichern und sehen, was passiert. Jetzt kann ich meinen Cursor sehen, und du kannst jetzt sehen, dass ich meine Benutzeroberfläche sehen und auf die Schaltflächen klicke. Du siehst, wir haben hier einen kleinen Bug. Ich kann den Mauszeiger über den Button bewegen, der Farben ändert. Aber wenn ich den Mauszeiger über das Bild fahre, kann ich es nicht mehr bewegen. Sie können sehen, dass der Hover-Effekt verschwindet. Dies liegt daran, dass mein Bild meinen Button blockiert. müssen wir beheben. Gehen Sie also zurück zur Benutzeroberfläche, und das ist sehr wichtig. Dieses Bild blockiert derzeit diesen Button, daher kann ich ihn nicht drücken. Und lasst uns sowohl dieses Bild als auch dieses Bild auswählen. Lass uns runter gehen und das musst du ändern. Die Sichtbarkeit in ihrem Verhalten. Behinderung, ändere es auf „Keine“, klicke auf Testable. Und das bedeutet, dass es keine Rolle spielt, dass dieses Bild da ist. Ich möchte es einfach ignorieren. Die Maus wird es also ignorieren. Du kannst hier sehen, indem du jetzt spielst, und ich fahre mit dem Mauszeiger über das Bild, es spielt keine Rolle. Ich schwebe immer noch auf dem Knopf. So müssen Sie also festlegen, dass Elemente nicht testbar getroffen wenn Sie nicht möchten, dass sie Ihre Interaktion mit Schaltflächen und der Welt blockieren . Okay, bevor wir fertig sind, machen wir es, anstatt diese benutzerdefinierten Ereignisinitialisierungs-Widgets zu machen, tatsächlich einem Blueprint-Interface und dann können Sie daraus auch einige Übungen machen. Also lasst es uns minimieren und versuchen es selbst zu machen, wenn du willst. Dies ist die gleiche Methode wie vor dem Aufrufen des Interface-Ordners. Jetzt hatten wir eine für die Spielerbasis gemacht, also müssen wir einen neuen für den Spieler-Controller erstellen. Also klicken wir mit der rechten Maustaste, gehen Sie hier zu Blueprints und wählen Sie Blueprint-Schnittstelle aus. Und wieder nenne ich es normalerweise den Namen des Blueprints, in dem ich ihn verwenden möchte. Also wollen wir es so im Player-Controller verwenden und darauf klicken. Und jetzt geben wir dieser Funktion einen Namen und rufen sie erneut auf, initialisieren Sie einfach so Widgets. Kompilieren und speichern. Und gehen wir zurück zum Spieler-Controller. Denken Sie noch einmal daran, hier zu kompilieren, sehr wichtig, speichern Sie zu kompilieren. Gehen wir zurück zum Spieler-Controller. Und drinnen gehen wir zu den Klasseneinstellungen. Und hier in den Schnittstellen fügen wir unser Interface für den Player-Controller hinzu. Und jetzt siehst du es hier erscheinen. Sie können dann Initialisierungs-Widgets schreiben. Und Sie können sehen, wie das Ereignis Widgets initialisiert wird, und es stammt von einem Blueprint-Interface. Das bedeutet das Icon. Jetzt können wir es hier verbinden. Und wir können das Ereignis auch hier aufrufen und Widgets initialisieren. Und wieder wähle ich diesen unter int Player Controller aus, einfach so. Jetzt funktioniert es also einwandfrei. Schon wieder. Wenn ich auf Play klicke, wird es jetzt so funktionieren, wie es sollte. 38. Character: Gehen wir jetzt zurück zu unserem Widget. Gehen wir in die Benutzeroberfläche und den Widget-Blueprint. Und drinnen möchten wir nun der Benutzeroberfläche Funktionen hinzufügen. Denken Sie daran, dass dieser Widget-Blueprint in einen Designer und ein Diagramm unterteilt ist, um der Benutzeroberfläche Funktionen hinzuzufügen dieser Widget-Blueprint in einen Designer und ein Diagramm unterteilt ist . Und in der Grafik fügen wir unsere Funktionalität für die Buttons hinzu. Wenn Sie also auf den Designer klicken, können Sie auf eine der Schaltflächen klicken. Fangen wir also damit an, dass Serena auf diesen Button klickt. Und wenn Sie auf die Schaltfläche gehen, können Sie sehen, dass Sie einige Ereignisse haben, die Sie hinzufügen können. Was sollte zum Beispiel passieren, wenn ich auf diesen Button klicke? Was sollte passieren, wenn ich den Mauszeiger über den Knopf fahre? Was sollte passieren, wenn ich den Button aufdecke? Wir haben also verschiedene Ereignisse, die wir für den Button hinzufügen können. Jetzt möchte ich dieses vorerst benutzen, was sollte passieren, wenn ich auf den Button klicke? Klicken Sie also auf das Plus und fügen Sie diese Veranstaltung hier hinzu. Jetzt können Sie diese löschen , wenn Sie möchten. Dies sind die Standardeinstellungen. Wir können sie hinzufügen, wenn wir wollen. Wählen Sie sie aus und klicken Sie auf meiner Tastatur auf Löschen. Also werde ich das vorerst nur haben. Der Workflow, bevor ich beginne, der Workflow, mit dem wir arbeiten werden ist, wenn Sie den Player spawnen möchten, drücken Sie diese Taste. Mit dieser Schaltfläche gelangen Sie zu einem Event im Spieler-Controller. Also müssen wir hier ein Event haben und der Spieler-Controller für das Laichen wählt den Charakter aus. Und wenn du den Charakter auswählst, durchläuft er den Spielmodus. Und sehr, sehr wichtig, sich daran zu erinnern , dass der Spielmodus nur auf dem Server läuft. Sie können also nicht hierher kommen und ein benutzerdefiniertes Ereignis erstellen und es auf Run-On-Client einstellen. Das funktioniert nicht. Nur der Spielmodus existiert nur auf dem Server. Und das ist sehr gut , weil wir den Spielmodus verwenden können , um zu überprüfen, was der Client macht. Denken Sie noch einmal daran, dass der Server in Unreal Engine oder nur im Multiplayer im Allgemeinen überprüft, oder nur im Multiplayer im Allgemeinen überprüft, was die Clients tun, also verhindern wir das Cheaten. Und der Spielmodus ist dafür sehr gut zu verwenden, da er nur durch den Server läuft. So können wir hier Dinge durchlaufen und dann einen Spieler im Spielmodus hervorgebracht haben, der es uns ermöglicht, den Spieler zu spawnen. Gehen wir also zurück zum Widget-Blueprint. Wenn Sie ein Event im Spieler-Controller haben, wird uns der Controller in den Spielmodus versetzen. Der Spielmodus, wenn es das sieht, Ja, du darfst den Spieler spawnen, wird er diese Informationen an den Spieler-Controller zurückwerfen . Sie könnten fragen, warum fügen wir diesen Code hier nicht hinzu ? Warum fügen wir es anstelle der Spielerbasis in den Player-Controller hinzu? Da dies der Spieler ist, möchten wir einen Spieler ausgeben und er ist spielerspezifisch. Da wir kein Plenum haben, denken Sie daran, dass wir den Spieler hervorbringen. Dieser Code existiert also nicht, wenn Sie sich hier im Auswahlbildschirm befinden hier im Auswahlbildschirm da Sie den Player noch nicht hervorgebracht haben. Sie können also hier keinen Code hinzufügen. Es wird nicht funktionieren, da dies tatsächlich noch nicht existiert, wenn Sie den Spieler nicht hervorgebracht haben. Sie können also nicht, wir können den Code hier nicht machen, also müssen wir es im Player-Controller tun, da der Player-Controller immer dann spawnt, da der Player-Controller immer dann spawnt wenn der Player eine Verbindung zum Server herstellt. Wenn ich also Counter-Strike spiele oder wenn ich Maple Story spiele, wenn ich mich mit dem Server verbinde, erstellt er automatisch einen Spieler-Controller für jeden Spieler. Der Spieler-Controller existiert obwohl mein **** noch nicht geantwortet hat. Gehen wir also zum Widget-Blueprint. Und drinnen wollen wir eigentlich mit einer Plake-Kontrolle beginnen. Ich denke, es wird dir hier einfacher sein. Lasst uns also hier ein neues Event machen, hier eins machen und nennen wir es. Nennen wir den Select Character. Jetzt, manchmal, wenn ich verwirrt bin, wie ich einen Mechaniker machen soll, beginne ich normalerweise von hinten, also denke ich manchmal, dass es sehr schön ist. Manchmal kann man von hinten anfangen. Was versuchst du am Ende zu erreichen? Was ich versuche zu erreichen, ist dieser Spawn-Schauspieler. Dies ist der, den wir benutzen werden. Letztendlich. Wir wollen einen Schauspieler spawnen, du willst den Charakter spawnen. Und hier ist dies der Charakter, den wir spawnen möchten. Und lassen Sie mich hier unten ein Ereignis machen, das Spawn-Layer genannt wird. Dies ist das ultimative Ereignis, bei dem wir am Ende ein Ergebnis erzielen möchten. Du kannst also von hinten anfangen. Und anstatt hier anzufangen, ist es manchmal viel einfacher zu verstehen. Das Zurückgehen ist also viel einfacher, manchmal wieder den Spieler zu spawnen. Dies sollte aus dem Spielmodus kommen, denn wie ich bereits sagte, wenn du hier klickst, geht es hier zum Spieler-Controller, der Spieler-Controller wird uns hineinwerfen des Spielmodus, und der Spielmodus wird uns hier rauswerfen, reagiert auf den Spieler. Ich ziehe Is-Variablen für das Ereignis hier. Und statt der Klasse ändern wir den Namen davon, nennen wir ihn Player und spawnen Transformation. Wir können es einfach Spawn-Transformation nennen, das ist in Ordnung. Also haben wir das Spawn-Spieler-Event hier. Dies wird aus dem Spielmodus kommen. Gehen wir jetzt zurück in den Spielmodus. Also arbeiten wir jetzt rückwärts, um in den Spielmodus zu gehen, ich werde dieses Event löschen, damit du mit dem Spielen beginnen kannst , weil wir sie gerade nicht brauchen. Zusammengesetzte Speicherung, und ich werde hier eine neue Veranstaltung erstellen , benutzerdefinierte Ereignisse. wir es Anforderungs-Spawn-Layer. Fordert einfach so einen Bond-Spieler an. Und es wird unseren Spawn-Spieler vom Player-Controller aus ausführen . Aber im Moment haben wir keine, wir haben keine Variable für den Player-Controller, daher kann ich dieses Event hier nicht aufrufen. Denken Sie daran? Jetzt wird es etwas weiter fortgeschritten, weil wir diesen Event Spawn-Spieler verwenden müssen , der sich im Spieler-Controller befindet, wir müssen ihn im Spielmodus verwenden. Und das heißt Blueprint-Kommunikation, wie ich Ihnen bereits sagte, dafür verwenden wir Blueprint-Interfaces. Aber im Moment können wir einfach auf dieses klicken wir können den Player-Controller hinzufügen. Und dann können wir als Variable den Player-Controller auswählen und wir nennen ihn PC. Ich glaube, PC Maple Story, wir nannten es ja, einen PC Maple Story. Und dann lassen Sie uns tatsächlich vom Player-Controller erstellen . Wenn Sie es nun ziehen, denn jetzt, da die Variable hier diese Blueprint-Klasse ist, können wir diese Spawn-Layer jetzt aufrufen. Wenn Sie also von diesem ziehen und Spawn-Layer sagen, Okay, jetzt können wir dieses Ereignis hier aufrufen. Und genau wie zuvor ziehe ich die wieder zurück. den Spieler also hierher ziehen weil dieser eine Anforderungsspieler spawnt, werden wir ihn vom Player-Controller wieder hierher rufen . Und S4, der Standort. Normalerweise breche ich das auf. Denken Sie also an eine Transformationsvariable Wenn ich eine erstelle und Ihnen hier unten zeige, ist eine Transformationsvariable eine Variable, in der wir die Position, Rotation und Skalierung sehen können , genau wie in unserem Ansichtsfenster hier wenn wir auf etwas klicken, sehen wir die Transformation. Dies ist die Transformationsvariable. Das brauchen wir also immer, um festzulegen wo der Spieler spawnen soll, wie der Spieler beim Laichen gedreht werden soll, wie groß der Spieler ein Laichen sein sollte. Lassen Sie mich dieses also vorerst löschen. Und anstatt die umgekehrte Transformation zu haben, können Sie von hier aus ziehen und auf diese klicken, machen Sie dies, wir werden sie in diese drei aufteilen. Also die Position, die Rotation und die Skala. Und normalerweise lasse ich das einfach im Spielmodus sein. So bevorzugen Sie es auch als Programmierer, manche Leute machen es anders, aber normalerweise mache ich den Transformator und zerreiße ihn so. Und dann verbinde ich einfach den Standort hier draußen weil die Rotation gleich ist und die Skala gleich ist. So sieht es also aus. Wir können es auch anstelle des Ortes als Spawn-Standort bezeichnen. Nur damit du später nicht verwirrt bist, was das ist. Okay, jetzt habe ich diesen „Request Spawn Player“ genannt. Jetzt hier draußen im ausgewählten Spieler wird es sein, da der ausgewählte Spieler uns hier rüberwerfen wird. Und um mit einem Spielmodus zu kommunizieren. Noch einmal sagte ich schon, der Spielmodus läuft nur auf dem Server, also musst du das auf dem Server ausführen. Also wissen wir jetzt, wie das geht. Machen wir also ein benutzerdefiniertes Ereignis und nennen es S RV, wählen Sie den Charakter aus. Und schon von hier oben können wir dieses Event durchführen. Also wähle SRB Charakter aus und vergiss nicht, es auf dem Server auszuführen, diesen, wähle Charakter aus und klicke auf „zuverlässig“. Jetzt haben wir dieses selektierte Zeichen. Es wird durch den Server laufen. Und denken Sie daran, wir werden den Request Spawn Player anrufen . Und wieder müssen wir mit unserer Blaupause kommunizieren. Wir müssen den Decay-Modus hier innerhalb des Player-Controllers verwenden , ich werde Ihnen beibringen, wie Sie welche Blueprints kommunizieren können. Das haben wir vorher noch nicht angefasst. Um mit dem Spielmodus zu kommunizieren. Man muss sagen, bekommt den Spielmodus. Sehr einfach. Jetzt hol den Spielmodus. Das ist nicht dein Spielmodus hier. Dies ist nur ein allgemeiner Spielmodus in der Engine. Wenn du sagst „Spielmodus abrufen“, musst du definieren. Sie können hier sehen, wenn Sie die Maus darüber halten, heißt es zurück zur aktuellen Spielmodusbasis. Wenn du jetzt den Spielmodus bekommst, musst du definieren, von welchem Spielmodus du sprichst, denn dies ist nur der allgemeine Spielmodus. Und wir haben etwas namens Casting. Also wenn Sie das rausziehen und Kosten sagen um zwei zu kosten, bedeutet dies, über welchen Blueprint ich spreche. Ich spreche von TM Maple Story. Also kostet Maple Story, diese hier. Okay? Als Maple Story bedeutet das, dass ich jetzt alles benutzen kann , was sich in dieser Blaupause befindet. Jetzt kann ich zum Beispiel den Spawn Player verwenden oder nennen. Wenn ich also rausziehe und „Spawn-Spieler anfragen“ sage, kannst du sehen, dass ich dieses Event jetzt anrufen kann. Oder sagen wir, wenn ich ein Ereignis namens „Hallo “ erstellt ein Ereignis namens „Hallo “ und es eine Transformation ist, kann ich zu meinem Controller zurückkehren und sagen: Hallo. Ich kann jetzt sehen, dass ich diese Variable auch bekommen kann. So kommunizierst du zwischen Blueprints, damit ich den allgemeinen Spielmodus erhalte. Und ich erzähle es, ich spreche speziell von GM Maple Story, weil man in Spielen manchmal mehrere Spielmodi hat, sodass man manchmal nicht nur einen hat. Davon spreche ich. Was den Spieler-Controller angeht, können Sie hier den Player-Controller holen. Und du kannst sehen, du kannst den Spieler-Controller nach dem gleichen Prinzip bekommen . Dann können Sie sehen, dass dies jetzt ein allgemeiner Player-Controller ist und Sie können auch Kosten sehen, weil ich speziell über diese BC Maple Story spreche . Bc Ahorn. Sie können sehen dass Sie so mit Blaupausen kommunizieren. Diese gute Plake-Kontrolle liegt für Einzelspieler. Ich erkläre es dir ein bisschen. Also lasst uns das hier löschen. Und anstatt zu kosten, wissen Sie jetzt, was Kosten sind. Anstatt zu kosten, verwende ich gerne Blueprint Interfaces. Das Problem beim Casting ist, dass es harte Referenzen erzeugt und Ihr Spiel verzögert, viele davon. Wenn Sie also ein großes Spiel haben, an dem Sie seit einem Jahr arbeiten , und Sie haben eine Menge Casting, wie Sie dazu führen, dass Sie das kosten. Und du machst es tausendmal in einem Spiel, es wird dein Spiel verlangsamen. Jetzt sage ich nicht, dass es schlecht ist zu benutzen. Ich benutze es manchmal und du solltest es manchmal benutzen. Aber wann immer Sie ein Blueprint-Interface verwenden können, empfehle ich Ihnen, ein Blueprint-Interface zu verwenden , damit Sie diese harten Referenzen nicht erstellen, was Ihr Spiel verlangsamt. Also musst du zuerst darüber nachdenken, worauf du dich beziehen willst? Worauf wir versuchen, auf den Spielmodus zu verweisen. Also können wir dieses Ereignis hier tatsächlich nutzen. Okay, also müssen wir für den Spielmodus tatsächlich ein neues Blueprint-Interface für den Spielmodus erstellen . Gehen wir nun zu Interfaces, erstellen hier ein neues Blueprint-Interface und nennen Sie es dann beendet den Spielmodus. Jetzt heißt diese hier, die Funktion, die wir machen wollen, heißt, ich schaffe es. Dann kann ich dir zeigen , wovon ich rede. Ich denke, es ist viel einfacher. Also nennen wir es Get's Game Mode ref. Also versuchen wir, die Spielmodus-Referenz zu erhalten. Und das ist eine Funktion, also erstellen wir eine Ausgabe. Hier. Die Variable, die Sie auswählen möchten, ist alles, auf das Sie verweisen möchten. Ich versuche, auf meine GM Maple Story zu verweisen. Also mein Spielmodus, und nennen wir es einfach Spielmodus. Okay, jetzt habe ich die Funktion und lass uns nochmal hinzufügen. Er kam zu unserem Tarn-Blueprint heraus, der Schnittstelle zu einem Spiel oder einer Blaupause. Gehen wir also zu den Klasseneinstellungen und wählen Sie. Er ist hier rausgekommen und hat Save zusammengesetzt. Und wieder können Sie sehen, wie das Interface hier erscheint. Und wie der Spielmodus. Jetzt müssen wir definieren, was dieser Spielmodus ist. Und ich werde mich einfach selbst ziehen und sagen, was ich selbst bedeutet, in welcher Blaupause ich auch bin. Moment bin ich in der GM Maple Story. Jetzt weiß es also g, m, k Modus oder dieser Spielmodus bedeutet GM Maple Story. Also das ist es, was „Selbst“ bedeutet. Also selbst bedeutet einfach was, in welcher Blueprint Class ich gerade bin. Okay, jetzt wo wir das erstellt haben, können wir jetzt zurück zum Controller gehen. Und anstatt Casting zu machen, können wir diese Funktion jetzt hier namens Get Game Mode Rough aufrufen . Ziehen wir also von hier und sagen Get Game Mode ref. Und als Funktion, wenn es Nachricht sagt, bedeutet dies, dass es von einem Blueprint-Interface stammt und dies das richtige ist. also immer, ob eine Nachricht angezeigt wird, bevor Sie sie auswählen, ob sie von einem Blueprint-Interface stammt. Also wähle es hier aus. Wir haben jetzt den Spielmodus und wir können tun, was wir wollen, genau wie zuvor, zum Beispiel diese zufällige Hallo Variable aufrufen. also Hallo sagst, kannst du jetzt sehen, dass es auch funktioniert. Um es schnell zu erklären, was passiert ist, bekommst du den allgemeinen Oky-Modus und dann sagst du Game Mode rref. Und das ist die Funktion , die wir hier geschaffen haben. Und es weiß, was der Spielmodus ist, denn hier legen wir die Spielmodus-Variable als Selbstreferenz fest, was bedeutet, dass sie sie weiß. Gm Maple Story. Das ist also GM Maple Story, die wir verwenden. Okay, das ist also der Spielmodus, den wir jetzt verwenden möchten. Lassen Sie uns diese Variable tatsächlich löschen, bevor ich es vergesse. Nennen wir diesen Namen Requests Spawn Player. Fordern Sie also hier drüben einen Spawn-Spieler an. Und ich muss meinen Spieler definieren. Und das will ich noch nicht machen. Ich möchte meinen Spieler hier definieren , denn wenn ich auf Tsarina klicke, wird mein Spieler Tsarina sein. Und wenn ich auf den Button klicke, Luke, möchte ich meinen Charakter-Look definieren. Also lass mich das einfach ziehen und hier weitermachen. Und was den Standort angeht, können wir auch weitermachen und ihn hierher ziehen. Und dann siehst du es hier drüben. Wähle den Charakter aus, ich werde sie dort einfach weiter anschließen. Jetzt können wir diesen Namen Select Character nennen. Und hier möchte ich im Widget Blueprint anrufen. Jetzt, den Widget Blueprint, muss ich dieses Auswahlzeichen nennen. Jetzt werden wir also wieder mit unserem Blueprint Interface üben . Im Widget-Blueprint können Sie also sagen, dass er Spielercharakter bekommt. Nun ist dies gut im Einzelspieler zu verwenden , da Sie den Spieler sehen können und dieser Index 0 ist. Aber du, wenn du dich als Spieler und das Spiel im Multiplayer verbindest . Der Spieler, der sich verbindet, sollte X1 geplant sein. Und dann verbindet sich der dritte Typ mit dem Server, und es ist geplant x2 und 3406 und so weiter. Wenn sich also mehr Spieler verbinden, haben sie verschiedene Indizes. Wir können das also nicht wirklich im Mehrspielermodus verwenden . Dies gilt nur für Einzelspieler und Multiplayer. Wir verwenden Get Owning Player. Und wenn Sie den Mauszeiger darüber bewegen, wird der Player-Controller mit dieser Benutzeroberfläche verknüpft. Es wird diesen Player-Controller, Ihren Player-Controller, Sie als Player erhalten Ihren Player-Controller, , den Sie verbunden haben Er erhält Ihren Player-Controller , der mit dieser Benutzeroberfläche verknüpft ist. Jetzt haben wir den Spieler-Controller, und wieder müssen wir sagen, Spieler-Controller ref holen, und wer hat das noch nicht gemacht. Denken Sie daran, dass wir früher eine Schnittstelle für den Player-Controller erstellt haben. Wir können diesen Klick hier benutzen. Und genau wie zuvor klicken wir auf Funktion hinzufügen und sagen, erhält Layout-Controller ref. Und jetzt können wir eine Ausgabe hinzufügen. Und genau wie das, was ich vorher gesagt habe, worauf versuchst du zu verweisen? Das sollten Sie als Variable haben, die ich versuche, auf meinen Player-Controller PC zu verweisen. Wir nennen die PC Maple Story hier und nennen sie Player-Controller. Okay, also denken Sie jetzt daran, in den Controller zu gehen und Sie müssen den Player-Controller definieren. also wie zuvor Ziehen Sie also wie zuvor aus dem Jahr und sagen Sie sich selbst. Der Player-Controller ist also als diese PC Maple Story definiert. Was wir jetzt im Widget tun können, können wir den Owning Player bekommen. Jetzt haben wir den Player-Controller, und jetzt muss ich angeben, über welchen Player-Controller sprechen Sie konkret? Ich spreche davon und wir haben diesen namens Gets Player Controller ref jetzt hier gemacht . Jetzt haben wir den Spieler-Controller und das, was wir hier machen wollen, wir möchten diese Ereignisse nennen , Spieler auswählen, Charakter auswählen. Und wir können es hier wählen Charakter nennen. Und du siehst, dass wir den Charakter auswählen können. Wenn du also auf Tsarina klickst, möchten wir, dass der Charakter Serena ist. Wenn wir auf Luke klicken, wollten wir angenehm aussehen. Hier, anstatt den Select Character zu verwenden , hat das normale Ereignis, genau wie das, was ich Ihnen zuvor gesagt habe, machen wir es tatsächlich zu einem Blueprint-Interface. Also zurück, das ist der Spieler-Controller. Gehen Sie also zum Spieler-Controller, Machen wir hier eine neue Funktion, nennen Sie es Select Character. Und lasst uns zwei neue Variablen erstellen. Einer ist der Spieler und der andere sind die Anleihestandorte. Also lösche ich diesen hier vorerst. Ich kompiliere. Gehen wir zum Hier, zur Schnittstelle und zum Select Character, den wir gerade erstellt haben. Lass uns hier einen Schauspieler machen. Die Variable ist also Akteur, und es ist eine Klassenreferenz weil wir sie spawnen werden. Also eine Klassenreferenz, und nennen wir es Spieler. Und der andere ist der Spawn-Standort und es ist ein Vektor. Also Vektor-Spannen-Standort, genau so. Und wir können jetzt wie Controller enden, nennen Sie es wählen Charakter. Und es kommt von einem Blueprint-Interface. Und wir können es miteinander verbinden. Jetzt, da wir diesen haben, können wir jetzt hier zum Widget Blueprint zurückkehren und ihn erneut auswählen nennen . Es ist also sehr gut zu üben. Normalerweise schaffe ich es nicht direkt innerhalb des Player-Controllers oder in der Schnittstelle, weil ich dir den Unterschied beibringen möchte. Also lasst uns das machen. So wie der Charakter ist dies die Funktion hier. Einfach so. Und du wählst Serena als Charakter aus. Okay, also geh jetzt zurück zum Designer. Klicken Sie auf Luke, den Button hier, gehen Sie zurück nach unten, klicken Sie auf Ungeklickt. Und als Luke kopiere ich einfach den ganzen Code noch einmal ein , kopiere Einfügen. Und ich werde es so einstellen, dass es stattdessen hier aussieht. Wenn wir also auf die Schleife klicken, wird es spawnen. Wenn wir auf Serine klicken, wird das gehen und die Arena sponsern. Also lasst uns den Code durchgehen. Wenn ich also klicke, wähle ich meinen Charakter aus. Ich führe diese Funktion aus. Diese Funktion ist am Ende der Spieler-Controller. Also werde ich diese Funktion ausführen, dieses Ereignis hier, wählt Charakter wird durch den Server gehen. Die Server gehen dann durch den Spielmodus. Und es wird einen Spieler anfordern. Und wieder möchte ich dies zu einer Blueprint-Interface-Funktion machen , wie Sie hier im Spielmodus sehen können, dies ist vorerst nur eine normale Funktion. Wir können also sehen, dass es ein wenig Zeit braucht um die Schnittstellenfunktionen zu erstellen, aber es ist sehr schön, das zu tun, und es hält Ihr Projekt optimiert und sauber. Fordern Sie also Spawn Player an, Gehen wir zurück zur Interface-Funktion oder Schnittstelle des Spielmodus. Nennen wir es einen Request-Spawn-Spieler. Genau so. Und dazu haben wir hinzugefügt: Gehen wir zurück in den Spielmodus. Wir haben den Spieler-Controller hinzugefügt. Wir haben den Schauspieler als Spieler hinzugefügt. Wir haben die Spawn-Standorte hinzugefügt. Lassen Sie es mich also vorerst löschen, speichern kompilieren und gehen wir zurück. Ich lösche sie nur, bevor ich sie mache , damit es nicht abgehört wird. Lassen Sie uns also drei verschiedene Variablen erstellen. Der eine war der Spieler-Controller, der andere war der Spieler. Und der dritte war der Spawnstandort. Auf der Spawn-Position befindet sich ein Vektor und der Spieler war Schauspieler. Und es ist die Klassenreferenz weil wir den Spieler hervorbringen wollen. Der Spieler-Controller ist unser PC Maple Story. Jetzt diese eine Anforderung Spawn-Layer, ich nenne es hier Anfrage Spawn Layer, Indie-Spielmodus. Und dann können wir es jetzt wieder so verbinden. Das Ziel ist also der Spieler-Controller und dieser am Standort. Okay? Bevor wir also auf Serena klicken, wird es den Spielmodus durchlaufen. Hier ist der Player-Controller, tut mir leid, diese elektrische Ladung wird durch den Server gehen und jetzt müssen wir hier den richtigen aufrufen. Wenn ich es lösche, müssen wir den Request Spawn Player anrufen , weil wir es gerade gemacht haben. Und ich wähle diese eine Nachricht aus. Denken Sie daran, Nachricht auszuwählen, wenn es sich um eine Interface-Funktion handelt. Sie können dieses Symbol auch sehen, wenn es auf eine Interface-Funktion trifft. Und dann verbinde sie wieder. Und jetzt musst du definieren, was der Spieler-Controller ist. Denn obwohl du im Spielmodus das Plaque-Steuerelement hier aufgerufen hast und diese Funktion hier aufrufst. Sie haben nicht wirklich definiert, was der Player-Controller ist. Und lass uns zurückgehen. Jetzt. Das ist momentan leer. Also lasst uns einfach davon ziehen. Denken Sie daran, dass wir im Player-Controller sind. Wir können einfach ziehen und selbst sagen. Wir sprechen hier nur über Display-Controller. Also wird es diese Veranstaltung durchlaufen. Und dann fordern Sie im Spielmodus den Spawn-Spieler an, es wird gehen. Und wir führen es durch den Spielmodus weil wir nicht wollen, dass der Client betrügt. Wir überprüfen das alles und es geht zurück zum Spawn-Spieler, zum Spieler-Controller. Es wird den Spieler spawnen. Und es wird hier einen Spieler hervorgebracht. Jetzt können wir es wieder anstelle eines kleinen Players zu einer Interface-Funktion machen. Es enthält also den Spieler als Schauspieler- und Spawn-Transformation. Gehen Sie zum Löschen und gehen Sie zur Schnittstelle für den Player-Controller. Ich weiß, dass viele Dinge passieren, aber wenn Sie das runterkriegen, versuchen Sie, dieses Video zweimal oder dreimal anzusehen, Sie werden ein Like bekommen, wenn Sie ein Experte darin sein werden. Also versuche zu üben und ich weiß, dass es schwierig ist, aber sobald du das zweimal oder dreimal siehst, wird das viel einfacher. Es fiel mir schwer, als ich damit angefangen habe, all das zu tun. Also lasst uns den Spawn-Spieler machen. Und wir hatten, jetzt habe ich fast vergessen, dass wir den Spieler als Schauspieler hatten und wir hatten auch die Spawn-Transformation. Das war also eine Transformation und der Spieler war Schauspieler, und es war eine Klassenreferenz. Okay, also gehen wir zurück zum Player-Controller und zu sechs Spawn-Layer-Ereignissen Bond-Layer. Und jetzt können wir es hier verbinden. Ich verbinde die Dosis und verbinde das hier. Und denken Sie daran, dass dies aus dem Spielmodus kommt. Sie müssen es also auch in den Spielmodi ändern , wahrscheinlich wird es Fehler machen. Und denken Sie daran, es stammt auch von den Schnittstellenfunktionen. Also brauchen wir das, dieses Icon hier oben. Also lass es mich löschen und spawn sagen. Lassen Sie mich eigentlich von der Spawn-Ebene des Spieler-Controllers ziehen . Jetzt kann ich auf diese eine Spawn-Spieler-Nachricht klicken. Und verbinden wir sie einfach so hier. Also spawnen wir den Spieler. Und wir gehen zurück zum Spieler-Controller und es wird den Spieler spawnen. Okay, wenn wir also einen Spieler spawnen, müssen wir etwas Letztes tun. Wir müssen einen sogenannten Prozess verwenden weil Sie den Player hervorgebracht haben, aber Sie haben der Engine nicht gesagt, dass Sie diesen Player steuern möchten , und das nennen wir besitzen. Verweisen wir also auf die Spielerbasis. Das müssen wir tun, weil wir uns auf einen Schauspieler beziehen müssen. Was versuchst du zu kontrollieren? Und wir versuchen dies zu kontrollieren, diesen hervorgebrachten Schauspieler, der jetzt eine Spielerbasis ist , weil wir ihn jetzt hervorgebracht haben. Hier. Wir haben jetzt den Verweis auf die Spielerbasis. Und ich glaube, wir haben dafür kein Interface erstellt. Eigentlich haben wir eine Spielerbasis. Lass uns hier reingehen. Und lasst uns noch einmal ein neues machen. Sagen wir, bekommt Layer-Rep. Also erhalten wir die Spielerreferenz genau wie das was wir mit dem Spieler-Controller und dem Spielmodus gemacht haben. Und wir versuchen, die BP-Spielerbasis zu referenzieren. Nennen wir es „Layer“. Denken Sie daran, wieder zur Spielerbasis zurückzukehren, zurück zu Spieler, Spielerbasis zu gehen. Und hier finden wir den Get Player Ref. Wie zuvor, was ist der Spieler? Der Spieler ist Selbst. Also in welcher Blaupause wir uns befinden. Nun, was wir versuchen, ist hier im Player-Controller. Also müssen wir uns auf die Spielerbasis beziehen. Erhält also Layer REF. Und das liegt daran, dass dies jetzt der Spieler ist, das ist der Schauspieler, aber Sie müssen dies definieren, da dies der Spieler ist. Und als Spieler möchte ich diese antwortenden Spieler besitzen. Sie müssen dies also in Blueprint tun , damit Sie es dem Motor mitteilen können. Ja, ich habe den Schauspieler hervorgebracht, aber ich möchte diesen Schauspieler auch kontrollieren. Okay, jetzt haben wir das alles gemacht. Also viel Code in diesem Video, ich entschuldige mich dafür, dass ich es zu lange gemacht habe. Ich weiß manchmal wird es hektisch, aber wir konnten es eigentlich nicht kürzer machen. Und ich habe versucht alles zu erklären, was ich durchmache. Aber jetzt, da wir auf Play klicken und auf den Button klicken, spawnen Sie tatsächlich. Aber diese Benutzeroberfläche bleibt immer noch auf dem Bildschirm. Und lasst uns zur nächsten Lektion übergehen , in der wir diese Benutzeroberfläche entfernen. 39. So entfernst du die UI aus dem Viewport: Nachdem wir nun unsere Charakterauswahl abgeschlossen haben, entfernen wir die Benutzeroberfläche für die Zeichenauswahl. Wenn ich jetzt auf den Button klicke, siehst du , dass die Benutzeroberfläche immer noch hier oben bleibt. Also lasst uns das zuerst entfernen. Gehen wir hier zur Benutzeroberfläche und zum Widget-Blueprint. Wenn ich also auf Serena klicke meinen Charakter auswähle, möchte ich die Benutzeroberfläche entfernen. Und das ist sehr einfach, denn jetzt haben wir alles eingerichtet. Ich kann diesen Player-Controller nehmen, was ich letztendlich versuche. Denken Sie daran, dass wir das Widget hier hinzugefügt haben. Wir haben ein initialisiertes Widget hinzugefügt. Wir haben das Zeichenauswahl-Widget hinzugefügt. Anstatt zwei Ansichtsfenster hinzuzufügen, gibt es etwas , das von den Eltern entfernt wird, und das versuche ich zu tun. Also muss ich eine Referenz für diese Variable innerhalb des Widget Blueprint erhalten. Also haben wir dieses bereits und wir haben die Get Layer Control unsere Referenz. Wir haben also bereits die Player-Controller-Referenz, sodass wir diese Variable einfach aufrufen können. Wir haben Zugriff auf diese Blaupause. Wenn ich nun davon rausziehe und WB sage und Sie sehen können, dass wir diese Variable haben , die wir hier hatten, erhält die WB-Zeichenauswahl. Das einzige, was ich tun muss, ist „Von den Eltern entfernen“ zu sagen. So entfernen Sie die Benutzeroberfläche aus dem Ansichtsfenster. Also sehr einfaches, sehr kurzes Video. Ich kopiere das auch für Luke. Kopieren Sie also Einfügen hier unten. Und lassen Sie uns es einfach so miteinander verbinden. Jetzt bewegen wir Dui. Mal sehen, was passiert. Wenn ich auf Jetzt spielen klicke, wähle ich den Charakter aus. Du siehst, dass ich tatsächlich laiche. Wir haben noch nicht wirklich einen Laichpunkt festgelegt. Und wenn ich meinen anderen Bildschirm hier öffne, den Client, und wenn ich zum Beispiel auf die Schleife klicke, kannst du sehen, dass ich auch laiche, als Luke und ich hier als Tsarina hervorgebracht haben. Nun, der Standort für, wie Sie sehen können, sind die Füße abgehört und das liegt daran, dass wir noch keinen Laichplatz festgelegt haben. Und du kannst auch sehen, dass wir hier als Charakter spawnen. Und das liegt daran, dass wir jetzt wieder gehen müssen , habe ich dir schon einmal gesagt, in den Projekteinstellungen und in den Karten und Modi und im Spielmodus. Jetzt, da wir einen Zeichenauswahlbildschirm haben, können wir diese Standardpunktklasse entfernen. Wir wollen nicht als irgendein Charakter spawnen. Wir möchten nur Keine auswählen. Und wir wählen unseren eigenen Charakter aus dem Charakterauswahlbildschirm aus. Wir wollen also nicht mit einem vorgefertigten Charakter spawnen. Schließen wir es und ich speichere alles, um sicherzustellen, dass das funktioniert. Und ich gehe zu den Welteinstellungen und stelle nur sicher , dass der Spielmodus hier auch keinen sagt. Wenn ich nun zum Beispiel auf Play und Spawnen klicke, können Sie sehen, dass wir hier keinen Charakter haben , aber weil wir dort nicht standardmäßig laichen, funktioniert das jetzt. Und das nächste, was wir tun wollen ist einen Spawn-Standort zu erstellen, denn jetzt haben wir keinen wirklich Spawn-Standort. Wir laichen hier nur aus dem Nichts heraus. Wir möchten also einen Spawn-Standort hinzufügen, und das werden wir in der nächsten Lektion tun. 40. Den Spawn Ort erstellen: Also für diesen einen Ort und wir möchten den Spieler beim Spielerstart spawnen. Also bevor es funktioniert hat, weil wir diese Standard-ON-Klausel auf eines der Zeichen gesetzt haben . Aber gerade jetzt, wenn Sie einen Player in der Benutzeroberfläche spawnen , hier in den Widget-Blueprints. Wenn du wieder zum Diagramm gehst, wie du hier siehst, wenn wir den Spieler spawnen, spawnen wir ihn mit Nullen, Nullen 0. Und deshalb antworten sie hier. Nach oben links. Wir müssen definieren, um sie hier beim Spielerstart zu spawnen. Und ich möchte Spawn-Punkte im Spielmodus erstellen, denn denken Sie daran, dass der Spielmodus nur auf dem Server läuft , so dass der Spieler-Controller betrügt, wenn etwas drin ist. Dies ist der ganze Zweck des Mehrspielers. Wir versuchen hier am Anfang nicht mehr zu betrügen. Wenn wir also anfangen, das Spiel zu spielen, möchte ich diesen letzten Punkt als meine Spawn-Punkte definieren. Wir können sagen, du kriegst Schauspieler des Unterrichts. Und was dieser Schauspieler der Klasse ist, lässt Sie alles bekommen, was bereits innerhalb des Levels hervorgebracht wird. Also sehr, sehr wichtig, sich daran zu erinnern was bereits innerhalb des Levels hervorgebracht ist. Dieser Spielerstart ist bereits hervorgebracht und wir können versuchen, danach zu suchen. Also hol dir Schauspieler der Klasse, wir können alles bekommen, was bereits hervorgebracht wurde und du kannst nach Spielerstarts suchen. Und du siehst hier, Spieler startet, du kannst es hier auswählen. Es wird also einen Spielerstart auswählen, es wird viel schwieriger. Stellen Sie sich vor, wir hätten mehrere Spielerstatistiken, dann müssten Sie definieren, welche Sie bekommen möchten, denn im Moment bekommt es nur einen von einem zufällig. Aber das ist vorerst in Ordnung, diesem Zweck werden wir gerade hier draußen vertrieben. Wir haben gerade nur einen Punktpunkt. Also lasst uns kompilieren und speichern. Wenn dieser Spieler anfängt, bringe ich den Standort der Schauspieler an Ort. Und dann mache ich das in eine Variable, werbe zu einer Variablen auf und nenne es Player-Spawn-Standort. Okay, jetzt haben wir diese Variable, Spieler-Spawn-Position innerhalb des Spielmodus. Jetzt haben wir diesen einen Ort. Jetzt können wir es innerhalb des Spielers benutzen. Also innerhalb der Spielerbasis, innerhalb des Event-Graphen hier. Jetzt können wir den Spieler an dem Ort spawnen , den wir im Spielmodus erstellt haben. Als wir den Spieler hier oben hervorgebracht haben, bevor ich irgendetwas mache, sagen wir Sets. Eigentlich erstellen wir eine benutzerdefinierte Variable. Nennen wir es „ Spieler-Spawn-Ort einstellen“. Also werden wir diesen Anleihstandort hier innerhalb des Spielers festlegen . Und ich möchte das durch den Server laufen lassen. Es ist also kein Schummeln. Und sagen, dass Server Blendung setzen, Standort spawnen und ihn durch den Server laufen lassen, läuft zuverlässig auf dem Server. Und was wir versuchen zu tun, ist, dass wir versuchen zu sagen, wie wir versucht haben, diesen „Set Actor Location“ zu verwenden. Dies ist die ultimative Funktion, die wir verwenden möchten, um Standort der Schauspielerin festzulegen. Denken Sie daran, dass Sie das in einer Rippe machen müssen. Benachrichtigen. Denn denken Sie daran, genau wie das, was wir zuvor in der Unwrap-Funktion gesagt haben , dies wird für alle Clients aktualisiert, da Sie dies gerade über den Server ausführen. Also was wir hier versuchen, also lasst es uns einfach machen und vielleicht ist es viel klarer , ob wir es hier zuerst schaffen, was wir versuchen ist, diesen letzten Ort aus dem Spiel zu holen -Modus. Also genau wie das, was ich vorher gesagt habe, hol dir den Spielmodus. Und dann kann man sagen, bekommt Chemograph , den wir früher erstellt haben. Und jetzt als Spielmodus kannst du diesen „letzten Bone-Standort“ verwenden. Jetzt haben wir diese Variable hier drin. Lassen Sie uns tatsächlich mit der rechten Maustaste klicken und in eine neue Variable in hier aufsteigen. Und ich nenne es einfach dasselbe , Spieler-Spawn-Standort. Aber dieses Mal, da ich auf dem Server bin, lassen Sie es uns jetzt an die Clients replizieren, denn lassen Sie uns das hier ausführen und ich kann Ihnen sagen warum. So hat der Serverplayer den Plasmonenstandort festgelegt. Und lasst uns das Startspiel machen. Und wenn ich anfange, das Spiel und das Begin Play zu spielen, läuft es immer dann, wenn du den Charakter spawnst. Wenn ich also auf Play klicke, wurde das Anfangsspiel für den Charakter noch nicht gespielt. Aber was ist, wenn ich auf den Spieler klicke? Jetzt wird das beginnende Spiel spielen. Wann immer ich meinen Charakter spawne, wird dies gestartet. Für das Startspiel möchte ich, wann immer ich den Charakter hervorgebracht habe, sofort den Standort des Spielers festlegen. Legt also Layerposition, Spawn-Position, eigentlich nicht den Standort fest. Also spawnen Spieler Standort. Und lassen Sie uns dieses auch zu einem Blueprint-Interface machen. Stellen Sie also den Spieler-Spawn-Standort ein. Löschen wir diesen hier aus der Spielerbasis und lassen Sie uns zur Interface-Player-Basis gehen. Lassen Sie uns eine neue Funktion namens „ Set Player Spawn Location“ erstellen. Gehen wir zurück zur Spielerbasis und sagen „ Layer Bond-Standorte festlegen“. Nennen wir dieses Ereignis. Und hier verbunden. Als ich anfing, das Spiel zu spielen, rufe ich dieses Event hier auf. Stellen Sie also den Spawn-Standort des Spielers ein und gehen Sie dann durch den Server und durch den Server. Es wird die Spielmodi bekommen. Die Spielmodi spawnen den Standort hier. Und ich setze die Variable hier. Aber denken Sie daran, Sie führen das durch den Server. Der Client hat also keine Chance zu wissen, was diese Variable ist, da diese nur auf dem Server läuft. Also nur der Server, den du hier oben sehen kannst Ich bin jetzt der Server. Nur der Server weiß, was gerade los ist, der Client kann den Spawn-Standort nicht sehen. Und genau wie das, was ich dir zuvor mit Multiplayer gesagt habe, musst du diese Variable wieder auf den Client replizieren. Wenn der Server mit der Logik fertig ist, muss die Logik wieder auf den Client repliziert werden. Die Daten müssen also an die Kunden zurückgehen. Und genau wie das, was wir mit dem Stimmungszustand gemacht haben, haben wir das auf Rampenfunktion gemacht. Wir können auf diese Variable klicken und sie mit der Benachrichtigung des Vertreters an die Kunden replizieren . Also werden wir alle Kunden benachrichtigen. Und noch einmal habe ich es Ihnen gesagt, bevor wir den Vertreter benachrichtigen, wenn wir visuelle Änderungen haben, und es ist eine visuelle Veränderung, wir antworten auf den Charakter, wir bewegen den Charakter davon zeigen, wo auf den Charakter antworten. An dieser Stelle hier drüben ist es also eine visuelle Veränderung. Sie müssen also diese visuelle Änderung einstellen , damit alle Kunden sie sehen können. Ich werde eine Rippenbenachrichtigung machen, damit alle Kunden sie sehen können. Und was wir hier drin machen wollen und die Anleiheposition auf der Rampe. Und eigentlich nur für meine OCD sehe ich, dass es hier Leerzeichen gibt. Ich lösche es einfach noch einmal. Ich möchte es ändern, bevor ich irgendetwas mache. Ich werde diese Leerzeichen hier unten in meiner Variablen entfernen . So. Ich werde wieder auf die Netzhaut drücken , einfach so. Nun, hier in der Unwrap-Funktion, lassen Sie uns jetzt tatsächlich nehmen , dass wir uns bereits innerhalb des Charakters befinden, also können wir einfach sagen, dass Sie den Standort des Schauspielers festlegen. Das ist es, was wir tun wollen. Der Standort der Schauspielerin und der Standort sind also, wir möchten es auf diesen aktualisierten Ort einstellen, damit dieser Spieler den Standort spawnt. Gehen wir also hier rüber zur Unwrap Funktion. Ziehen Sie diese Plasmonposition. Ich schließe es einfach an den neuen Standort ein. Dies ist also der neue Ort, auf den wir den Schauspieler einstellen möchten. Jetzt können alle Kunden sehen, dass der Charakter die Position an diesen neuen Standort wechselt. Klicken wir jetzt auf Play und sehen, was passiert, wenn wir etwas vermasselt haben. Klicken Sie also hier auf Play, und Sie können sehen, dass ich jetzt hier unten spawne, also funktioniert das. Und wenn ich zurück zu Luke Lips gehe, um zu schauen, sind das die Kunden. Schauen wir uns zum Beispiel an. Du kannst jetzt sehen, dass das tatsächlich richtig spawnt und ich kann spielen als ob sie zusammen spielen können, immer gut zu testen und zu sehen, ob es nicht abgehört ist. Bevor wir fortfahren. Sie können sehen, dass dies funktioniert und richtig reagiert. Also nur um das sehr schnell durchzugehen, denn manchmal mache ich mir Sorgen, dass dies verwirrend sein könnte. Fangen wir also hier in der Benutzeroberfläche an. Hier klicken wir zum Beispiel auf Serena. Lassen Sie mich diese näher zueinander ziehen. Also hier klicken wir auf Serena, um Arena zu sponsern. Es geht zum Spieler-Controller und wählt den Charakter aus. Also wird es diese Veranstaltung hier durchführen. Und es wird auch den Zeichenauswahlbildschirm entfernen . Also geht es zu diesem Auswahlcharakter zum Spieler-Controller. Lasst uns also zur Plake-Kontrolle gehen und sehen, was passiert. Im Spieler-Controller, der hier ist. Es wird dieses Select Character Event ausgeführt , da der ausgewählte Charakter durch den Server läuft, und dann ruft der Server dieses Ereignis hier im Spielmodus auf, weil wir verhindern wollten betrügen, wir wollen prüfen, ob wir den Charakter spawnen dürfen. Sie ihn erneut durchlaufen , fordern Sie Bond-Spieler an. Es durchläuft den Spielmodus. Und dann wirft es uns zurück in den Spieler-Controller. Und im Spieler-Controller werden wir den Spieler spawnen. Und wir werden auch den Spieler kontrollieren. Wann immer Sie den Spieler spawnen, führt er diesen Startplatz aus. Wann immer der Spieler gerade spawnt, wird der Spielerspawn-Standort festgelegt. Es führt dieses Ereignis hier aus, und dieses Ereignis läuft durch den Server. Auch hier verhindern wir, dass das Betrügen abgelehnt wurde. Der Server. Muss prüfen, ob das, was Sie tun, richtig ist. Sie können also sehen, dass die Methode hier alles ist, was wir immer versuchen, Variablen über den Server zu setzen. Also springe ich einfach direkt auf den Server. Und dann endloser Server, ich mache all diese Codierlogik. Server. Es wird den Ort festlegen. Eigentlich wird es vom Spielmodus aus, den wir hier erfunden haben , zum Standort des Spielers gelangen Spielmodus aus, den wir hier erfunden haben , zum Standort des Spielers . Also haben wir dieses Schauspielklassenspiel gestartet und wir haben den Zugangspunkt bekommen und wir haben es in eine Variable verwandelt. Jetzt wissen wir, dass der spezifische Ort für diesen Spieler hier beginnt. Und jetzt haben wir das, diesen Ort für diese Spawn-Punkte. Und dann haben wir es in eine neue Variable innerhalb der Spielerbasis geschafft innerhalb der Spielerbasis und den Spawn-Standort des Spielers genannt. Jetzt repliziert es in eine rip-Benachrichtigung, die Sie dann zur Entpack-Funktion bringt , da jedes Mal, wenn Sie den Wert oder eine Rep-Notif-Funktion ändern , eine Wrack-Notifing-Variable ist. Es wird die Funktion „ Rep Notify“ ausführen. Jetzt können Sie sehen, dass wir diese Variable setzen. Dann führen wir diese Unwrap Funktion automatisch aus. Und das einzige, was die Funktion ausgepackt hat, ist Standort unserer Akteure festzulegen. Auch hier verwenden wir eine Wiederholungsbenachrichtigung , weil wir dies im Mehrspielermodus machen. Wann immer Sie visuelle Änderungen haben und den Standort eines Spielers von diesem Punkt bis zu diesem Zeitpunkt ändern , ist eine visuelle Veränderung. Alle Kunden können den visuellen Wandel dadurch erkennen , genau wie wir es mit dem Bewegungszustand gemacht haben. Also sagten wir die Flip Books. Dies sind ebenso visuelle Veränderungen. Wechseln Sie also Flipbooks, damit der Spieler das geänderte Flipbook sehen kann. Das ist auch eine visuelle Veränderung. Ich hoffe also, dass das klar war. Auch wenn etwas verwirrend ist und Sie etwas mehr klären müssen, können Sie gerne meinem Discord-Server beitreten, und ich helfe Ihnen gerne weiter. Also lasst uns von hier aus weitermachen. Lasst uns alles retten. Lass mich das schließen und lass uns zur nächsten Lektion übergehen. 41. Den Camera erstellen: Wie Sie hier gerade sehen können, bin ich in Maple Story und der Kamera und Maple Story dort. Es ist nicht wie bei uns, dass Sie sehen können, wenn ich mich bewege, die Kamera folgt reibungslos. Es ist nicht wirklich an den Charakter gebunden. Wenn ich mich also hier bewege, kannst du sehen, dass es mir folgt, aber es ist nicht wirklich an mich gebunden. Es bewegt sich also wie diese sanfte Bewegung. Das ist es, was wir also erreichen wollen. Also zurück hier bei unserem Spiel, anstatt die Kamera hier und die Spielerbasis anzubringen. Also haben wir diese Kamera derzeit an den Player angeschlossen. Wir müssen separate Kameras herstellen, damit wir dem Player reibungslos folgen können . Jetzt können Sie die Kamera natürlich so behalten, wenn dies der Ort ist, an dem Sie möchten, aber ich versuche Maple Story so viel wie möglich zu replizieren , damit wir auch davon üben können. Beginnen wir also damit, den Kamerakteur zu erstellen. Anstatt die Kamera anzuschließen, machen wir es stattdessen zu einer Blaupause. Rechtsklicken Sie also, erstellen Sie eine Blueprint-Klasse Und lass uns einfach einen Schauspieler machen. Und nennen wir es BP-Kamera. Okay, also klick hier an, VB-Kamera. Lasst uns wieder hier rauf gehen und die Kameras hinzufügen. zuerst, genau wie zuvor, Lassen Sie uns zuerst, genau wie zuvor, eine Feder hinzufügen. Das ist also der Halter der Kamera. Und dann werden wir die Kamera hinzufügen. Also genau wie zuvor, nichts Neues. Klicken Sie auf den Federarm. Ich werde es um minus 90 Grad drehen, genau wie zuvor, kompilieren und speichern. Und ich werde diesen entfernen namens Remote do Kollisionstest. Ich klicke auf die Kamera und ändere sie eine orthogonale Ansicht und stelle die Breite auf 1304 ein. Und das ist nicht wirklich etwas Neues. Das hatten wir auch hier in unserer Kamera gemacht. sind also genau die gleichen Einstellungen mit denen ich versuche zu gehen. Okay, jetzt haben wir die Kamera und ich gehe zu meiner Spielerbasis und ich werde diese Kamera jetzt löschen. Jetzt, da wir eine Kamera erstellt haben, können wir sie in der nächsten Lektion spawnen. 42. Die Kamera aufzeichnen: Das, was wir versuchen, ist, dass wir jetzt versuchen, das Kamera-Ecto zu spawnen. Und das Ziel ist es, jedes Mal in der Kamera zu spawnen , wenn sich neue Spieler verbinden. Lasst uns also die Laichlogik innerhalb der Spieler machen. Wenn sich der Spieler also in das Level bindet, wird es eine Kamera spawnen, so dass sie diesem Spieler folgen kann, genau wie wir es zuvor hatten. Also wieder hier, am Anfang, also wird unser Spieler spawnen. Hier werden wir sagen Spawn-Schauspieler. Es ist also sehr gut, sich an all diese Tools zu erinnern. Spawn-Schauspieler wird immer dann benutzt, wenn man etwas spawnt. Genau wie drüben im Spieler-Controller, wo wir den Spieler hervorgebracht haben. Sie können diesen Bone-Schauspieler erneut verwenden, um die Kamera zu spawnen. Sagen wir also Spawn-Schauspieler der Klasse. Und vorher habe ich dir gesagt, dass wir den Spielmodus durchlaufen müssen , um etwas zu spawnen, damit wir Betrug verhindern. Dies ist momentan in Ordnung, damit diese Kamera dies auch direkt vom Client aus erledigt. Weil diese Kamera nur spielerbasiert ist. Es ist nicht etwas Globales, wie das Hinzufügen von Spielern zum Level. Wir fügen nur eine Kamera hinzu, damit der Spieler verfolgt werden kann. Ich habe hier einen Schauspieler hervorgebracht. Und wir müssen die Kamera wählen und wir nannten sie BB, BP Kamera. Also suche nur nach einer Kamera. Und diese eine BP-Kamera hier. Wir müssen jetzt die Spline-Transformation auswählen. Und ich fahre von hier aus und klicke einfach so auf „ Transformieren“. Und jetzt müssen wir definieren, an welchem Ort wir diese Kamera spawnen möchten . Und ich möchte es nur am Standort des Spielers spawnen. Wir sind also schon im Spieler. Wir können also einfach sagen, Schauspielerstandort holen. Und das Ziel ist Selbst, denn dies ist der Charakter, den wir derzeit kontrollieren. Also bekommen wir diesen hervorgebrachten Charakter und gehen einfach an diesen Ort dieses Bond-Charakters. Ich verschiebe das ein bisschen hierher. Die Rotation ist diese und die Skala ist das. Das spielt momentan keine Rolle. Und was das Laichen angeht, möchte ich hier klicken, und klicken wir auf diesen Punkt, um den Standort anzupassen, aber immer spawnen. Dies stellt nur sicher, dass wir, obwohl wir mit einigen, irgendwann kollidieren , sowieso nur die Kamera spawnen. Und eigentlich denke ich, dass wir das auch in der Plake-Kontrolle tun müssen. Wenn Sie es für den Spieler immer noch standardmäßig haben, denken Sie daran, es so einzustellen, dass es versucht wird , den Standort anzupassen, aber immer zu spawnen. Das wird uns daran hindern, dass der Spieler irgendwann nicht spawnen kann , aber wir versuchen, den Standort anzupassen , aber trotzdem den Spieler zu spawnen. Diese Kollision wird standardmäßig ein Problem sein, wie dieses, wenn wir Feinde haben, da es Feinde geben wird und Sie kollidieren werden. Also immer Bindung, obwohl wir eine Kollision haben, versucht hat, den Standort anzupassen. Okay, lass uns hier zurück zur Kamera gehen. Jetzt haben wir die Kamera hervorgebracht. Jetzt können Sie hier sehen, obwohl wir die Kamera hervorgebracht haben und ich auf Play klicke. Und denken Sie auch daran, die Kamera hier zu entfernen die Kamera hier zu wenn Sie dies in der vorherigen Lektion nicht getan haben. Entfernen Sie also die Kamera und spawnen Sie eine neue Kamera. Versuchen wir auf Jetzt spielen zu klicken. Und jetzt können Sie hier sehen, dass wir, obwohl wir die Kamera spawnt haben, immer noch hier in die Sicht eingelassen sind. Und das liegt daran, dass Sie, obwohl Sie eine Kamera spawnen, der Engine mitteilen müssen, dass Sie diese neue Kamera als neue Ansicht haben wollen . Wenn Sie also davon herausziehen und Ansichtsziel festlegen sagen, können Sie sehen, dass Sie nichts sehen können, obwohl Sie danach suchen. Wenn Sie jedoch den kontextsensitiven Wert entfernen, können Sie sehen, dass dies der ist, den wir verwenden möchten. Setze dein Ziel mit Blend. Und warum passiert das? Warum erscheint es nicht hier drüben? Sie können sehen, ob Sie die Maus darüber halten. Es besagt, dass das Ziel ein Spieler-Controller ist. Kontextsensitiv bedeutet nur für den Kontext hier, für diesen Stift, von dem Sie ziehen. Dies ist nicht wirklich ein Spieler-Controller. Das ist die Kamera. Wenn Sie also nach etwas suchen , das die Versorgungskontrolle benötigt, werde ich es Ihnen nicht zeigen es sei denn, Sie entfernen diesen kontextsensitiven Wert. Aber wenn Sie den Spieler-Controller bekommen, versuchen wir es in die andere Richtung. Sagen wir, es ist Controller. So bekommst du den Spieler-Controller. Im Multiplayer bist du innerhalb des Players und sagst einfach „Controller holen“. Und es heißt, gibt den Controller für diesen Schauspieler zurück , weil wir unseren Spieler-Controller hier haben wollen. Wir haben den Controller und verwenden wir den Get Black Controller REF, den wir zuvor mit unserer Schnittstelle erstellt haben . Sagen wir also Player-Controller ref. Jetzt sprechen wir speziell über diesen Controller. Lasst uns das jetzt miteinander verbinden. Und von hier aus können wir als Spieler-Controller sagen, das Ansichtsziel festlegen. Sie können sehen, ich kann es mit der kontextsensitiven Bearbeitung sehen und das bedeutet es. Jetzt weiß es, wovon Sie sprechen , denn das Ziel ist der Spieler-Controller. Also etwas, dessen du dir bewusst sein musst. Klicken wir nun auf dieses hier heißt „Ziel mit Mischung anzeigen“. Jetzt braucht es ein neues Ansichtsziel. Und die neue Ansicht Chocolate ist nur diese Kamera. Nur um alles so zu machen, wie man das nehmen und sich hier verbinden kann, ist das kein Problem. Das wird funktionieren. Aber manchmal organisiere ich gerne Dinge und möchte sie zu Variablen machen. Also werde ich mit der rechten Maustaste hier klicken und auf Variable werben und es schwarze Kamera nennen. Und tatsächlich habe ich es schon von zuvor erstellt , ich habe etwas getestet. Also lass mich das alte einfach löschen, kompilieren und lass es mich nochmal machen. Layer-Kamera. Okay, also lass es mich jetzt verbinden. Und jetzt als diese Variable können Sie einfach wissen , dass Sie die Variable haben. Sie können diese Variable einfach anklicken und ziehen und so verbinden. Also kannst du es entweder so machen oder du kannst es so machen, dass beide funktionieren. Das ist der richtige Weg. Ich mag es einfach manchmal einfach separat so zu machen , um alles sauberer zu machen. Auch hier ist es in Ordnung, diese Variable festzulegen , obwohl wir vom Client aus laufen, also laufen wir nicht auf dem Server, was ich Ihnen zuvor gesagt habe. Wir müssen Variablen auf dem Server setzen. Ich setze diese spezifische Variable auf dem Client ein, da dies clientseitig ist Die Kamera, die um den Charakter herum folgt, wird nur von diesem Charakter gesehen. Alle anderen Charaktere, alle anderen Kunden, kümmern sich nicht wirklich um den Spielercharakter oder die Spielerkamera. Eher. Die Player-Kamera ist etwas speziell dich und alle anderen Spieler kümmern sich nicht wirklich darum. Genau wie die Benutzeroberfläche, die Benutzeroberfläche, Ihre Benutzeroberfläche, kümmern sich andere Spieler nicht darum. Sie haben ihre eigenen Schnittstellen. Okay, also haben wir diese Kamera. Wir haben jetzt das Ansichtsziel mit Mischung festgelegt. Und ich werde das ein bisschen besser organisieren, bevor es zu unordentlich wird. Also so etwas hier und ich werde das so näher bringen. Okay, also klicken wir jetzt auf Kompilieren, Speichern und klicken Sie auf Play und wählen Sie einen Charakter aus. Sie können sehen, obwohl wir den Code haben, ich weiß, dass wir den Code richtig haben, aber Sie können sehen, dass er immer noch durcheinander ist. Und warum ist das so? Dies liegt daran, dass es manchmal dauert, man sieht hier Fehler oder manchmal dauert es eine Sekunde, bis ein Charakter im Multiplayer spawnt, es gibt eine kleine, kleine Verzögerung. Und dieser Code, dieser ganze Code hier, läuft so schnell, er ist verrückt. Man muss also Zeit geben, manchmal damit der Charakter spawnt. Hier stellen wir also den Standort der Spieler fest, wann immer die Anleihen des Spielers, ich werde einen Verzögerungsknoten setzen. Versuchen wir also, hierher zu ziehen und Verzögerung zu sagen. Und manchmal ist das Versuch und Irrtum. Ich weiß, dass dieser Code korrekt ist, also bin ich manchmal verwirrt. Warum funktioniert das nicht? Und ich könnte denken, dass es eine kleine Verzögerung gibt , wenn die Spieler laichen, bis zum tatsächlichen Hinzufügen der Kamera. Es kann also nicht, es kann den Spieler nicht finden. Das heißt, es versucht es hier zu spawnen, aber es kann den Player-Controller nicht finden weil Sie ihm hier etwas Zeit geben müssen. Lassen Sie uns also um 0,05 verzögern. Also sehr, sehr kleine Verzögerung. Wenn du einen schreibst, bedeutet das, dass es 1 Sekunde ist. Also 0,05 Sekunden. Also sehr, sehr leichte Verzögerung hier. Klicken wir auf Kompilieren und Speichern und lassen Sie uns versuchen, auf Jetzt spielen zu klicken, klicken Sie auf den Charakter und Sie können sehen, wie der Charakter laichen wird. Die Verzögerung hat hier also sehr geholfen. Versuchen wir, den Kunden zu spawnen. Und der Kunde laichen auch und nur um sicherzustellen, dass er sich sieht. Wenn ich das kleiner mache. Ja, also funktioniert alles und versucht nur zu spawnen. Jetzt bekommen wir einen Fehler. Ich versuche zu sehen, was das ist. Versuchen wir auf Jetzt spielen zu klicken und als Server zu gehen und hier zu schauen. Look kann auch spawnen. Okay, also bekommen wir hier einen Fehler und ich möchte versuchen zu sehen, warum wir diesen Fehler bekommen. Okay, manchmal läuft der Code hier zu schnell, also haben wir ihn stattdessen hier gespielt, damit wir keine Fehler haben. Also funktioniert jetzt alles einwandfrei. Und manchmal läuft der Code hier schnell und es wird nicht finden können, dass die Blasenkontrolle andere Variable leer ist. Also hier, was wir tun wollen, um sicherzustellen , dass dies nicht passieren wird. Ziehen wir nun von hier aus dem Spieler-Controller und sagen, dass es gültig ist. Und Sie können dieses Fragezeichen auswählen. Wenn der Player-Controller gültig ist, können wir diese Kamera einstellen. Und wenn es nicht gültig ist, tu nichts. Also können wir versuchen, das hier zu tun, und das wird den Fehler beheben. Also doppelklicke ich auf diesen Pin. Es ist also nicht zu verwirrend. Nur um Dinge hier unten zu organisieren, so etwas. Und lasst uns stattdessen versuchen, mit diesem Code zu laufen. Kompilieren wir also speichern. Wenn dieser Player-Controller gültig ist, erstellen wir die Kamera. Wenn nicht, tun wir nichts, was verhindert, dass es diese Fehler ausgibt, wenn die Variablen leer sind. Klicken wir auf kompilieren. Und jetzt klicken wir auf Diesen Charakter erstellen. Lasst uns Luke erschaffen. Sehen Sie, dass alles reibungslos läuft. Ich klicke auf Control oder Escape. Sie können sehen, dass wir keine Fehler bekommen. Jetzt auch sehr schön zu prüfen, ob etwas gültig ist. Sie können das auch manchmal mit Variablen tun , wenn Sie es müssen. Wenn ich diese Kamera also nur für die Wissenschaft ziehe, können wir mit der rechten Maustaste darauf klicken und wir können auf Konvertieren klicken, um zu validieren, abrufen. Das funktioniert auch. Also hätten wir diese Plake-Kontrolllinien tatsächlich zu einer Variablen machen können und wir können sie so überprüfen. Wenn der Spieler-Controller gültig ist, können Sie etwas tun. Wenn es nicht gültig ist , tut das nichts. 43. Die Kameraposition aktualisieren: Jetzt ist es an der Zeit, die Kameraposition zu aktualisieren. Sie können hier sehen, wenn wir auf Jetzt spielen klicken, wir können mit dem Charakter gehen, wir können uns bewegen, aber die Kamera ist statisch und sie folgt nicht unserem Charakter, und das ist es , was wir wollen. Gehen wir also zurück zur Spielerbasis und lassen Sie uns diese Logik hier machen. Also habe ich zwei neue Tools, die ich dir beibringen kann. Es geht um Timer und es geht um eine Zeitleiste. Also zwei sehr wichtige Dinge in Blueprint. Also lasst uns das hier am Anfang machen. Also wann immer wir anfangen, das Spiel zu spielen und wir haben die Kamera hervorgebracht, und wir befestigen unser Selbst, unsere Sicht an diese Kamera. Lassen Sie uns auch die Ansicht der Kamera aktualisieren , damit sie dem Player ständig folgt. Bevor ich jetzt einen Timer mache, möchte ich tatsächlich ein Event ankreuzen. Ich wollte dir das zeigen und bevor ich dir gesagt habe, dass du dieses Tick-Event niemals benutzen sollst, denn das läuft 60 Mal pro denn das läuft 60 Mal pro Sekunde und dein Spiel wird nicht optimiert. Sie können es viel besser machen, als dies zu benutzen. Ich werde das jetzt benutzen und wir schalten es mit einem Timer um. Und das habe ich dir vorher gesagt. Sie können andere Dinge tun, als manchmal ein Häkchen zu verwenden. Und was ich damit meine, ist, dass Sie Timer verwenden können um zu vermeiden, Texte zu verwenden , die Ihren Code 60 Mal pro Sekunde ausführen. Wir können also Timer verwenden , um dies zu vermeiden. Aber lass uns jetzt ein Häkchen benutzen. Und ich kann dir zeigen, wie wir es später ändern , damit du daraus lernen kannst. Das, was wir im Wesentlichen versuchen, ist, dass wir versuchen, eine Displaykamera zu bekommen, die wir haben. Das ist die Kamera , die wir hier hervorgebracht haben. Wir versuchen, diese Kamera zu bekommen und einfach den Standort festzulegen. Das ist es, was wir im Wesentlichen versuchen. Wir versuchen, den Standort des Spielers auf den Standort des Spielers festzulegen . Wenn wir es also sehr, sehr einfach machen, können wir einfach sagen, dass wir den tatsächlichen Standort abrufen. Und der eigentliche Standort ist Selbst, welches dieser Spieler ist. Der neue Standort dieser Kamera ist also der Standort des Spielers. Also wird es dem Spieler die ganze Zeit folgen. Und da dies 60 Mal pro Sekunde läuft, wird es dem Spieler ständig folgen. Jetzt klicken wir auf Play hier. Und du siehst, wenn ich herumlaufe, jetzt folgen wir dem Spieler genau wie zuvor. Das ist also im Wesentlichen das, was wir versuchen zu tun. Und natürlich wird Ihnen dies einen Fehler geben, da Sie dieses Ereignis im Wesentlichen ausführen bevor Sie diese Kamera ausgeführt haben, reagieren Sie hier auf diese Kamera. Und das können Sie wieder vermeiden, genau wie ich im vorherigen Video gesagt habe, können Sie dies in eine Validierung konvertieren, die es bekommt. Wenn es gültig ist, können Sie die Kamera aktualisieren. Okay? Das läuft also, nimm nicht einmal, das läuft 60 Mal pro Sekunde und es folgt unserem Charakter. Aber wir wollen diese reibungslose Bewegung. Wir wollen nicht, dass es dem Charakter genau wie zuvor folgt . Weil wir das schon vorher gemacht haben. Wir wollen dem Charakter reibungslos folgen. Und um etwas reibungslos zu verfolgen, können Sie eine Zeitleiste verwenden. Aufgrund der Zeitleiste müssen Sie darüber nachdenken , wann immer Sie reibungslos von 1 von Punkt A nach Punkt B wechseln möchten . Wenn Sie zum Beispiel eine Doppeltür öffnen, öffnen Sie die Doppeltüren reibungslos oder sogar nur eine einzige Tür, oder sogar nur eine einzige Tür wenn Sie die einzelne Tür öffnen. Bewegen Sie die Tür von Punkt A nach Punkt B, das sind sanfte Bewegungen, die Sie mit Zeitleisten machen können. Wenn Sie zum Beispiel Maple Story gespielt haben, wenn Sie Gegenstände fallen lassen oder wenn Sie etwas töten und Gegenstände fallen lassen, sie es hier fallen, als ob der Gegenstand in die Luft fliegt und auf den Boden fällt. Diese sanfte Bewegung ist auch eine Zeitleiste. Bei jeder sanften Bewegung von Punkt A nach Punkt B können Sie eine Zeitleiste verwenden. Suchen wir also nach einer Zeitleiste und lasst uns etwas darüber lernen. Klicken wir also hier auf die Timeline und geben wir ihm einen Namen und ich nenne es Layout, Kameraposition. Und doppelklicken Sie auf diese Zeitleiste. Und innerhalb dieser Zeitleiste können wir einen neuen Track hinzufügen. Und das, was wir hinzufügen möchten, ist einfach ein Float. Und ich kann dir zeigen, warum wir einen Float hinzufügen. Float wieder, genau wie die Variable hier unten , ist Float nur ein numerischer Wert mit Dezimalstellen. Das ist einfach das, was es ist. Also zum Beispiel 25.2 und das ist ein Float. Also lass mich das hier unten löschen. Also lasst uns einen Float hinzufügen. Und lass es uns versuchen. Nennen wir es Bewegung Alpha. Okay, also lassen Sie mich an zwei Punkten mit der rechten Maustaste in die Grafik klicken. Und ich möchte das zuerst und zum Zeitpunkt 0 auswählen, also wollte ich, dass es bei 0 Sekunden 0 ist, also 00. Und die Länge dieser Zeitleiste hier oben möchte ich, dass du nur eine Sekunde hast. Für die zweite, zum Zeitpunkt 1 Sekunde, möchte ich, dass der Wert eins ist. Und Sie können auf diese beiden Pfeile klicken, damit sie hier auf den Bildschirm passen. Nach einer Sekunde möchte ich nur, dass es der Wert von einer ist. Okay, also kann ich dir zeigen, warum wir das machen und wofür wir das benutzen können. Ich möchte auch, dass du darauf klickst, benutze den letzten Keyframe wie diesen. Also lass uns jetzt zurückgehen. Jetzt haben wir diese Zeitleiste und Sie können das Bewegungshalpha sehen, die Last, die wir erstellt haben wird jetzt hier angezeigt und wir können sie verwenden. Und das, was wir verwenden möchten, ist etwas, das als Schleife bezeichnet wird. Also ist die Schleife hier. Lineare Interpolation. Und es geht von Punkt A nach Punkt B. Und es braucht ein Alpha. Und Sie können sehen, dass wir dieses Alpha erstellt haben und was es bedeutet, es geht reibungslos von Punkt A nach Punkt B. Also wird es diese Zeitleiste spielen. Welchen Wert Sie hier von Punkt A nach Punkt B anschließen, er wird von diesem Punkt bis zu diesem Punkt reibungslos laufen, weil es bis zum Punkt B gehen wird. Wir können uns also vorstellen, dass dies der Punkt ist a, das ist Punkt B. Und nach 1 Sekunde geht es zu Punkt B. So sanfte Bewegung, das ist das Alpha hier, das ist es, was es tut. Wir müssen also angeben, was Punkt a ist und was Punkt B ist. Punkt A ist überall dort, wo sich die Kamera gerade befindet. Also lasst uns die Kamera hierher holen. Und lass mich das einfach ein bisschen runterziehen und sagen, dass es Schauspielerstandort bekommt. Punkt a ist also, wo sich die Kamera gerade befindet. Eigentlich brauchen wir eine Schleife für den Vektor, weil Sie sehen können, dass dies ein Vektor ist, ist ein Float, also ist das nicht vollständig korrekt. Lassen Sie uns also eine Schleife schreiben, und wählen wir diesen Vektor aus, um diese zu löschen. Also hier, hol dir den tatsächlichen Standort der Kamera. Punkt A ist also, wo sich die Kamera gerade befindet, Punkt B ist überall dort, wo sich der Charakter gerade befindet. Wir versuchen, die Kamera von dort zu bewegen, wo sie gerade ist , dorthin, wo sich der Charakter gerade befindet , der eine gute Schauspielerposition hat. Und das wird reibungslos geschehen, weil wir dieses Alpha reibungslos von Punkt A nach Punkt B laufen lassen. Okay, also lass mich das alles löschen, lass es mich einfach löschen. Lassen Sie mich das alles löschen , wird es einfach von neu schaffen. Jetzt möchte ich das hier von Anfang an spielen. Also nicht, spiele nicht hier. Ich möchte von dieser Stadt aus hier unten anfangen. Und jetzt verbinden wir es hier im Update, wir möchten einfach wieder, genau wie zuvor, den Standort der Kamera einstellen. Stellen Sie also den Standort des Schauspielers fest Der neue Standort ist dieser. Und wir werden das wie hier aktualisieren. Es wird also reibungslos von Punkt A nach Punkt B gehen, weil wir diese Zeitleiste hinzugefügt haben. Und durch dieses Update wird dieser Ort ständig von Punkt A nach Punkt B aktualisiert dieser Ort ständig von Punkt A nach Punkt B Dies wird also 60 Mal pro Sekunde aktualisiert , da wir ein Ereignis-Tick verwenden. Klicken wir also auf Jetzt spielen und klicken Sie hier auf Tsarina. Du kannst sehen, wenn ich mich jetzt bewege, es bewegt sich reibungslos wie in Maple Story. Sehr cooler Effekt. Okay, jetzt funktioniert das so, wie es soll. Großartig. Das war also einfach. Und Sie können sehen, dass wir natürlich Fehler bekommen , weil dies an Take arbeitet und wir dies erneut verhindern können, wodurch dies ein gültiger Knoten ist. Aber lass uns das nicht machen. Ich möchte Ihnen tatsächlich zeigen, wie wir das Ereignis nicht krank verwenden können da dies jetzt 60 Mal pro Sekunde läuft und Sie Ihren Code optimieren können. Ich mag es nicht, wenn ich das in meinem Projekt sehe. Also lasst uns das ein bisschen nach unten bewegen. Um die Verwendung von Häkchen zu verhindern, können Sie sogenannte Timer verwenden, damit es steuern kann , wie viel es pro Sekunde laufen wird. Angenommen, stellen Sie einen Timer nach Ereignissen ein. Okay, also was bedeutet das jetzt musst du angeben, wie oft du jede Sekunde laufen wirst. Wenn Sie beispielsweise einen schreiben, wird es nur einmal pro Sekunde ausgeführt. Wenn ich 0.5 schreibe, wird es zweimal pro Sekunde ausgeführt da dieses Ereignis in 0,5 Sekunden abgeschlossen wird. Wenn R 0,2 ist, wird fünfmal pro Sekunde ausgeführt . Im Wesentlichen, wie Sie dies berechnen, schreiben Sie einfach eins geteilt durch 0 auf die Zahl, die Sie hier geschrieben haben. Und Sie können sehen, dass das fünf gibt, das bedeutet, dass dieser Code fünfmal pro Sekunde läuft. Wenn Sie 0,08 schreiben, läuft es 12,5 Mal pro Sekunde. Und was die Veranstaltungen angeht, laufen die Event-Tickets um 0,1516. Das ist also das Event-Tick. Es läuft bei 0,0017, so. So können Sie beispielsweise Ihren Code optimieren , indem Sie ihn so ausführen. Es ist also nur zehnmal pro Sekunde statt 60 Mal pro Sekunde. So können Sie sehen, dass Sie die Dinge mit Timern optimieren können. Sie können nicht, Sie können wählen nicht 60 Mal pro Sekunde zu laufen. Also lasst uns das hier verbinden. Jetzt brauchst du ein Ereignis, um es auszuführen. Was Sie also sagen können, können Sie von diesem Ereignis ziehen und Sie müssen ein benutzerdefiniertes Ereignis erstellen. Und lasst uns dieses Ereignis machen, nennen wir es Aktualisierungsebene Kameraposition. Jetzt können wir unseren Code verbinden. Lassen Sie mich dieses Event-Tick löschen. Und lass mich diesen Code von Anfang an hier verbinden . Jetzt klicke ich auf Kompilieren, Speichern und klicke auf Play. Und jetzt lass mich tatsächlich auf dieses Looping klicken, denn wenn du nicht auf Looping klickst, wird dies nur einmal gespielt. Also lass mich auf Looping klicken. Und wenn ich auf Jetzt spielen klicke, meine Kamera, ist es zurückgeblieben, weil sie mir nur fünfmal pro Sekunde folgt. Es wird also nur fünfmal pro Sekunde aktualisiert , weil wir hier 0,2 geschrieben haben. Jetzt ist die Zahl, die ich mir ausgedacht habe, 0,03. Das war so, machte es glatt und etwas darüber, was es tatsächlich langsamer macht. Wenn ich das hier aufnehmen müsste. Und Sie können sehen, dass das jetzt 33 Mal pro Sekunde läuft. Also viel besser als 60 Mal pro Sekunde zu laufen . Also jede Sekunde betreibst du es 30 Mal weniger als ein Häkchen. Versuchen Sie also, dies auszugleichen und versuchen Sie, ein Gleichgewicht zwischen dem Aussehen Ihres Spiels und Ihrer Optimierung zu finden . Manchmal möchten Sie stattdessen vielleicht 0,04 machen. Und das macht einen großen Unterschied, denn wenn ich hier 0,04 schreibe, also wenn ich es hier aufnehme, 0104, kann man sehen, dass es von 33 Mal pro Sekunde geht und den Code ausführt, der nur 25 Mal pro Sekunde ist. So macht es einen großen Unterschied, von 0320403 zu gehen , war das beste Ergebnis auch optisch. Es mag also nicht zu viel. Wenn ich also kompiliere und speichere und hier einfach herumspiele, kannst du sehen, dass es gut läuft wie das Event-Tick. Aber jetzt laufen wir es nur 33 Mal pro Sekunde und nicht 60 Mal pro Sekunde. Also viel besser als zuvor. 44. Die Kamerabewegung stoppen: Okay, jetzt lasst uns sehen, wie wir die Kamerabewegung stoppen. Wenn wir also das Spiel spielen und hier zur Seite gehen, möchte ich die Kamerabewegungen stoppen, damit wir hier nicht über diesen Rand gehen. Also möchte ich die Kamera irgendwo hier anhalten. Also gehen wir nie an den Rand. Wenn der Spieler läuft. Von nun an bis zu diesem Punkt wird die Kamera einfach gestoppt und der Spieler wird einfach herumlaufen. So ist es in Maple Story. Mal sehen, wie wir die Kamera stoppen. Und im Wesentlichen habe ich verschiedene Methoden ausprobiert und versuche immer, die beste zu finden , weil ich nicht zufrieden bin, obwohl zwei von ihnen Methoden funktionieren. Ich habe versucht, das Beste zu finden, wenn ich mein Spiel mache. Und was wäre die beste Lösung dafür? Das Beste dafür ist, dass wir etwas hinzufügen können , das als Kollisionsbox bezeichnet wird. Erstens, der Spieler oder die Kamera interessiert diese Kollisionsbox und das Ereignis sollte stattfinden. Um eine Kollisionsbox hinzuzufügen, haben wir diese Kachelzuordnung tatsächlich in einen Akteur geändert. Also lasst uns das zunächst hier machen. Gehen wir also zum Blueprints-Ordner. Wir können es einfach hier draußen machen, wenn Sie möchten, oder wir erstellen einen Ordner. Und wir können immer einfach einen Ordner erstellen. Vielleicht haben Sie irgendwann mehr Karten, es kann besser organisiert bleiben. Also Kachel Maps. Klicken wir mit der rechten Maustaste hier und lassen Sie uns eine neue Blueprint-Klasse erstellen. Und wenn du hier unten nach Talmud suchst. Auch hier können Sie diesen namens Paper Tile Map Actor bekommen. Wählen wir es jetzt aus und nennen es TM für Kachelzuordnung. Und lass es mich einfach Dragon Road nennen. Das war die Karte, wie sie hieß. Jetzt ist unsere Kachelmap ein Blueprint-Akteur, anstatt nur eine Kachelkarte hier draußen zu sein. Doppelklicken Sie also darauf und wachen Sie unter Render-Komponente auf. Und wählen wir einfach unsere Kachelkarte aus. Und es ist diese, die Kachelkarte genannt wird, schrieb ein Drache hier. Also lasst uns kompilieren und speichern. Für diese Kachelkarte müssen wir nun zwei Kollisionsfelder hinzufügen. Das ist also im Wesentlichen das, was wir versuchen zu tun. Fügen wir also eine neue Komponente hinzu. Lasst uns nach Kollision suchen. Wir haben diese als Kollisionsbox bezeichnet . Und diese Kollision, Kollisionsbox, können Sie hier sehen, dass wir verschiedene Ereignisse haben. Was sollte also passieren, wenn Sie anfangen, diese Kollisionsbox zu überlappen? Und wir werden die Kamera anhalten. Lassen Sie uns also den Bereich abdecken, in dem wir ihn wann pausieren möchten. Also lasst uns hier rauf gehen. Und wir haben Geld Ausmaß, Ausmaß hier. Und der Wert ist, dass ich eine 650 im X. Also wird es sich hier ausdehnen. Und 500 und DY. Und ich werde 1 Tausend und das z setzen. Und das sind nur einige Zahlen, die ich ausprobiere. Du kannst sie einfach größer machen. Im Wesentlichen. Lassen Sie mich tatsächlich einfach diese 50 machen, vielleicht in der Bewegung, Schnappen und versuchen Sie einfach, es zu sehen. Mal sehen, ob ich meine Kamera etwas schneller beschleunigen werde. Also werde ich es einfach ansehen und es gleich machen , genau so. Also kommt es hier runter und es geht hier hoch. Und das spielt keine Rolle, denn das einzige, woran wir interessiert sind ist dieser Bereich, weil der Spieler es hier noch nie getan hat, aber ich bin einfach so strukturiert. Im Wesentlichen versuchen wir nur, diese Fehler groß genug zu machen . Und eigentlich denke ich , dass es viel weniger sein muss. Testen wir es. Es ist also dx, das ist das interessanteste, je nachdem , wo der Spieler stehen wird. Also machen wir vorerst 600 im x. und kopieren wir das. Ich glaube, wir können das schaffen, also duplizieren wir es hier. Und lasst uns diese zweite Box nehmen und lassen Sie es mich auf die andere Seite der Karte verschieben . Einfach so. Jetzt ist es also auf der anderen Seite. Okay, jetzt haben wir diese beiden Kollisionsboxen. Wir können es immer testen und sehen, ob wir sie kleiner oder größer machen müssen. Also lasst uns Save zusammenfassen. Was wir jetzt tun können, ist dass ich sie zuerst umbenenne. Ich nenne das eine linke Kollisionsbox. Wenn ich also so und das andere buchstabieren könnte , richtige Kollisionsbox. Okay, also für die linke, klicken wir darauf und gehen wir runter und klicken Sie auf die Überlappung der Komponente beginnen. Was sollte also passieren, wenn ich anfange , diese Komponente zu überlappen? Lassen Sie mich diese Standardereignisse löschen. Also belauschen, womit wir normalerweise anfangen, ist Überschneidungen. Wenn wir uns also hier etwas überlappen, haben wir keinen wirklich Run-On-Server und laufen auf Clients. Was wir normalerweise tun, ist, dass wir diesen verwenden, der Switch hat Autorität. Noch einmal habe ich es dir gesagt, bevor der Server die Autorität des Spiels hat. Der Server kann alles tun. Autorität bedeutet also, wenn ich der Server bin und Remote bedeutet wenn ich der Kunde bin, was soll ich tun? Okay, also stellen Sie nur sicher, dass diese überlappte Komponente auf dem Server ausgeführt wird. Und normalerweise passiert was passiert, wenn Sie Kollisionsfelder hier haben, wenn Sie Kollisionsfelder haben, normalerweise die Berechtigung wechseln und sie dann auf dem Server ausführen möchten . Denn nochmal verhinderst du Betrug. Wir stellen nur sicher, dass es hier tatsächlich eine überlappte Box gibt. Denn wenn Sie es einfach auf dem Client ausführen, kann der Client manchmal dort erreichen, wo sich mit dieser Box überschneidet, obwohl diese Box in dieser Box tatsächlich nicht vorhanden ist. Eigentlich überlappend. Vielleicht ist es hier, sie stehen hier und überlappen es immer noch von dort aus. Betrügen. Also stellen wir nur sicher, dass wir auf dem Server begegnen. Autorität bedeutet also, dass ich der Server bin, also hat Switch Autorität. Und hier können wir den Code ausführen. Was wir tun wollen, ist, dass wir die Kamera anhalten möchten , wenn der Spieler mit dieser Kollisionsbox interagiert hat. Wir haben also nicht wirklich eine Veranstaltung namens Post-Kamera. Also lasst uns das in der Spielerbasis machen. Und was wir tun wollen, ist, dass wir diese Kamera posten wollen, und wir haben sie noch nicht wirklich variabel gemacht. Lassen Sie uns das also für die Zeit tun, in der wir diesen Timer pausieren möchten , im Wesentlichen, damit wir diesen Update-Positionscode hier nicht ausführen möchten. wir also mit der rechten Maustaste auf diesen Wert. Bewerben Sie Ihre Variable. Und lass mich es Updates Player, Kamera, Position nennen. Und normalerweise sage ich am Ende gerne Handle , weil es ein Griff nach dem anderen ist. Ihre Hand, Update-Spieler, Kamerapositions-Griff. Was wir versuchen, ist uns ein neues individuelles Ereignis zu erstellen. Und anstatt es einfach so zu machen, lassen Sie uns das in unseren Blueprint Interfaces jetzt fast Experte für Blueprint-Interfaces machen, also erstellen wir es hier für die Spielerbasis. Gehen wir zum Player, eigentlich nicht hier und zu den Schnittstellen pro Basis, machen wir einen Aufruf. Lassen Sie uns pausieren, pausieren , Ebene, Kamera, Kompilieren und Speichern. Gehen wir also zurück zur Spielerbasis und nennen wir es posten ihre Kamera. Und tatsächlich brauchte ich die Ereignis-Layer-Kamera pausieren. Also Event Pause Player-Kamera hier. Also wollen wir diese Veranstaltung aufrufen. Wenn ich also zurück zur Kachelkarte gehe, führen wir jetzt dieses Kollisionsbox-Event und wir möchten den Player anrufen. Der Spieler. Wir können das nennen, indem wir diesen einen anderen Schauspieler benutzen. Anderer Akteur bedeutet, was sich überschneidet, diese Kollisionsbox überlappte Komponenten, die Kollisionsbox und der andere Akteur überlappt es auch immer. Also laufen wir drin. Es ist der Spieler. Und nur um sicherzustellen, dass es der Spieler ist, der es überlappt, mache ich das normalerweise nur, um sicherzustellen , dass wir hier keinen Fehler machen. Normalerweise tue ich das. Schauspieler hat getaggt. Also hat Schauspieler markiert, du kannst dem Schauspieler Angriff geben. Also geben wir ihm den Tag-Spieler. Und was das bedeutet, ist hier in der Spielerbasis. Wenn du hierher zurückgehst und wenn du gehst, glaube ich, dass es in den Standardeinstellungen der Klasse steht. Wenn Sie also nach einem Tag suchen, können Sie sehen, dass wir dieser Layerbasis ein Tag hinzufügen können. Also lasst uns ein Tag hinzufügen und nennen wir es Player. Also was auch immer ein Bauer mit dieser Kollisionsbox kollidiert. Denken Sie also daran, wenn wir den Feind haben, ist auch der Feind dran. Der Feind hier ist auch dran. Also nur um sicherzustellen, dass es nicht der Feind ist, der damit kollidiert. Und es ist nur der Spieler. Wir können sagen, Schauspieler hat Player markiert. Und wenn das stimmt. Also wenn der Schauspieler den Tag-Player hat , den wir hier setzen, und die Spielerbasis. Alle verbundenen Spieler haben also den Tag-Player. Wir werden diesen Code ausführen. Wenn es also stimmt, werden wir diesen Code ausführen. Und was wir tun wollen, ist, dass wir diese Pause-Layer-Kamera ausführen wollen. Der andere Schauspieler hier ist unser Spieler. Definieren wir also genau, um welchen Spieler es sich handelt. Und dann können wir noch einmal sagen, dass er Layer REF bekommt , weil dies die ist, die wir früher gemacht haben. Und dann können wir Pause-Ebene sagen, Kamera. Und wenn Sie diese Nachricht auswählen, weil es sich um eine Interface-Funktion handelt. Okay, also lasst uns wieder hierher gehen und etwas mit diesem Event machen. Und ich werde das auf den Clients ausführen , weil Sie es nicht wirklich auf dem Server ausführen möchten . Denn denken Sie daran, dass diese Kamera nur Kundenspezifisch ist. Diese Kamera läuft nur für diesen bestimmten Player. Alle anderen Spieler kümmern sich nicht wirklich um Ihre Kamera, sie werden sie nicht sehen. Also werde ich es auf dem Client ausführen, also benutzerdefiniert. Und nennen wir es CL für Clients, Pause Layer, Kamera. Lasst uns das laufen lassen. Wenn ich hier klicke, führen wir es auf Clients wie unzuverlässig aus. Denken Sie daran, das zu tun. Was wir jetzt tun wollen, ist, dass wir diese Variable erhalten wollen. Das, was wir versuchen, ist Pause-Timer durch Handling zu sagen. Wenn wir also in die Kiste gehen, wollen wir innehalten. Wenn wir über den Tellerrand gehen, möchten wir die Kamera oder den Timer erneut aufheben, damit sie erneut aktualisiert wird. Das ist es, was wir versuchen zu tun. Also brauchen wir hier tatsächlich einen Booleschen Wert, denn hier, wenn wir uns mit der Kollisionsbox überschneiden, werden wir innehalten. Wenn wir jedoch erneut auf das Kästchen klicken und nach unten gehen, haben wir diese namens n-Komponenten-Endüberlappung. Wenn wir also wieder aus der Box gehen, kopiere ich diesen Code hier ein, so. Wir müssen das nicht wirklich wieder reif machen. Also haben sich andere Akteure hier verbunden. Jetzt sind die Schauspieler auch hier verbunden. Wann immer wir die Box verlassen, wollen wir die Pause aufheben. Wir können nicht wirklich, ich meine, Sie können eine neue Veranstaltung machen, aber Sie können dieses Ereignis einfach verwenden, um beides zu tun , indem Sie einen booleschen Wert verwenden. Denken Sie also an einen Booleschen Wert, als ob er wahr oder falsch ist. Machen wir also hier einen Booleschen Wert und klicken Sie auf diesen. Und der Boolesche sollte einfach Pause sagen. Und wenn es pausiert ist, ziehen wir von hier aus und klicken auf B oder Branch. Wenn es also eine Pause ist, wenn das stimmt, sollten wir innehalten. Und wenn es nicht stimmt, sollten wir die Pause so aufheben. Es kann also beide Dinge innerhalb desselben Ereignisses tun, einfach so, indem es einen booleschen Wert verwendet. Und offensichtlich müssen wir diese Veranstaltung hier oben durchführen. Und dann müssen wir diesen Boolean hier durchlaufen. Also müssen wir einen booleschen Wert und unsere Veranstaltung oder in unserer Schnittstelle erstellen. Und jetzt nervt das aus irgendeinem Grund. Ich weiß nicht warum. Lassen Sie uns kompilieren und speichern und erneut erstellen. Manchmal passiert das, Seal Pause, so. Okay, also lass uns das in der Schnittstelle machen. Nehmen wir an, Player-Kamera, Machen wir neue Eingaben, einen booleschen Wert, und nennen wir es einfach noch einmal Pause, Kompilieren und Speichern und gehen wir zurück. Ich kann die miteinander verbinden. Und wenn Sie jetzt zur Kachelkarte zurückkehren, können Sie sehen, dass wir einen booleschen Wert haben. Wenn wir also die Überlappung betreten, möchten wir pausieren. Stellen Sie das also auf richtig ein. Und wenn Sie es verlassen, rufen wir dieses Ereignis noch einmal an, pausieren Sie die Spielerkamera. Und wir wollen die Pause aufheben. Also lasst das falsch. Jetzt sollte es also klappen. Wann immer wir gehen, nehmen wir das an. Wir werden prüfen, ob es der Spieler ist, der das tatsächlich verlässt. Wir werden diesen booleschen Wert auf true oder false setzen. Und je nachdem, was der Wert ist, wird es hier laufen. Je nachdem, was der Wert ist, wird dieser Timer pausieren oder anPausieren. Also lasst uns eigentlich bevor ich auf Play klicken könnte, überprüfen wir zuerst diese Kollisionsfelder. Also das linke und das rechte Kollisionsfeld können Sie hier runter gehen und ihre Kollision überprüfen. Womit kollidieren sie also? Und nur um sicherzustellen, dass alles in Ordnung ist, können Sie hier klicken und Sie können sehen, dass es sich mit allem überschneidet, sogar der Pon, er überlappt sich mit den Teichen, damit wir Überlappungsereignisse machen können. Das ist also ich denke ja, das sieht richtig aus. Das ist in Ordnung. Jetzt sind wir mit dem Code fertig, und was wir tun müssen, Lasst uns fortfahren und diese alte Talmadge löschen. Und würde das gelöscht? Platzieren wir unser neues. Also lasst uns hier zur Kachelkarte gehen. Und lasst uns das Neue platzieren. Und lassen Sie es uns nochmal auf 000 platzieren. Ich werde dafür sorgen, dass Exzellenz hier näher kommt. Nochmal, genau wie das, was ich dir vorher gesagt habe, lass es uns um zehn verschieben. Ich glaube, es waren zehn. Und nur um uns zu bewegen, haben wir diese fünf Ebenen, 123456 Ebenen. Und ich gehe, wir haben diese zweite Schicht auf meinen Nullen, Nullen, Nullen. Du kannst es also hier sehen. Es ist auf meinen Nullen sind 0, aber es ist nicht, ist es nicht. Die erste gelbe Schicht ist die zweite gelbe Schicht. Jetzt bei 0100 ist es so, dass Sie sehen können, dass wir die Kollisionsboxen haben. Also klicken wir jetzt auf Play und spawnen als Tsarina. Und lass mich zur Seite gehen und du kannst sehen dass es tatsächlich aufhört. Also funktioniert es. Wenn ich jetzt nach rechts gehe, funktioniert es eigentlich nicht und das liegt daran, dass ich vergessen habe, es überhaupt hinzuzufügen. Gehen wir also zurück zur Kachelkarte und lassen uns tatsächlich die zweite hinzufügen. Ich habe sogar vergessen, es tatsächlich hinzuzufügen. Wenn Sie also auf den richtigen klicken, können sie sich überlappen. Ich mache den gleichen Code wie dieser. Du kannst es kopieren, hier unten einfügen, es hier verbinden, den anderen Schauspieler hier verbinden und den anderen Schauspieler hier verbinden. Und klicke erneut auf das rechte Feld. Und wenn Sie es verlassen, also wenn Sie die Überlappung beenden, kopieren Sie diese und verbinden es dann wieder hier. Also anderer Schauspieler oder Regisseur hier, und es wird ununterbrochen. Okay, im Wesentlichen , hoffentlich im Wesentlichen jetzt arbeiten. Testen wir es also noch einmal. Wenn Sie nach rechts gehen, stoppt es die Kamera. Sie können sehen, dass es einen kleinen Bug gibt. Wenn ich das Feld hier betreibe. Es wird meinem Charakter aus irgendeinem Grund folgen , bevor es aufhört. Es folgt also meinem Charakter und dann hört es auf. Ich will nicht, dass es das tut. Dies ist etwas, das wir in der nächsten Lektion verbessern können , weil es tatsächlich hier pausiert, aber aktualisiert wird. Hier wird die Aktualisierung abgeschlossen, um den Standort der Schauspieler zu holen. Es folgt dem Schauspieler also ein bisschen mehr und wenn es fertig ist, hört er hier auf. Also werden wir das in der nächsten Lektion verbessern. 45. Die Kamerabewegung verbessern: In dieser Lektion werden wir die Kamera und die Bewegung verbessern. Worüber wir hier gesprochen haben, ist, wenn ich nach rechts gehe, die Kameras aufhören, das ist alles gut. Das Problem ist, dass es dem Charakter folgt, er bleibt an dem Charakter haften, bevor er so aufhört und dann aus irgendeinem seltsamen Grund aufhört. Und hier versuchen wir uns jetzt zu verbessern. Also hier macht es diese Logik wegen der guten Schauspielerposition. Obwohl wir den Timer posieren, wird dieses Update abgeschlossen und beendet Kameraposition des Timeline-Spielers. Und es bekommt immer noch den Standort unseres Spielers und versucht, den Standort der Kamera oder entsprechend einzustellen. Wir können dies also beheben, indem eine temporäre Variable für den guten Schauspielerstandort erstellen , damit die Kamera den Standort unserer Schauspieler nicht mehr erhält , wenn wir am Anfang unserer Kollisionsbox hier sind . Also werden wir dem Timer sagen, dass dies der letzte Punkt war, auf den Sie aktualisieren sollten , und Sie sollten mir hier nicht mehr folgen. Okay, so wie wir das machen, machen wir noch einen Timer. Also lasst uns, Und übrigens, lasst uns die Funktion tatsächlich zuerst machen. Es sieht also klarer aus. Also mache ich eine Funktion. Also klicke hier oben auf das Plus und schreibe f für die Funktion. Und dann nennen wir das hier, bekommt den aktuellen Spielerstandort. Jetzt mit diesem ist das einfachste, was wir tun werden , im Grunde nur den Standort des Spielers zu ermitteln. Also hol dir den tatsächlichen Standort. Ich bekomme diesen Standort der Schauspielerin und werde ihn einfach in einer Variablen speichern. So eine ganz einfache Sache. Klicken Sie also mit der rechten Maustaste, steigen Sie zu einer Variablen auf und schreiben Sie aktuelle Layer- So. Dies ist, das ist das einzige, was diese Funktion tun wird. Wiederherstellen des Standorts „ Get Actor in einer temporären Variablen , die wir verwenden werden. Kommen wir zurück zum Event Graph. Und hier lassen Sie uns unseren zweiten Timer erstellen. Sagen wir also, stellen Sie einen Timer ein. Und dieses Mal, anstatt einen Timer nach Ereignis einzustellen, stellen wir den Timer nach Funktionsnamen ein. Das können wir also auch tun. Also lasst uns das verbinden und du kannst sehen, wie das funktioniert. Jetzt werden Sie gefragt, welche Funktion Sie ausführen möchten? Und es ist das hier. Ich klicke nur hier und kopiere den Namen. Und Sie müssen den Namen genau so kopieren, wie er ist, sowohl mit Großbuchstaben, Kleinbuchstaben, Großbuchstaben und so weiter. Kopieren Sie es also genau so, wie es ist. Und wenn Sie den Namen jemals ändern, müssen Sie daran denken, ihn auch hier zu ändern, sonst wird es nicht funktionieren. Die Zeit, die ich hier einstellen werde , ist 0,1, also wird es zehnmal pro Sekunde aktualisiert. Und ich werde es auch auf Looping einstellen und mit der rechten Maustaste auf diesen Timer klicken, der zu einer Variablen hochgestuft wird, und nennen wir es den Standortgriff der Eltern holen. Okay, also haben wir diese Zeit gerade jetzt, diesmal laufen wir jetzt. also anstelle eines guten Schauspielerstandortes Lassen Sie uns also anstelle eines guten Schauspielerstandortes unseren aktuellen Spielerstandort nutzen. Dies ist derjenige, den wir gerade, diesen aktuellen Spielerstandort. Ich hab angeschaut. Dieser wurde verwirrt. Dies ist der Spawn-Standort. Es erhält also diesen einen aktuellen Spielerstandort. Ich ziehe das raus und lege es hier hin. Okay? Der Trick ist jetzt, wenn wir diese Kollisionsbox hier erreichen, wann immer wir sie erreichen, werden wir diesen Timer stoppen. Anstatt dieses Update hier zu stoppen, werden wir diesen Timer beenden. Der Trick ist also, und lass mich tatsächlich all diese Rasterlinien entfernen. Es nervt mich ein bisschen. Gehen Sie also nochmal hier runter beim Rendern und klicken Sie hier an. Wenn ich diese Kollisionsbox-Linie erreiche, wird der Timer angehalten. Und wenn ich den Timer hier in der Spielerbasis anhalte, wird er das nicht mehr aktualisieren, den aktuellen Spielerstandort bekommen. Es wird nicht mehr aktualisiert, es wird am Anfang hier stecken bleiben. Das ist also der Trick dafür. Anstatt diesen Timer hier im Post-Timer zu stoppen, löschen wir diesen und lassen Sie uns diesen Timer stoppen , der aktuellen Spielerstandort abrufen nennt. Der Standort wird nicht mehr aktualisiert, wenn wir hier ankommen. Und die Kamera hört nur dort auf. Das ist also der Trick. Verbinden wir die hier. Jetzt. Kompilieren und speichern. Jetzt klicke ich auf Play und Test und schau, ob alles in Ordnung ist. Wenn ich also zur Seite gehe, kannst du sehen, dass es nicht mehr folgt und reibungslos anhält. Und wenn ich hier raus komme, wird es auch reibungslos folgen. Wenn ich nach rechts gehe, hört es auch reibungslos auf. Also stoppen wir den aktuellen Standort hier, dass unser aktueller Standort, wir stoppen das variable Update hier drüben, also denkt er, dass der Spieler noch hier ist. Das ist es, was im Wesentlichen passiert. Diese Kamera denkt, dass der Player immer noch hier ist, weil wir den Timer stoppen. Wir starten den Timer erneut , wenn ich diese Box verlasse. Und hier höre ich den Timer hier an, um die Variablen zu aktualisieren. Die Kamera denkt also tatsächlich, dass wir noch hier sind. Sie können sehen, dass es immer noch durchschneidet, also müssen wir die Größe des Kollisionsfelds anpassen. Wenn ich das also minimiere, gehe zurück zu den Kachelkarten und gehe zum linken Feld. Und jetzt passen wir es ein bisschen an. Wir müssen es ein bisschen größer machen. Also im x, versuchen wir 625, vielleicht sechs, Lass uns 650 ausprobieren und sehen, was passiert. Also sechshundertfünfzig, sechshundertfünfzig, klicke auf Play. Wenn ich hierher gehe, wird es hier aufhören. Okay, vielleicht können wir ein bisschen mehr hinzufügen, aber es stoppt die Luft, also gibt es kein Problem. Ja, ich denke, das ist gut. Jetzt hört es hier an den Rändern auf. Wir sehen diesen schwarzen Rand nicht mehr. Also jetzt ist das behoben. Und hier laufen. Und das Gleiche gilt für diesen. Wir können jedoch immer noch vom Rand gehen und das werden wir in der nächsten Lektion beheben. Okay, bevor wir das beenden, gehen wir zurück zur Spielerbasis. Ich muss das ein bisschen besser strukturieren. Also lass mich die einfach schieben. Denken Sie daran, Ihr Projekt immer zu organisieren , weil es ein Durcheinander sein wird. Vertrau mir. Sie arbeiten seit ein paar Monaten und tun das nicht, Ihr Projekt wird wie ein Chaos aussehen und Sie werden es zu diesem Ihr Projekt wird wie ein Chaos aussehen Zeitpunkt bereuen. Also versuche einfach alles gut zusammenzustellen. Ich versuche diese Variable zu greifen. Wenn Sie die Dinge gut zusammenfügen, doppelklicken Sie auf diesen Pin, um einen Umleitungsknoten wie diesen zu erstellen. Jetzt sieht es gut und organisiert aus. Und das hier, ich meine, ich denke, es sieht gut aus. Jetzt. Du kannst auch, wir können das sogar ein bisschen weiter nach unten schieben. Es gibt Platz, damit dieser hier drüben sein kann. Und das können wir hier direkt unten stellen , weil sie zusammengehören. Ich gehe hier rüber. Dies ist auch organisiert. Und wir können immer einen Kommentar abgeben. Also hier drüben können wir dies nehmen und Updates sagen, die Kamerabewegungen aktualisieren, so dass sie einem Spieler folgt. Du kannst versuchen zu schreiben, was immer du willst. Also versuche ich mir nur etwas aus dem Kopf auszudenken. Sie können sogar die Farbe des Kommentars ändern , wenn Sie möchten, die Größe ändern, wenn Sie möchten. Und für diesen setzen wir den Ort der Spieler ein , der sich hervorgebracht hat. Lassen Sie mich das auch kommentieren. Nehmen wir an, die Layer zu suchen, anfängliche Spawn-Position. Einfach so. Versuchen Sie also, so organisiert wie möglich zu bleiben. Sie können sogar allgemeine Daten herausgeben. Und ich denke, das sieht perfekt aus, lasst uns kompilieren und speichern. Okay, das war's vorerst. Lassen Sie uns zur nächsten Lektion übergehen und die Grenzen hinzufügen. 46. Kartengrenzen hinzufügen: Fügen wir nun die Grenzen für die Karte hinzu, damit der Spieler nicht vom Rand weggehen kann. Das ist sehr, sehr einfach. Dies ist ein kurzes Video, wahrscheinlich hier im Detail, Kartendrachenstraße. Lass uns zurück gehen. Und wie zuvor fügen wir zwei weitere Kollisionsfelder hinzu. Fügen wir hier links eine Kollisionsbox hinzu. Und genau wie dieses werde ich es schaffen, das ist das X, das Y und Z, und das Z, ich werde es wieder 1 Tausend schaffen. Sie kopieren einfach das Einfügen und ich ziehe es wieder so nach unten. Lassen Sie mich die Kamerastrehzahl ein wenig reduzieren. Ich denke, das ist gut, also lasst uns das versuchen. Ich benenne das um und nenne es Left Bounce. Und ich dupliziere das und nenne es richtige Grenzen. Und ziehen wir diesen nach rechts. So glaube ich. Okay, die Sache, die wir hier für die Kollision tun wollen , also wenn du auf einen von ihnen klickst und zur Kollision gehst und hier auf diesen kleinen Pfeil klickst. Ich möchte, dass du auf dieses klickst und hier auf benutzerdefiniert klickst. Und jetzt kannst du die Dinge für die Pons ändern , damit unser Spieler dran ist, und anstatt mich zu überlappen, möchte ich mein Telefon blockieren. Ich möchte nicht, dass der Punkt über diese Kollisionsbox hinausgeht. Das Gleiche hier drüben. Klicken Sie hier, klicken Sie auf Kostüm und klicken Sie auf Bullock the. Aber lasst uns versuchen, das zu legen. Das ist wahrscheinlich die einzige Bearbeitung, die wir machen mussten. Also lasst uns nach rechts gehen und sehen, ob wir blockiert werden. Wir sind auf See. Wir können nicht mal weiter gehen. Großartig. Dies funktioniert und Sie müssen dies testen, um zu sehen, ob das Guthaben groß genug ist. Sie gehen auf die andere Seite. Und hoffentlich wird das auch funktionieren. Und das funktioniert auch und so hört es perfekt auf. So fügen Sie also Kartengrenzen hinzu, bei denen wir im Grunde nur verhindern, dass der Charakter mit einer Kollisionsbox von der Kante fällt. 47. Erstellen der feindlichen Flipbooks: Jetzt werden wir uns ein wenig vom Spieler entfernen und wir werden den Feind umsetzen. Also als das erste, was ich dir hier in den Kursmaterialien gegeben habe. Wenn Sie also zu den Kostenmaterialien gehen, zu den Feinden, habe ich Ihnen diese Texturen zur Verfügung gestellt. Es gibt wahrscheinlich mehr Texturen in Ihrem Ordner. Und wieder setze ich die nur ein, während ich mit dem Kurs fortfahre. Aber im Moment wichtig, das Schwein ist untätig und bewegt sich und die Schnecke ist untätig und bewegt sich. Gehen wir also zuerst zum Ordner „Assets“. Und drinnen, klicken wir mit der rechten Maustaste und erstellen einen neuen Ordner und nennen ihn Feinde. Hier werde ich einen neuen Ordner namens Texturen erstellen , damit Sie versuchen können, es selbst zu tun, wenn Sie möchten. Dies ist etwas, das wir jetzt ein paar Mal gemacht haben . Und Sie können diese Texturen in den Texturordner klicken und ziehen . Wählen Sie alle aus, klicken Sie mit der rechten Maustaste, wenden Sie die 2D-Textureinstellungen für Papier Also haben wir die Unschärfe entfernt. Und fangen wir hier mit dieser Schnecke an. Also haben wir den Leerlauf, wir können mit der rechten Maustaste klicken und wir können ein Sprite erstellen. Ich benenne es in S4 Sprites und Schnecke im Leerlauf um. Und dann lasst uns das für den Umzug machen. Klicken Sie also mit der rechten Maustaste und lassen Sie uns diesen Preis extrahieren, da wir mehrere haben Wählen Sie also hier oben Gitter aus und schreiben Sie dann 90 mal 90. Das ist also die Zellenbreite und -höhe. Das habe ich in Photoshop gemacht. Deshalb weiß ich, wie viele Pixel es ist. Lasst uns also jetzt auf Extrakt klicken. Und jetzt klicke ich vom Ordner weg und wieder hinein. Sie sortieren also automatisch von 0 bis sieben. Und jetzt möchte ich, dass du das umbenennst. Ich überspringe diesen Teil. Okay, jetzt wo ich sie umbenannt habe, kann ich alle auswählen und mit der rechten Maustaste klicken, ein Flipbook erstellen und es für FB Snail move aufrufen. Ich klicke hier auf diese Schnecke und stelle fest, dass die Zeiten Frames pro Sekunde auf sechs sind. Das ist also die Geschwindigkeit, mit der es sich bewegt. Das Gleiche, was ich mit dem Idol hier machen werde. Klicken Sie mit der rechten Maustaste, erstellen Sie ein Flipbook, und nennen wir es F be schnecke, Leerlauf, und doppelklicken Sie darauf. Die Frames pro Sekunde sind nur eins, weil es sich um einen Frame handelt. Und ich nehme beide Schnecke hier, diese, das Irland, den Umzug und verschiebe sie den Feindordner. Wir haben sie also abgesehen von all dem hier draußen. Also mache ich das auch mit dem Schwein im Leerlauf und dem Schweinezug. Und ich überspringe diesen Teil. Ich habe jetzt das Schwein im Leerlauf gemacht und das Schwein Move Flip Books. Jetzt klicke ich hier auf das Schweinidol und setze die Frames pro Sekunde auf sechs, so. Und mach das Gleiche mit dem Umzug. Stellen Sie die Frames pro Sekunde auf sechs ein. Jetzt speichern wir alles. Klicken wir auf diese beiden und ziehen sie in den Feindordner. Jetzt haben wir also die Flip Books für diese beiden. 48. Einrichten der feindlichen Pfauen: Um die feindlichen Punkte einzurichten. Lasst uns zu Blaupausen gehen. Und lasst uns zu unserem Feindordner gehen, den wir geschafft haben, weit zurück in diesem Kurs. Denk also an die feindliche Basis. Wir haben dies durch Rechtsklick auf die Zeichenbasis erstellt und eine untergeordnete Blueprint-Klasse erstellt. Die Basis ist also ein Kind der Charakterbasis hier. Also hier für die feindliche Basis, Lasst uns jetzt mit der rechten Maustaste klicken und ein anderes Kind erstellen. Und jetzt nennen wir das eine VP-Schnecke. Wir können erneut mit der rechten Maustaste auf die Imagebasis , ein neues Kind erstellen und dieses eine VP-Auswahl nennen. Wenden wir uns hier dieser Schnecke zu. Doppelklicken wir darauf. Und hier für die Schnecke klicken wir auf das Sprite. Und hier im Quell-Flipbook wählen wir die Schnecke im Leerlauf aus. Ich gehe, ich suche nach Idle und wähle diese Schnecke hier aus. Ich mache das Gleiche für das Schwein. Ein Klick auf das Sprite. Und hier suchen Sie nach Leerlauf und wählen Sie das Schwein im Leerlauf aus. Jetzt haben wir das Schwein und die Schnecken hier eingerichtet. Jetzt müssen wir die Größe dieser Kapsel reduzieren und versuchen, das und die feindliche Basis zu tun, also gilt es für beide. Also lasst uns hier oben auf die Kapsel klicken. Und hier. Ändern wir es so, dass wir es zuerst hier machen müssen. Also vielleicht 15 von 15. Lass mich einfach zurück zur Schnecke gehen und sehen, wie sie aussieht. Es sieht aus, es sieht vorerst gut aus. Wir können es im Spiel immer anpassen. Ich kann sehen, dass es ein bisschen klein für das Schwein ist. Wenn es also in der Basis ist, wird dies automatisch angewendet, da es die Elternklasse dieser beiden ist. Wenn Sie jedoch individuelle Änderungen benötigen, können Sie einfach auf diese Schweinekapsel klicken. Du musst den Eltern nicht folgen. Es ändert sich hier. Sie können den individuellen Wechsel für dieses Schwein immer gezielt vornehmen, vielleicht stattdessen so etwas. Lasst uns 2323 machen, so etwas. Dieser ist momentan nicht wirklich wichtig. Wir müssen es im Spiel testen und sehen, wie es aussieht. Also müssen wir das testen, bevor wir wissen, dass es funktioniert. Das Letzte, was ich tun möchte, ist jetzt, unsere Feinde mit unseren Spielern kollidieren, also blockieren sie unsere Spieler. Das glaube ich schon. Versuchen wir also einen Blick darauf zu werfen. Also BP Feind Base, wir können hier auf die Kapsel klicken und die Kollisionen überprüfen. Und gerade jetzt blockiert es unseren Charakter. Also lasst uns eigentlich nicht nur unseren Charakter blockieren, weil Feinde auch dran sind, also blockieren sie sich gegenseitig. Also lasst uns hierher gehen und die Kollision, die anwesend ist. Klicken wir hier auf den Custom. Lasst uns jetzt klicken. Klicken wir also für die Pons einfach auf Überlappung, da wir vielleicht später einige überlappende Ereignisse durchführen müssen. Überlappen wir also einfach die Pons, damit sie sich nicht gegenseitig blockieren , wenn sie herumlaufen und auch unseren Charakter nicht blockieren. Und das war's jetzt für die. Und wir müssen wahrscheinlich später mehr Sachen machen, aber ich denke, das war es für diesen Kurs. Wenn wir das also auf 0 setzen, können Sie sehen, wie es aussieht. Dies ist jetzt der Feind, den wir haben. Und natürlich gibt es momentan keine Bewegung , wir müssen die Bewegung hinzufügen. Und das ist etwas , mit dem wir in der nächsten Lektion arbeiten werden. 49. Volumen der Navigation: Okay, jetzt wo wir mit künstlicher Intelligenz arbeiten, müssen wir sagen, wo sich all diese KI bewegen kann, denn im Moment weiß die KI nicht wirklich, wo sie navigieren können. Du hast ihnen nicht wirklich gesagt , wohin sie sich bewegen dürfen. Und das werden wir hier tun. Und das ist eigentlich sehr einfach. Gehen wir hier hoch und sie fügen schnell einen Button hinzu. Und die Volumes Sie haben etwas als Navigationsnetz Bounce Volume bezeichnet wird. Dies wird für künstliche Intelligenz, für KI verwendet und zeigt an, wohin sie sich bewegen können. Jetzt erstellt es diese Box hier. Lassen Sie es mich einfach als 0 in das Y setzen. Also ist alles hier in unserer Kachelkarte. Und dann müssen wir es größer machen. Gehen Sie also in den Pinseleinstellungen hier runter, machen wir es größer und dx, damit es den gesamten Bereich ausfüllt. Und wir können es so nach unten bewegen, also ist es im Untergrund. Und wenn Sie auf Ihrer Tastatur auf P, So P klicken, eine grüne Linie angezeigt. Und wenn du wieder auf P klickst, ist es die Höhe. Es heißt also, hier einzurichten. Whoops, hier einrichten genannt Navigation und Show. Und die Abkürzung ist P dafür. Und es wird dir zeigen, wo die KI herumlaufen darf . Im Moment ist das also grün. Sie dürfen hier arbeiten. Sie dürfen diese Linie hier nicht passieren. Und im Moment kann die KI nicht hier hochlaufen , weil wir keine grüne Linie haben. Und das liegt daran, dass Sie diesen Bereich auch abdecken müssen. Also lasst uns im Z, lass es uns größer machen und ich werde es einfach so hochziehen. Es deckt also beides ab. Dieser Bereich ist jetzt grün, und dieser Bereich hier unten ist auch so grün. Es gibt also einige kleine Einstellungen, die wir anpassen müssen , um sicherzustellen, dass alles funktioniert. Hier im Re-Cast-Navigationsnetz , das beim Hinzufügen des Navigationsnetz-Bounce-Volumens erstellt wurde. Hier drüben im Draw-Offset möchte ich 0 hinzufügen. Und das ist im Grunde genau der Ort an dem sich diese Zeichnung befinden soll. Und ich mochte einfach 0 statt zehn. Also nicht wirklich etwas Wichtiges, aber ich mag es einfach so. Das nächste ist, die wichtigsten Einstellungen sind hier in der maximalen Steigung des Agenten. Das werde ich einfach aufstellen. Du kannst sehen, was passiert, wenn du es ablegst. Es bedeutet, dass sie diesen Hang nicht hinaufsteigen können. Das bedeutet es. Und ich werde es einfach aufstellen, weil ich möchte, dass sie auf diesem Hang laufen können . Und das ist die Schritthöhe. Das werde ich auch aufstellen. Und ich glaube nicht, dass wir weitere Einstellungen anpassen müssen . Wir müssen unser Navigationsvolumen ausprobieren , um sicherzustellen, dass es funktioniert. Also lass mich einfach File und Alles speichern. Und bevor wir diese Bearbeitungen hier abschließen, müssen Sie die Lautstärke des Navigationsbilanzes erstellen. Wenn Sie also hier auf den Aufbau klicken und auf Build oder Levels klicken, müssen Sie daran denken zu bauen, bevor dies tatsächlich in die Tat umgesetzt wird. Okay, jetzt ist das Gebäude so sehr schnell fertig. Und das Gebäude dauert normalerweise sehr lange wenn Sie Beleuchtung in Ihrer Szene haben. Wenn Sie also mit einem 3D-Spiel arbeiten, können Sie sehen, dass dies keine Zeit gedauert hat. Wir haben keine Beleuchtung. Dies ist sehr schnell zu erledigen. Und jetzt, da wir unser Navigationssprungvolumen erledigt haben, können wir nun mit der Bewegung des Auges arbeiten. So können wir später testen , um zu sehen, ob das richtig funktioniert. 50. AI Controller: Genau wie wir hier einen Player-Controller erstellt haben, können wir jetzt einen Controller für unsere KI erstellen. Gehen wir also zum Ordner „Enemy“. Und hier können Sie mit der rechten Maustaste klicken und eine neue Blueprint-Klasse C erstellen . Hier können Sie nur den Player-Controller sehen. Der Controller ist also etwas fortgeschritteneres und nicht wirklich fortgeschrittenes, aber er hat ihn hier nicht aufgenommen, weil Leute normalerweise nicht mit KI arbeiten und eines Tages anfangen, mit dieser Engine zu arbeiten. Sie können hier danach suchen, wenn Sie auf alle Klassen klicken und nach KI-Controller suchen. Und Sie können diesen namens KI-Controller sehen. Wählen wir es hier aus. Und ich gebe ihm ein Präfix von AIC für den KI-Controller. Und ich nenne es einfach für einen Emmy wie diesen. Also lasst uns alles retten. Und jetzt werde ich auf diese feindliche Basis klicken. Und hier in der Basisklasse ist der Standardwert nach rechts. Sie können hier sehen, wie man KI besitzt. Ich werde einfach zu einem Ort in der Welt wechseln oder spawnen. Vielleicht spawnen Sie die Feinde und die KI wird besessen sein. Und die KI-Controller-Klasse, wir müssen dies in die KI-Controller-Klasse ändern , die wir gerade erstellt haben. Es wird also nicht den Standardwert verwenden. Wir wollen unsere eigenen benutzen. Und das war das einzige, was wir tun mussten. Jetzt haben wir unseren KI-Controller und Sie können darauf klicken und sehen, wie er aussieht. Und genau wie unser Player-Controller nicht wirklich viel enthält. Der einzige Unterschied besteht darin, dass es eine Aktionskomponente und einen Pfad enthält , der Komponenten folgt, aber nichts, worüber wir uns jetzt Sorgen machen oder verwenden werden . Schließen wir es also und fahren mit der nächsten Lektion fort. 51. Blackboard und Verhaltensbaum: Erstellen wir jetzt eine Tafel und einen Verhaltensbaum. Wenn Sie also mit der rechten Maustaste hier im Feindordner und zur künstlichen Intelligenz gehen, können Sie sehen, dass wir etwas haben, das als Tafel und einen Verhaltensbaum bezeichnet wird . Klicken wir also zuerst auf Create the Blackboard, erstellen es hier, nennen es dB für Blackboard und schreiben dann Feind. Und wenn Sie auf diese Tafel doppelklicken, können Sie sehen, dass sie nicht wirklich viel enthält. Wir können einen neuen Schlüssel erstellen , der nur eine Variable hat. Und diese Variable, Sie können einige Informationen darüber sehen. Wir können hier zwischen dem Verhaltensbaum und der Tafel wechseln. also nicht wirklich viel los und wir müssen das jetzt nicht wirklich benutzen. Erstellen wir also einen Verhaltensbaum. Sie können sehen, dass wir nicht darauf klicken können und das liegt daran, dass wir gerade keinen haben. Also lasst es uns schließen. wir noch einmal mit der rechten Maustaste. Gehe zu Künstlicher Intelligenz und erstelle einen Verhaltensbaum. Und nennen wir das einen BT-Feind oder Verhaltensbaumfeind. Jetzt können Sie auf diesen Verhaltensbaum doppelklicken. Und in diesem Verhaltensbaum baut man die KI auf, wie sich die KI verhält wie sie sich bewegt. Um also hier im Verhaltensbaum anzufangen, können Sie es herausziehen und loslassen. Als erstes, was Sie im Verhaltensbaum tun, müssen Sie einen Selektor auswählen. Etwas sehr Wichtiges innerhalb des Verhaltensbaums ist, dass innerhalb des Verhaltensbaums der Code von links nach rechts ausgeführt wird. Und ich zeige dir, wie ich hier einige der Knoten erstellen muss , damit du sehen kannst, was ich meine. also mit dem Root beginnen, können Sie es herausziehen und Selektor erstellen. Und das nächste ist, eine Sequenz zu machen. Wir haben einen Selektor, wir haben eine Sequenz und jetzt werden wir unseren Code hinzufügen. So kannst du hier sehen, wenn ich etwas Zufälliges hinzufüge , zeige ich dir einfach, dass ich das Gleiche immer wieder hinzufügen werde. Sie können sehen, Sie können die Notizen sehen. Sie haben Zahlen. Wir haben also Nummer 0, Nummer eins, und es wird den Code von links nach rechts ausführen. Also hier fangen wir links an, wir haben Nummer zwei und dann Nummer drei und Nummer vier. Wenn ich das bewege, kannst du sehen, dass es auf Nummer drei wechselt, es wechselt auf Nummer zwei. Der Code wird also immer von links nach rechts ausgelöst. Sehr, sehr wichtig, an das man sich erinnern sollte. Okay, was wir also mit diesem Verhaltensbaum machen wollen , ist, dass wir die KI wollen, also unser Schwein oder eine Schnecke hier. Und das Level, auf dem wir einen zufälligen Ort in diesem Navigationsnetz finden wollten . Sobald es einen zufälligen Ort gefunden hat, wird es an diesen Ort verschoben. Genau wie in Maple Story, wo sich der Feind gerade im Level bewegt. Es findet einen zufälligen Punkt im Navigationsnetz und bewegt sich dann an diese Position. Vielleicht wartet es zwei Sekunden. Es ist wie im Leerlaufmodus und dann bewegt es sich an einen anderen Punkt. Also müssen wir damit beginnen, einen zufälligen Punkt an unserem Standort zu finden. Und nachdem wir den zufälligen Punkt gefunden haben, müssen wir zu diesem Punkt gehen. Davor müssen wir also einen zufälligen Punkt finden. Und das werden wir in der nächsten Lektion tun. 52. Einen Random Point in beweglichen Bereichen finden: Aber lassen Sie uns nun unseren Feind dazu bringen, einen zufälligen Punkt in diesem beweglichen Bereich in diesem Navigationsnetz zu finden einen zufälligen Punkt . Gehen wir also zurück zum Verhaltensbaum. Und drinnen von hier haben wir so etwas nicht wirklich, also müssen wir es uns selbst erstellen. Und Sie können dies tun, indem Sie hier oben auf die neue Aufgabe klicken. also auf eine neue Aufgabe klicken, müssen Sie diese Aufgabe speichern und ich rufe sie an, ich werde diese entfernen, also BTT. Und dann lasst uns das alles entfernen und nennen wir es einfach den zufälligen Ort binden. Okay? Und Sie können die Aufgabe sehen, die es speichert. Sie haben also alle Aufgaben. Wir können sogar einen neuen Ordner oder alle Ihre Aufgaben erstellen. Hier innerhalb der Aufgabe beginnen Sie also immer mit etwas, das Ai empfangen, empfangen, ausführen nennt . Dies ist das Ereignis, mit dem Sie immer beginnen, und Sie beenden immer mit der fertigen Ausführung. Sie haben diese beiden also immer in einer Aufgabe hier im Verhaltensbaum. Und dann geht der gesamte Code zwischen diesen beiden. Die Hauptfunktion wir hier verwenden möchten, heißt „Zufällig erreichbarer Punkt im Radius abrufen“, die wir hier verwenden möchten, heißt „Zufällig erreichbarer Punkt im Radius abrufen“, Sie haben einige andere. Holen Sie sich also zufälligen Punkt und navigierbaren Radius. Ich möchte einen in erreichbarer Stelle bekommen. Vielleicht hast du hier oben etwas Navigation. Wenn also der Feind hier unten ist, haben Sie hier oben eine Navigation , die der Feind nicht erreichen kann. Und ich will es nicht wirklich verderben. Ich werde diesen namens Get Random erreichbarer Punkt im Radius verwenden . Also klicke ich darauf und es schaut mir unser Navigationsnetz an. Was ist der Ursprung, von dem es anfangen sollte zu suchen? Und ich möchte einfach nur suchen, wo die Schnecke ist oder je größer ist. Lasst uns also eine Schnecke hier legen, damit du sie ein bisschen mehr visualisieren kannst . Wir haben also die Schnecke in unserem Level, die hier herumläuft. Also wo willst du anfangen zu suchen? Hier bei der Herkunft? Ich bin einfach eine große und vertrauenswürdige Schnecke da. Also hier im kontrollierten Bauern, Dies ist der Feind , der herumläuft. Und denken Sie daran, wir haben vorher gemacht, Spieler ref holen und Controller ref bekommen. Ich glaube nicht, dass wir eine für den Feind haben, also lasst uns ein Blueprint-Interface erstellen, weil wir tatsächlich eine Referenz dieser feindlichen Basis benötigen. Weil wir es hier verwenden müssen, um die Akteure zu lokalisieren und als Ursprung einzufügen. Hier brauchen wir also einen Verweis auf das Blueprint-Interface oder die feindliche Basis, wo wir sagen, dass sie feindliche Referenz erhält. Gehen wir zurück und lassen Sie uns ein neues Blueprint-Interface erstellen. Dies ist also die gleiche Methode wie das, was wir bisher gemacht haben. Klicken Sie mit der rechten Maustaste, gehen Sie zu Blueprints und wählen Sie Blueprint-Schnittstelle Nennen wir es E beendet feindliche Basis. Lass uns hier rein gehen. Und nennen wir das „NME bekommt“. Also hol die Feinde als Referenz. in der Ausgabe Worauf versuchen Sie sich in der Ausgabe zu beziehen? Sie versuchen, sich auf BP und Interface zu beziehen. Also so so. Und du kannst es für Feind nennen. Okay, jetzt denken Sie daran zu gehen, zur feindlichen Basis und drinnen gehen Sie zu Klasseneinstellungen und fügen Sie dann die Schnittstelle hinzu, die Sie gerade erstellt haben, genannt End Feind Base, Kompilieren und Speichern, und es wird unten angezeigt hier. Wer ist jetzt der Feind? Der Feind ist nur Selbstwunsch, was bedeutet, in welcher Blaupause ich bin. Der Feind ist also nur diese feindliche Basis. Okay, jetzt können wir zur Aufgabe zurückkehren und vom Kontrollteich aus können wir jetzt sagen, dass er feindliche Referenz bekommt. Wenn es also die Schnecke ist, die herumläuft, weiß sie jetzt, dass es die Schnecke ist. Dies ist die feindliche Referenz , die wir hier haben. Ich klicke einfach mit der rechten Maustaste auf diesen Feind und fördere eine Variable. Ich nenne diesen variablen Feindbauern einfach. So, um nur sauberer zu sagen. Und dieser Ursprung können wir diesen Feind jetzt nehmen **** und wir können sagen, bekommt Schauspielerstandort wie diesen. Der Ursprung ist also wo dieser Feind ist. Jetzt ist der Ursprung von diesem Feind. Und es wird nach einem Punkt um diesen Feind suchen. Dies ist der Radius. Jetzt müssen wir angeben, wie groß der Radius ist, in dem er suchen muss. Nun, diesen Radius, könnten wir einfach eine Zahl einfügen und 50 sagen und sind 100 Einheiten. Aber vielleicht hast du verschiedene Karten. Stellen Sie sich also vor, Sie haben diese Karte nicht nur in Ihrem Spiel, sondern Sie haben mehrere Karten. Einige Karten sind größer als andere. Manchmal muss man weiter entfernt nach Punkten suchen. Wir wollen also nicht wirklich eine solide Zahl haben , die hier im Radius geschrieben wird. Normalerweise, was ich gerne für meine Spiele mache, bekomme ich gerne die Größe dieses navigierbaren Bereichs. Und mit dieser Größe unterscheidet sich diese Größe von Map zu Map, da Sie sich vorstellen können, dass dieses Navigationsnetz-Bounce-Volumen in anderen Maps größer oder kleiner ist. Es wird also nur diese Größe bekommen, in welcher Karte Sie sich befinden, und es wird in diesem Bereich suchen. So wie du das machst ist, lass uns das ein bisschen wegziehen. So wie du das machst, ist wieder Schauspieler der Klasse zu holen und du benutzt Schauspieler der Klasse. Auch hier haben wir es schon einmal benutzt, aber wenn ich es noch einmal erklären muss, musst du das benutzen, um ein Extra an Klasse zu bekommen. Du kannst einen Schauspieler bekommen, der bereits innerhalb des Levels hervorgebracht ist . Das Volumen des Navigationsnetzes begrenzt ist also gerade bereits innerhalb unseres Levels. Wir können also einfach nach einem Navigationsnetz suchen. Wenn ich hier sehen kann Nav Mesh Bounce Volumen. Jetzt haben wir die Navigation ausgeglichene Lautstärke. Jetzt können wir davon abziehen und sagen, Schauspieler Bounce holen. Okay? Jetzt kriegen wir die Schauspielergrenzen. Und was wir damit machen können, ist, dass wir jetzt den Radius brauchen, aber hier können Sie den Radius sehen, das Ausmaß der Fehler. Sie können es tatsächlich auf den Bildschirm ausdrucken und sehen , wie es aussieht. Aber wir müssen den Verhaltensbaum ausführen, bevor wir das tun, ich werde dir das später zeigen, aber jetzt versuchen wir, das zu beenden. Was wir versuchen, ist, den Radius hier zu finden, aber Sie können sehen, dass die Fehlerausdehnung ein Vektor ist. Ich werde diesen Vektor durchbrechen damit ich die x, y und z sehen kann. Das einzige, woran wir interessiert sind, ist das X. Weil du hier den roten, den roten Drehpunkt siehst , wenn du dich daran erinnerst vorher ist das Rot das x. Wenn Sie die Maus hier bewegen, interessierten sich nur tatsächlich für den Bereich auf dem x. Wir kümmern uns nicht wirklich um das Z oder das y hier. Wir versuchen hier einen Punkt in dieser Größe zu finden . Aber lass uns zurückgehen. Das einzige, woran wir interessiert sind, ist das X. Also lasst uns, ich werde diese Boxausdehnung tatsächlich durch zwei teilen , weil ich es oft getestet habe. Und ich denke, dass diese Größe, wie das Durchsuchen des gesamten schiffbaren Bereichs, nur die Größe ist. Und ich mag es, dass meine Bauern einfach in einem kleineren Bereich suchen. Ich mag diese Schnecke nicht, um in der ganzen Gegend zu suchen. Manchmal bewegt es sich von diesem Punkt der Map, dann bewegt es sich ganz auf die andere Seite meiner Ich mag das nicht. Ich mag die Schnecken manchmal bewegt sie sich nur von hier nach hier. Das ist vielleicht die maximale Bewegung. Also teile ich diese Box gerne, bevor ich diese Dosis tatsächlich geteilt durch zwei mache. Es ist also viel kleiner in der Fläche. Sie können hier sehen, wann Sie dividieren schreiben. Wenn ich also einfach noch einmal ziehe, habe ich es vielleicht zu schnell gemacht. Sie können den Dividen-Button schreiben und hier klicken. Du kannst jetzt sehen, dass es ein Vektor ist, aber das brauche ich nicht wirklich. Ich muss es nur durch zwei teilen. Also klicken wir mit der rechten Maustaste auf diesen Pin. Und Sie können diesen Pin in eine Ganzzahl konvertieren. Jetzt ist es nur eine Zahl, also können wir sie durch zwei teilen. Ich kann es hier wieder mit dem Breakvektor verbinden. Hier. Jetzt ist das x durch zwei geteilt. Und jetzt kann ich das in den Radius stecken, oops, so. Und lasst uns das runterbringen, so etwas. Jetzt haben wir diesen zufälligen Ort. Auch hier ist das einzige, woran wir interessiert sind, der x-Wert. Wir möchten, dass der Z-Wert derselbe ist, weil ich immer noch möchte, dass meine Schnecke hier unten ist. Und der Y-Wert sollte auch derselbe sein weil ich immer noch möchte, dass meine Schnecke hier ist. Ich bin nur daran interessiert, es auf die X-Achse zu verschieben. Das, was ich tun werde , ist, dass ich hierher zurückgehe und diesen Vektor durchbreche. Jetzt haben wir das x, y und z. Also x ist der Punkt, den es im x gefunden hat. Und lassen Sie mich mit der rechten Maustaste klicken und „Vektor machen“ sagen. Jetzt können wir diesen Vektor rekonstruieren , damit das x gleich bleiben sollte. Dies ist der zufällige Punkt, der gefunden wird. Aber ich möchte, dass mein Y und Z gleich bleiben. Eigentlich kopiere ich das einfach hier. Und ich werde einfach wieder den Standort meiner Schauspielerin holen und diesen Vektor x, y und z brechen, damit ich diese Werte verwenden kann. Ich werde nur das Y und das Z anschließen. Das y und das Z bleiben gleich wie das, wie das Gedicht, dass wir den Feind haben****. Aber nur die Ausgänge werden einen zufälligen Ort finden, und das ist das einzige, was sich ändern wird. Das Y und das Z werden also immer gleich bleiben. Ordnung, das ist also das Endergebnis und wir müssen es irgendwo anschließen und es hier in unserem Verhaltensbaum verwenden. Hier kommt das Blackboard ins Spiel. Also lass uns zurück zur Blackboard gehen. Eigentlich denke ich, dass wir es hier und den Verhaltensbaum einschalten können , damit Sie entweder die Tafel hier finden und öffnen können. Aber genau wie zuvor können wir das auch tun, indem wir zu ihrem Verhaltensbaum gehen und hier oben auf die Tafel klicken. Machen wir also einen neuen Schlüssel und machen wir einen Vektor. Das brauchen wir. Und nennen wir diesen Vektor den x-Standort. Wir interessieren uns also nur für den X-Location. Und stellen Sie nur sicher, dass dies ein Vektor ist und wir hier nichts ändern müssen. Also lasst es uns hier aufheben. Und lasst uns zur Aufgabe zurückkehren. Und dann werden wir hier eine neue Variable erstellen. Diese Variable nenne ich es einfach Vektor, weil es ein Vektor ist. Und das, was Sie hier tun müssen wird nach Blackboard gesucht. Und wählen Sie diese namens Blackboard-Schlüsselauswahl aus. Wir können kompilieren und speichern. Und jetzt kannst du diesen Vektor hier raus machen. Dies ist der Tafelvektor. Und Sie können sagen, setzt Blackboard, Blackboard Wert als Vektor. Sie müssen es jetzt auswählen. Und was es jetzt tun wird, wird diesen Wert hier in diesen Vektor hinzufügen, den Sie erstellt haben. Also lasst es uns jetzt hier hinzufügen. Jetzt ist dies das Ergebnis und verbinden wir es. Also wird es von hier aus den ganzen Weg gehen , so. Jetzt ist es also verbunden. Und lasst uns fertig werden, ausführen. Und denken Sie immer daran, auf diesen Erfolgs-Button zu klicken. So sehr wichtig. Kompilieren und speichern. Mal sehen, was passiert. Gehen wir jetzt zurück zum feindlichen Verhaltensbaum. Klicken Sie also auf den Verhaltensbaum. Was wir jetzt tun können, ist, dass wir hier runter gehen und nach unserer Aufgabe suchen können . Also schreibe einfach für BTT und wir können diesen finden, PTT findet einen zufälligen Ort. Und jetzt müssen wir es sagen, es ist dieser x-Ort, den wir in unserem Blackboard verwenden müssen . Aber Sie können hier sehen, ich kann nicht wirklich, wenn ich auf diese Aufgabe klicke, kann ich nicht wirklich, ich habe keine Option dazu. Und das liegt daran, dass Sie in der Aufgabe auf diesen Vektor klicken müssen und auf diesen als Instanz bearbeitbar bezeichnet werden müssen. Denken Sie daran, das zu tun, sonst können Sie es nicht sehen. Also geh zurück zum Feind. Und Sie können jetzt sehen, dass wir einen Vektor auswählen können und der Vektor, den wir verwenden möchten, ist diese x-Position. Jetzt wird es einen zufälligen Ort finden und es sind diese Vektoren. Jetzt haben wir das Ergebnis. Es wird an diesen Ort ziehen. Und am Ende möchte ich einfach warten. Wenn es also einen Punkt findet, bewegt es sich manchmal zu diesem Punkt. Ich wollte ein bisschen warten, bevor es sich wieder bewegt. Hier in der Wartezeit schreibe ich einfach 0. Ich fand, dass dies der beste Weg ist, dies zu tun. Die Wartezeit ist also 0, aber die Variation beträgt drei Sekunden. Manchmal warten sie also 0 Sekunden, manchmal warten sie drei Sekunden, manchmal waren es zwei Sekunden. Manchmal können sie also 0 Sekunden warten , damit sie nicht warten, sie bewegen sich einfach wieder. Es gibt zufällige Variationen, drei Sekunden oder manchmal warten sie drei Sekunden. Aber jetzt wird es einen zufälligen Ort finden. Es wird an diesen Ort ziehen. Und dann wird es bis zu drei Sekunden warten und dann noch einmal diesen Vorgang wiederholen. Okay, damit das Ganze funktioniert, müssen wir zurück zum Spieler-Controller. Und drinnen von hier fangen wir an zu spielen. Sie müssen sagen „Verhaltensbaum ausführen“. Sonst wird dein Verhaltensbaum nicht funktionieren. Und dann müssen Sie auswählen, um welchen Verhaltensbaum es sich handelt , um Speichern zu verstärken. Und jetzt lasst uns einen Feind ins Level bringen und sehen, ob es funktioniert oder ob es etwas gibt, das ich vergessen habe. Also treffe einfach einen Feind ins Level. Klicken wir auf Jetzt spielen, wählen Sie den Charakter aus. Und gerade jetzt, was ich auf meinen Feind sehe, sehe ich, dass sich mein Feind nicht bewegt. Also stimmt etwas nicht und ich muss herausfinden, was ich in diesem Prozess falsch gemacht habe. Okay, so wie ich das mache, um Dinge zu debuggen. So kann man hier sehen, wenn ich hier wieder spiele, die KI bewegt sich nicht wirklich. Etwas stimmt nicht. Und lasst es uns tatsächlich hier aufstellen. Vielleicht ist es im Boden und es bewegt sich immer noch nicht. Also das erste, was ich beim Debuggen nicht mag, manchmal das Navigationsmesh-Bounce-Volumen fehlerhaft, also wird es nicht funktionieren. Manchmal habe ich tatsächlich gelöscht und ich habe es noch einmal versucht. Ich weiß also nicht warum es in Unreal Engine manchmal funktioniert. Vielleicht ist das nicht das Problem, aber wir können hier anfangen. Und so fügen wir in den Volumes das Volumen des Navigationsnetzes erneut hinzu und setzen Sie es auf 0. Und in der Boxausdehnung werde ich es wieder erhöhen, so etwas. Und dann vergrößere das, das z. Okay, jetzt habe ich es wieder und in der Neubesetzung hier setze ich den Graw-Offset wieder auf 0. Und wir stellen die Agentenhöhe auf die maximale Loop 289 des Agenten und die maximale Höhe 289 ein. Dann speichere und baue ich alles wieder. Okay, jetzt können wir versuchen, auf Play zu klicken und es bewegt sich immer noch nicht. Das nächste, was ich mir ansehen möchte, ist, dass es einen Punkt in meinem Verhaltensbaum hier zu meiner Aufgabe findet . Was ich normalerweise mache, ist, dass ich einfach auf den Bildschirm ausdrucke. Print-String ist also das Beste, was Sie zum Debuggen tun können. Denn wenn es eine Zeichenfolge auf Ihren Bildschirm druckt, wissen Sie, dass dieser Code ausgelöst wird. Dieser Code funktioniert. Wenn ich also auf Jetzt spielen klicke und du siehst, dass es Hallo steht. Die Aufgabe besteht also darin , Hallo zu sagen. Versuchen Sie also, den Code auszuführen, also ist hier nichts falsch. Lasst uns also mit dem Code fortfahren. Hier drüben. Versuchen wir zu sehen, ob es diesen Punkt findet. Drucken wir also noch einmal auf den Bildschirm aus, von hier aus verbunden ist. Denn jetzt wissen wir, dass wir jetzt wissen, dass dieser Teil des Codes funktioniert, also startet er diese Aufgabe. Also hier drüben drucken wir diesen Wert aus. Also wird es diesen Vektor drucken und sehen ob wir hier tatsächlich etwas gefunden haben. Und Sie können im X sehen, dass es tatsächlich verschiedene Orte findet, aber es funktioniert tatsächlich. Es findet diese Standorte also richtig. Es ist also in Ordnung, es sind diese Standorte und ich weiß, dass meine KI-Controller auch funktionieren , denn dies ist derjenige, der den von uns erstellten Verhaltensbaum ausführt. Und es könnte ein Umzug sein und dann sofort warten. Das ist also auch etwas, das passieren kann. Also hier im Verhaltensbaum bewegt es sich vielleicht und wartet dann sofort aus irgendeinem Grund. Also lass mich das einfach verbinden und einfach diese beiden verbinden. Lass mich speichern und klicke dann auf Play. Und wenn ich mir meinen Verhaltensbaum ansehe, siehst du hier, dass ich das Spiel jetzt spiele. Und ich denke, das passiert letztendlich , weil ich in unserem Code nichts falsch sehe. Es findet einen zufälligen Punkt. Es versucht, bis zu diesem Punkt zu gelangen. Aber Sie können hier sehen, dass unser Verhaltensbaum verrückt wird. Es bewegt sich tatsächlich an diesen Ort, findet einen neuen Standort, bewegt sich, findet, bewegt sich, bewegt sich, findet sich, findet sich, findet sich, findet. Das macht es immer wieder. Es findet einen neuen Standort. Obwohl der Standort weit weg ist, bewegt er sich irgendwie einen kleinen Schritt, bevor er anfängt, nach einem neuen Ort zu suchen. Auch hier denke ich, dass der Blackboard-Schlüssel hier auf Self Actor eingestellt ist , dass dies hier der Fehler sein könnte. Gehen wir also zurück, beenden den Wiedergabemodus und klicken wir auf diesen Schritt. Also habe ich irgendwie vergessen, diesen Ort hier zu ändern. Also lasst uns das hier wieder verbinden. Klicken wir auf Play. Jetzt. Du siehst, jetzt funktioniert es tatsächlich. Die Schnecke bewegt sich also. Es ist an einen Ort umgezogen. Es wartet bis zu drei Sekunden und dann bewegt es sich wieder. Das war also der Bug. Und ich möchte das nicht aus dem Video löschen , weil ich Ihnen zeigen möchte , wie Sie Dinge debuggen, weil Sie auf Probleme stoßen werden. Und wenn Sie versuchen, die Druckzeichenfolge zu verwenden , um eine Zeichenfolge auf den Bildschirm zu drucken. Und wenn es eine Zeichenfolge druckt, wissen Sie, dass dieser Code funktioniert, weil er die Dekodierung für Sie auslöst und das Ereignis ausgelöst wird , weil er die Dekodierung für Sie . Sie können auch versuchen, den Ort herauszufinden, den Sie sehen möchten, ob er einen zufälligen Ort findet oder nicht? Dann war das Letzte offensichtlich, dass der Verhaltensbaum solide ist. Es wurde wahnsinnig. Und das liegt daran , dass es zu diesem Zellfaktor in der Blackboard überging , was keinen Sinn ergab. Es sollte an diesen x-Ort umziehen. Jetzt funktioniert es also hier. Aber Sie können sehen, dass unsere Animation natürlich nicht funktioniert, weil wir keine Animation für die Schnecke oder für einen der Feinde hinzugefügt haben. Also lasst uns das in der nächsten Lektion machen. 53. Zustand der feindlichen Bewegung: Okay, was wir in dieser Lektion tun müssen , ist, dass wir den Bewegungsstatus für diesen Feind ändern müssen den Bewegungsstatus für , damit er das Flipbook ändert. Wann immer es sich bewegt, hat es das Bewegungs-Flipbook, und wann immer es im Leerlauf ist, hat es das Leerlauf-Flipbook. Also tatsächlich der gleiche Prozess wie wir mit unserem Spieler gemacht haben , wenn wir uns bewegen und anhalten. So das Gleiche. Gehen wir jetzt zurück zur feindlichen Basis. Und drinnen von hier löschen wir alle diese Standardereignisse. Und das, was wir letztendlich tun wollen, ist, eine neue Variable zu erstellen und sie auf bewegt sich. Also schreibe ich eigentlich ein B davor. Denn Boolean verschiebt diesen booleschen Wert hierher. Wenn ich es rausziehe, möchten wir es auf Rep Notify einstellen. Denken Sie also daran, dass alle visuellen Änderungen unterbrochen werden müssen, und das Ändern des Flipbooks ist eine visuelle Änderung, damit alle Kunden es sehen können. Und das wollen wir tun. also hier in der Unwrap Funktion daran, dass eine On-Ramp-Funktion erstellt wird wenn Sie etwas tun, um die Benachrichtigung einzuwickeln. Und drinnen von hier, nehmen wir es einfach. Also nicht gerade, ich arbeite nur rückwärts, damit du sehen kannst, was ich meine. Dies ist also das Endergebnis, wird bewegt auf „true“ gesetzt. Erstellen Sie also einen Zweig. Wenn dies auf „true“ eingestellt ist, nehmen wir dieses Sprite und setzen das Flipbook. Jetzt werden wir dieses Flipbook zwei setzen. Wenn es sich also bewegt, werden wir nicht im Leerlauf sein. Wir werden hierher ziehen. Wenn es sich bewegt, werden wir uns bewegen. Und wenn es im Leerlauf ist, wenn es sich nicht bewegt, werden wir so im Leerlauf sein. Aber jetzt können Sie sehen, dass wir auswählen müssen, wir müssen auch das Schwein auswählen. Also müssen wir das dynamisch machen. Wenn Sie also zwei Feinde haben, ist dies nur für einen Feind, er funktioniert nur für die Schnecke. Wir brauchen es auch für das Schwein. Und denken Sie daran, wie wir es mit dem Spieler getan haben, müssen Sie eine Struktur erstellen. Gehen wir zum Structures Ordner. Lasst uns mit der rechten Maustaste klicken und eine neue Struktur erstellen. Klicken Sie also mit der rechten Maustaste und lassen Sie es uns unter Blaupausen und Struktur finden und nennen Sie es s t animal info. Hier drin werden wir nur zwei Dinge schaffen. Wir werden die Animation im Leerlauf erstellen und die Run-Animation erstellen. Wir können es einfach „Move Animation“ nennen. Wir nennen es einfach Move, Move Animation. Und das ist offensichtlich ein Papier-Flipbook wie dieses. Und das ist auch ein Papierbuch. Okay, also haben wir diese beiden, und Sie können es erraten, dass wir später den Feinden Gesundheit verleihen können , damit wir später tatsächlich eine neue Variable erstellen und sie gesund nennen können. Alle Informationen über den Feind werden also hier gespeichert. Wie viel Gesundheit haben sie, wie viel Schaden sie anrichten und wie viel Gold sie dir geben und so weiter. Also werden alle Tierinformationen später hier unten sein. Gehen wir jetzt zurück zur feindlichen Basis. Und jetzt können wir die Struktur und die Variablen hinzufügen. Und wir können es Tierinfo nennen. Wir können es hier auswählen und wir nennen es „st animal info“. Und das ist die Struktur. Jetzt haben wir diese Struktur, wir können sie herausziehen und genau wie zuvor, Ausbrechen und auf Break klicken , um alle Variablen zu sehen. Dann kannst du den Leerlauf hinzufügen. Sie können sehen, dass wir die ADL hier oben haben und sie gehen hierher, wird ein Durcheinander sein weil sie so gekreuzt wird. Ich bleibe gerne sauber in meinem Projekt. Also was ich tun werde, versuchen wir, hier oben im Leerlauf zu sein, damit wir das rückgängig machen können, indem wir Nüsse sagen. Also nicht b bedeutet NICHT boolescher Wert. Wenn das bedeutet, dass es jetzt ist, wenn sich der Feind nicht bewegt, also wenn diese Bewegung falsch ist, also wenn er sich nicht bewegt, dann sind wir im Leerlauf. Lassen Sie mich also dieses Flipbook löschen und hier verbinden. Also was wir hier tun müssen, also wenn du dich nicht bewegst, wenn das stimmt, bist du im Leerlauf. Also verbinden wir uns hier oben im Leerlauf. Und ich kopiere das hier unten, ihren Hals, die Sprites. unten gibt es Connect false Hier unten gibt es Connect false und verbinde sie hier runter. Wenn wir uns also nicht bewegen, sind wir im Leerlauf. Wenn wir uns bewegen, sind wir in der Move-Animation. Und damit das funktioniert, musst du gehen. Jetzt haben Sie diese beiden Variablen und müssen sie festlegen. Und denken Sie daran, wenn Sie der Elternklasse eine Variable hinzufügen, also befinden wir uns innerhalb der feindlichen Basis. Alle Child Blueprint-Klassen erben diese Informationen. Schwein und Schnecke sind also Kinder der feindlichen Basis. Gehen Sie also zum Schwein und öffnen Sie den vollständigen Blueprint-Editor hier in den Standardeinstellungen der Klasse. Sie können sehen, dass die Animal-Info-Variable hier ist , weil Sie sie der übergeordneten Klasse hinzugefügt haben. Hier können Sie also die Leerlauf-Animation für das Schwein auswählen. Suchen Sie also nach Leerlauf, nehmen Sie das und nach dem Mond und wählen Sie das aus. Animation verschieben. Das Gleiche hier für die Schnecke. Öffnen Sie es also, öffnen Sie die vollständige Blueprint-Editor-Klasse Standard-Tierinformationen, suchen Sie nach Leerlauf und fügen Sie die Schnecken hinzu, suchen Sie nach Bewegung und fügen Sie auch die Bewegung für die Schnecke hinzu. Okay, also haben wir das jetzt und gehen wir zurück zur Basis. Dies ist also das Endergebnis, das wir anstreben werden. Und lassen Sie mich das einfach so näher bringen, damit es besser organisiert ist. Gehen wir zurück zum Event Graph. Jetzt haben wir diese Variable, die wir festlegen müssen, und wir setzen dieses Gefolge immer so ein, dass sie durch einen Server kämpfen. Lassen Sie uns einen benutzerdefinierten Wert machen, nennen Sie es Serverbewegungszustände wie diesen, und wir werden ihn durch den Server laufen und sind zuverlässig und wir können dies jetzt verbinden. Denken Sie nun an diese Servervariablen, wir müssen uns auch durch eine normale Variable führen. Und es heißt Bewegungsstufe. Lassen Sie uns also eine direkt in einem Blueprint-Interface erstellen . Weil wir jetzt einen haben. Gehen wir zu Schnittstellen oder zur feindlichen Basis. Und nennen wir es hier. Status der Bewegung. Lass uns kompilieren. Und hier in der feindlichen Basis haben wir eine Variable namens „bewegt“ gemacht, also brauchen wir einen booleschen Wert. Erstellen wir also einen booleschen Wert und die Eingabe namens D bewegt sich. Lassen Sie uns kompilieren und speichern und gehen wir zurück zur feindlichen Basis. Jetzt können wir es also „Bewegungsstaaten“ nennen. Und das können wir als Ereignisse bezeichnen. Und wir können dieses Serverereignis jetzt von hier aus ausführen. Okay, jetzt arbeiten wir also rückwärts. Also beginnen wir mit diesem Status der Ereignisbewegung. Es wird durch den Server gehen und dann diese Disrupt-Benachrichtigungsfunktion einstellen. Und je nachdem, ob es stimmt oder nicht, wird das Flipbook festgelegt. Also müssen wir dieses Event irgendwo durchführen. Und ich glaube, das Beste, oder ich finde, ich habe festgestellt, dass der beste Weg diesen Bewegungsstatus auszuführen, hier im Verhaltensbaum am Ende definierten zufälligen Ort ist . Wenn es also einen zufälligen Ort gefunden hat, lassen Sie uns weitermachen und sagen, dass er sich bewegt. Also werden wir den Bewegungsstatus auf wahr setzen. Und dann geht es weiter und geht an diesen Ort. Hier haben wir also schon einen Hinweis auf unseren Bauern. Das ist also sehr einfach. Wir können dies übernehmen und den Bewegungsstatus festlegen und diese Nachricht auswählen , da es ein Blueprint-Interface handelt. Genau so. Und tatsächlich ist dies eine Spielerbasis, die die falsche ist. Lass uns zurückgehen und sehen , wie wir es nennen. Eigentlich nannte ich es einfach einen Bewegungszustand. Lassen Sie mich, lassen Sie mich es „Bewegungsstatus einstellen“ nennen. Ich denke, das ist viel besser. Wenn Sie diese auch nennen, bleiben Set-Bewegungen so. Kompilieren. Gehen wir darauf zurück und sagen Set Movements, States. Und hier ist es in der gegnerischen Basis, nicht in der Spielerbasis. Wie auch immer, Nachricht wurde hier ausgewählt. Jetzt haben wir gesagt, dass die Bewegung sagt, dass sie wahr sind. Jetzt bewegt es sich also. Aber wir müssen es irgendwann falsch setzen , denn wenn Sie jetzt auf Play klicken und es ausprobieren können, können Sie sehen, dass es sich jetzt bewegt. Und lassen Sie mich die Bewegungsgeschwindigkeit ein wenig reduzieren , denn jetzt geht es so schnell. Gehen wir also für die Schnecke zur Charakterbewegung. Und ich setze die Bewegung auf 45 ein. Ich habe es einfach viel gemacht und ich denke, fünfundvierzig war eine gute Nummer für diese Metal Story Schnecke. Sie können also sehen, dass es sich bewegt, aber wenn es im Leerlauf ist, wird es niemals aufhören wie im Leerlauf-Animations-Flipbook. Und das liegt daran, dass wir den booleschen Wert nie auf falsch gesetzt haben. Es weiß also nicht wirklich, wann das Leerlauf-Animations-Flipbook abspielen soll das Leerlauf-Animations-Flipbook wenn es im Leerlauf ist, es bewegt sich immer noch. Also müssen wir einstellen, wenn ich zurück zur Schnittstelle gehe, müssen wir dies irgendwann auf false setzen. Machen wir das hier im Verhaltensbaum, das können wir auch tun. Also bewegt es sich an diesen Ort und bevor es gewichtet wird, machen wir weiter und setzen diesen booleschen Wert auf falsch. Machen wir also hier eine neue Aufgabe und klicken Sie einfach auf diese hier unten. Also machen wir eine neue Aufgabe. Und diese, ich nenne sets bewegung boolean, setze Bewegungsball, was bedeutet, dass Bewegung Boolean, das ist das einzige, was tut. Genau wie das, was ich dir vorher gesagt habe, müssen wir mit einer Empfangsausführung Ai beginnen. Und wir müssen innerhalb des Finishausführungen fertig werden. Und wir müssen es erfolgreich machen, wenn es fertig ist. Und das einzige, was wir tun, ist, dieses Sprichwort zu nehmen wird Feind, bekommt feindliche Referenz. Also bekommen wir diese feindliche Referenz hier und in der Basis. Und von der Schnittstelle aus können wir einfach ziehen und sagen Set-Bewegungsstatus hier und die feindliche Basis. Und das einzige, was wir tun, ist, diesen booleschen Wert einfach auf falsch zu setzen diesen booleschen Wert einfach auf falsch zu weil wir uns jetzt nicht mehr bewegen. Wir sind fertig mit dem Umzug. Gehen wir also zurück zum Verhaltensbaum. Und hier können wir BTT ziehen und sagen und diesen Satz Bewegung boolean auswählen. Okay, also macht das Ding jetzt, es ist, einen zufälligen Ort zu finden. Es bewegt sich an diesen Ort. Und wenn es diese Bewegung bewegt und beendet, wird der Boolesche Wert auf „false“ gesetzt , also bewegen wir uns nicht mehr. Dann wird es hier warten. Also klicken wir jetzt auf das Thrombozyten. Eigentlich füge einfach noch ein paar Feinde hinzu, nur damit ich nicht auf die Schnecke warten muss, um aufzuhören. Klicken Sie also hier, und Sie können sehen, dass es jetzt ist, dieser ist im Leerlauf und es funktioniert gut. Jetzt ist es im Leerlauf. Und wenn es sich dann bewegt, ist es im Movement Flip Book. Jetzt funktioniert es also einwandfrei. Was wir jetzt tun können, ist dass wir einfach noch ein paar Feinde hinzufügen können. also Alt gedrückt halten und ziehen, wird dupliziert. Und du kannst einfach ein paar Feinde auf dieser Ebene duplizieren. Wie viele du willst. Ich werde es eigentlich nicht platzieren, lasst uns sie hier platzieren. Warum, warum nicht? Gehen wir zum Feind und ich lege das Schwein hier hoch. So härtere Feinde sind hier oben. Also lasst uns das auf 0 setzen. Und eigentlich müssen wir anstelle von 0 einen setzen, damit es nicht auf den Kacheln liegt. Aber lassen Sie uns zum Beispiel für Schweine hier oben hinzufügen . Und ja, ich glaube, ich denke, das ist in Ordnung. Nehmen wir an, lasst uns auf Play klicken, um zu sehen, ob alles funktioniert, anstatt dass die Schweine zu schnell sind. Gehen wir also zurück zu den Bildern. Und weitere Schweine, die ich anrufe , setze ich es auf 90 Jahre. Ich glaube, die 90 habe ich das auch getestet. Aber die Schweine sind eine gute Zahl. Und du kannst sehen, dass sie dahinter stecken. Also müssen wir sie tatsächlich ein wenig voranbringen. Der schnellste Weg, dies zu tun, besteht darin sie hier im Outliner auszuwählen. Das sind also die Schweine. Das sind die Schnecken. Halten Sie die Umschalttaste gedrückt, wählen Sie den letzten aus, also haben wir sie alle und setzen es hier im Y auf eins. Und klicken Sie auf den Spieler. Der Spieler statt einem möchte ich, dass er vor den Feinden steht. Klicken Sie also auf zwei auf diesen Spielerspawn, also stehen wir vor allen Feinden. Und jetzt klicken wir auf Play. Und so sieht es aus. Also lassen wir die Schweine da rauf laufen. Der Leerlauf funktioniert einwandfrei und die Bewegung funktioniert auch gut. Sie können sehen, dass diese Schnecken ein bisschen oben sind. Was Sie tun können, ist auf die Schnecke zu klicken. Die Sache ist, wenn Sie diese Kapsel vergrößern, wird sie die Schnecke nach oben schieben, damit sie nicht so aussieht, als wäre sie auf dem Boden. zum Beispiel für die Schnecke Wenn Sie zum Beispiel für die Schnecke nur 11 hier unten und hier oben versuchen, klicken Sie auf zusammengesetztes Speichern. Und du kannst sehen, dass es jetzt auf dem Rasen ist, jetzt fliegt es nicht hoch. Das Problem ist jetzt und wir werden es in der nächsten Lektion beheben, Sie können sehen, dass es sich immer noch bewegt, wie es ist, es ist tatsächlich im Leerlauf, aber es bewegt sich so. Sie stürzen sich aus. Dies liegt daran, dass die Animation im Leerlauf abgepumpt wird. Also habe ich ein paar Zeit damit verbracht zu sehen, warum es das gemacht hat. Und ich habe immer noch keine Ahnung, warum es das macht. Aber ich denke, meine Theorie ist, dass es versucht, einen Punkt in der Navigation zu finden , und dann nervt es , weil es sich tatsächlich noch bewegt. Es ist nicht im Leerlauf, aber es kann sich nicht in diesen Bereich bewegen. Und das liegt an dieser Kapsel hier. Es macht eine seltsame Kollision und es beherbergt den Feind. Lassen Sie uns also zur nächsten Lektion übergehen und diese Fehler beheben. 54. Beheben von Bewegungsfehlern und Fixing: Okay, um den letzten Dollar aus dem letzten Video zu reparieren, müssen wir zu gehen, fangen wir mit dieser Schnecke an. Versuchen wir also, diese Kapsel zu vergrößern. Wie weit bis 2828 war die beste Zahl, um es für diese Schnecken zu tun. Und lassen Sie uns diese Schnecke minus 18 bewegen , um zu sehen, ob sie am Boden ist. Wenn Sie es also auf minus 18 senken, bewegt sich auf dem Boden. Und nur um zu überprüfen und zu sehen, ob es hier am Hill abgehört, scheinen sie sich jetzt reibungslos zu bewegen. Okay, das sieht also aus, es sieht jetzt gut aus. Wenn es also ausbucht, kannst du diese Kapsel hier vergrößern und sie kann diese Schnecke runterbewegen , damit sie auf dem Gras laufen lässt, wenn du es nicht tust, sie schwebt auf dem Gras. Und für die Schweine habe ich die Kapsel 30 mal 30 gemacht, und dann bewege ich das Schwein um minus acht, damit auch eines größer ist. Dieser ist jetzt groß, also habe ich festgestellt, dass dies die beste Lösung war , um dieses Abhörproblem zu beheben. Und jetzt können wir sehen, dass sich alles richtig bewegt und wir haben kein Problem. Auch hier, wenn Sie das Problem haben, wo der Feind bewegt und immer noch am selben Ort im Leerlauf ist. Sie können versuchen, die Kapselgröße zu erreichen und dann den Feind nach unten zu bewegen. Jetzt haben wir all diese Fortschritte gemacht. Bisher gute Arbeit. Sie sind in diesem Kurs tatsächlich sehr weit fortgeschritten. Und das nächste, was wir tun könnten, ist Schaden oder vielleicht brauchen wir hier oben eine Leiter. Also sehe ich dich, was ich für den nächsten Abschnitt mache. Und bis jetzt sieht alles gut aus. Wenn du mehr Feinde hinzufügen willst, kannst du dies tun. Wenn Sie es wieder selbst machen möchten, können Sie dies nicht auf Steam oder anderswo veröffentlichen. Dies dient nur zu Bildungszwecken. Aber wenn Sie nur üben wollten, benutze ich diese Website namens Maples , dass ich ein Ahorn-Simulator bin. Sie können also einfach hier unten klicken und einen neuen Charakter erstellen. Oder du kannst hier ein neues Monster erschaffen. Ein Mob kann hier sehen, dass du Karten erstellen kannst. Sie können auswählen, welche Art von Mob Sie erstellen möchten, vielleicht einen Schleim, etwas anderes, damit Sie mehr Karten erstellen können . Danach können Sie sie normalerweise horizontal drehen, weil sie es müssen sei in diese Richtung, bevor es funktionieren kann. Manchmal braucht man Photoshop, um sie zu drehen. Dann können Sie einfach die Tabellenkalkulation herunterladen. Und dann kannst du diese Schleimtabelle verwenden und du kannst sie hier in unsere Projekte importieren. Wenn ich also hierher und unser Projekt zurückgehe, kannst du diese Texturen einfach wieder in die Vermögenswerte und Feinde importieren , und du kannst den gesamten Prozess erneut und weitere Feinde hinzufügen. Also, was du mit dem Spiel machen willst, kannst du versuchen herumzuspielen und Spaß damit zu haben. Sagen wir also: Nun, und lasst uns zur nächsten Lektion übergehen. 55. Den Seil hinzufügen: Hallo an alle und willkommen zurück. In diesem Abschnitt werden wir damit arbeiten, dass der Rückgang mechanisch ist. So gute Arbeit, um es so weit zu schaffen. Sie haben viele Fortschritte gemacht. Und du siehst, dass wir viel gemacht haben. Und in diesem Abschnitt, in dem der Kunde Mechaniker ist, müssen wir viel lernen. Also lasst uns weitermachen und anfangen, das Seil-Sprite hinzuzufügen. Im Kursmaterial. Ich habe für dich eingeschlossen, die Seile hell. Wenn Sie zu den Kursmaterialien gehen und dann in die Umgebung gehen. Und hier drin hast du diese Textur namens Seil. Gehen wir also zurück zu unserem konstanten Ordner. Und innerhalb der Assets, und wir haben bereits einen Umgebungsordner. Also lade ich mein Seil hoch, innerhalb von Texturen , also ziehe es in den Texturen-Ordner. Okay, also drinnen, klicken wir mit der rechten Maustaste. Gehen Sie zu Sprite-Aktionen und wenden Sie Papier auf die Einstellungen an. Versuchen wir darauf zu klicken und dann ein Sprite zu erstellen. Bisher nichts Neues. Das haben wir bisher gemacht. Ich nenne es als Seil. Okay, jetzt haben wir dieses Seil Sprite. Bisher haben wir Flipbooks gemacht. Und wie Sie hier sehen können, ist das Seil offensichtlich kein Flipbook, es ist kein animiertes Seil. Ziehen wir es also hierher in die Umgebung. Und jetzt arbeiten wir mit einem Sprite zusammen. Ich glaube, dies ist das erste Sprite das wir unserer Umgebung hinzufügen werden. Und bevor wir das Sprite hinzufügen, kannst du das Sprite ziehen und es so der Umgebung hinzufügen und vielleicht das y auf 0 oder eins setzen. Und du könntest das Seil einfach so platzieren und alles ist gut und das Seil wird hinzugefügt. Aber das Problem dabei ist, dass wir dem Seil Code hinzufügen werden , weil unser Spieler damit interagieren wird. Also lasst es uns hier löschen. Und stattdessen werde ich es zu einer Blaupause machen. Wann immer Sie also etwas haben, mit dem der Spieler interagiert, sollten Sie automatisch darüber nachdenken es zu einer Blaupause zu machen. Gehen wir also zu den Blaupausen und dies ermöglicht es uns, einen Code für das Seil zu erstellen. Lassen Sie mich also mit der rechten Maustaste hier klicken und einen neuen Ordner erstellen und ihn Klettern nennen. Hier drüben. Lasst uns mit der rechten Maustaste klicken und zu Blueprints gehen. Und dann klick einfach hier hoch, Blueprint Class. Klicken Sie noch einmal hier und suchen Sie hier unten nach Papier. Und wir wollen ein Sprite machen. Bevor wir also Flip Books und Kachelkarten erstellt haben, aber dieses Mal haben wir auch Charaktere erstellt. Dieses Mal werden wir ein Sprite erschaffen. Dafür nenne ich es Kalk als Basis. Dies ist also der Basis-Blueprint für den Kunden, der genau dem entspricht, was wir für die Charakterbasis und die Spielerbasis hatten . Wir haben jetzt einen Kunden, der ansässig ist, weil es in Ordnung ist. Du hast gerade ein Seil, aber was wäre in Zukunft, wenn du eine Leiter haben wolltest? Was wäre, wenn Sie eine Pfeife wie eine Branchenkarte haben möchten , dann haben Sie vielleicht Rohre die Sie als Buchstaben oder Seile verwenden. Wir haben also eine Klemmbasis und dann können wir viele Kletterobjekte hinzufügen. Also Leitern, Seile, Pfeifen, was auch immer Sie Ihrem Spiel hinzufügen möchten. Lassen Sie uns nun mit der rechten Maustaste auf diese Kletterbasis klicken und eine Child Blueprint-Klasse erstellen. Und daraus werden wir das BP-Seil erstellen. Okay, lasst uns alles ablegen und speichern bis jetzt. Also für das Kletterseil oder weitere Seil hier doppelklicken. Und drinnen haben wir das Renderobjekt oder erinnern uns an Renderkomponenten. Und lassen Sie uns hier unsere Zeile auswählen. Also auf der Suche nach Seil und wähle unser Seil aus. Okay, also jetzt wird dieser hinzugefügt. Und was wir hier tun können, ist, dass wir jetzt unsere Blaupausen ziehen können, die in das Level gezogen werden. Lassen Sie uns den Standort auf 0 setzen. Ich setze es auf eins, weil ich erinnere mich daran, dass die Basiskacheln bei 0 sind und ich nicht alles andere stören möchte. Also setze ich das auf eins und lass es uns hierher verschieben. Ich weiß nicht, vielleicht so etwas. Und ich werde diesen Feind bewegen, damit ich tatsächlich sehen kann , wo ich das platziere. So etwas und ein bisschen unten, so dass dieser Teil hier oben an den Fliesen hängt. Jetzt können Sie sehen, dass das Seil unser Navigationsnetz tatsächlich stört, sodass sich unsere Feinde nicht mehr hierher bewegen können. Lasst uns also auf die Kletterbasis klicken. Das wollen wir nicht. Klicken Sie also auf die Kletterbasis. Entfernen wir es von allen Clientobjekten. Klicken Sie hier auf die Render-Komponenten. Lasst uns jetzt einfach hören bei der Kollision oder gar keiner Kollision. Und der Spieler kann nicht darauf treten. Und es wird keine Überlappungsereignisse erzeugen. Die Überlappungsereignisse, die wir später durchführen werden, werden wir Kollisionsfelder hinzufügen. Es ist also nicht wirklich die Render-Komponente selbst. Es sind die Kollisionsboxen die wir machen werden, die Überschneidungen. Sie können also sehen, dass es sich nicht mit irgendetwas überschneidet und alles ist repariert. 56. Rope: Arbeiten wir nun mit den Seilüberlappungsereignissen. Für die Seilüberlappungsereignisse brauchen wir also eine Kollisionsbox. Gehen wir also zur Kletterbasis und fügen Sie eine hinzu. Und der Grund, warum wir es der kolumbianischen Basis und nicht dem Seil hinzufügen , ist dass alle diese Objekte immer dann haben werden, wenn wir später viele Kletterobjekte erstellen Objekte immer dann haben werden, wenn wir später viele Kletterobjekte alle diese Objekte immer dann haben werden, wenn wir später viele Kletterobjekte Diese Kollision ist fehlerhaft, weil all diese verklumpenden Objekte Kinder dieser Kletterbasis sein werden . Was auch immer wir hier hinzufügen, gilt für alle untergeordneten Elemente hier in der Render-Komponente. Lasst uns nur eine Kollisionsbox machen. Suchen Sie also nach Kollision und fügen Sie diesen hinzu, der als Box-Kollision bezeichnet wird. Und lass mich es einfach Kollisionsbox nennen und kompilieren und speichern. Und wir müssen hier nicht wirklich mehr tun. Also lasst uns das minimieren und lass mich jetzt zurück zum Seil gehen. Und lasst uns den vollständigen Blueprint-Editor öffnen. Gehe zum Ansichtsfenster. Und drinnen müssen wir diesen anpassen , damit es dieses Seil hier in der Box füllt dieses Seil hier in . Ich werde es jetzt schaffen 55, wir müssen das tatsächlich im Spiel testen. Also, aber im Moment können wir es einfach auf 55 einstellen. Oder vielleicht, wenn du es größer machen willst , kannst du sogar 1010 machen. Und lasst uns das tatsächlich machen. Lasst uns versuchen, zehn statt fünf zu machen. Negative Fünf sind zu klein für diese Zahl, vielleicht wieder etwa 50 oder 6065. Auch hier müssen wir das in Spielen testen. Ich bin mir nicht sicher, wie es gerade aussehen wird. So etwas, wo wir es wie 40 im Z und 101065 hier für die Kollisionsbox platziert haben es wie 40 im Z und 101065 hier für die Kollisionsbox platziert . Also gehe ich zurück zur Kletterbasis und für die Kollisionsbox gehe ich zur Kollision hinunter, das einzige, was ich ändern werde, diese kann Charaktere aufsteigen, ich gehe zu klicken und nein, ich denke vorerst ist alles in Ordnung, also lasst uns hier nichts anfassen. Um nun die Überlappungsereignisse zu erstellen, können Sie wie zuvor erneut auf das Kollisionsfeld klicken . Gehen Sie nach unten und klicken Sie auf diese Komponente, beginnen Sie mit der Überlappung. Was sollte also passieren, wenn wir anfangen das Feld hier zu überlappen, lösche ich die Standardereignisse. Was sollte also passieren, wenn wir anfangen diese Kollisionsbox zu überlappen? Und Sie können sehen, dass die Kollisionsbox diese ist, dieses Quadrat hier, das wir hinzugefügt haben. Was sollte also das Schloss sein, wenn der Spieler hierher kommt und auf diese Kollisionsbox springt, was sollte passieren? Zunächst müssen wir prüfen, ob es der Spieler ist , der mit unserer Kollisionsbox interagiert. Und davor werde ich eigentlich sagen, dass Switch Autorität hat. Denn auch hier fügen wir für Kollisionen hinzu, die die Berechtigung , sicherzustellen, dass es der Server ist , der all diese Informationen verarbeitet. Wir möchten nicht, dass der Player schummelt, denn wieder ist die Berechtigung der Server, die Remote ist der Client. Und wenn der Kunde das alles macht, also wenn wir dies entfernen und hier nur codieren, hat der Kunde eine große Chance auf Cheaten und wir möchten nicht wirklich dass die Kunden in unserem Spiel betrügen. Switch hat also Berechtigung, der Server hat die Berechtigung über alles. Und der Server prüft, ob die Clients dies tun dürfen. Switch hat Autorität und wir müssen dann prüfen, ob dies die Spieler sind. Also der andere Schauspieler, der der Spieler ist, ziehen wir hierher und sagen, Schauspieler hat markiert. Und wenn der Schauspieler den Tag-Player hat und lasst uns hier einen Zweig machen. Autorität. So wie das. Es geht also durch den Server und überprüft, ob der Schauspieler den Tag-Player hat, was bedeutet, dass es sich um den Spieler handelt. Und lasst uns einfach sicherstellen, dass unser Spieler dieses Tag hat. Wenn wir also zu den Blaupausen, Spieler, Spielerbasis zurückkehren , glaube ich, dass wir es vorher hinzugefügt haben. Lassen Sie mich die Standardwerte der Klasse überprüfen und hier können Sie nach dem Tag suchen. Und hier haben wir vorhin hinzugefügt. Stellen Sie also einfach sicher, dass Sie den Tag-Player zu Ihrer Spielerbasis hinzugefügt haben . Also, wenn das Tag oder wenn der Schauspieler den Tag-Player hat, was wir tun, wenn das stimmt , wenn wir etwas tun wollen. Und ich werde nur eine Veranstaltung namens Can Climb veranstalten. Wenn Sie also mit dieser Box kollidieren, können Sie klettern. Wenn Sie jedoch nicht mit dieser Box kollidieren, bedeutet dies, dass Sie nicht klettern können, da kein Client in Ihrer Nähe Objekt ist. Also lass uns zurückgehen. Lass es mich hier wieder aufmachen. Und hier können wir sagen, wir können ein Event durchführen, das besagt, dass er klettern kann, und das wird innerhalb der Spielerbasis sein. Also müssen wir drinnen zuerst eine Veranstaltung machen, und lasst uns vorerst hier unten arbeiten. Lassen Sie mich ein individuelles Ereignis machen ein Sturmereignis steht, das besagt, Und dieses können wir tatsächlich zu einem Blueprint-Interface machen . Eigentlich machen wir das sofort, anstatt all diese Arbeit zu machen. Lassen Sie mich also zum Blueprint Interface gehen und lassen Sie mich zur Spielerbasis gehen. Und hier drin füge ich eine neue Blueprint-Funktion hinzu. Und lass mich sagen kann klettern. Das, was wir hier hinzufügen möchten, ist ein boolescher Wert. Also füge ich zwei Variablen hinzu. Erstens kann ein boolesches Sprichwort klettern. Und lass mich hier ein B hinzufügen, damit Boolean klettern kann. Die zweite Sache ist, dass ich definieren möchte, dass der Client Objekt ist. Also Kunde sein. Objekt. Also ist es ein Brief, ist es eine Robe oder was auch immer es ist? Das Kletterobjekt ist also wieder das, was du hier gemacht hast. Diese Kletterbasis. Wenn Sie hier oben schauen, ist es ein Papiersprite-Schauspieler, also brauchen wir eine Referenz dafür. Also lasst uns zurückgehen und Paper Sprites Schauspieler hier sagen , Objektreferenz. Jetzt haben wir den Dosenklettern und die Objektreferenz. Okay, also Endo-Spielerbasis, wir können es jetzt nennen und sagen, dass man die Linie klettern kann und du hast dieses Event hier. Dies ist es also, was wir letztendlich laufen wollen. Also hier, wenn du in der Kletterbasis kollidierst, wenn du mit der Kollisionsbox kollidierst. Und es ist der Spieler. Wir wollen diese Veranstaltung anrufen. Um also Ereignisse von der Spielerbasis aus aufzurufen, müssen wir wieder vom anderen Schauspieler ziehen und es sagen, Referenzen abspielen, die wir zuvor gemacht haben. Und dann können wir sagen, kann klettern. Jetzt können wir es ausführen und uns daran erinnern, dass es sich um eine Nachricht handelt weil es sich um eine Blueprint Interface-Funktion handelt. Hier kann also klettern. Wir müssen das nehmen, weil wir uns jetzt überschneiden. Ja, wir wollen klettern oder ja, du kannst klettern. Was ist das Klemmobjekt, das Sie von hier ziehen und sich selbst sagen können. Weil denken Sie daran, dass Sie sich in der Kletterbasis befinden. Wenn es also ein Seil ist, wenn es eine Leiter ist, wird es uns Selbstreferenz geben und sich automatisch definieren , weil Sie bereits hier drin sind. Okay? Wir brauchen also eine fertige Überlappung oder Endüberlappung. Klicken Sie also erneut auf das Kollisionsfeld, gehen Sie nach unten und klicken Sie auf n-Komponente und Überlappung. Was sollte also passieren, wenn Sie mit dieser Komponente überlappen? Ich werde das alles noch einmal kopieren, wir müssen es nicht schreiben. Schon wieder. Ich liebe es, Code zu kopieren und einzufügen. Also verbinde dich einfach, denk daran, all diese zu verbinden und kann klettern. Es sollte einfach entfernt werden, weil Sie nicht mehr klettern können , weil Sie die Überlappung beendet haben. das Alembic-Objekt angeht, werde ich dies löschen und was das bedeutet, es wird den Abfall leer als Objektvariable sein. Die Variable wird also leer sein, weil wir nicht mehr mit irgendetwas kollidieren. Und das ergibt Sinn. Also lass uns gehen, sagen wir alles hier. Und jetzt geht es zur Spielerbasis und spielt dieses Event. Also für diese Veranstaltung kann hier klettern, anstatt es direkt hier zu tun, denken Sie daran, dass wir im Multiplayer spielen, also müssen wir es durch die Server laufen. Erstellen Sie also ein neues benutzerdefiniertes Ereignis, das als Harvey und Lime bezeichnet wird. Denken Sie daran, wenn Sie Variablen festlegen, müssen Sie dies über den Server tun, um sicherzustellen, dass der Client nicht betrügt. Klicken wir also noch einmal auf den Server, führen Sie ihn zuverlässig auf dem Server aus. Und jetzt können Sie diese Serverereignisse einfach ausführen. Sie können also sehen, dass dies das gleiche Muster ist , wie wir es hier die ganze Zeit gemacht haben. Wie das Gleiche beim Springen, oder es geht durch den Server und geht dann mit dem Sound durch den Multicast. Und hier ist das Gleiche mit dem Umzug falsch angegeben. Es geht durch den Server und legt dann die Variable so fest, dass es das gleiche Muster ist, das wir hier ständig machen. Ich würde sagen, übe einfach weiter und wir werden viel einfacher werden. Ich weiß, dass es von Anfang an sehr schwierig ist, aber jetzt lass es uns durch den Server laufen. Und der Server wird diese Variablen jetzt festlegen. Also noch einmal brauchen wir hier zwei Variablen. Eine davon ist ein boolesches Sprichwort kann klettern. Und der zweite war ein Papierakteur , der Objekte abnimmt. Und es war die Zeitung ein Sprite-Schauspieler. Diese eine Zeitung ist ein heller Schauspieler. Okay, jetzt können wir die Variablen einstellen. Klicken wir mit der rechten Maustaste auf dieses Spannobjekt und werden zu einer Variablen befördert. Und ich werde den Platz hier unten entfernen . Jetzt haben wir das Kletterobjekt als Variable. Und lassen Sie uns mit der rechten Maustaste klettern auf eine Variable steigen. Und ich werde den Abstand hier unten entfernen . Und es heißt, wir haben bereits diese Variable I, und ich denke, es ist die Funktion hier. Also lass mich einfach ein B nach vorne legen, also ist es ein boolescher Wert und jetzt können wir es hier schreiben. So kann das Objekt klettern und pumpen. Denken Sie daran, dass wir uns auf dem Server befinden, sodass der Client keine Ahnung hat, auf welche Werte diese Variablen festgelegt sind, da Sie sie auf dem Server festlegen. Wenn ich also als Client spiele, hast du den Server hier. Aber wenn ich als Kunde spiele, habe ich jetzt keine Ahnung, was der Aufstieg ist. Also kann ich eigentlich einfach auf den Bildschirm drucken, damit wir tatsächlich sehen und daraus lernen können. Wenn ich diesen booleschen Wert ziehe, drucke ich den Wert dieses Booleschen heraus. Also, wenn ich der Server bin, ist das jetzt der Server und ich habe damit gelebt. Sie können sehen, dass es gerade falsch steht. Das liegt daran, dass wir es nicht wirklich durchlaufen. Also lasst uns das jetzt machen. Lasst uns die verbinden. Also das Ereignis, also geht es von dieser Kollisionsbox zur Zeile hier. Es wird es auf „wahr“ setzen. So kann klettern ist auf „true“ eingestellt. Jetzt geht es zur Spielerbasis und lasst uns diese verbinden. Und es wird den ganzen Weg hier durchgehen und es wird es ausdrucken. Jetzt wird es also wahr sagen. Lasst uns hierher springen. Und du kannst sehen, dass es wahr ist, wenn wir kollidieren und falsch sagt, wenn wir nicht mehr kollidieren. Das ist also richtig. Jetzt lasst uns hier als Kunde spielen. Ich laiche als Kunde. Und Sie können als Kunde sehen, es sagt wahr. Aber natürlich sagt der Client, dass es der Server ist. Sie können sehen, dass es als Server ausgedruckt wird, aber ich bin der Kunde. Dies ist das Problem. Ich als Kunde habe keine Ahnung, was diese Werte sind, weil ich sie nicht sehen kann. Der Server hat mir diese Informationen nicht gegeben. Deshalb ist es so wichtig , Dinge zu replizieren. Dies ist die Basis von Multiplayer und Unreal Engine. Klicken wir also auf diese Variable und replizieren Informationen zurück an die Kunden , damit die Kunden sehen können, wie hoch der Wert ist. Ok, jetzt wo sie repliziert sind, lassen Sie mich löschen, die in der Zeichenfolge sind. Also, wenn du jetzt auf Play klickst und du als Kunde als dieser Charakter spielst, obwohl du springst und siehst dass es der Server ist, der sie ausdruckt? Das ist richtig. Es ist der Server, der diese Variablen tatsächlich setzt. Aber jetzt, da Sie sie wieder an den Client replizieren, kann der Client tatsächlich den wahren Wert sehen , wenn er wahr oder falsch ist. Denken Sie also daran, Variablen zu replizieren , die ebenfalls zum Client zurückkehren müssen. Damit dies klettern kann, können wir von diesem booleschen Wert ziehen und einen Zweig machen. Wenn du also klettern kannst, müssen wir etwas tun. Wenn du nicht klettern kannst, müssen wir etwas anderes machen und das werden wir in der nächsten Lektion tun. 57. Auf- und Down: Lassen Sie uns dem Spieler nun die Möglichkeit geben, sich an diesem Seil hier auf und ab zu bewegen . Um nach oben und unten zu gehen. Gehen wir zurück zu den Blaupausen und fügen wir die Bewegung innerhalb der Spielerbasis hinzu. Also drinnen hier, bisher haben wir diesen namens „move right“ und „links“, aber wir brauchen einen neuen namens „Move up and down“. Lassen Sie uns also tatsächlich neue Eingaben machen. Gehen wir also zurück zu Edit - und Projekteinstellungen. Denken Sie daran , dass wir das vor einer Weile gemacht haben. Also hoffe ich, dass du dich daran erinnern kannst. Gehen Sie also zu den Projekteinstellungen und klicken Sie auf die Eingaben. Und da drinnen haben wir das bisher. Machen wir ein neues Zugriffs-Mapping und nennen wir es oben und unten, rechts und links, wenn Sie möchten. Sie können auch hören, dass Lipsky falsche gemacht hat. Also hier möchte ich hier auf dieses Plus klicken, du kannst weitere Schaltflächen hinzufügen, wenn du willst. So zum Beispiel der Pfeil nach rechts und der Pfeil nach links auf Ihrer Tastatur. So funktionieren sowohl da als auch rechts und links auf der Tastatur. Und denk daran, dass du für die Linke minus eins schreiben musst. Für den Fall, dass Sie es auch in Ihrem Spiel haben möchten, können Sie sogar einen Controller hinzufügen, mit dem Sie spielen können, aber wir brauchen dort ein bisschen mehr Setup. Konzentrieren wir uns also hier auf sie. Bewegen Sie sich auf und ab. Und wir können W benutzen, um nach oben zu gehen und S um nach unten zu gehen. Und wieder müssen wir minus eins für die S schreiben , also gehen wir als eins hoch, minus eins für das Absteigen. Wenn Sie möchten, können Sie Ihre Tastaturtasten hinzufügen. Also Pfeil nach oben, Pfeil nach unten. Und lasst uns ein Minus auf dem Pfeil nach unten machen. Okay, jetzt sind wir auf und ab gegangen. Lasst es uns schließen. Und hier drin schreibe ich es als erstes hier oben. Dies ist unser Hauptereignis. Lassen Sie uns also schreiben, nach oben, unten gehen und lassen Sie uns dieses Achsenereignis auswählen. Bewegen Sie sich also auf und ab. Also bevor du hierher zurückgehst, hast du gesagt, kontrolliere Rotation und dann hast du den Vorwärtsvektor bekommen . Vielleicht kannst du es schon herausfinden. Also was wir hier schreiben werden , also bekommt hier die Kontrolle Rotation. Dann willst du es nach oben bringen Vektor. Jetzt gehen wir also hoch und runter. Fügen wir noch einmal Bewegungseingaben hinzu, genau wie zuvor. Verbinden wir es hier und verbinden wir den Achsenwert hier. Wenn Sie nun kompilieren und auf Speichern klicken, klicken Sie auf Play. Und wenn Sie auf das Auf- und Abwärts klicken, sehen Sie, dass wirklich nichts passiert, aber Sie haben Ihren Code geschrieben. Das Problem ist hier unwirklich, dass das Auf und Ab nur funktionieren wird, wenn Sie Ihren Bewegungsmodus wechseln. In der Charakterbewegung können Sie also sehen, dass wir verschiedene Bewegungsmodi haben. Im Moment bist du in der Gehbewegung. Also haben wir unsere Gehgeschwindigkeit festgelegt und so weiter. Also sind wir in der Tat Charakterbewegungen. Aber wenn du auf und ab gehst, musst du deine Bewegung tatsächlich auf das Fliegen umstellen. Also fliegst du tatsächlich. Technisch gesehen. Wir müssen es darauf umstellen und das werden wir in der nächsten Lektion tun. Also nicht im Moment. Dies ist der Grund, warum dies momentan nicht funktioniert. Aber bevor wir hier enden, lassen Sie mich diesen booleschen Wert hier hinzufügen. Seitdem haben wir es schon geschafft. Wir wollen uns nur auf und ab bewegen , wenn wir Wesen anwenden. Wir sind also nicht daran interessiert , das zu tun , wenn wir nicht klettern. Also ziehe ich es hierher und mache einen Zweig hierher. Wenn dieser boolesche Aufstieg also wahr ist, werden wir diesen Code ausführen, da es nicht wirklich sinnvoll diesen Code auszuführen, wenn Sie nicht klettern können. Okay, also das war es für dieses Video, sehr kurz. Aber später werden wir jetzt in der nächsten Lektion tatsächlich die Kletterkonditionierung hinzufügen jetzt in der nächsten Lektion tatsächlich die . Wir legen also einige Regeln fest, wann der Spieler Burnout klettern kann. Lasst uns also zur nächsten Lektion übergehen. 58. Climb: Jetzt fügen wir einige Konditionierung und die Regeln hinzu, wann der Spieler klettern kann. Gehen wir also zurück zur Spielerbasis. Und statt der Spielerbasis sollten wir zu diesem gehen, wo wir aufgehört haben. Sie können klettern. Wenn Sie also jetzt noch einmal, lassen Sie mich Sie hier in den Blaupausen innerhalb der Kletter - und Kletterbasis daran erinnern , Sie mit der beginnenden Überlappungskollisionsbox interagiert . Und jetzt kann ich klettern stimmt. Was also passiert, wenn sie klettern können, stimmt. Wenn die Kuh klettern kann, stimmt es. Sie möchten überprüfen, ob der Spieler die W-Taste drückt. Bewegen Sie sich also nach oben, weil der Spieler klettern will, weil wir hier nicht wirklich klettern wollen. Wenn der Spieler nicht nach oben oder w drückt, sind wir nur daran interessiert, dass der Kunde immer dann ist, wenn der Spieler nach oben drückt. Das ist also etwas , das Sie überprüfen müssen. Also lasst uns wieder hierher gehen. Und wenn Sie hier in der Bewegung nach oben drücken, denken Sie daran, dass es plus eins gehen wird. Wenn du auf S klickst, geht es minus eins, wie wir bereits gesagt haben. Also werde ich das tatsächlich in eine Variable verwandeln , damit wir das später verwenden können. Also lass mich mit der rechten Maustaste klicken. Eigentlich können wir es nicht wirklich direkt einstellen. Das können wir nur im Einzelspieler machen. Also müssen wir es wieder durch den Server laufen. Lassen Sie mich also hier ein neues Ereignis erstellen, benutzerdefiniertes Ereignis und nennen Sie es den Wert der Z-Achse. Denn denken Sie daran, z ist, wir bewegen uns auf und ab und dies ist die Z-Achse. Stellen Sie also Z x x, z-Achsenwert ein. Und lassen Sie uns es durch den Server laufen, den Wert der z-Achse des Servers gesetzt. Ich bin eigentlich, dass wir das über die Schnittstelle, das Blueprint Interface und die Playerbasis tun können. Also lass mich das stattdessen machen. Interfaces Player Base und lass mich eine neue Funktion erstellen, nenne sie den Wert „z-Achse“. Und offensichtlich gibt es, dass der Wert hier ein Float ist, das versuchen wir zu setzen. Lassen Sie mich also einen Float-Eingänge erstellen laden, okay? Und nennen wir es Z-Achse. Und lassen Sie mich, ja, die Z-Achse ist in Ordnung. Lässt mich zurück zur Spielerbasis gehen. Und drinnen nennen wir es Set-z-Achsenwert. Und das ist die Interface-Funktion. Und jetzt geht es durch den Server. Lassen Sie uns also einstellen, dass es auf dem Server läuft und zuverlässig ist. Lassen Sie mich das einfach ein wenig nach unten bewegen, damit wir sehen können, was los ist, und lassen Sie mich nach unten gehen. Okay, lass uns dieses Server-Event hier ausführen. Set x ist Z-Achsenwert, und wir benötigen einen Float. Also lasst uns hier einen Float erstellen. Und nennen wir es z-Achse. Und jetzt können wir mit der rechten Maustaste klicken und diese in eine Variable umwandeln und sie z-Achse nennen. Hier. Wir haben die Z-Achse und lassen Sie mich all diese verbinden. Und jetzt können wir es hier aufrufen. Wenn also kann klettern stimmt, sind wir nur daran interessiert dies zu aktualisieren, wann immer wir tatsächlich klettern können , aber denn bevor wir klettern können, sind wir nicht wirklich interessiert, ob der Spieler drückt nach oben oder nicht. Wir sind nur interessiert, wenn der Spieler bei jedem Klettern die obere Nie drückt. Lassen Sie mich hier sagen, setzen Sie den z-Achsenwert hier. Und lassen Sie es mich tatsächlich vom eingestellten z-Achsenwert aus aufrufen. Lassen Sie es mich tatsächlich von der Int-Player-Basis aus anrufen. Und so. Und jetzt haben wir das angeschlossen, wir müssen diesen, die Achse oder diesen Achsenwert hier unten mit der Z-Achse verbinden . Und lass es mich einfach hier laufen lassen. Okay? Jetzt haben wir alles miteinander verbunden und dieser Achsenwert wird durch diesen eingestellten Z-Achsenwert aktualisiert. Es wird hier runter gehen und dann auf diesen Wert sinken. Denken Sie daran, was ich zuvor gesagt habe, Sie müssen dies replizieren , damit diese Informationen an alle Kunden gesendet werden. Sonst ist nur der Server, der den Wert dieser Variablen kennt. Okay, also lass uns wieder hier runter gehen. So kann klettern, wenn man klettern kann, stimmt. Jetzt interagieren wir mit dem Seil. Nehmen wir diese Z-Achse hier. Wenn die Z-Achse größer als 0 ist. Das heißt, der Spieler drückt nach oben. Und wir können das einfach löschen und einfach sagen, wenn die Z-Achse nicht gleich 0 ist, dann wollen wir etwas tun. Also lass mich das einfach machen. Und dann können wir hier einen Zweig machen. Wenn die Z-Achse nicht gleich 0 ist, möchten wir ein neues boolesches Sprichwort ansteigen lassen. Machen wir also hier einen neuen booleschen Wert. B zu sagen, klettert. Also jetzt, bevor wir diesen namens Can Climb hatten, aber jetzt klettern wir tatsächlich. Also machen wir einen neuen booleschen Wert namens „klettern“. Und wieder müssen wir es durch den Server laufen, damit wir es hier einfach so machen können, denn denken Sie daran, wir bereits im Server sind, aber ich denke, wir werden es später dort verwenden wo wir wird es hier tatsächlich über den Client verwenden und es muss durch den Server laufen. Lassen Sie uns also einfach eine Veranstaltung dafür machen. Machen wir ein neues, das als benutzerdefiniertes Ereignis bezeichnet wird. Und lass es mich einfach direkt im Interface hier machen . Und nenn es einfach, Set klettert. Und es wird nur einen Booleschen Wert als Input nehmen. Ist Vi, klettert. Und gehen wir zurück zur Spielerbasis. Und hier können wir sagen, dass Set klettert. Und wir können das gerade erstellte Ereignis nennen. Lass es uns durch den Server gehen. Lassen Sie uns also ein neues individuelles Ereignis erstellen. Dasselbe Serverset klettert. Geben Sie ihm eine Eingabe einer booleschen namens is line, die so ist. Okay? Und dieser kann tatsächlich klettern, aber ich werde ein B nur aus guten Praktiken hierher stellen, um sicherzustellen, dass alles in Ordnung ist und klettern kann. Es hat ein B hier, also ist das cool. Also hier klettert das Set und wir werden es zuverlässig durch den Server laufen. Und das einzige, was wir hier tun werden, ist auf zwei zu setzen, ist das Klettern. Also haben wir diese Variable erstellt, ziehen sie heraus, setzen sie hier ein und lassen Sie uns dies durch die Clients führen, und lassen Sie uns dies durch die Clients führen um zu den Servern zu gehen. Server Set klettert und verbindet es hier oben. Okay, also setzen wir diese Variable hier. Und das, was wir damit machen wollen , wird nicht repliziert. Repliziert wird nur verwendet, wenn Sie Informationen an die Clients senden möchten . Auch hier wird Rep Notify verwendet, wenn Sie etwas visuell ändern möchten. Also nicht nur Informationen wie hier und der Z-Achsenwert, wir wollten nur Informationen senden. Hier möchten wir jedoch visuelle Änderungen vornehmen, da wir das Flipbook auf den Kunden umstellen werden , der Flip Book ist. Wir werden diese Replikation also ändern , um eine Benachrichtigung zu umbrechen, da wir einige visuelle Änderungen haben einige visuelle Änderungen haben , die wir ablehnen müssen. Okay, also hier werden wir es hinzufügen. Wenn also der Wert der Z-Achse nicht gleich 0 ist, was bedeutet, dass der Spieler nach oben oder unten drückt, dann möchten wir klettern. Also lasst uns das machen. Nehmen wir an, Set ist Schleifen. Wir können das jetzt nennen, Set klettert und wir können es wahr machen, weil wir jetzt klettern wollen. Aber hier im Herbst. Lassen Sie mich das also tatsächlich besser hierher ziehen im Falschen. Also können wir klettern. Aber jetzt haben wir das Seil verlassen. Jetzt können wir also nicht mehr klettern , weil Sie sich am Ende mit den Bugs überschneiden. Nehmen wir an, wir sind bereits bestiegen und das wird falsch. Wir müssen dies auch auf false setzen, denn sonst haben wir gerade nirgends in unserem Code angegeben, wann dies falsch sein wird? Und wenn du am Seil kletterst und die Reihe verlässt, dann ist diese immer noch wahr. Also lasst uns das kopieren und so hier unten platzieren . Sagen wir also, wir sind bereits bestiegen, also lass mich das klettern und lassen Sie mich hier verzweigen. Also wenn wir es sind, also hier, wenn wir die Kollisionsbox hier in der Kletterbasis lassen, wenn wir sie verlassen und es ist auf falsch eingestellt. Wenn wir bereits bestiegen sind. Wenn es also gibt, wenn das Klettern auf „true“ eingestellt ist, lassen Sie uns weitermachen und es auf „false“ setzen. nur sicher, dass dies auf „false“ eingestellt ist. Und wir klettern immer noch nicht einfach so. Lassen Sie mich das also voranbringen und das nach oben bringen und das ein bisschen mehr organisieren. Schon wieder. Wenn etwas nicht richtig strukturiert ist, können Sie es auswählen und auf der Tastatur auf Q klicken , um eine Zeile wie diese zu machen . Okay, also haben wir ein kleines Problem damit und vielleicht kannst du es schon herausfinden. Lassen Sie mich einfach hier kompilieren und lassen Sie mich das so auf den Bildschirm drucken. Und lass mich tatsächlich bewegen, lass mich zu dem Kunden gehen, der tatsächlich am Seil ansässig ist. Also lass uns zum Seil klettern gehen. Lassen Sie mich zum Darstellungsfenster gehen und dies einfach auf 80 oder so ähnlich erhöhen. Etwas Großes. Und lass mich stattdessen den Spieler hier oben platzieren. So. Lass mich auf Play klicken. Und jetzt möchte ich es auch auf den Bildschirm drucken. Gehen wir also zur Spielerbasis, jetzt werden wir Hallo drucken. Ja, das ist gut. Also lass mich auf Play klicken. Und wenn ich jetzt meine Maustaste nach unten klicke und mich bewege, kannst du sehen, ob ich mich bewege. Und lasst mich zuerst gehen. Also klicke auf ein um zu bewegen und dann klicke ich hier auf S. Sie können sehen, dass es Hallo sagt, weil es überprüfen kann , dass ich beim Laufen mit mir kollidiere, wenn ich renne und dann hier mit meiner Box kollidiere und sie kann klettern. Es kann sehen, dass ich meine Z-Achse drücke , damit sie nicht gleich 0 ist, was bedeutet, dass sie tatsächlich auf Wesen klettern wird. Das läuft also richtig. Das Problem, das wir gerade haben, ist wenn ich am Seil stehe und runtergehen möchte, wenn ich auf S klicke, um nach unten zu gehen, wird es nicht wirklich überprüfen. Denn denken Sie daran, dass dieses Ereignis nur einmal ausgeführt wird. Es läuft nur, wenn Sie mit der Box kollidieren. Was ist, wenn Sie bereits mit der Box kollidieren? Was macht, wenn du auf der Schachtel stehst? Das ist nie wieder gelaufen. Dies wird nur dann laufen , wenn Sie die Kollision verlassen und dann mit ihr kollidieren. Schon wieder. Dieses Ereignis wird hier nur einmal ausgeführt, wenn Sie zum Zeitpunkt, an dem Sie mit dem kollidieren, nicht die Abwärtstaste drücken , mit dem Seil wird dies immer noch 0 sein, also wird dies nie überprüft. Wenn ich also auf klicke, wenn ich hier zu meinem Spiel zurückkehre, klicke auf S, um nach unten zu gehen. Das wird nicht wirklich funktionieren. Also brauchen wir etwas, damit es hier ständig überprüft werden kann, wenn ich hier auf der Kollisionsbox stehe , um ständig zu überprüfen, ob dies gleich 0 ist oder nicht. Und wieder verwenden wir dafür Timer, wir haben den Timer schon hier oben benutzt. So kontinuierliche Überprüfung können Sie immer Timer verwenden, sehr gute Tools, die Sie sich merken sollten. Hören wir also, trennen Sie dies und verbessern Sie diesen Code. Lassen Sie mich also einen Timer erstellen, einstellen, Timer nach Ereignissen. Verbinden wir es hier. Jetzt können wir ein Event zwei Läufe von hier aus machen und es herausziehen und Lime-Inputs sagen. Lassen Sie uns eigentlich benutzerdefinierte Ereignisse erstellen. Das meinte ich. Und nenne es gekletterte Eingänge. Also ist diese Clienteingabe, die überprüft wird, gleich 0 oder nicht? Und wenn nicht, dann klettern Sie weiter. Ich werde das ein bisschen mehr so organisieren. Und für diesen, für den Timer, werde ich es schleifen. Und für die Zeit, in der es in die Schleife geht, schreibe ich einfach 0.1, was bedeutet, dass die gesamte Schleife alle 0,12 ausgeführt wird, was bedeutet, dass dies zehnmal pro Sekunde ausgeführt wird. Wann immer ich Kunde bin, möchte ich das nicht mehr überprüfen. Also werde ich dies auf eine Variable bewerben. Und nennen wir es Check Limed Inputs. Und ich nehme das und sage Lear und den ungültigen Timer nach Handle. Wann immer, wann immer wir hier nachgesehen haben, suchen wir nach Eingaben. Wann immer wir sehen, dass der Spieler an diesem Seil auf und ab drückt, was bedeutet, dass wir klettern werden. Und zu dieser Zeit wollen wir es nicht mehr wirklich überprüfen. Denn der ganze Zweck besteht darin, nur zu prüfen, ob der Spieler an dieser Kollisionsbox nach oben und unten drückt. Also können wir dieses Mal einfach aufhören. Und denk dran, wenn du den Timer nicht stoppst, zeige ich es dir. Also wenn du einfach immer Hallo druckst und du kannst das Debuggen mit dem Heiligenschein so nützlich sein. Wenn Sie also auf S nach unten klicken, können Sie sehen, dass es ständig Hallo druckt. Natürlich ist es ganz oben, wenn Sie nicht mehr S drücken , weil Sie sich nicht wirklich nach unten bewegen. Aber wenn ich drücke, wird es ständig gedruckt, ich möchte es nicht wirklich immer drucken wenn ich klettere denn dies ist nur nützlich, um zu überprüfen, ob wir schon, ob Sie das Seil tatsächlich klettern wollen . Wenn wir also bereits bestiegen sind, wollen wir das nicht wirklich überprüfen. Und hier sagen wir klarer und ungültiger Timer nach Handle. Denn jetzt können wir sagen, wenn das stimmt, werden wir es so einstellen, dass es klettert und weitergeht und diesen Timer entfernt. Wenn ich also auf Jetzt spielen klicke und hier klicke auf S, halte es gedrückt. Und natürlich müssen wir etwas drucken, also setze ich etwas damit wir tatsächlich sehen können, was los ist. Ich klicke auf Play, klicke auf S, um nach unten zu gehen. Und obwohl ich es gerade festhalte, hieß es nur einmal Hallo. So erstellen Sie etwas Optimiertes und Blueprints, denken Sie daran, den Timer anzuhalten wenn Sie ihn nicht mehr benötigen. Sonst wird ewig laufen und das willst du nicht wirklich tun. Also auch für den Timer hier, nur um sicherzustellen, dass er stoppt, kopieren wir diesen Code. Lass mich hier gehen. Wenn man also klettern kann, ist auf false gesetzt. Wenn Sie sich also mit der Kollisionsbox überlappen , sind wir es. Wenn Sie also schon klettern und das Seil verlassen, wir einfach noch einmal daran, diesen Timer zu stoppen. also nur sicher, dass der Timer nicht mehr läuft. Also das war's für dieses Video hier. Wir haben also eine Menge Dinge erledigt. Wir haben den Timer so eingestellt, kontinuierlich überprüft, ob der Spieler sich nach unten bewegt oder nicht. Der ganze Prozess besteht also nur darin, es sehr schnell zu erklären , bevor wir dieses Video beenden, nur für den Fall, dass Sie eine vollständige Erklärung benötigen. Was wir hier anfangs machen, ist dass der Spieler hier am Seil springen wird. Der Spieler wird diese Kollisionsbox berühren. Und was der Spieler diese Kollisionsbox berührt, wird dieses Event spielen. Die Veranstaltung läuft durch den Server und es wird überprüft, ob der Schauspieler den Tech-Spieler hat , nur um sicherzustellen, dass der Spieler das Seil tatsächlich berührt und nicht jemand anderes. Und das ist, wenn das stimmt, werden wir das Can Climb-Event nennen, das sich hier im Spieler, Spieler-Schauspieler, befindet. Wir werden festlegen, kann boolean klettern, um wahr zu sein. Also wollen wir klettern und was ist das, was wir klettern werden? Das Ding, das wir selbst klettern werden , was auch immer du hier platziert hast. In diesem Fall haben wir ihr Seil, das ein Kind des Kletterns ist, platziert . Indem er sich selbst schreibt, weiß es automatisch, dass es hier zum Seil geht. Und das ist der Schauspieler , den wir klettern. Also wird es gehen, um klettern zu können. Also fangen wir hier an. Die Informationen hier, der Boolesche Wert, Sie haben es auf wahr gesetzt, also wird es hier unten auf wahr sein. Die Informationen werden hier auf dem Server fortgesetzt, diese Variablen senden und verkaufen, um sie zu replizieren. Da wir daran interessiert sind, diese Informationen an die Clients weiterzugeben diese Informationen an die Clients weil wir gerade auf dem Server sind, der Client keine Ahnung, was dieser Wert ist, wenn Sie sie nicht an die Clients zurückgeben. Wenn sie klettern können, stimmt es. Wir werden prüfen, ob der Spieler tatsächlich die Abwärtstaste drückt, um das Seil zu klettern. Wenn der Spieler die Abwärtstaste drückt, wir fest, dies auf „true“ steigt. Wenn wir das tun, wird festgelegt, dass sein Client den Server durchläuft, hier den Server durchläuft und diese Variable dann auf „true“ setzt. Jetzt haben wir das codiert, aber wir werden das in der nächsten Lektion tun . Also haben wir dies auf Wrap Notify eingestellt, die sich dann wieder daran erinnert, dass eine rote Benachrichtigung eine On-Ramp-Funktion erzeugt. Hier werden wir viele Dinge codieren, z. B. das Ändern Ihres Flipbooks, um es abzulehnen, ein Flipbook zu sein. So kann der Spieler visuell sehen, dass du kletterst. Und wenn ich wieder hierher gehe, ist es falsch, wenn sie klettern können. Wenn du es schon bist, wenn du schon gesagt hast, dass das klettert, um wahr zu sein, stimmt das. Wir werden es auf „false“ setzen, weil du nicht mehr klettern kannst. Und wir werden den Timer sowieso anhalten. Wenn sie können, wird Klettern falsch sein und du wirst es nicht finden. 59. Player aktualisieren: Hallo und willkommen zurück. Es gibt also einen kleinen Bug , bevor wir anfangen, du kannst sehen, ob ich hier zur Seite gehe , plötzlich verschwindet mein Sprite und wenn ich zurückgehe, erscheint es. Also sehr, sehr seltsamer Bug , den wir gerade haben. Lasst es uns tatsächlich reparieren, bevor ich diesen seltsamen Bug repariere, habe ich herausgefunden, dass wenn du zu den Blaupausen gehst und hier zur Kletterbasis gehst, lass es uns für die ganze Klemmung stellen -Objekte können Sie auf die Render-Komponente klicken. Und wenn Sie hier zum Rendern gehen, können Sie auf Erweitert klicken. Und wenn ich das nur minimiere, siehst du auch Verschwinden wann immer. Ich klicke auf G, um all das zu entfernen. Du kannst sehen, dass es erscheint, wenn ich hier bin, es verschwindet, wenn ich hier bin. Ich habe hier im Rendern unter Render-Komponenten herausgefunden , dass Sie zur Transluzenz gesuchten Priorität gehen und eine schreiben können , Kompilieren und Speichern. Und du kannst sehen, dass es so erscheint, dass dieser Bug nicht mehr erscheint. Okay, was wir gerade machen wollen, ist, dass wir die Spielerbewegung aktualisieren wollen. Im Moment haben wir das Richtige, wir tun das Richtige. Aber im Moment können wir hier oben nicht wirklich leben. Und das liegt daran, dass wir wollen, dass wir unseren Spielerbewegungsmodus ändern sollten. Gehen wir also zurück zur Spielerbasis. Und drinnen von hier, fangen wir an, das Ding in unserer entpackten Funktion isClient zu codieren . Gehen wir also hier hinein, ziehen wir zuerst die Variable und schreiben einen Zweig. Was sollte also passieren , wenn Sie klettern? Also schlägt der Spieler auf das Seil und drückt die W-Taste, um nach oben zu gehen. Was sollte passieren? Das erste, was wir tun möchten, ist die Charakterbewegungskomponente zu nehmen und dann von hier zu ziehen und den Modus „Bewegungen einstellen“ zu sagen. Das hier. Und dann werden wir das auf Fliegen einstellen denn wenn du kletterst, fliegst du tatsächlich. Standardmäßig laufen wir gerade herum, und das ist das Gehen. Wann immer wir springen. Erinnern Sie sich hier im Springen, wenn ich zurück zum Event Graph gehe, wann immer wir gesprungen sind, also wenn ich finde , ist der Code irgendwo hier. Für den springenden Code hier drüben können Sie früher sehen, ob Sie sich erinnern, dass wir dies zu einer reinen Funktion gemacht haben, bei der wir überprüft haben , ob die fallende Charakterbewegung nicht wahr ist. Fallen ist wann immer wir hier springen und im Bewegungsmodus, wenn ich zurück zur Auswickelfunktion gehe, ist das Fallen wann immer du springst, das Gehen ist gerade, wenn wir herumlaufen. Wenn wir jedoch klettern wollen, müssen wir es auf Fliegen einstellen. Also fliegen wir tatsächlich herum. Und kurz bevor ich es vergesse, lass mich zu den Charakterbewegungen gehen und hier runter zum Fliegen hierher gehen. Lassen Sie mich die Fluggeschwindigkeit auf 1 Fünftel einstellen. Ich habe es in Maple Story getestet, also habe ich heute Maple Story gespielt, um es mir anzusehen. Und es ist ungefähr 115 Geschwindigkeit. Du musst es im Spiel testen, um zu sehen, dass du es einfach 600 sein lassen kannst und du kannst tatsächlich testen und sehen, wie schnell das ist. Aber ich werde es jetzt auf 150 ändern. Und die Beschleunigung brechen , wenn du das nicht anziehst. Wenn Sie also auf W klicken und loslassen, fliegen Sie immer noch nach oben. Das will ich nicht. Ich möchte wie Wonder Player, der den W-Button loslässt , nicht mehr klettern. Ich möchte, dass der Spieler vollständig anhält und nicht still nach oben rutscht. Ich werde das auf etwas Hoch setzen , etwa 10 Tausend. Also manche nur eine Zufallszahl, Kompilieren und Speichern. Und wenn der Spieler nicht klettert, also wenn der Spieler vom Seil losgelassen hat, kopiere ich das Einfügen und setze es auf „Fallen“, weil ich möchte, dass der Spieler davon fällt das Seil. Also so etwas. Und wenn Sie dies wieder besser aussehen lassen möchten, sollten Sie diese Plattform wahrscheinlich verschieben und nach oben bieten. Das trifft also eigentlich nicht auf den Boden. Gehen wir also zurück zur Spielerbasis. Wenn der Spieler also nicht klettert, werden wir ihn auf „Fallen“ einstellen. Lassen Sie uns nun unser Flip Book einstellen. Nehmen wir also unser Sprite hier. Sagen wir mal „Flip Book“. Und lasst uns es zuerst hier oben mit dem Klettern verbinden. Wenn wir also klettern, möchten wir, dass der Kunde Animation ist und mich das kopieren lassen. Und wenn wir fallen, wollen wir unsere Sprunganimation haben. Die Sprunganimation, die wir gerade haben, aber rückläufig sind, tun wir nicht, also müssen wir das vorbereiten. Also hier zum Fallen hast du diese Sprunganimation. Ich erinnere mich, dass wir zwei Charaktere haben und dies so dynamisch wie möglich gestalten möchten. Lasst uns also noch einmal unsere Struktur übernehmen. Lass es uns kaputt machen. Und hier können wir jetzt unsere Sprunganimation machen. Nehmen Sie diese Sprunganimation und verbinden Sie sie hier verstecken Sie alle anderen Pins wie diese. Es sieht also viel sauberer aus. Jetzt haben wir das bereit, aber was das Fliegen angeht, haben wir gerade keine Aufstiegsanimation. Hier im Kurs Materialien in den Charakteren in Tsarina. Du siehst, dass ich den Aufstieg sowohl für dich als auch für Luke vorbereitet habe. Also lasst uns weitermachen und das hier minimieren. Gehen wir zu Blau, eigentlich hier in den Asset-Charakteren oder Serena zuerst und den Texturen. Und lass mich den Aufstieg importieren und dasselbe für die for-Schleife machen. Also geh zur Luke-Textur. Hier. Wir haben Luke und den Aufstieg, so wichtig, aber beide klicken zuerst mit der rechten Maustaste auf diese 1 und wenden Papier auf die Einstellungen an. Tu das Gleiche für Serena. Rechtsklick, wenden Sie Papier auf die Einstellungen an und klicken Sie mit der rechten Maustaste hier. Und lasst uns die Sprites extrahieren. Das Raster ist achtzig, ein achtzig Klick auf Extrakte. Und so muss man sie in S lime 01 umbenennen. Dieser ist eigentlich 0202. Und dieser, wo ist der andere hier? 01. Und mach das Gleiche für Luke. Klicken Sie also mit der rechten Maustaste, Extrahieren Sie Sprites , Gitter, eins achtzig, achtzig. Dieser hier ist wie 01 und der andere ist Klima 0 zu. Jetzt können Sie sie auswählen, klicken Sie mit der rechten Maustaste auf ein Flipbook namens FB climbed erstellen . Zieh es in Lukes Ordner. Und lassen Sie uns die Frames pro Sekunde auf vier setzen. Lassen Sie uns es also auf vier setzen und dasselbe für Serena hier für den Kunden tun, klicken Sie mit der rechten Maustaste, erstellen Sie ein Flipbook namens Climb. Platzieren Sie es außerhalb dieses Ordners. Hier ändern wir die Frames pro Sekunde auf vier. Jetzt speichern wir alles und wir müssen daran denken, es unserer Struktur hier in der Spielerbasis hinzuzufügen. haben wir also noch nicht gemacht. Gehen wir also zu der Struktur und den Blaupausen, strukturiert Spielerinformationen und fügen wir eine neue hinzu, eine neue Variable namens Cholin-Animation. Wenn Sie jetzt hinzufügen möchten, werden wir es dynamischer gestalten. Du hast also nicht unbedingt ein Seil. Sie können auch einen Brief haben und wird eine andere Animation haben. Wir können es also entweder Klimaemission nennen oder besser sein, oder man kann es eine Seil-Animation nennen. Und wenn Sie möchten, können Sie später eine Leiteranimation hinzufügen. Und das ist eine andere Animation. Also Roboteranimation, Nennen wir es Paper Flip Book oder die Variable ist ein Papier-Flipbook, wie hier. Und lasst uns sparen, lassen Sie mich das tatsächlich nach oben bewegen, also ziehen Sie es über die Soundeffekte. Ja, ich wollte eigentlich Soundeffekte hier unten sein. Also Robin Emission, sparen. Hier drüben. Speichern wir tatsächlich alles, kompilieren und speichern. Und Sie können sehen, dass die Seil-Animation erscheint. Lassen Sie mich erneut darauf klicken klicken Sie auf Nicht verbundene Pins ausblenden. Was wir also hier oben tun wollen, ist, diese Struktur einzufügen. Und Sie können sehen, wann immer Sie nicht verbundene Pins verstecken und es sich einfach so versteckt, Sie können sie jetzt noch sehen. Sie können darauf klicken und auf diese Standardkategorie klicken und Sie können auswählen, dass diese fliegende ist, also ist es ein Klettern, diese eine Seil-Animation und Sie können sie sehen und Sie können es hier verbinden. Denken Sie daran, dass Sie die Seil-Animation verbinden müssen , da wir noch nicht angegeben haben, was sie ist. Du musst also sowohl zu Serena als auch zu Luke gehen. Also Blueprints Spieler. Fangen wir damit an, hier zu schauen. Denken Sie daran, dass Sie in der Klasse T false die Seil-Animation einstellen müssen. Wenn Sie also nach Luke klettern, gehen wir nach Serena. Für Serena wird es so aussehen. Also Seil-Animation. Und dann lasst uns Leichenwagen finden. Dieser eine FP ist geklettert. Okay, jetzt sollten sie arbeiten. Gehen wir jetzt zurück zu unserer Spielerbasis. Was wir jetzt tun, ist dass wir es in den Flugmodus schicken. Also sollten wir in der Lage sein, hier in der Grafik auf und ab zu gehen, ich gehe runter. Wir sollten also in der Lage sein, auf und ab zu gehen, denn jetzt sind wir im Flugmodus und können klettern. Und lass mich hierher zurück und dann setzen wir das Flip Book. Also lasst uns tatsächlich versuchen, es zu spielen und zu sehen, ob ich etwas vermisse. ist immer gut, es auszuprobieren. Also lasst uns alles retten. Lass uns spielen. Wenn ich jetzt hierher gehe, klicke ich auf unten. Du siehst, dass ich mich tatsächlich bewege. Aber das Problem ist, dass diese Kollisionskachel meinen Charakter stoppt. Also lass es mich hier tatsächlich von unten versuchen. Fallen Sie runter. Und wenn ich hier ans Seil gehe, siehst du, dass ich tatsächlich die Leiter hoch und runter gehe. Das Problem ist hier, der Titel hindert uns daran zu steigen. Und das wollen wir das im nächsten beheben. Aber ich glaube wieder an die nächste, wir entfernen diese Kollisionen, damit wir nach oben gehen können. Wir haben auch einen kleinen Käfer , bei dem wir zu den Seiten laufen können , obwohl wir hier laufen. Also lasst uns weitermachen und das reparieren. Ich klicke auf Escape und lass mich die Spielerbasis öffnen. Und hier oben, lass mich eigentlich zum Event Graph gehen. Lass mich einfach alles schließen. Ich glaube, ich habe eine Menge offen, viele Dinge offen. Jetzt, hier im Ereignisdiagramm, ich mit der rechten Maustaste und sage „Tabs schließen“ auf der rechten Seite. Also habe ich das gerade nur geöffnet. Also hier drüben in der Bewegung nach rechts und links wollen wir uns nicht wirklich nach rechts und links bewegen , wenn Sie klettern. Dafür können wir also einen booleschen Wert hinzufügen. Also wenn ich es einfach hierher ziehe und wir können das klettern benutzen und du kannst einen Booleschen Wert schreiben. Wenn Sie also nicht klettern, können Sie sich nach rechts und links bewegen. Aber zweitens, wenn du ein Seil kletterst, wollen wir uns nicht wirklich nach rechts und links bewegen. So etwas Einfaches kann einen solchen Bug beheben. also nur einen booleschen Wert verwenden, können Sie manchmal Code verhindern. also immer daran, dass Booleans hier sehr, sehr nützlich sind. Und du siehst, dass ich mich nicht nach rechts und links bewegen kann. Und auch unsere Animation, Kletteranimation funktioniert einwandfrei. Jetzt kann ich nicht, ich kann mich nicht von meinem Seil entfernen weil ich glaube, dass meine Kollisionsbox gerade sehr lang ist. Also lass mich zurück zum Seil gehen. Weil wir hier getestet haben und hier zum Seil gegangen sind. Und lass mich das einfach auf etwa 65 reduzieren , so etwas. du auf Jetzt spielen klickst, kannst du mich tatsächlich meinen Spieler hier unten setzen lassen. Wir müssen nicht ständig runterfallen. Hier. Ich kann klettern, ich kann runter gehen und ich kann mein Seil hier lassen. Schon wieder. Sie können diese Plattform höher setzen, wenn Sie möchten, oder Sie können die Kollisionsbox einfach etwas kleiner machen Kollisionsbox einfach etwas kleiner damit Sie nicht unbedingt den ganzen Weg hierher gehen müssen. So etwas wie 60 und ich kann es nach oben bewegen , so etwas. Klicken Sie also noch einmal auf Play. Und wir können springen und wir werden das Seil verlassen wann immer wir irgendwo hier sind. Okay, so sehr cool. Wir können jetzt auf und ab gehen. Und du kannst auch sehen, dass wir ein bisschen rutschen , wenn ich zur Seite gehe. Manchmal entferne ich mich tatsächlich vom Seil, so etwas. Jetzt gehe ich auf und ab, aber wir werden später auch den Kundenstandort anpassen. Also mach dir darüber keine Sorgen, aber im Moment kannst du sehen, dass wir springen können, während wir hier am Seil sind. Also lasst uns das auch in Ordnung bringen. Gehen wir also zurück zur Spielerbasis und zum Springen. Lasst uns also wieder die springende Logik finden. Wenn du nicht fällst und nicht ausgerichtet bist, wollen wir nicht wirklich springen, wenn du kletterst. Also lasst uns das nehmen. Und hier können wir hier Ende sagen und Boolean. Und du kletterst nicht. Also verrückt, Boolean. Auch wenn du es bist, wenn du nicht fällst und nicht kletterst, wollen wir nicht wirklich springen, wenn du kletterst. Lassen Sie mich das vorwärts bewegen und lassen Sie mich auf diesen klicken und auf Unverbundenen Pin ausblenden klicken. Also geht es wieder hoch und verbinde stattdessen diesen. Wenn wir also fallen, wollen wir nicht springen. Wenn wir Cholin sind, wollen wir auch nicht springen. Wir müssen also nach diesen beiden suchen, um sicherzustellen , dass wir nur darauf springen können, dass Ihre Nullcline ist oder fällt. Lassen Sie mich das einfach näher rücken und wir können es noch einmal testen, kompilieren und speichern. Wir können spielen, auf die Straße gehen. Und wenn ich auf Leerzeichen klicke, kann ich hier springen. Okay, jetzt ist das behoben und lass uns zur nächsten Lektion übergehen, in der wir tatsächlich eine Aufzählung von Kletterobjekten machen. Anstatt also das, das Seil zu machen , können Sie auch Buchstaben und Animationen für diese hinzufügen . 60. Aufzählung der Objektart: Okay, also, bisher hier in der Rampe ist Kletterfunktion. Bisher haben wir hinzugefügt , dass wir bei jedem Klettern zur Robe-Animation wechseln sollten . Aber was ist, wenn du auch eine Leiter hast? Was ist, wenn Sie etwas anderes haben und eine neue Animation benötigen, benötigen Sie eine Leiterkletter-Animation. Vielleicht hast du zwei Animationen in deinem Spiel. Jetzt wollen wir eine Aufzählung machen, um dies zu beheben. Und ich mache mein Spiel gerne dynamisch. Wenn ich also in Zukunft etwas hinzufügen möchte, kann ich das in zwei Minuten machen, nicht in 30 Minuten. Lassen Sie uns also jetzt alles dynamisch machen. Es dauert etwas länger, dies zu tun, aber es wird Ihnen so viel Zeit sparen , wenn Sie Ihr Spiel erstellt haben. Versuche immer, diese schönen Dinge für dein Spiel zu tun. Versuchen Sie, gute Kodierungspraktiken durchzuführen. Und Sie können so viel Zeit sparen, wenn Sie einen DLC erstellen oder was auch immer Sie später versuchen , Updates zu erstellen. schaffst du in zwei Sekunden. Versuchen wir also zuerst eine Aufzählung zu machen. Auch hier sind Aufzählungen sehr, sehr mächtig. Bisher haben wir diese bewegenden Staaten geschaffen. Lassen Sie uns also tatsächlich mit der rechten Maustaste hier klicken, gehen Sie zu Blueprints und erstellen Sie eine neue Aufzählung. Nennen wir das einen E Kletterobjekttyp. Wenn ich das buchstabieren könnte, tippe hier und klicke es hier. Und lass mich vorerst zwei Typen hinzufügen. Ich habe nicht wirklich mehr als das. Also habe ich ein Seil und ich habe eine Leiter wie diese, also rette alles. Und gehen wir zurück zu der Linie, die hier ist und die Basis klettern. Und lass mich diese Variable zu meinen Variablen hinzufügen. Wenn Sie diese eine Zeile also als Objekttyp aufrufen. Fügen wir nun diesen Typ zu unserer Aufzählung hinzu, die wir erstellt haben, genannt Kletterobjekttyp. Dies ist die Aufzählung. Was wir jetzt tun können, wenn wir dem übergeordneten Element Variablen hinzufügen, wird die Blueprint-Klasse allen Kindern hinzugefügt. Wenn Sie also hier auf das Seil klicken, sehen Sie in den Klassenvorgaben, ich kann diese Aufzählung jetzt sehen. Und Sie können den Typ für jedes Ding ändern , das Sie hier hinzufügen. Dieses Seil ist also offensichtlich ein Seil. Aber wenn Sie später eine Leiter hinzugefügt haben, können Sie diese tatsächlich in ein Feuerzeug umstellen und es wird wissen , dass dies eine Leiter ist. Und wenn es weiß, dass dies eine Seite ist, weiß es, dass es die leichtere Animation spielen sollte. Also lasst uns diese Informationen tatsächlich kodieren. Das ist also nur ein Seil. Also habe ich meine neue Aufzählung einfach auf Seil gesetzt. Und gehen wir zurück zum Kunden, der Basis ist, und wir können ihn hier hinzufügen, eigentlich nicht die Kletterbasis. Gehen wir zurück zur Spielerbasis. Das meinte ich. Ich gehe zu einer Spielerbasis. Und in den Ohren klettert Clipping. Unwrap Funktion. Hier möchten wir es hinzufügen. Lasst uns das ein bisschen weiter wegbewegen. Hier fragen wir uns , dass unser Kunde Basis ist , weil wir diese Variable verwenden möchten. Und denken Sie daran, dass wir dafür bereits eine Variable gemacht haben. Wenn Sie hier runter gehen, als wir sagten, kann steigen, haben wir hinzugefügt, denken Sie an diese Selbstreferenz. Also definieren wir tatsächlich bereits diese Kletterbasis, die wir diese Funktion oder diese Variable nennen müssen. Jetzt können wir ein Blueprint-Interface erstellen und sagen, dass der Client Basis wird. Du könntest das machen, wenn du willst. Aber für dieses Spiel ist das sehr minimal. Das tue ich nicht, ich möchte darum kümmern, weil wir es nicht wirklich so oft benutzen werden wie die Spielerbasis und wofür wir sie benutzt haben. Also werde ich einfach kosten, sagte ich vorher ist okay zu kosten, solange du es nicht ständig machst. Also lasst uns hierher zurückkehren und wir können einfach diese Referenz hier nehmen, lassen Sie mich das Klemmobjekt herausfinden, lassen Sie mich es jetzt ziehen und auch Kosten sagen. Was ist also das Kletterobjekt? Das Klemmobjekt ist wenn wir etwas kosten, von dem wir sagen können, dass es sich speziell um diese BP-Kletterbasis handelt. Das Kletterobjekt ist also speziell diese Blaupause, denn denken Sie an diese Referenz, wenn Sie die Maus darüber halten, ist es nur ein Papiersprite-Schauspieler. Und wir definieren, dass dieser Papiersprite-Akteur speziell diese Klemmbasis ist und S Rückgang Basis ist. Ich kann jetzt auf alle Informationen zugreifen , die ich brauche. Was wir brauchen, ist diese Variable als Kletterobjekttyp bezeichnet wird. Lasst uns also zur Spielerbasis gehen und davon ziehen und sagen, dass Cholin Kletterobjekttypen bekommt. Jetzt können wir diese Variable verwenden. Genau wie zuvor. Denk daran, was wir gemacht haben. Wenn du dich also daran erinnerst , ist es eigentlich hier zur Seite. Über die On-Ramp-Bewegung Staaten. Wir haben diese Bewegungsstaaten vor langer Zeit geschaffen. Und Sie können das tun, die Aufzählung einschalten Aufzählung einschalten um auszuwählen, welche Animation Sie an einem Ort haben möchten. Also werden wir das wieder tun und zur Spielerbasis gehen, zur Spielerbasis gehen, wobei der isClient ausgepackt wird. Und drinnen von hier können wir davon ziehen und Switch sagen, diese Aufzählung einschalten. Was sollte also passieren , wenn es ein Seil ist? Was sollte also passieren, wenn wir dieses Seil haben? Wir wollen diese Animation abspielen. Das ist also die Seil-Animation. Okay? Und was ist eine Leiter, wenn es ein Brief ist, wollen wir eine andere Animation spielen. Lassen Sie mich also kopieren, fügen Sie das hier unten ein. Und jetzt haben wir keine wirkliche Animation dafür. So können wir hier zur Struktur gehen und Sie können eine neue Animation hinzufügen als Leiteranimation bezeichnet wird. Wir haben nicht wirklich einen für das Spiel. Ich zeige Ihnen nur, wie Sie es schaffen können, falls Sie haben oder lernen möchten, wie Sie es dynamisch machen können. also hier ein Papier-Flipbook erstelle, Buchstabenanimation, kann ich es einfach hierher verschieben. Was Sie jetzt tun können, ich werde nur eine zufällige Animation erstellen, nur um zu sehen, ob es funktioniert. Also gehe ich zum Spieler nach Tsarina. Wenn ich einfach alles speichere , was ich kompilieren muss , um hier zu erscheinen und zu Serena zu gehen. Und aus irgendeinem Grund erscheint es nicht wirklich. Ich denke, ich muss in meiner Spielerbasis kompilieren. Also hier klicken und kompilieren. Denken Sie daran, sehr wichtig zu kompilieren. jetzt in den Standardeinstellungen der Klassen zu Serena zurückkehren, können Sie sehen, dass es erscheint. Für die Schriftzug-Animation stelle ich das Schwein einfach hierher. Das Schwein untätig. Etwas sehr Zufälliges, nur um zu sehen, ob es funktioniert. Du kannst das auch auf Luke machen, gehst zu Luke und lege einfach zufällige Schweine-Animation, nur um zu sehen, ob das funktioniert. Jetzt ist es auf Brief und wir können versuchen, auf Platzieren zu klicken, wenn ich wieder auf Play-basiert gehe, um sicherzustellen, dass alles in Ordnung ist. Also lasst uns das treffen oder das hier verbinden. Für die letztere Animation verbinde ich sie hier unten. Jetzt haben wir also beides. Und wenn wir nur anrufen, also entfernen wir den Kunden, wenn es falsch ist, werden wir einfach wegspringen. Und lass mich wieder auf Pins ausblenden klicken, genau so. Okay, jetzt sollte das funktionieren. Wenn ich also auf Play klicke, klettere ich jetzt. Du siehst, dass das funktioniert. Und was ist, wenn ich das in ein anderes Seil umwandle? Aber was ist, wenn das eine Leiter wäre? Also habe ich diesen Klettertyp geändert. Das ist jetzt eigentlich eine Leiter. Und wenn ich jetzt klettere, siehst du, dass sich die Animation ändert. Je nachdem, ob Sie ein Seil haben oder nicht, ändert dies die Animation in die Animation, die Sie hier hinzugefügt haben, je nachdem, ob es sich um die Sie hier hinzugefügt haben, je nachdem, ein Seil handelt oder ob es sich um eine Leiter handelt. 61. Benutzerdefinierter Kollisionskanal: Das Problem, mit dem wir gerade konfrontiert sind, ist also eine Farm, die hier an meinem Seil klemmt. Lassen Sie mich diese Animation tatsächlich ändern. Das sieht so seltsam aus. Ich muss das wieder in ein Seil verwandeln. Wenn ich also zu den Blaupausen gehe, geh zum Seil klettern und es hier tatsächlich wieder in ein Seil umwandeln. Okay? Das Problem, mit dem wir gerade konfrontiert sind, ist, wenn ich hier klettere und wenn ich nach oben gehe, kann ich hier nicht wirklich in den oberen Teil gehen. Und der Grund ist diese Kollisionskachel hier. Denken Sie daran, dass wir Kollisionen haben. Diese Kollisionskacheln blockieren meinen Charakter daran, sich hierher zu bewegen. Und deshalb müssen wir irgendwie sagen, dass diese Kollisionen beim Klettern ausgeschaltet werden. Aber wir wollen es nicht wirklich für jeden ausschalten. Wenn wir wollen, wenn wir es für alle ausschalten, werden all diese Feinde vom Boden fallen. Und so werden alle Spieler , die mit dir verbunden sind, sie werden vom Boden fallen, wenn es keine Kollision gibt. Wir möchten es also speziell für diesen Client entfernen , der Player ist. Und der klügste Weg, dies zu tun, ist das Erstellen eines eigenen benutzerdefinierten Kollisionskanals, was sehr, sehr einfach ist. Also bringe ich dir das jetzt bei. Wir können dies tun, indem wir zu Bearbeiten gehen und zu den Projekteinstellungen gehen. Und drinnen können wir zur Kollision gehen, die hier unter dem Motor liegt. Und dann hier in den Objektkanälen sind dies Kollisionen, also können wir einfach auf neuen Objektkanal klicken und hier darauf klicken. Und dann müssen wir ihm hier etwas geben. Nennen wir es einfach Zeile ist Layer. Und die Standardantwort, lassen Sie es uns einfach so einstellen, dass sie sich überlappt. Klicken Sie auf Akzeptieren. Jetzt haben wir einen Kanal. Was heißt das also? Was erscheint das? Und das erscheint tatsächlich. Gehen wir zurück zu der Kachelzuordnung, die wir im Kachelmap-Ordner erstellt haben . Hier haben wir diese Kollisionen. also daran, dass Sie hier Denken Sie also daran, dass Sie hier in die Render-Komponente für diese Kachelkarte denken, wenn Sie zur Kollision hinuntergehen, können Sie sehen, dass Alices hier eine Kollision findet, Kollisionspresets. Klicken wir auf diesen Pfeil, um ihn zu sehen. Sie können sehen, dass es uns alle hier blockiert. Und wir haben gerade diesen Kletterspieler geschaffen. Sieh dir an, wie einfach es ist. Es erscheint einfach hier. Wenn Sie also einen benutzerdefinierten Kanal erstellen, wird er hier angezeigt. Und Sie können es tatsächlich auf eine Einstellung einstellen, je nachdem, was Sie versuchen. Bisher ist unser gesamter Spieler ein Bauer. Und wenn der Spieler dran ist, werden wir von der ganzen Kollision blockiert , die unter den Kacheln liegt. Und für den Klemmspieler setzen wir ihn jetzt so ein, dass er sich standardmäßig überlappt. Denken Sie daran, dass Sie dies jederzeit ändern können indem Sie hier oben klicken und Kostüm sagen. Und du kannst es immer in etwas anderes ändern. Nur weil Sie es hier in den Projekteinstellungen und in der Kollision gesagt haben, nur weil Sie den Standardwert auf Überlappung festlegen, können Sie natürlich einfach auf Benutzerdefiniert klicken und es in etwas anderes ändern, aber es wird standardmäßig nur überlappt sein. Also hier gehe ich zurück, um alles wieder zu blockieren. Standardmäßig ist der Kletterspieler jetzt auf Überlappung eingestellt, was bedeutet, dass ich jetzt tatsächlich alle diese Zeilen hier entfernen lassen kann . Standardmäßig kann ich jetzt, wenn ich der Kunde bin, der Spieler ist, all diese Kollisionen durchlaufen , weil sie mich nicht mehr blockieren werden. Sie werden sich mit mir überschneiden. Also müssen wir ihm jetzt dem Motor sagen , dass ich, wann immer ich klettere, möchte, dass der Spieler dieser Cholin ist, der Spieler ist. Ich möchte nicht, dass mein Spieler immer noch ein Teich ist, denn obwohl ich diesen Kanal gerade gemacht habe, wenn ich meinen Charakter noch klettere und er durch diese Kollisionen blockiert wird. Wir müssen also sagen, dass wir unseren Kanal wechseln wollen. Und wenn ich jetzt zu einer Spielerbasis gehe, kannst du es hier auf dem Sprite oder auf der Kapsel sehen. Hier auf diesem hellen kann man sehen, dass ich bin, also ist der Objektkanal verpfändet. Und denken Sie daran die Renderobjekt-Teiche vom Kollisionskanal blockiert werden . Also müssen wir diese Einstellungen ändern. Und machen wir das in der Spielerbasis in der wir den Kunden haben, wir sind nur daran interessiert, dies zu tun wenn der Spieler klettert. Machen wir das, bevor wir die Animation ändern. Lassen Sie mich also all diese Animationen zur Seite bewegen , weiter weg. Also wann immer ich in der Linie bin, möchte ich den Spieler nehmen. also diese Kapselkomponente nehmen, können Sie sehen, dass die Kapselkomponente hier auf Kostüm eingestellt ist, aber hier unten im Objektkanal ist sie auf einen Teich eingestellt und wir möchten nicht, ist sie auf einen Teich eingestellt und wir möchten nicht dass sich die Kapsel überlappt. Also lasst uns zurück zur Kapsel gehen, weniger ziehen Sie das hier auf der Welt raus. Und wir können diesen Kollisionstyp ändern. Wenn Sie also runtergehen würden, können Sie sehen, dass dies der Objekttyp ist. Und immer gut, sich die Namen anzusehen , denn dann kann man tatsächlich wissen, wie es heißt. Wenn Sie also einfach von hier ziehen und Kollision sagen, denn das ist es, was wir daran interessiert sind, uns zu ändern. Ich erinnere mich, dass es Objekttyp hieß. Versuchen wir zu sehen, ob wir eine Funktion namens set object type haben . Und hier setzen oder ist es hier Kollisionsobjekttyp festlegen. Also klicke hier an. Und wenn ich aus irgendeinem Grund einen für mich gemacht habe, lasst mich einfach mein altes löschen und mich hier verbinden lassen. Wann immer wir klettern, bin ich daran interessiert, meine kollidierende Kapsel zu wechseln . Ich möchte es in eine Linie ändern, die Spieler ist. Dies ist der Brauch , den wir angefertigt haben. Und wenn ich nicht mehr klettere, möchte ich es wieder auf on ändern. Sie können also kopieren, das hier unten einfügen und so wieder verbunden sind. Und lasst es uns wegziehen. Hier. Du kannst es wieder in ein Gedicht umwandeln. Also wechseln wir es einfach zu einem Klemmspieler, wenn wir klettern, aber wir ändern es wieder auf ****, wenn wir nicht mehr klettern. Lassen Sie uns nun kompilieren und speichern, und es ist so einfach wie das. Versuchen wir also zu sehen, ob wir irgendwelche Fehler haben. Jetzt kannst du sehen, jetzt kann ich es durchklettern , weil ich ein Kletterspieler bin. Objektkanal und meine Kollisionen. Und ich kann hier rauf gehen, und jetzt kann ich einfach herumlaufen, weil ich jetzt in meinem Pfandobjektkanal bin. 62. Anpassung des Aufstiegs: Okay, also das kleine Problem, das wir gerade haben, wann immer wir laufen und springen, landet es manchmal am Seil. Manchmal sieht man, wie es an der Seite des Seils landet. Also nicht ganz speziell an der Robe hier. Wir müssen also den Sprungort anpassen wenn Sie hier auf das Seil springen. Also lass mich hierher zurück und gehe zurück zur Spielerbasis. Und der beste Weg, dies zu tun wird irgendwo kontinuierlich aktualisiert. Und die Sache, an die ich denke, wenn ich das mache, ist , welche Ereignisse ich ständig aktualisieren kann , die ich verwenden kann? Ich möchte nicht wirklich ein Event ankreuzen. Das will ich nicht wirklich machen. Wir haben also ein paar Timer, aber diese hören auf, wenn ich meinen Kunden so eingestellt habe, wenn ich kletterte und das ist, was ständig aktualisiert wird, hört dies auf, wenn ich klettere. Die Sache ist also hier, wenn wir auf und ab gehen, das wird immer noch aktualisiert. Also bewege ich mich immer noch auf und ab. Also lasst uns das hier machen. Nachdem wir die Bewegungseingabe hinzugefügt haben. Wir wollen den Standort nur anpassen , wenn wir Cholin sind. Lassen Sie mich also, denn wenn ich das nicht tue, wird es den Standort anpassen, wenn ich nur mit dem Seil interagiere und klettern kann. Ziehen wir das also hierher und machen einen booleschen Wert oder tatsächlich einen Zweig. Wann immer ich klettere, möchte ich den Standort meines Kunden anpassen. Was wir also versuchen, ist, dass wir den Standort des Spielers darauf einstellen wollen , wo immer dies ist, dieser Schauspieler hier ist dieser Seilschauspieler. Wo auch immer dieser Schauspieler ist und wenn wir darauf springen, möchte ich die Position der Spieler x festlegen. Denken Sie daran, dass der x-Standort gerade schief läuft. Denn entweder ist der Spieler zu weit links oder zu weit rechts vom Seil. Es ist also der x-Standort, den wir hier anpassen müssen. Ich möchte festlegen, dass meine Spieler x Standort identisch mit diesem Actors x Standort sind. Wenn ich also zurück zur Spielerbasis gehe, wenn ich also hier behaupte, möchte ich meinen Standort anpassen. Nehmen wir dieses Objekt oder Klemmobjekt. Lassen Sie mich mit der rechten Maustaste klicken und sagen Zu einem validierten Get konvertieren. Denn denken Sie daran, wenn Sie sich nicht mehr überschneiden, wenn ich zu meiner Logik zurückkehre können Sie sehen, warum ich das mache. Gehe zurück zur Kletterbasis. Denken Sie daran, wenn Sie nicht mehr klettern, setzen Sie diese Variable auf nichts ein, was bedeutet, dass Sie nichts in dieser Variablen haben. Deshalb stelle ich das ein, nur um keine Bugs zu bekommen. Also sehe ich nur, ob diese Variable gültig ist, ob sie etwas enthält und wenn ja, wenn es so ist. Lassen Sie mich also hier den Standort der Schauspieler nehmen , aber der Standort der Schauspieler. Und dann bekomme ich auch den Spielerstandort des Schauspielers. Also hol dir den Standort des Schauspielers. Und dieses, das Ziel ist Selbst. Denken Sie daran, dass wir in der Spielerbasis sind, also ist dies der Standort des Spielers. Dies ist der Standort des Objekts. Ich werde für beide brechen damit ich X, Y und Z benutzen kann, weil ich hier nur an dem x interessiert bin. Ich werde den Vektor auch hier durchbrechen. Und ich werde diesen Code nur hier ausführen und den Standort des Spielers anpassen, Standort des Spielers anpassen wenn wir nicht am Seil sind. Aber wenn wir uns auf das Seil eingestellt haben, möchte ich diesen Code nicht mehr ausführen. Wenn also das x des Seils nicht dem x der Spieler entspricht, stimmt das, wenn sie also anders sind. Also verbinde ich das hier als gültig. Wenn das stimmt, passe ich den Standort an. Also werde ich hier tatsächlich eine neue Veranstaltung machen. Denken Sie daran, dass dies auf dem Client läuft und wenn wir einen Standort anpassen, handelt es sich um visuelle Updates. Und das müssen wir durch eine Abteilungsbenachrichtigung tun. Lassen Sie uns also hier unten ein neues Event machen. Nennen wir es benutzerdefiniertes Ereignis. Eigentlich machen wir es zuerst in ein Blueprint-Interface. Lassen Sie mich also zum Blueprint Interface der Spieler gehen. Und lassen Sie uns eine neue Funktion namens Anpassen erstellen, wobei Zeile Standort ist, zusammengesetztes Speichern. Ich weiß nicht, ob wir gerade Input brauchen . Ich kann mir gerade nicht vorstellen. Machen wir es einfach und wir können immer Variablen hinzufügen, wenn wir möchten. Also hier lass es mich nennen und sagen anpassen, standort klettern. Und das ist eine Blueprint-Interface-Funktion. Lass es uns durch den Server führen. So benutzerdefinierter Server und passen Sie die Linie an. Wenn ich Kletterstandort schreiben kann und lass es uns ändern, um Antwort und zuverlässig zu laufen. Und von hier aus können wir dieses Server-Event natürlich durchführen , nur Orte klettern. Was wir jetzt tun wollen, ist hier oben, wenn das stimmt, wenn der Standort des Seils und der x-Standort nicht mit dem x-Standort des Spielers übereinstimmen . Wir möchten den Standort des Spielers anpassen. Also passe das Klettern an Wir wollen diese Veranstaltung im Wesentlichen durchführen. Also hier möchten wir den Standort des Spielers anpassen. Letztendlich versuchen wir also , einen Vektor zu erstellen. Also lasst es uns erstellen. Jetzt. Wir versuchen, einen Vektor namens Kletterstandort zu erstellen. Und verwandeln wir es in einen Vektor, weil es sich um einen Ort handelt. Und das hier, letztendlich wollen wir es einer Rep Notify zuweisen. Und innerhalb dieser Klemmstelle zum Auswickeln müssen wir nur den Standort des Schauspielers festlegen. Das ist es, was wir versuchen zu tun. Das Ziel ist Selbst, also versuchen wir, den Standort des Spielers, diesen neuen Standort und diesen angepassten Ort festzulegen diesen neuen Standort und diesen . Verbinden wir es hier. Dies ist das, was wir letztendlich tun wollen. also den Standort des Spielers auf diesen angepassten Ort ein , der sich an diesem Seilstandort befindet , der x Standort abseilt. Wenn also das x des Seils nicht dasselbe ist und als Spieler fungiert, als Spieler fungiert, möchten wir den Standort anpassen. Wie passen wir den Standort an? Zuerst möchte ich dieses klumpende Objekt erneut nehmen, Sie können ein validiertes Get machen, nur um sicherzustellen, dass es gültig ist. Also nochmal, nehmen wir mal, lass mich das noch einmal kopieren. Wir werden tatsächlich dasselbe schreiben. Also bekommen wir den Standort der Seile und wir bekommen den Standort des Spielers. Das einzige, woran wir interessiert sind, ist, diesen x-Standort zu ändern , da wir den y-Standort auf diese Weise nicht wirklich interessiert sind und daran interessiert sind, dies anzupassen. Wir sind auch nicht daran interessiert, das z anzupassen. Wir sind nur daran interessiert, das x hier anzupassen. Wenn ich zu meiner Blaupause zurückkehre, das einzige, woran wir daran interessiert sind, dies anzupassen. Lassen Sie mich also meinen Kletterstandortvektor hier nehmen, verbunden und ziehen Sie davon und sagen Sie „Vektor machen“. Was wir hier tun können, ist, dass wir den Standort des Spielers festlegen möchten . Denken Sie daran, dass dies der Standort oder die Einstellung des Spielers ist. Also wollen wir den Standort des Spielers auf die Seile x setzen. Dann machen wir y und z. Wir wollen nur , dass sie gleich bleiben. Wir wollen das Y und Z des Seils nicht haben. Wir wollen nur das Y und Z und das Z des Spielers, was auch immer es gerade ist. Wir sind also nur daran interessiert, das x anzupassen. All diese Informationen werden gerade in diesen Vektor fließen . Und wann immer es die Benachrichtigung der Tour-Vertreter einstellt, wird diese Funktion hier ausgeführt. Jetzt werden wir den Standort der Schauspielerin festlegen. Okay, also lasst uns auf Jetzt spielen klicken, wenn wir aufs Seil springen, Okay, jetzt ist das wirklich perfekt. Gehen wir zurück, um hierher zu springen. Auch perfekt. Okay, also wenn wir das Spiel jetzt spielen, spiele ich als Luke auf dem Server und Serena auf der Linie. Also mach sie einfach so ein bisschen größer. Also auf dem Server und jetzt kann ich aufs Seil springen. Ich passe meinen Standort gut an. Z wie auch immer ich gesprungen bin, es passt meinen Standort an. Alices ID auf dem Client, um sicherzustellen, dass alles funktioniert, also springe ich passe meinen Standort richtig an. Sie können auf dem Server sehen, dass es hier einen Fehler gibt. Ich bin Kunde, aber irgendwie wird meine Animation nicht abgespielt. Ich denke, es wird sich später in den Lektionen beheben , in denen wir posieren und aktualisieren. Du siehst jetzt, dass es funktioniert. Also werden wir diese Columbia-Animation innehalten und aktualisieren weil wir sie offensichtlich nicht spielen wollen , während wir springen. Aber anfangs werden wir diese Sprunganimation einstellen , abspielen und stoppen. Ich glaube, es geht durchweg. Die Sache, mit der es schief geht , ist hier in der Spielerbasis. Es spielt so wie es spielt. Obwohl wir einen Booleschen Wert hier in Bewegung nach rechts und links platziert haben . Es spielt die Animation tatsächlich vorher oder nachher hier ab. Hier in der, in der Rampe steigt, nachdem wir das Flipbook auf Klettern oder Leiter gesetzt haben, geht es immer noch hier durch und spielt. Später werden wir also anhalten und die Animation starten, je nachdem , ob der Spieler springt oder nicht. Also denke ich, dass es sich selbst reparieren wird. Später werden wir sehen. Aber lass es uns im Moment einfach so sein. Also funktioniert jetzt alles richtig und das Springen ist in Ordnung, alles ist gut. Wir passen den Standort an. Lassen Sie uns also kompilieren, alles speichern und mit der nächsten Lektion fortfahren. 63. Aufstieg entfernen: Okay, also haben wir einen kleinen Bug , den wir jetzt beheben müssen. Und wenn ich zum Kunden gehe und zum Gewand gehe und lass mich zu den Ansichtsfenstern gehen. Ich werde das hier tatsächlich erhöhen und hier aufstellen, damit ich tatsächlich von oben klettern kann. Jetzt kann ich also als Server spielen und ich klettere hier hoch, klettere nach oben, das funktioniert perfekt. Aber das Problem ist jetzt, wenn ich runtergeklettert bin, kann man sehen, dass das auch gut funktioniert. Aber wenn ich jetzt hier oben bin und nach oben klicke, kannst du sehen, dass ich mich beruhigen kann, das ist in Ordnung. Aber wenn ich hochklicke, kann ich es tatsächlich spammen. Und es sieht so aus. Ich meine, es ist nicht wirklich das größte Problem Ihres Spiels, aber visuell denke ich, dass wir den Spieler dazu bringen können, dies zu tun. Ich denke, es ist ein bisschen dämlich, also lasst uns das reparieren. Wie entferne diesen Kunden Bob, der hier oben spammt. Also lasst uns wieder hierher gehen. Und um dies zu tun, denke ich, dass der beste Weg darin besteht, eine weitere Kollisionsbox hinzuzufügen, die Ihnen dann verweigert, die Auf-Taste zu drücken, wenn Sie dies tun. Fügen wir also oben auf diesem Seil eine Kollisionsbox hinzu. Lass uns das in der Kletterbasis machen. Und hier im Render-Objekt, fügen wir einfach ein weiteres Kollisionsfeld hinzu. Suchen Sie im Kollisionsfeld nach Kollision, und nennen wir dies eine obere Kollisionsbox. Die Sache, die wir anfangs hier machen wollen und die Spielerbasis. Was wir tun wollen, ist, dass wir eine Veranstaltung machen wollen, die besagt, dass er hochklettern kann. Und das ist im Grunde nur ein boolescher Wert. Also lasst uns einen Booleschen Anruf machen und hochklettern. Dies ist eigentlich das, was wir tun wollen , und wir werden es so einstellen, dass es repliziert wird, offensichtlich weil alle Kunden darüber wissen müssen. Und so kann Bob klettern, das versuchen wir zu setzen, und offensichtlich werden wir es durch den Server einstellen. Lassen Sie uns also benutzerdefinierte Ereignisse erstellen, die durch den Server gehen und sagen, dass das Set hochklettern kann. Und lass es uns hier verbinden. Und jetzt brauchen wir ein, wir brauchen hier ein normales Ereignis, keinen Server. Lassen Sie mich also daran denken, dies auf dem Server auszuführen und auf unzuverlässig zu klicken. Also wollen wir ein normales Set namens Set, können Bob klettern und lassen Sie uns das innerhalb des Blueprint-Interface machen . Ende der Spielerbasis Blueprint Interface. Hier eine neue Funktion namens set zu erstellen, kann hochklettern. Lass uns einen booleschen Wert machen. Mach das Gleiche. Du kannst hochklettern. Okay? Jetzt können wir zurück zur Spielerbasis gehen und dieses Event-Set hier aufrufen . Und jetzt können wir die Serverereignisse durch dieses ausführen. Mal sehen, wo es ist, kann hochklettern. Und lass es uns verbinden. Und jetzt wird es das durchlaufen. Das ist es, was wir versuchen zu rennen und wir werden es auf „false“ setzen, wenn der Spieler Bob nicht klettern kann. Also lasst uns kompilieren und speichern und gehen wir zurück zur Kletterbasis. Und hier drin haben wir diese obere Kollisionsbox. Ich werde es ein bisschen nach oben verschieben, also ist es hier oben, damit ich es kompilieren und speichern sehen kann. Und wir können zurück zum Seil gehen und wir können die Größe tatsächlich anpassen. Ich denke nicht, dass es so groß sein sollte. Ich meine, es spielt keine Rolle, aber vielleicht ändern wir es in etwas wie 25. Denk nach, ich kann es einfach versuchen. Und ich lege es einfach hier rüber. Wenn der Spieler also hier oben auf dem Boden steht und diese Box trifft, können Sie die Aufwärtstaste nicht drücken. Okay, also kompilieren und speichern wir das und lass uns zurück zur Kletterbasis gehen. Klicken Sie nun auf dieses obere Kollisionsfeld, Gehen wir nach unten und klicken Sie auf dieses, wenn die Komponente überlappt. Was sollte also passieren, wenn Sie diese Box hier überlappen? Was passieren sollte, ist, dass Sie nicht auf den Up-Button klicken können und nicht hochgehen können. Schon wieder. Lassen Sie mich einfach den ganzen Code kopieren. Wir machen das Gleiche. Wir gehen durch diesen Server prüfen, ob es der Spieler ist, und wenn es der Spieler ist, nennen wir diesen einen genannt, wir nennen es set kann hochklettern. So kann set hochklettern und es ist die Nachricht, da es sich um eine Blueprint-Interface-Funktion handelt. So kann klettern Bob ist auf false gesetzt, denn wenn Sie diese Kollisionsbox treffen, können Sie die Aufwärtstaste nicht drücken. Jetzt lassen Sie uns jedoch die zweite machen , wenn Sie dieses Feld verlassen. Wenn Sie zum Beispiel im Untergrund sind , können Sie hochklettern. Lassen Sie mich das also miteinander verbinden. Eine andere Komponente ist auch diese hier drüben. Du kannst hochklettern, wenn du dich nicht mehr mit dieser Box überlappst. Die Sache ist also, jetzt haben wir diesen booleschen Wert. Und so in der Spielerbasis, Mal sehen, wo wir es benutzen können. In der Spielerbasis können wir hier verwenden, wenn wir überprüfen, ob der Kunde eingegeben wird, wir möchten nicht, dass der Spieler klettert, wenn dies auf „true“ eingestellt ist, und er ist dort oben am Boden. Also kann ich hier hochklettern. Wir können sagen, anstatt nur zu sagen, dass es nicht gleich 0 ist, können wir dies einfach löschen und auf etwas anderes upgraden. Wenn es also niedriger als 0 ist, was bedeutet, dass der Spieler nach unten klettern möchte, haben wir damit kein Problem. Der Spieler kann nach unten klettern. Aber wenn der Spieler und jetzt wir das wieder nehmen können, kann ich eigentlich einfach, whoops, ich kann tatsächlich einfach davon ziehen und sagen, ob es größer als 0 ist, was bedeutet, dass der Spieler ich versuche hochzuklettern. Hier ist das Problem, das wir haben. Also wenn der Spieler versucht hochzuklettern und er es darf, kann man Buck klettern. Denken Sie daran, dass sie nicht hochklettern können , wenn sie mit dieser Kollisionsbox kollidieren . Wenn es also größer als 0 ist, können wir end sagen. Und sie können Geld klettern. Dann wollen wir weiter klettern. Und was wir hier tun können, können wir einfach sagen, was sich daraus ziehen und sagen kann, oder dieses oder Boolean. Und dann können wir das hier verbinden und uns dieses Jahr verbinden. Was wir also sagen, ist, wenn der Spieler nach unten drückt, was bedeutet, dass die Z-Achse negativ sein wird. Wir können klettern. Wenn die Z-Achse positiv ist, bedeutet das, dass der Spieler nach oben drückt und wir tatsächlich hochklettern können. Dann werden wir klettern. Es ist also entweder diese Bedingung hier oder diese Bedingung hier. Das heißt es letztendlich. Jetzt können wir also hochklettern, also überprüft es jetzt, kannst du tatsächlich hochklettern? Und das wird unser Problem mit dem Spammen beheben. Also lass mich kompilieren und speichern. Ich kann einfach auf Play klicken und sehen was passiert. Wenn ich jetzt hochklettere, habe ich einen kleinen Käfer. Du siehst, dass ich Bob nicht klettern kann, also gehe ich tatsächlich zurück und schaue , was ich falsch gemacht habe. Die Z-Achse kann also hochklettern, durchläuft dies. Und es legt diesen Wert fest. Und lass mich hier runter gehen, um zu sehen ob ich das richtig gesagt habe. Das Problem ist gerade, dass dies standardmäßig wahr sein muss , da Sie standardmäßig nach oben klettern können. Also müssen wir sicher zusammenarbeiten. Denken Sie also auch daran, dass das standardmäßig als wahr hochklettern kann. Also können wir hier tatsächlich hochklettern. Du siehst jetzt, dass wir Bob besteigen können. Und wenn ich auf Bob klettere, kann ich herumlaufen. Wenn ich auf den Up-Button klicke, kann ich nicht mehr ausgeben. Aber wenn ich auf den „Fertig“ -Button klicke, kann ich die Leiter runterklettern. Jetzt funktioniert es also. Wir können hier nicht spammen. Wir können einfach runter gehen, aber wir können hier rauf und runter gehen. Das ist also kein Problem. 64. Pausen der Climb: Das letzte in diesem Abschnitt möchte ich die Clientanimation anhalten, möchte ich die Clientanimation anhalten wenn ich nicht klettere. Wenn ich also hier klettere, siehst du, dass die Animation noch läuft und das will ich nicht tun. Wir hatten auch vorher ein Geld, wo ich als Kunde gespielt habe. Und ich mache es hier nur ein bisschen größer. Wenn ich klettere, siehst du, dass mein Charakter hier komisch aussieht, die Animation sieht seltsam aus. Vielleicht wird es sich selbst reparieren , sobald wir die Animation pausieren und abspielen. Also lasst uns das versuchen. Gehen wir zurück zur Spielerbasis. Und drinnen möchte ich, dass du das in der Bewegung auf und ab machst , weil es ständig überprüft, ob ich mich nach oben oder runter bewege oder einfach still stehe. Was ich jetzt machen werde, wird ein bisschen durcheinander und wir müssen das am Ende dieses Videos aufräumen . Also lass mich das hier runterziehen. Also möchte ich das immer aktualisieren , wenn ich klettere, denn bevor ich klettere und ich wirklich nichts tun möchte. Nach diesem klettere ich also. Trennen wir das. Bevor wir also den Standort anpassen, lassen Sie uns die Animation spielen und stoppen. Nehmen wir also unsere Z-Achse hier. Die Z-Achse wird uns einfach sagen, drückt der Spieler nach oben oder unten oder steht der Spieler still? Wenn dies also nicht gleich 0 ist, was bedeutet, dass sich der Spieler bewegt, möchten wir die Animation abspielen. Um die Animation abzuspielen, kannst du dieses Sprite hier machen und du kannst dann „Play“ sagen, und es spielt das Flipbook ab. Aber denken Sie daran, dass Sie das Flipbook nicht einfach spielen können , weil Sie sich gerade im Autokennzeichen des Kunden befinden. Und das ist ein visuelles Update. Auch hier sind wir im Multiplayer, also müssen wir es durch eine Wiederholungsbenachrichtigung ausführen. Denn wenn Sie dies tun, wird es nur ein Kunde sehen. Also lasst es uns entfernen. Und jetzt müssen wir es zu einem neuen Event machen , das die Pause, klettern Flip Book heißt. Und das können wir auf „true“ oder „falsch“ setzen. Gehen wir also zurück zur Interface-Funktion für die Spielerbasis. Machen wir eine neue Funktion. Und nennen wir das hier. Pause, kletterte. Angenommen, geklettert, Buch umklettern. Machen wir hier eine Variable bei Boolean. Ich nenne es einfach Pause, klettertes, beleuchtetes Buch. Und lasst uns kompilieren und speichern. Okay, also lasst es uns hier nennen, blind pausieren, Buch umdrehen, und wir wollen es auf den Server laufen lassen, nennen es pause limed Flip Book. Nun, dieser ist auch, hat auch ein boolesches, das als Pause Blind Flip Book bezeichnet wird. Okay? Also stelle ich hier nur sicher, dass ich B vor meinem Booleschen habe , nur aus Gründen der guten Praxis. Und okay, jetzt haben wir dieses Ereignis, führen es zuverlässig auf dem Server aus, und wir möchten es auf eine Variable bewerben. Werben Sie dies auf eine Variable namens Pause, Cholin, aber kippen Sie Buch und ich werde hier ein B davor stellen und die Leerzeichen einfach so entfernen. Okay, das ist also ein Vertreter benachrichtigt. Klicken Sie also hier, klicken Sie auf Rep benachrichtigen, kompilieren und speichern. Und lasst uns den Server hier durchlaufen lassen. Also pausiere. Ich habe jetzt viele. Also lass mich einfach suchen, pausieren, cholin aber Buch spiegeln. Lass es mich hier durchlaufen. Und letztendlich versuchen wir, zu dieser Pause zu gehen, zu klettern, das Buch zu drehen und zu prüfen, ob die Pause auf wahr oder verrückt eingestellt ist. Wenn also die Pause auf wahr eingestellt ist, wollen wir dieses Sprite machen und Stop sagen. Hier, das Flipbook. Wenn Sie die Maus darüber halten, heißt es „Wiedergabebücher stoppen“. Also wollen wir die Animation stoppen. Wenn die Pause stimmt, möchten wir die Animation beenden. Eine der Pausen ist falsch, was bedeutet, dass wir die Animation abspielen möchten. Wir können sagen „Start“ oder „tatsächlich spielen“. Es heißt also Play. Also spielen wir die Animation ab. Und jetzt gehen wir zurück und codieren diese Logik. Jetzt haben wir diese Veranstaltung bereit. Wenn wir also klettern und die Z-Achse, wenn wir drücken, bedeutet das Drücken auf und ab , dass sie nicht gleich 0 ist, also wollen wir sie tatsächlich verschieben, wenn das stimmt. Also lasst es uns hier verbinden. Wenn das stimmt, möchten wir die Animation abspielen, was bedeutet, dass wir dieses Ereignis Pause, Klettern, Buch spiegeln, pausieren, klettern, Buch spiegeln können . Das hier. Wir können dies also auf „false“ setzen. Da wir es also auf false setzen, was bedeutet, dass wir nicht pausieren möchten, möchten wir es nur hier einstellen, um es anzuhalten. Wenn dies also auf „false“ eingestellt ist, wird es die Benachrichtigung entpacken, hier sind Honorlock-Funktion. Und wenn es auf „false“ eingestellt ist, wird die Animation abgespielt. Jetzt möchte ich die Animation nicht ständig abspielen, möchte sie nur dann abspielen, wenn sie noch nicht abgespielt wird. Was Sie also tun können, ist dieses helle zu nehmen und dann können Sie Flip Book sagen. Und jetzt können wir sehen, dass wir, mal sehen, wir haben, da das Rückwärtsfahren spielt, dieser spielt. Wir wollen prüfen, ob es bereits läuft. Und sagen wir mal, sagen wir „Nüsse“. Also, Whoops, nicht dieses. Es ist nicht B, was nicht boolean ist. Also, was wir hier sagen, schreiben wir auch ein Ende Boolean. Was wir jetzt sagen, wenn der Spieler auf und ab drückt, ist die Z-Achse nicht gleich 0 und die Animation wird nicht bereits abgespielt. Dann mach weiter und spiele die Animation, weil wir nicht wirklich daran interessiert sind, weiter zu spammen. Spielen Sie diese Animation ab. Wir spielen die Animation bereits ab. Wenn Sie die Animation also noch nicht abspielen, wenn die Animation nicht abgespielt wird und die Spieler tatsächlich auf und ab drücken, möchten wir die Animation abspielen. Lassen Sie mich das einfach vorantreiben. Wir haben Probleme mit dem Raum, also organisieren wir die Dinge hier einfach ein bisschen. Okay, also das nächste, worauf wir suchen wollen, wollen wir jetzt sagen, der Spieler still steht, was bedeutet, dass die Z-Achse gleich 0 ist, weil der Spieler nicht auf und ab drückt. Wenn dies also wieder gleich 0 ist und die Animation bereits abgespielt wird, möchten wir die Animation beenden. Also und wieder Boolean, verbinde diese miteinander und erstelle einen neuen Zweig. Und nimm das Falsche hier. Wir prüfen also, ob die Z-Achse gleich oder nicht gleich 0 ist, was bedeutet, dass sich der Spieler bewegt. Wenn es falsch ist, weil sich der Spieler tatsächlich nicht bewegt, wird er hier runter gehen und prüfen, ob sich der Spieler nicht bewegt? Wenn das stimmt. Als würde es auch prüfen, ob die Animation bereits abgespielt wird. Wenn das stimmt, pausieren Sie die abspielende Animation. Ich schiebe die wieder nach unten. Und so. Jetzt spielen wir die Animation oder pausieren die Animation, wenn sie bereits abgespielt wird. Aber wir stehen still. Wir wollen es tatsächlich pausieren , weil wir die Animation nicht abspielen wollen , während wir still stehen. Und als Sache, wenn alles falsch ist, wollen wir einfach unseren Standort anpassen. Also lasst uns das hier runter legen. Und wenn wir hierher ziehen, wenn wir uns bewegen, aber die Animation wird bereits abgespielt. Lass uns hier runter gehen. Es wird falsch werden, es wird falsch. Und dann passen wir nur den Standort an. Es konzentriert sich also zunächst darauf unsere Animation abzuspielen oder unsere Animation zu posieren, und dann wird es unseren Standort anpassen. Okay, also denke ich, dass wir hier nicht wirklich mehr brauchen. Mal sehen, ob alles repariert ist. Ich klicke auf Play als Server und lass mich hierher springen. Du siehst, dass ich nicht spiele. Wenn ich auf und ab gehe, spielt es. Okay. Es sieht so aus, als wäre jetzt alles in Ordnung. Großartig. Lassen Sie mich jetzt als Kunden gehen und öffnen Sie es hier. Das funktioniert auch. Mal sehen, ob wir diesen Bucket noch haben , oder wir müssen ihn vielleicht reparieren. Also lass es mich hierher bringen. Jetzt haben wir immer noch diese Box, also muss ich mir ansehen, wo es schief gelaufen ist, diesen Fehler zu beheben, weil manchmal erscheint und manchmal nicht, also haben wir einen Fehler. Und ich denke, wenn wir einfach hierher gehen und die Spielerbasis bewegen, testen wir es einfach hier schnell. Wenn ich also den Spieler hier stehen lasse und ich zur Spielerbasis gehe und ihn trenne, bewege dich nach rechts und links. Vielleicht läuft etwas schief, weil wir hier auch Animationen einstellen. Also lass mich auf „Play“ klicken. Und wenn ich als Server spiele, eigentlich nicht der Server, der Client, während ich die Service-Anleihe habe. Durch Springen klick auf oben. Sie können sehen, dass die vollständige Animation offensichtlich nicht aktualisiert wird , weil ich dieses Ereignis getrennt habe. Aber es spielt richtig. Es scheint, als hätten wir das nicht, wir haben nie ein Problem auf der Leiter. Es gibt also etwas Dekodierung anfangs ist der gesamte Code korrekt, es gibt nur diese Updates, die passieren, obwohl wir ihm gesagt haben, dass wir das nur spielen wollen, wenn wir nicht klettern. Also werde ich sehen, was ich dagegen tun kann. Ich glaube, der beste Weg, diesen Fehler zu beheben, ist, wenn wir gehen, also spielt er diese Animation ab, aber manchmal geht es durch und spielt die On-Ramp-Funktion sexuell. So können wir versuchen, zu dem zu gehen, denken Sie daran, dass wir diesen Bewegungszustand hier gemacht haben , diese Bewegung wird gespeichert, tatsächlich die Statusfunktion der ausgepackten Bewegungen ausführt . also hier zur Bewegungszustandsfunktion gehen , bevor sie sich ändern kann, muss auch überprüft werden, ob wir klettern oder nicht. Nehmen wir also unseren Kunden zu sein. Klumpt hier und lasst uns einen Zweig machen. Und jetzt wird es sagen, schreiben wir hier einen Nuss Boolean. Wenn wir also nicht klettern, darfst du all diese Bewegungen ausführen. Wenn wir jedoch klettern, tun Sie nichts. Also so etwas hier. Also lasst uns jetzt zusammen sparen und beten, dass alles in Ordnung ist. Versuchen wir jetzt zu springen und es funktioniert. Versuchen wir es ein paar Mal noch einmal, um sicherzustellen, dass es funktioniert. Okay, also behebt das Problem jetzt. Jetzt funktioniert es und wenn ich der Server bin und sie sich sehen können, also springe ich jetzt als Server, können Sie sehen, dass das auch funktioniert. So können sich sowohl der Client als auch der Server sehen. Und noch einmal, nur um sicherzustellen, dass es nicht nervt. Also hier im Spieler wollte ich nur meine Kollision auf der Leiter überprüfen. Als Sprites generiere ich keine Überlappungsereignisse, also spielt das keine Rolle. Wir, die Überlappungsereignisse kommen hauptsächlich aus der Kapsel. Klicken Sie also auf die Kapsel schauen Sie hier auf die Kollisionsvorgaben. Die Gedichte ignorieren sich also gegenseitig und die Linie , die Spieler sind, überlappen sich gegenseitig. Eigentlich werde ich das auch ändern. Ignoriere einander. Die Spieler auf den Buchstaben ignorieren sich also auch gegenseitig. Und Sie können es immer ändern, wenn es nötig ist, aber das können wir vorerst tun. Okay, jetzt funktioniert alles und du kannst jetzt die Kamera sehen. Du kannst sehen, dass es ausbricht. Und das liegt daran, dass Sie nur darauf achten müssen, es nicht in diese Kollisionsbox zu legen , sonst kann es kleiner werden. Ich werde es draußen platzieren, weil wir uns bereits in der Überlappung befinden. Jetzt klicken wir auf Play. Spiele als Spieler und Client, um sicherzustellen, dass das Spiel funktioniert. Also haben wir den Kunden hier und wir haben den Spieler hier. Also antwortet der Spieler jetzt den Server, Platz, diesen Kerl hier, den Charakterplatz, Tsarina hier. Und wir bewegen uns. Und das sieht gut aus. Jetzt als Server. Das sieht auch gut und sie können sich nicht gegenseitig blockieren. Okay. Also sieht alles richtig aus und ich kann den Up-Button hier nicht ausgeben. Sowohl der Spieler als auch der Client können die Schaltfläche „Nach oben“ überspannen. Ok, also funktioniert alles richtig. Und lassen Sie uns versuchen, jetzt S2-Clients zu spielen, manchmal müssen Sie es als zwei Clients testen, um zu sehen, ob das auch korrekt funktioniert. So spielen Serena und Luke, gehen hier rüber und springen auf den Brief ein, dass die Dinge funktionieren. Der Client und der Server. Wenn Sie also hier oben auf Spam klicken, spamiert nicht. Aber das ist gut. Alles funktioniert und der Kunde, die Kamera arbeitet. Sie können sehen, dass es den Standort von ihm anpasst. Einfach so. Also funktioniert jetzt alles richtig. Und wenn wir in Zukunft auf irgendeine Kiste stoßen, werden wir diese natürlich reparieren. Aber im Moment scheint es, als würde alles funktionieren und es gibt hier keine wirklich Bugs. Das nächste, was wir tun können, ist, dass wir an Gesundheit und Schaden arbeiten können. Und das wird wirklich interessant sein, denn jetzt können wir von den Feinden beschädigt werden. Wir können ihnen Schaden zufügen und es wird sehr viel Spaß machen. Lassen Sie uns also mit dem nächsten Abschnitt fortfahren. 65. EXTRA: Bereinigen deines Codes: Also wollte ich dieses zusätzliche Video hinzufügen weil ich denke, dass es sehr wichtig ist , dass wir das Projekt reinigen und ich denke, dass es ein bisschen chaotisch wird. Lassen Sie uns also einen Teil des Projekts reinigen. Das erste, was wir tun können, ist hier in der Spielerbasis reinzugehen . Und hier haben wir unser Klimasystem beendet und so weiter. Wir haben also einige Ereignisse, die wir aufräumen können. Hier können Sie also ab dem Aufwärts- und Abwärtsgang auf diese Pins doppelklicken, können Sie also ab dem Aufwärts- und Abwärtsgang auf diese Pins doppelklicken um einen Umleitungsknoten zu erstellen. Und normalerweise mache ich das, damit es schlanker aussieht , damit wir hier klicken und es hier unten schaffen können. Und anstatt zwei davon zu haben, weil dies anfänglich kommt und von derselben Sache kommt. Ich kann einfach von diesem ziehen und hier verbinden und ich kann diesen hier löschen. Und aus irgendwelchen Gründen lässt es mich das nicht löschen. Lass es mich schließen und erneut öffnen und löschen. Jetzt funktioniert es also. Okay, also schiebe ich das nach unten. Also versuche dein Bestes, um das alles hier oben zu säubern. Und ich kann das den ganzen Weg hierher bewegen. Wenn du willst, kannst du zwei davon machen. Du kannst hier und eins hier machen und es so verbinden, wenn du willst, wenn du denkst, dass das sauberer aussieht, denke ich, das sieht jetzt gut aus, vielleicht verschiebe es nach oben. Nein, ich denke, das ist gut. Hier drüben. Wir können diesen Rotz so bewegen. Wir können das hier so hochziehen. Und dieser Teil des Codes. Das ist wie Das sieht gut aus. Wir können es etwas nach oben bewegen, vielleicht weiter zurück, so etwas. Und ich denke, das sieht bisher gut aus. Also hier unten haben wir die Berechnung der Z-Achse. Und ich werde es darunter bewegen , weil sie zusammengehören. Ich verschiebe es einfach hier hoch. Dann haben wir den Can Climb Code. Ich werde all das hier unten bewegen , damit sie klettern können, ist fast sauber oder es ist tatsächlich völlig sauber, also können wir das einfach näher ziehen. Das ist die Dose klettern, aber ich denke, sie können klettern. Dies sollte die Nummer zwei sein, da dies auch einer der ursprünglichen Codes ist. Ich schiebe das nach unten. Und ich werde diesen Teil des hier aufgeführten Codes nehmen , einfach sicher, dass sie hier nicht zur Seite kollidieren. Dann können wir auch hier klettern. Dies ist eigentlich der Server, also muss das tatsächlich ein wenig nach unten verschoben werden, kann dies aber bewegen, kann darüber klettern. Also fängt es hier an und geht zum Server. Und dann haben wir das klettern und wir haben das Pausieren des Flipbooks und das Posen des Flipbooks kommt von hier oben. Vielleicht kann ich das hier oben platzieren, oder ich schaffe Platz und stelle sie einfach nebeneinander hier drüben. Ich stelle gerne Dinge zusammen damit sie nicht zu weit verbreitet sind, aber ich denke, diese liegen viel zu nahe beieinander. Also werde ich es tun, ich werde das ein bisschen runterziehen. Das ist, das hier oben ist der Hauptcode. Und wir haben hier unten einige Ereignisse. Dies passt also den Standort an , der hier passiert. also den Standort anpasse, kann ich ihn wieder einfach hier zur Seite stellen , nur um ihn sauberer aussehen zu lassen. Und ich kann das alles auswählen. Ich werde es wieder ein bisschen nach unten bewegen, so. Okay, also wir haben das Set klettert und kann diesen Aufstieg hochklettern, ich es einfach hier sein lassen können, es einfach näher bringen, damit es nicht zu weit weg ist. Das Gleiche mit diesem. Und was wir mit diesem Code machen können und ihn einfach ein bisschen näher bringen. Wir können das alles hier nehmen. Und dann können wir anklicken, siehe. Nennen wir es klettern. Klettern Sie sein, vielleicht nennen Sie es nicht etwas Besseres oder vielleicht Klettermechaniker oder eine ganze Textzeile. Sie können auch machen, denken Sie daran, dass wir auch Kommentare abgeben können , also müssen Sie es nicht nur hier draußen machen, Sie können es auch nicht. Mach es hier drin, gib ihnen Farben, wenn du willst, wenn du deine eigenen Regeln erstellst. Manchmal, was ich für meine Spiele mache, wenn es vom Server kommt, mache ich einen Kommentar und dann wird dieser Kommentar gelesen. Also all die roten Kommentare in meinem Spiel, ich weiß, dass dies der Server ist, also kann etwas tun. Und wenn es speziell für den Kunden ist, mag ich vielleicht Rosa statt Rot. So können Sie versuchen, Ihre eigenen Regeln erstellen und alles hier zu organisieren. Ich werde das hier fit machen. Jetzt haben wir es abgelehnt, Mechaniker zu sein, wir haben den Sprung. Dieses hier werde ich ein bisschen mehr aufräumen. Also nähern Sie sich das. Also zunächst nur sehr, sehr wichtig, habe versucht, deinen Code viel schlanker zu machen. Klicken Sie jetzt auf diesen und verstecken Sie die Verbindung, weil ich sie nicht wirklich brauche. Und ich werde das alles verschieben, aber weiter weg. Es gibt also mehr Platz hier. Okay? So etwas. Und jetzt können wir diese einfach untereinander bewegen. Okay, jetzt haben wir das, und eigentlich ist dieses ein bisschen durcheinander. Nehmen wir diese Nadel hier und bewegen sie so. Anstatt so viele zu haben, kann ich einfach hier doppelklicken, und ich kann es hier verbinden und diesen hier unten verbinden. Also kann ich diesen löschen. Und jetzt haben wir diese mit allen drei verbunden. Also ein bisschen sauberer, dass wir vorher ein bisschen zurückziehen können , damit wir die Linie sehen können. Ich glaube, alles andere sieht gut aus. Also können wir das bewegen, die Front so, und wir können das etwas weiter wegbewegen , damit sie nicht kollidieren. Okay, also denke ich, dass das nach Noten aussieht. Und denken Sie daran, wenn Sie alles hier draußen reinigen, denken Sie auch daran, Ihre Funktionen zu überprüfen, um sicherzustellen, dass alles gut aussieht. Ich denke, als würde hier im Grunde alles gut aussehen. Wir können es ein bisschen weiter weg bewegen , damit sie nicht so kollidieren. Sie können entweder auf diesen doppelklicken und es hier so machen. Okay? Jetzt kann ich das wegziehen, und hier kannst du das Gleiche tun. Also kann ich das ein bisschen weiter weg bewegen. Und das weiter entfernt. Sie können sogar einfach auf diesen doppelklicken, ihn so nach unten bewegen und auf q. Zwei klicken. Sie sind miteinander verbunden, so etwas. So etwas. Ich meine, es wird viel sauberer. Vielleicht kannst du das alles einfach wegziehen , außer diesem so, das wird etwas sauberer aussehen, aber das sieht bisher gut aus. Okay? Wenn Sie also alles gereinigt haben, versuchen Sie also alles zu überprüfen, versuchen Sie alles zu kommentieren, was sehr wichtig ist, wenn Sie wie drei Monate später wiederkommen, Sie haben keine Ahnung was das alles ist ist, wenn Sie nichts davon begangen haben. Denken Sie also daran, den Code zu bereinigen, versuchen Sie alles zu kommentieren und stellen Sie sicher, dass Sie verstehen, was hier passiert ist und was Sie codiert haben. Die zweite Sache ist, dass Sie Ihre Variablen bereinigen können. Also was man hier machen kann, zum Beispiel der Aufstieg hier. Was Sie hier rechts tun können, können Sie ihnen eine Kategorie hinzufügen. Also kann ich diese Kategorie einfach Klettern nennen. Und Sie können sehen, dass es automatisch zu einer Kategorie hinzufügt. Und das kann es für alle anderen Kunden tun. Also kann dieser Bob besteigen. Ich kann die Kategorie jetzt auswählen und die Zeile auswählen. Und es wird sie hier oben automatisch zusammenbringen. Sie werden klettern, da der Ort auch klettert. Die Pause stieg und der Scheck stieg ebenfalls. Also beide, ich werde sie in Klettern umwandeln. Jetzt haben wir können klettern ist auch rückläufig. Und dann haben wir das Kletterobjekt ist auch das Klettern. Und wir haben noch etwas anderes hier. Wir haben den Staat der Bewegung. Mit diesem können Sie beispielsweise einen Spielerbewegungen aufrufen. Und wir haben den Layerstandort. Dieser nennt es vielleicht Spielereigenschaften, so etwas oder Ort. Also aktueller Spielerstandort. Wir können auch die Spielereigenschaften ändern. Aktualisieren Sie die Spielerkamera. Also diese können wir die Layout-Kamera nennen. Also alles über die Steckkameras hier drin und die Werksinfo. Vielleicht können wir es auch ändern, um Eigenschaften zu spielen. Layer-Spawn und Ort, um auch Eigenschaften abzuspielen. Und die Player-Kamera, wir können zur Kamera wechseln und wir haben die Z-Achse. Dies ist die Bewegung. Vielleicht kannst du es einfach in die Spielerbewegung ändern. Jetzt können Sie sehen, dass Sie all diese organisiert haben und wenn Sie sie minimieren, sehen Sie, wie sauber das ist. Wenn Sie ein großes Spiel haben, sehr, sehr wichtig, um Ihren gesamten Code zu bereinigen. Du weißt also, was los ist. Okay, also lasst uns sparen versucht , das mit all deinen Blaupausen zu tun . Und das nächste, was wir tun können, ist hier draußen. Was wir hier draußen im Outliner tun können, können Sie Dinge gruppieren. So haben wir zum Beispiel die Schweine hier. Ich kann sie alle auswählen und einen neuen Ordner erstellen. Und ich kann sie Feinde nennen. Und ich versuche alle meine Schnecken zu finden. Von dieser Schnecke bis zu dieser Schnecke kann ich die Umschalttaste gedrückt halten und auf diese klicken, sie in den Feindordner ziehen. Und jetzt haben wir alle Feinde, die Sie hier sehen können. Okay? Und jetzt haben wir das, wir haben das Seil hier. Vielleicht können Sie es in einen Ordner namens Environments hinzufügen. Und ich glaube nicht, dass ich es so richtig buchstabiert habe. Und das haben wir. Dies ist auch die Umgebung, also werde ich es hier hineinbringen. Wir lassen den Spieler mit dem Navigationsnetz beginnen. Vielleicht kann man es Volumes nennen. Und das ist das Navigationsnetz-Volumen. Nach der Verarbeitung kann ich tatsächlich einen neuen Ordner namens Post-Prozess erstellen. Okay, also können wir diese Neufassung auch innerhalb der Lautstärke verschieben und den Spielerstart, wir können einfach hier draußen sein lassen. Wir müssen es nicht in einen Ordner legen. Jetzt können Sie sehen, dass dieser auch organisiert ist. Wenn Sie zum nächsten Level gehen möchten, können Sie sogar Dinge umbenennen. So kann es diese zum Beispiel umbenennen. Aber ich denke, es ist vorerst in Ordnung. Okay, also das Letzte, was Sie auch tun können, können Sie zu den Blueprint-Interfaces gehen. Zum Beispiel hier. Denk an diese. Sie können auch eine Kategorie angeben. So kann man zum Beispiel klettern, man kann ihm wieder eine Kategorie geben, genau wie die Variablen, und sie werden alle in einer Kategorie sein. also sehr wichtig , das für Ihre eigenen Projekte zu tun. Reinigen Sie Ihren gesamten Code. Und ich wollte nur dieses zusätzliche Video machen nur um es ein bisschen aufzuräumen. Und jetzt denke ich, dass es viel sauberer ist, damit zu arbeiten. Und ja, das war's für dieses Video. Also sehe ich dich im nächsten. 66. Vorbereitung der Flipbooks: Hallo und willkommen in diesem Bereich. Es ist jetzt an der Zeit, an der Gesundheit und dem Schaden zu arbeiten, sowohl für den Spieler als auch für den Feind. Also haben wir hier in diesem Abschnitt viel zu tun. Also lasst uns anfangen. Zuallererst habe ich hier in den Kursmaterialien einige Überraschungen oder Texturen hochgeladen , die wir zuerst vorbereiten müssen. also zum Charakter gehe, habe ich diesen namens The Death. Gehen wir also hier zu den Vermögenswerten und gehen zu Charakteren. Ich werde es einfach hier hochladen, weil das sowohl für Serine als auch für den Look gleich ist, wir haben es gerade hier hochgeladen. Klicken Sie mit der rechten Maustaste darauf, wenden Sie die Papierstruktur 2D an. Wir wissen, dass all diese Dinge jetzt aussehen werden, wir haben diese Schritteffekte. Schauen Sie also nach Texturen, und ich möchte, dass Sie diesen Schritteffekt ebenfalls importieren. Das Gleiche gilt für Tsarina hier. Ich sehe, dass ich es bereits für Luke hochgeladen habe, und versuchen wir es jetzt für Serena hochzuladen. Also dieser Ein-Schritt-Effekt wurde für Tsarina hier hochgeladen und Papier auf die Einstellungen angewendet. Und bevor wir sie zu Sprites machen, möchte ich, dass du zu gehst, lass uns hierher zurückkehren. Geh zu Feinden. Und drin von hier, Lasst uns die Schweineschritte nehmen und den Tod wählen. Und lass uns jetzt zu den Feinden und den Texturen gehen. Und lasst uns das Schwein hochladen, es und den Tod. Und auch die Schnecke Hits und Schneckenschulden. Diese beiden laden diese auch hoch. Und für alle , die ich hochgeladen habe, wenden Sie erneut Papier auf die Einstellungen an. Und ich möchte, dass du aus all diesen Flip-Büchern machst. Also der Tod HIT oder beides. Und der Seetod hier. Und auch Luke stechen, dieser namens sieht Tab Anserinus Schritt aus. Also überspringe ich das im Video. Wir wissen bereits, was wir hier tun müssen. Also möchte ich, dass du daraus Sprites kreierst und Bücher umdrehst. Also der größte 180 mal 180 für die Charaktere und für die Feinde. Wenn Sie die Sprites extrahieren, beträgt das Raster 90 mal 90. Okay, also hier habe ich die Flip Books fertig. Für den Schweinetod habe ich also die Bilder pro Sekunde gesagt, zwei vorerst, ich bin mir bei den vier hier nicht sicher . Vielleicht muss es sechs oder langsamer sein, also müssen wir das später im Spiel testen. Und denken Sie für den Schweinekopf daran, dieses Bild weniger pro Sekunde auf eins zu setzen. Ich glaube, dies wird sich später auf den Code auswirken, also setze ihn auf eins. Und für die Schneckenköpfe oder den Schneckentod habe ich gesagt, dass ein bis acht Bilder pro Sekunde für diese Schnecke getroffen wurden. Ich habe es auf einen Frame pro Sekunde eingestellt. auch sehr wichtig, das hier zu tun. Und für die Tiefe hier und die Charaktere haben es auf acht Frames Sekunden eingestellt. Das ist also die Todesanimation. Und für Luke erfolgt das Stechen durch Rahmen pro Sekunde. Und das Gleiche hier für Serena ist das Stechen zwei Frames pro Sekunde. Okay, jetzt haben wir alle diese Flip Books bereit. Lassen Sie uns, bevor wir dieses Video beenden, auch auf die Struktur anwenden. Gehen wir also zu unseren Blaupausen in den Strukturen und öffnen Sie die Spielerinformationen. Jetzt können Sie hier sehen, dass wir keine angreifende Animation haben, also klicken wir auf Variable hinzufügen. Und sagen wir Angriffsanimation. Ich ziehe das hier hoch. Vielleicht möchte ich es gleich nach dem Sprung hierher ziehen, spielt keine Rolle, aber ich schreibe nur hier, Paper Flip Book. Es ist ein Papier-Flipbook hier. Jetzt sparen. Und lasst uns das Gleiche für die Tierinformationen machen. Also das Tier jetzt haben wir das Idol und bewegen uns, aber wir haben auch die Hit-Animation. Wir haben die Todesanimation. Das habe ich eigentlich auch für den Spieler. Lassen Sie mich das zuerst in ein Papier-Flipbook umwandeln. Wieder hier und hier. So. Okay, jetzt habe ich den Tod versteckt und füge das auch für den Spieler hinzu, während wir Änderungen machen. Fügen wir also die Todesanimation hinzu. Lass es mich einfach hierher über den Soundeffekt bewegen. Und denken Sie daran, dass das ein Papier-Flipbook ist. Okay, ich glaube, wir haben alles hier, also lasst uns alles speichern. Lass uns zum Spieler gehen. Gehe zu Luke und klicke auf Vollständigen Blueprint-Editor öffnen, klicke auf Klassenvorgaben. Und hier in den Standardeinstellungen der Klasse finden wir die Spielerinformationen hier. Und Sie können sehen, dass sie sie hier nicht wirklich hinzufügen können , obwohl wir sie hinzugefügt haben. Denken Sie daran, Sie müssen zur Spielerbasis gehen, auf Kompilieren klicken, auf Speichern und auf „ Kompilieren“ klicken müssen hier. Da Sie die Struktur in hier, die Variablen in hier, hinzugefügt haben , muss sie hier kompiliert werden. Das Gleiche gilt für den Feind. Bevor wir diese in Schnecke und Schwein hinzufügen können, musst du zum Feind gehen und kompilieren und speichern. Und jetzt können wir sie sehen. Für einen Blick können Sie jetzt auf die Standardwerte der Klassen klicken und sehen, dass wir die Angriffsanimation haben. Und lasst uns einfach nach Schritt suchen. Also Luke, Schritt, weitere Tiefe. Wir können das mit dem Namen FB Death bezeichnen. Diese Leiter der Animation. Wir hatten eigentlich nichts. Das war nur zum Testen. Und wenn du noch einmal willst, habe ich dir gesagt, du kannst, du kannst auf diese Website namens Maples gehen. Ich bin hier und erstelle einen Charakter und versuche deinen Charakter zu benutzen oder einfach nur zu machen. Siehst du hier, du hast ein paar Animationen, die du machen kannst. Und Sie können einfach die Leiteranimation auswählen und sehen, wie sie aussieht. Oder du kannst einfach die Seil-Animation hier platzieren , wenn du willst. Lasst uns das tatsächlich machen. Es sieht also nicht komisch aus. Ich glaube, es nennt sich Climb. Okay, also lass uns jetzt nach Serena gehen und zu Spielern gehen, Tsarina, nicht hier. Layer Tsarina und öffnet die vollständige Blaupause, dass es sich um einen NDA-Angriff handelt. Suchen Sie erneut nach Schritt, wählen Sie Salinas, Serena's und nach dem Buchstaben aus. Lass uns nach denen suchen, die geklettert sind. Hier. Fügen Sie für die Todesanimation hinzu, suchen Sie einfach nach dem Tod und wählen Sie diese aus. Jetzt haben wir alles ausgewählt. Jetzt machen wir das Gleiche für die Feinde. Also lasst uns zum Feind gehen. Wählen wir zuerst den vollständigen Blueprint-Editor in den Standardeinstellungen der Klasse aus. Lasst uns das finden, das Tierinfo genannt wird. Und hier in den Hits können wir nach Schweinehits und dem Tod suchen. Wir können nach dem Tod des Schweins suchen. Mach jetzt das Gleiche für die Schnecke. Öffnen Sie den vollständigen Blueprint-Editor und fügen Sie innerhalb der Tierinformationen die Schneckenhits und fügen wir die Schneckenschulden hinzu. Jetzt haben wir hier alles in der Struktur hinzugefügt. Wenn diese Dinge jetzt hinzugefügt werden, gehen wir rüber und machen die Spieler, die Input angreifen. 67. Hinzufügen der Attack: Nun lasst uns fortfahren und die Angriffseingaben hinzufügen. Gehen wir zuerst zu den Projekteinstellungen. Und im Input hier, Lasst uns jetzt nur noch den Sprung haben. Klicken Sie also auf dieses Plus und fügen Sie einen neuen hinzu, der als Angriff bezeichnet wird. Und ich klicke hier und klicke auf mein linkes Steuerelement auf der Tastatur. Jetzt verwende ich die Lift-Steuerung als Angriffsknopf, aber das ist nur ein Kurs, also kannst du deinen eigenen Knopf auswählen, wenn du willst. Ich glaube an Maple Story, es war entweder dieser oder der Alt-Button. Also wähle ich die weniger Steuerungstaste auf meiner Tastatur aus. Schließe es, gehe in Blaupausen und innerhalb der Spieler- und N-Spielerbasis. Lasst uns diese angreifende Bewegung oder Logik hier in der Spielerbasis machen. Was ich hier gemacht habe, habe ich gerade aus dem vorherigen Video alle meine Knoten ausgewählt und auf C klicken, alle meine Knoten ausgewählt um einen Kommentar zu erstellen. Und ich habe gerade diese eine Bewegung genannt und ich habe die Schriftgröße auf siebziger Jahre geändert. Ich habe einfach alle meine Bewegungen. Die Sache, die wir bisher hier codiert haben. Und so können wir etwas Platz sparen. Und jetzt können wir den Angriff hier unten machen. Also hier unten möchte ich, dass Sie rechten Maustaste klicken und Angriff sagen, wie auch immer Sie es in Ihren Projekteinstellungen genannt haben. Wähle es hier aus. Und jetzt, für den Angriff, wollen wir es über den Server gehen lassen, denn dies ist wiederum Multiplayer und wir wollen sicherstellen, dass der Client nicht betrügt. Und was ich tun werde, ist , dass wir tatsächlich ein Hier und die Blueprint Interfaces und die Spielerbasis erstellen . Hier. Klicken wir auf Hinzufügen und lassen Sie uns eine neue Funktion namens Attack erstellen. Und lasst uns einfach eine neue Variable erstellen. Hier greift B an. Also prüfen wir nur, ob der Spieler angreift. Jetzt können Sie hier sehen, dass es manchmal abnervt, angreift. Wenn ich es hier schreibe und auf Enter klicke , lösche ich es. Ich weiß nicht, ob es das manchmal ohne Grund tut. Also lösche ich das hier, lösche es und erstelle eine neue Funktion. Jetzt kann ich sehen, ob ich hier klicke und auf Hinzufügen klicke. Plötzlich funktioniert es. Ich weiß nicht warum es das macht. Manchmal. Benennen wir es um, um erneut anzugreifen. Hier drüben. Jetzt können wir es tun, wir können es jetzt nennen, indem wir Angriff sagen und hier den Ereignisangriff auswählen. Okay? Wir wollen also, dass dies durch den Server geht. Wir werden also ein neues benutzerdefiniertes Ereignis erstellen Serverangriff genannt wird. Und dieser wird auch dazu führen, dass Boolean namens B angreift. Rufen wir an, lassen Sie uns das erste Jahr durch den Server führen und nennen wir das Serverereignis hier oben. So. Verbinden wir es. Und jetzt können wir diesen Angriff von der Endspielerbasis aus aufrufen . Okay? Und jetzt lassen Sie uns das so einstellen. Wenn Sie also auf die Angriffsschaltfläche klicken, setzen Sie den angreifenden booleschen Wert auf „true“. Es wird durch den Server und den Server gehen. Sie können hier mit der rechten Maustaste klicken, diese auf eine Variable hochstufen und B angreifend nennen. Und jetzt wird der Server diese Variable auf „true“ setzen. Und offensichtlich möchte ich es an die Kunden replizieren , damit sie meine Änderung sehen können. Okay? Das, was wir hier machen wollen, ist wir nicht wollen, dass der Spieler angreift. Wenn Sie bereits angreifen, ergibt das keinen Sinn, Zellen, die Sie ständig spamangreifen können. Was wir also tun wollen, ist diesen booleschen Wert zu nehmen und einen Zweig zu erstellen. Und lasst uns hier tatsächlich eine Kerbe machen, also NICHT boolean. Was wir sagen, ist, wenn der Spieler nicht angreift Wenn dies also falsch ist, greift der Spieler nicht an. Wir können weitermachen und angreifen. Aber wenn wir bereits angreifen, wollen wir nicht wirklich einen Spamangriff darüber hinaus machen. Also greife nur an, wenn du nicht schon angreifst. Okay, also geht es durch den Server und es wird die Variable einstellen. Jetzt wollen wir Animationen spielen und angreifen. Und denken Sie daran, dass wir vor langer, langer Zeit diesen Bewegungszustand hier gemacht haben, in dem wir die Bewegungen ändern. Also lasst uns hier eine neue Bewegung hinzufügen. Wir haben der Struktur eine hinzugefügt. Also lasst uns jetzt tatsächlich zur Aufzählung gehen, denn hier in der Aufzählung haben wir diese nur jetzt, wenn ich sie wieder hochziehe . Aber in der Play-Struktur hier haben wir diese angreifende Animation, haben wir diese angreifende Animation die wir im vorherigen Video hinzugefügt haben. Nun fügen wir diese Option hier in unserer Aufzählung hinzu, die wir auch vor langer Zeit erstellt haben. Hier in den Enums, in den Bewegungsstaaten. Klicken wir auf Aufzählung hinzufügen und fügen den Angriff hinzu. Für dieses Tag können Sie es jetzt nach oben ziehen, wenn Sie möchten. Ich lasse es einfach hier unten sein. Und jetzt können wir sehen, dass Sauerstoff verfügbar ist. Wenn Sie es nicht sehen können, denken Sie daran, auf diesen Pfeil zu klicken und er wird angezeigt. Jetzt kopieren wir dieses Set-Flipbook und lassen Sie es mich mit dem Angriff verbinden. , Denken Sie daran, dass Sie nicht einfach hier reingehen und Schritt eins der Stichanimationen auswählen können Schritt eins der Stichanimationen denn da wir ihn für alle Charaktere dynamisch machen wollen , haben sie ihre Gewohnheit Animationen. Wir müssen es hier aus der Struktur finden, die wir hinzugefügt haben. Wenn Sie also auf die Struktur klicken, können Sie sehen, Sie keine Pins sehen. Und dies passiert, wenn Sie auf Nicht verbundene Pins ausblenden klicken. Aber Sie können hier auf das Häkchen klicken. Also die Angriffsanimation. Und jetzt kann ich auf diesen Pfeil klicken und du siehst, dass er erscheint. Jetzt kann ich diese Angriffsanimation ziehen und mich hier unten in diese einloggen. Okay, das ist also behoben. Jetzt kompilieren und speichern wir. Was wir jetzt tun können, ist zurück zum Event Graph zu gehen. Und hier wollen wir Animationen spielen oder angreifen, denn denken Sie daran, Sie können einfach Set-Bewegungen States sagen. Das haben wir bisher benutzt. Und hier muss man aufpassen, denn jetzt können Sie sehen, dass wir etwas haben, das als gesetzte Bewegungen bezeichnet wird, und auch die feindliche Basis. Das ist der Feind, das ist für den Spieler. Achte also darauf, was du auswählst. Diesen möchten wir vom Spieler verwenden . Möchte die Angriffsanimation abspielen wenn der Spieler angreift. Und jetzt, bevor wir hier oben etwas tun, denken Sie daran, dass Sie sich nach rechts bewegen. Wir wollen uns nicht nach rechts und links bewegen , den der Spieler angreift. Also werde ich mein A angreifen Boolean hier und sage „Nüsse“. Was ich hier sagen werde, ist, wenn der Spieler nicht klettert. Lasst uns also einen UND Boolean und der Spieler greift nicht an. Wenn der Spieler also nicht klettert und die Spieler nicht angreifen, können Sie sich nach rechts und links bewegen. Aber wenn der Spieler angreift, wollen wir uns nicht nach rechts und links bewegen. Lassen Sie mich das einfach zur Seite ziehen, damit ich hier tatsächlich etwas mehr Platz habe , damit ich so arbeiten kann. Okay. Jetzt kompilieren und speichern wir. Und jetzt kannst du sehen, dass es einen kleinen Fehler gibt und ich werde dir jetzt nichts davon erzählen. Ich erkläre es mir ein bisschen. Also klicken wir auf Jetzt spielen. Denken Sie daran, bevor wir auf Play klicken, denken Sie daran, es als Hörserver auf Spiel zu setzen. Also hier, Theaterstücke, die zu Ende gehört wurden. Klicken wir auf Play. Ich greife an. Du siehst, dass es funktioniert. Okay, es ist in Ordnung. Es greift an. Wir haben den Angriff nicht auf falsch eingestellt, also wird er für immer angreifen. Das ist also, was kann der Server jetzt auf dem Client sein? Auch hier klicke ich auf Steuerelement. Aber du kannst sehen, dass sexuell nicht funktioniert. Ich kann meine Animation nicht sehen. Denken Sie daran, dass dies eine visuelle Veränderung ist und eine Wiederholungsbenachrichtigung durchlaufen muss . Im Moment führen Sie dieses Ereignis über den Server aus. Der Client hat also keine Ahnung, was Sie tun denn in dem Moment, in dem Sie zum Server gehen, kann der Client nicht alle diese Informationen sehen , es sei denn, sie werden darauf repliziert. Diese Informationen kann der Client sehen , weil Sie tatsächlich replizieren. Aber dieser läuft gerade durch eine normale Funktion. Und es geht nicht wirklich an den Client und Sie führen ihn über den Server aus, sodass der Client tatsächlich nicht alles sehen kann , was Sie hier schreiben, es sei denn, es wird repliziert. Was ich also tun werde, ist, diese zu ändern, anstatt sie in eine Vertreterbenachrichtigung zu replizieren da dies eine visuelle Änderung ist. Ändern wir es stattdessen in Eric Notify. So können wir den Kunden darüber informieren. Hier und das greift an. Was ich sagen werde, ist diesen Booleschen Wert nochmal zu nehmen, sagen Marken. Wenn Sie also angreifen, möchte ich diese Bewegungsstatus angreifende Animation spielen. Gehen wir zurück und stellen sicher, dass alles in Ordnung ist. Also das ist ja, also lass es uns jetzt versuchen. Klicken Sie auf Play. Klicken Sie nun wieder als Server auf Control. Das sollte funktionieren. Wenn Sie nun zum Kunden gehen, klicke ich auf Steuerelement. Jetzt können Sie sehen, dass es auch angreift. Der Server kann auch sehen, dass der Client angreift. Denken Sie also daran, dass dies im Mehrspielermodus sehr wichtig ist. Sie müssen einen Vertreter benachrichtigen, wenn es sich um eine visuelle Änderung handelt. Und wenn Sie es direkt auf dem Server, dem Client, abspielen , kann der Client nicht alle Dinge sehen, die Sie hier tun, es sei denn, Sie replizieren es tatsächlich auf die Clients. 68. Für jede Schleife: Die Sache ist also, dass wir allen Gegnern, die wir getroffen haben, Schaden zufügen wollen . Und um das zu tun, werden wir für jede Schleife etwas verwenden, das als eine Schleife bezeichnet wird. Also was wir noch keine Schleifen benutzt haben, und ich glaube nicht, dass ich dir das noch erklärt habe. Dies ist also nur ein kurzes Video, das erklärt, was Loops sind. Fangen wir also hier an. Hier unten haben wir gesagt, bevor wir angreifen werden und es geht zum Server. Jetzt wird sich die gesamte Logik innerhalb des Servers befinden, weil wir sicherstellen möchten , dass der Client nicht betrügt. Also lasst uns das hier drin machen. Aber wir werden tun, ob wir eine Funktion namens „überlappende Akteure bekommen“ verwenden werden. Also werden wir etwas treffen und wir werden alle überlappenden Schauspieler bekommen, also alle Schauspieler , die wir treffen. Und für diesen werden wir für jede Schleife eine Schleife machen. Dies ist der, den wir benutzen werden. Und lasst uns das verbinden. Welche Akteure werden sich also überschneiden? Wir werden uns die Feinde ansehen , denn dies sind diejenigen, die wir angreifen wollen. Holen Sie sich also alle überlappenden Schauspieler, holen Sie sich alle überlappenden Feinde. Und für jeden dieser Feinde wird es jetzt jeden Feind erobern. Sagen wir also in meinem Level hier, dass ich fünf Feinde so übereinander stapelten. Und ich habe auf meinen Angriffsknopf geklickt und tatsächlich alle diese fünf gedrückt. Was wird jetzt tun? Die Überlappung beträgt fünf. So kannst du alle fünf Feinde sehen. Und jetzt für jeden einzelnen Feind, Was willst du tun? Und was wir tun wollen, jedem einzelnen Feind Schaden zugefügt. Das ist der Loop-Körper. Jetzt wirst du für jeden einzelnen Feind, den du getroffen hast, eine Aktion ausführen. Was wir tun wollen, ist einfach Schaden anzurichten. Jetzt möchte ich sicherstellen, dass dieser Code nicht ausgeführt wird, wenn ich nichts treffe. Wenn du keine Feinde triffst, möchten wir diesen Code nicht wirklich ausführen. Wir werden also sagen, dass wir das nehmen und Länge sagen. Also überprüfe die Länge. Und ich nehme das und sage nicht gleich. Wir können das also tun, indem wir entweder nicht gleich schreiben oder ein Ausrufezeichen und gleich sagen. Das ist großartig in der Mathematik, was nicht gleich bedeutet. Wenn das also ist, ist die Länge der sich überlappenden Akteure nicht gleich 0, was bedeutet, dass ich tatsächlich etwas getroffen habe. Dann können Sie diesen Code ausführen. Wenn die Länge jedoch 0 ist, tun Sie nichts, weil wir diesen Code wirklich nicht ausführen möchten, wenn wir nichts getroffen haben. Dies ist sehr einfach für jede Schleife, es wird einen Blick auf alle sich überlappenden Akteure werfen. Also haben wir vielleicht drei Feinde getroffen. Und für jeden dieser drei Feinde wollen wir Schaden anrichten. Und das werden wir in der nächsten Lektion tun. 69. Spieler Schaden anwenden: Lasst uns nun noch einmal in den Spieler-Blueprint einsteigen und sehen, wie der Spieler Schaden anrichten kann. Hier in der Playerbasis haben wir das im letzten Video gemacht. Also mache ich den Angriff hier. Und übrigens, wenn Sie es noch nicht gesehen haben, können Sie sehen, womit wir bisher gearbeitet haben. Die Variablen, sie sind hier im Pin wie kreisförmig. Aber dieses ist ein Quadrat und es hat viele kleine Quadrate darin. Und das nennt man Array. Und Sie können es hier sehen, wenn Sie eine neue Variable erstellen. Zum Beispiel habe ich das ganz Zufall genannt. Sie können sehen, wenn Sie hier auf den Typ klicken, den variablen Container, können wir den Typ tatsächlich von einem einzelnen in ein Array ändern . Was ist der Unterschied zwischen diesem und diesem? Also, was wir bisher gemacht haben, sagen wir zum Beispiel Spieler, die verbunden sind. Nehmen wir zum Beispiel die verbundenen Spieler und ändern sie hier in die BP-Spielerbasis. Sagen wir also, was wir damit machen wollten ist, sie alle in einer Variablen zu speichern. Du kannst das also nicht einfach hier nehmen und hier einstellen. Wie wenn ein Spieler eine Verbindung herstellt, setzt man diese Variable. Diese Variable kann nur eine Information enthalten. Diese Variable lautet beispielsweise, ob der Spieler angreift oder nicht. Und lass mich sehen, ob wir hier andere Variablen haben. Diese Variable enthält gerade den Bewegungsstatus. Wenn Sie es also auf „fallen“ einstellen, wird dieser Bewegungszustand fallen. Sie können also nicht mehrere Informationen gleichzeitig innerhalb dieser Variablen haben mehrere Informationen gleichzeitig . Sie können dies jedoch tun, wenn Sie es in ein Array ändern. Um Spieler verbunden zu speichern, sind alle Spieler in einer Variablen verbunden. Also nicht nur ein Spieler, du musst ihn tatsächlich in ein Array umwandeln. Und wenn Sie auf Variablentyp ändern klicken, können Sie sehen, dass sie wie dieses Quadrat werden. Und was das ist, ist jetzt das Array, das Sie können, Sie können es sich als große Box vorstellen. Und ich habe dir schon gesagt, du kannst dir diese normale Variable als Box mit einigen Informationen vorstellen . Diese kann man sich als eine große Schachtel mit kleinen Informationskisten vorstellen . Also kann ich jetzt alle Spieler hier speichern , alle Variablen. Und was ich hier tun kann ist, dass ich das nehmen und sagen kann. Und ich kann tatsächlich einen der Spieler kriegen und etwas damit machen. Ein Array ist also nur eine große Box, die beispielsweise alle verbundenen Spieler enthält . Vielleicht enthalte ich alle Pons, während es nur eine kreisförmige ist, also nur eine einzige normale Variable, sie enthalten kann, nur eine Information enthalten kann. Wenn Sie jedoch ein Array haben, kann es mehrere Informationen enthalten. So zum Beispiel alle Spieler, die mit dem Server verbunden sind. Hier, die sich überlappenden Akteure, enthält es alle überlappten Akteure. Und sagen wir, ich habe mich an diese gebunden. Und das sind fünf Feinde. Jetzt, mit diesen fünf Feinden, kann ich sie jetzt hier in meiner Schleife aufbrechen. Jetzt habe ich jeden einzelnen Feind hier. Und jetzt wollen wir mit unserer Schleife Schaden zufügen, dass wir jedem einzelnen Gegner, den ich getroffen habe, Schaden zufügen wollen . Wenn also die Länge nicht 0 ist, was bedeutet, dass wir jemanden getroffen haben, möchten wir vorsichtig sein und sagen Schaden anwenden. So schadet man etwas. Verwenden Sie diese Funktion hier, wenden Sie Schaden an. Jetzt müssen wir angeben, worauf Sie Schaden anrichten möchten. Wer ist der beschädigte Schauspieler? Das ist der Feind und der Feind ist da. Denken Sie daran, Sie haben alle sich überlappenden Akteure genommen , die die feindliche Basis sind , also die Feinde. Und für jeden Feind willst du ihm Schaden zufügen. Okay, was ist der Schaden, den Sie anrichten möchten? Und wir müssen tatsächlich angeben, welchen Schaden der Charakter verursacht. Gehen wir also zurück zu den Spielerinformationen, unserer Struktur, Spielerinformationen und fügen wir eine neue Variable hinzu, die als Basisschaden bezeichnet wird. Vielleicht können wir diesen Schaden später verbessern. Dieser heißt also Basisschaden, und wir können ihn hier oben verschieben. Es spielt keine Rolle, aber ich strukturiere die Dinge einfach so. also für den Basisschaden wir also für den Basisschaden zurück zur Spielerbasis Kompilieren und Speichern. In den Klassenvorgaben Eigentlich kannst du einfach nicht in der Klassenstandard sein, du kannst einfach hier darauf klicken. Wenn wir es hier in den Player Properties Player Info finden, ist dies die Struktur und hier klicken. Standardmäßig möchte ich nur, dass der Basisschaden vielleicht etwa fünf ist. also jedes Mal fünf Schaden an, wenn du etwas triffst. Jetzt, wo wir das Set haben und lassen Sie uns das hier nehmen und lassen Sie es uns brechen. Und wir können diesen Basisschaden jetzt nutzen und ihn hier einstecken. Jetzt, später, wenn du Upgrades für ein Spiel machen willst, werden wir das wahrscheinlich für unser Spiel tun. Und nicht wirklich im Basiskurs werde ich wahrscheinlich Bonusabschnitte hinzufügen , werde ich wahrscheinlich Bonusabschnitte hinzufügen um immer mehr in diesem Spiel zu entwickeln , bis es riesig wird. Aber vielleicht habe ich das schon aufgenommen. Schau dir also meinen Bonusbereich an, wenn du dieses Video ansiehst. Also hier richten wir den Basisschaden an. Wenn wir jedoch später Upgrades hinzufügen möchten und später möchten wir diesen Schaden erhöhen. Sie können einfach eine neue Variable erstellen. Nennen Sie es beschädigt, Multiplikator und Kompilieren und Speichern als Standard. Jetzt ändern wir es in einen Float, und lassen Sie es uns nicht in eine ArrayList ändern, sondern behalten Sie es einfach in einer einzigen Variablen. Ziehen wir es raus. Und denken Sie standardmäßig daran, es auf eins zu setzen. Der beschädigte Multiplikator ist also nur einer, was dem Basisschaden entspricht. Nun werden wir sagen, wird das mit dem Multiplikator multipliziert? Und dann verbinden wir es hier. Wenn wir jetzt Upgrades durchführen, können wir diesen Multiplikator einfach erhöhen, zum Beispiel zwei. Es wird also sagen, dass der Basisschaden mal zwei Mal ist, was dann mehr Schaden anrichtet. Aber jetzt machen wir einfach eins hier. Ich werde das ein bisschen Gewicht bewegen besser organisiert zu bleiben. Nun der Ereignisanstifter, wenn Sie die Maus darüber halten, heißt es der Controller, der dafür verantwortlich war, diesen Schaden zu verursachen. Und das ist der Spieler. Also sind wir in einem Spieler und um den Controller des Spielers zu bekommen, kannst du einfach „Controller holen“ sagen. Und get controller ist eine Funktion, die besagt, dass Controller für diesen Akteur zurückgibt. Also der Controller des Spielers, du kannst es so machen. Für den Schadenstyp können Sie ihn einfach in Schadensart ändern. All das, wie der Schaden näher, den wir gerade nicht wirklich brauchen. Okay, so richten Sie also Schaden an. Und wenn wir hier alles retten, jetzt in der feindlichen Basis, was passieren wird, wenn ich jetzt zum Feind gehe, hier in der feindlichen Basis, haben wir nicht wirklich viel getan. Aber hier können Sie Ereignis, Schaden sagen , und das ist ein Ereignis, das wir noch nicht benutzt haben. Jeder Schaden wird nur Schaden erleiden , der bis zu diesem Zeitpunkt passiert ist , und wir können etwas damit tun, zum Beispiel können wir von der Gesundheit dieses Feindes abziehen. Bevor wir das beenden, lassen Sie mich etwas mit den Kollisionen machen auch etwas mit den Kollisionen machen, denn wenn ich hier in den Viewport gehe, lass mich tatsächlich zu einem der Feinde gehen. Die Schnecke auch. Öffnen Sie den Blueprint-Editor. Ich denke, diese Trefferbox ist viel zu groß und wenn der Spieler über den Feind springt, wird der Spieler getroffen, wenn Sie diese Überlappung betreten. Ich möchte nur, dass sie getroffen werden wenn du dieser Schnecke sehr nahe bist. Also denke ich, dass dieser sehr riesig ist. Was wir hier tun können, ist einfach eine weitere Kollision hinzuzufügen , die dafür verantwortlich ist, den Spieler zu beschädigen. Und lasst uns hier hinzufügen gehen und nach Kollision suchen. Eigentlich keine sphärische Läsion. Lasst uns das wählen. Ich denke, das ist in diesem Fall besser. Und ändern wir den Namen in diesen in Kollision. Und ich möchte, dass du es tatsächlich schaffst, lass es uns nicht hier hinzufügen, ich bin in der Schnecke, das ist mein Fehler. Gehen wir zurück zur Spielerbasis und fügen sie hier hinzu. Also Kollision, Kollisionssphäre und nennen es Kollision, weil wir es auf allen Feinden wollen, nicht nur auf der Schnecke. Jetzt gehen wir zurück zur Schnecke und jetzt kannst du es kleiner machen, um diese Schnecke zu passen. Schnecke, wir können diesen Kugelradius einfach kleiner machen. Sie können es auch nach unten ziehen. Und vielleicht machen wir es 20. Dann sehe ich, dass das 20 ist. Und wenn Sie es auch von der rechten Ansicht aus sehen können. Denken Sie daran, dass wir über die orthogonalen Ansichten im Intro gesprochen haben, die richtige Ansicht. Und Sie können dies vom Drahtgitter in den schrägen Modus ändern und Sie können die Schnecke sehen. So kann es auch hier in dieser Ansicht angepasst werden, das ist manchmal viel besser. Aber 20 Ich denke, ist eine gute Hitbox. Gehen wir zurück zur Perspektive. Was wir jetzt tun wollen, ist einfach die Kollisionen für all diese zu nehmen . Also lasst uns kompilieren und speichern. Gehen wir zurück zur feindlichen Basis. Also hier in der Kapsel möchte ich runter gehen und auf diese Kollisionsvoreinstellung klicken, um zu überprüfen, ob alle Kollisionen, mit denen wir arbeiten, korrekt sind. Also denke ich, dass das in Ordnung ist. Wir müssen hier wirklich nichts tun. Klicken Sie also jetzt auf die Kollision und klicken Sie auf diese Kollisionsvorgabe. dass wir dieses Denken Sie also daran, wie zuvor, in einer früheren Lektion, Problem damit hatten, dass die Schnecken austreten, als würden sie in der Nähe der Rampe laufen. Und das war eigentlich auf die weltstatische Überlappung zurückzuführen und ich möchte eigentlich nicht, dass sie ausfallen. Ich werde zuerst, Sie können Schritt darüber charakterisieren. Nein, das kannst du nicht. Und lasst uns hier Gewohnheit machen. Und dann ignorieren wir einfach die Weltstatik. Das Muster geht also nicht oder die Schnecken werden sich nicht darin beundern. Klicken Sie auf das Sprite und stellen Sie sicher, dass es keine Überlappungseffekte erzeugt. Und ich glaube, das ist hier erledigt. Gehen wir also zurück zur Spielerbasis. Für die Spielerbasis werden wir eine Kollision hinzufügen , bei der Sie sie erkennen können, den Angriff. Also lasst uns hier eine neue Kollision machen und ich werde sie an das Sprite anhängen , damit du sehen kannst, warum ich es anfüge. Zuerst füge ich hier einfach eins hinzu. Kollision, sagen wir die Kollisionsbox. Und ich gehe in die richtige Ansicht, Lead-Modus. Jetzt kann ich sehen, wo ich es tatsächlich nicht in der Spielerbasis hinzufüge . Lasst uns sie im Pleuralraum machen , weil alle Spieler gleich sind. Es würde also keinen Sinn machen, es in Luke und dann Serena zu tun. Also lasst uns die Größe hier machen. Der Grund, warum wir die Größe in der Schnecke gemacht haben, ist, dass alle Feinde unterschiedlich sind. Aber für die Spieler sind sie alle gleich. Also lasst uns die Größe hier in der Spielerbasis machen. Und was ich hier machen möchte, machen wir zuerst das x. Und ich denke etwas wie 20. Und für das Y kann ich es hier nicht sehen. Vielleicht wie 20 oder 25, spielt keine Rolle. Lass uns einfach 20 machen. Und für das Z hier, also wie viel hoch und runter? Ich denke, 30 ist eine gute Zahl. Also lasst uns 30 versuchen. Und bringen wir es etwas näher an den Charakter. Was ist, wenn sich die Feinde in dieser Kollision befinden? Sie können Schaden anrichten. Wenn Sie tatsächlich, bevor wir das tun, gehen wir zur Kollision und prüfen, ob alles in Ordnung ist. Okay. Also ist alles in Ordnung, bis auf eine Sache. Also hier kann man wieder spielen oder darüber hineintreten. Nein, das kannst du nicht. Es wird Überlappungsereignisse erzeugen. Und jetzt lass mich das auf Benutzerdefiniert setzen , weil ich hier etwas hinzufügen muss. Jetzt kannst du vorher und die feindliche Basis sehen. Wenn Sie nun auf diese Kollision klicken, die wir gemacht haben, können Sie sehen, dass der Objekttyp weltdynamisch ist. Jetzt ist das Problem, wenn Sie diese Weltdynamik haben , dass sie sich gerade für diese Kollisionsbox überlappt, als ob die Schnecke in Ihre Nähe geht und sich dann mit dieser Box überlappt, diese Schnecke wird Schaden anrichten dein Charakter und das ergibt wirklich keinen Sinn. Warum mein, mein, ich möchte, dass der Feind hier in dieser Kapsel in mich eindringt , bevor er Schaden anrichten kann. Nicht wirklich, wenn es meine Angriffsreichweite überlappt, würde das keinen Sinn ergeben. Hier sieht man also das Ende einer Basis. Dies ist ein Objekttyp der Weltdynamik. Also gehe ich zum Spieler hier wegen dieser Angriffskollision, und ich werde es so einstellen, dass er die Weltdynamik ignoriert. Also wird es hier nicht wirklich mit mir kollidieren. Ich möchte nur, dass es beschädigt wenn es meine Kapsel blockiert. Und du kannst sehen, dass meine Kapsel die Welt dynamisch zwei Blöcke hat , also werde ich von diesem Feind getroffen. Klicken Sie nun hier an, ändern wir den Namen davon. Nennen wir es eine Tag-Kollision. Lass uns kompilieren und speichern und lass mich auf Play klicken und ich kann dir tatsächlich etwas Cooles zeigen , damit wir auch daraus lernen können. Jetzt können wir sehen, ob du etwas sehen willst. Wenn Sie also möchten, wenn Sie die Kollision anzeigen möchten , weil Sie debuggen, können Sie auf diese Kollision klicken und diese namens Hidden Game entfernen. Verstecktes Spiel, entferne das, klicke auf Play. Und jetzt kannst du die Kollisionsbox hier vor dir und ihrem Spiel sehen. Und Sie können sehen, wenn ich auf diese Seite drehe, die Kollisionen tatsächlich hinter mir liegen. Also brauchen wir die Kollision , um mir auf jeder Seite zu folgen. Und deshalb ist es wichtig. Wenn du das willst, füge es hier in das Sprite ein. Es ist also tatsächlich an das Sprite gebunden. Es ist also ein Kind. Und Sie können auf Play klicken und es wird sich mit diesem hellen drehen. So kann es jetzt sehen, dass es tatsächlich richtig folgt. Es ist also sehr cool , daraus zu lernen. Ich lasse zu, dass dies nicht in Spielen versteckt wird, damit wir tatsächlich sehen können , was los ist. Damit. Ich glaube, ich habe es nicht mehr. Lassen Sie mich diese Kapsel hier für den Spieler überprüfen , um sicher zu sein, ob das Ding richtig ist. Jetzt können Sie also sehen, dass Kapsel ignoriert wird, ist der Knochen, der der Feind ist. Ich werde eigentlich Überlappung einstellen, weil wir durch den Arm beschädigt werden wollen. Es macht also keinen Sinn, den Knochen zu ignorieren. Das ist jetzt richtig und für die Sprites wird dieser Teil keine Überlappungsereignisse generieren . Sagen wir also wo alles, ich glaube, alles stimmt. Jetzt in der Spielerbasis wir jedem einzelnen Feind Schaden zu , den wir treffen. Das Problem, das wir in der nächsten Lektion beheben werden, ist, wenn ich angreife, wird es für immer angreifen. Lassen Sie uns also in der nächsten Lektion übergehen und das beheben. 70. Angriff anhalten: Also hier bei diesem Code haben wir bisher festgelegt, dass der Angriff wahr ist. Und wenn es hier in der Unwrap Funktion der Fall ist , wird es diese angreifende Bewegung einstellen. Jetzt wollen wir etwas tun , wenn der Angriff falsch ist. Und was wir möchten, dass Sie dies tun, ist wir dies kopieren möchten. Jetzt kannst du das tun, setze es einfach auf den Leerlauf, damit wir nicht mehr angreifen. Und wir müssen dies irgendwann als falsch festlegen, denn bisher haben wir es gerade so eingestellt, dass es hier oben wahr ist. Und das stimmt jetzt, aber wir haben nirgendwo in unserem Code angegeben , wann es falsch sein wird. Also lasst uns das tatsächlich machen. Also sagen wir hier, bevor wir irgendetwas mit den Feinden machen. Sagen wir also ja, wenn ich hier bin, wenn ich mich überschneide, wenn meine Länge 0 ist, wenn ich keine Feinde treffe, möchte ich einfach aufhören anzugreifen weil ich niemanden getroffen habe. Also nehme ich das und setze es auf „falsch“. Wenn Sie dies jedoch nur tun, wird es dies gleichzeitig tun, wenn Sie angreifen. Sie können also sehen, dass ich auf Angriff klicke und gleichzeitig angreife, wird es meine Animation stoppen. Anstatt das sofort zu machen und es mich einfach noch einmal spielen zu lassen , muss ich eigentlich niemanden treffen. also hier klicken, können Sie sehen, dass ich auf Warteschlange klicke, aber nichts passiert, weil ich sofort von „true“ auf falsch gehe. Sie müssen ein wenig warten, bevor Sie es auf false setzen, da Sie warten müssen, bis die angreifende Animation abgespielt wird. Und du kannst das auf sehr kluge Weise tun. Du kannst das Sprite hier nehmen und „Flip Book“ sagen. Jetzt kann ich die Länge dieses Flipbooks bekommen und es heißt, erhalte die Länge des Flipbooks in Sekunden. Du kannst verstehen, wie lange dieses Flip Book läuft. Du kannst dich tatsächlich verzögern. Denken Sie daran, dass wir diesen Verzögerungsknoten verwenden Verbinden wir also die Verzögerung damit. Der Code wurde also so lange verzögert lange diese Animation dauern wird, und durchlief das. Und nachdem es fertig ist, gehen wir rüber und setzen es auf „false“. Also wenn ich jetzt auf Play klicke und du zu diesem Charakter gehst und lass mich nicht wenn jemand hier ist. Wenn ich also jetzt treffe, siehst du, dass es funktioniert. Das ist also richtig. Jetzt kann ich schlagen und es stoppt meine Animation nach sexuell gespielt. So kannst du diese Animation wieder langsam und schneller machen , indem du zum Beispiel zwei Charaktere zu Luke gehst . Wenn Sie diese stechende Animation erhöhen, wird diese Animation natürlich viel schneller gestoppt . Jetzt wird es von den Frames pro Sekunde gesteuert. Jetzt, wo wir den Angriff erledigt haben, denken Sie daran, wenn Sie mit dem Angriff auf die Feinde fertig sind, denn wenn ich jetzt spiele und Feinde treffe, können Sie sehen, dass es für immer spielt, weil ich nicht angegeben habe wenn ich aufhöre, wenn ich tatsächlich Feinde treffe, denn dieser ist gerade dann, wenn du keine Feinde triffst. Wenn ich wieder Feinde treffe , mache ich das Gleiche. Also ziehe ich das einfach hierher , wenn diese Schleife abgeschlossen ist. Wenn du also allen Feinden Schaden zugefügt hast, höre ich meinen Angriff hier auf . Und das wird sehr, sehr schnell passieren. Es wird also so aussehen, als hättest du nichts getroffen. Weil Blueprint-Code so schnell läuft, ist es verrückt. Wenn wir also nichts hören oder wenn Sie Ihren Angriff abgeschlossen haben, hören Sie auf anzugreifen. Also lasst uns jetzt sehen, wenn ich jemanden treffe, kannst du sehen, dass es jetzt die Animation stoppt , nachdem ich die Feinde getroffen habe. Oder selbst wenn ich niemanden höre, wird es aufhören. 71. Feind beim Erhalt von Schäden: Okay, jetzt, da wir einen Großteil der Tech-Animation codiert haben und jetzt Schaden anrichten. Lasst uns tatsächlich zum Feind gehen, der feindlichen Basis. Hier wollen wir diesen nennen, dieses Ereignis hat irgendeinen Schaden genannt. Und wir wollen dem Feind Schaden zufügen. Was wir also tun wollen, ist, dass wir zuerst in die Struktur gehen und Gesundheit für den Feind hinzufügen wollen. Ich glaube, das haben wir noch nicht gemacht. Gehen wir also zu Blaupausen und Strukturen und zu den Tierinformationen. Und hier fügen wir eine neue Variable hinzu, nennen Sie diese eine Gesundheit. Und dafür, lass uns gehen und auf Float klicken. Und für die Gesundheit ziehe ich diesen einfach nach oben. Okay, also lasst uns das retten und gehen wir zurück zur feindlichen Basis. Kompilieren und speichern Sie jetzt. Jetzt können Sie es für diese Struktur herausziehen und Sie können sie brechen. Und jetzt können Sie sehen, dass wir diese Gesundheitsvariable haben und standardmäßig die Schneckengesundheit, ich weiß nicht, wir können es auf 25 oder 15 setzen. Lass es uns bis 15 machen. Eigentlich beträgt unser Spielerschaden gerade fünf, also werden drei Treffer die Schnecke töten. Gehen wir also zu den Standardwerten der Klassen und hier und zu den Tierinformationen. Für diese Schnecke hat sie also 15 Gesundheit. Und vielleicht für das Schwein. Wenn wir runter zum Schwein gehen, Schwein hier, dieses Schwein, werden wir den Schweinen vielleicht 230 Gesundheit bringen. Es ist also die doppelte Stärke des Feindes oder der Schnecke. Und auch dafür ändere ich die Kollision nur ein bisschen. Dafür wie wir es mit der Schnecke gemacht haben. Vielleicht senke es einfach wie 25. können wir später machen. Als ob wir prüfen und sehen können, ob das zu groß und zu klein ist. Also lasst uns jetzt zur feindlichen Basis zurückkehren. Jetzt ist die Gesundheit entweder 30, wenn es ein Schwein ist, oder es ist 15, wenn es sich um eine Schnecke handelt. Aber jetzt wird es das dynamisch machen. Der Schaden, den wir hier vorher angelegt haben, und die Spielerbasis, der Schaden am Basisschaden, den wir angelegt haben , entspricht dem beschädigten, der hier herauskommt, und der Spieler verursacht fünf Schaden. Was wir also sehen können, was wir sagen können ist diese Gesundheit, die gerade 15 für die Schnecke ist, subtrahieren, wie den Schaden subtrahieren, der fünf ist. Jetzt ist die Gesundheit zehn, denn 15 minus fünf sind zehn. Dies ist die aktualisierte Gesundheit. Dies ist die zehn Gesundheit, die von der Schnecke übrig bleibt. Und jetzt werde ich dir etwas Neues beibringen, eine neue coole Sache, von der nicht viele eigentlich wissen, dass nicht viele eigentlich wissen, viele tatsächlich einen Fehler machen obwohl es zu Blaupausen fortgeschritten ist, ist wie Sie legen fest, wie Sie Variablen dynamisch innerhalb der Struktur festlegen . Denn im Moment hast du all diese Variablen und das ist cool. Sie haben sie hier in Ihrer Struktur festgelegt. Aber wie ändert man den Wert tatsächlich? Lassen Sie mich diese jetzt entfernen. Jetzt ist die Gesundheit gerade hier 15. Wie ändert man es hier durch das Gameplay dynamisch auf zehn ? Tun Sie das, indem Sie aus dieser Struktur ziehen. Und dann schreibst du Sets. Und hier unten sagst du gesetzte Mitglieder in Animal Info in der Struktur. Jetzt muss es also was mögen, welches Mitglied möchtest du einstellen? Und rechts, wenn Sie wieder hier klicken, können Sie alle Pins sehen und ich möchte die Gesundheit einstellen, das ist es, woran ich interessiert bin. Also möchte ich diese Gesundheit in dieser Struktur auf diese neue Gesundheit aktualisieren , die jetzt zehn ist, nachdem der Schaden angelegt wurde. Also verbinde ich es hier. Und jetzt müssen Sie diese Variable erneut festlegen, da Sie sehen können, dass dies wie ein gedrehtes Quadrat ist, was bedeutet, dass dies nur eine temporäre Variable ist. Du musst es erneut einstellen, und es ist nicht wie der kreisförmige Stift. Das bedeutet also, dass ich meine Tierinformationen nehmen und diese Tierinformationen erneut einstellen muss. Nun, all diese anderen Informationen hier, die untätige Animation bewegen sich, Hit und Tod. Es wird es genauso einstellen. Das einzige, was sich ändern wird, ist die Gesundheit. Und da dies durch den Server läuft, möchte ich dies tatsächlich replizieren, um sicherzustellen, dass mein Client diese Bearbeitung auch sehen kann da dieser Schaden Sie hier sehen können. Es heißt nur Autorität, dieses Ereignis wird nur auf dem Server ausgelöst. Denken Sie also daran , diese Informationen auch wieder an den Client zu replizieren . Und das ist eigentlich alles wie es ist. Wir müssen hier nicht wirklich mehr tun , um es ein bisschen mehr zu strukturieren. Vielleicht kann ich die einfach ein bisschen in die Richtung ziehen und es einfach hier aufstellen. Versuchen Sie also, so strukturiert wie möglich zu sein. Klicken Sie auf diesen Pin, strukturieren Sie ihn vielleicht so, und ich bringe alles näher, einfach so. Klicken Sie auf q. Okay, jetzt haben wir das, und wenn Sie sehen möchten, ob das funktioniert oder nicht, müssen wir es auch testen, um zu sehen, ob es funktioniert. Ich kann jetzt hier drucken. Eine Druckzeichenfolge. Ich kann die Höhe der Gesundheit ausdrucken. Sie können es also auch von hier aus tun, also können Sie es ziehen und ausdrucken. Sie können auch sehen, ob Ihre Struktur tatsächlich aktualisiert wurde. Also können wir das noch einmal brechen. Und jetzt können wir die neue Gesundheit drucken , die Sie hier drüben gesetzt haben. Also lasst uns kompilieren und speichern. Wann immer es getroffen wird, wird es Ihnen den Schaden oder den gesünderen Schaden mitteilen. Also gehe ich zum Beispiel zu dieser Schnecke, ich klicke auf die Hüften. Und du kannst hier oben sehen, dass zehn Gesundheit übrig steht. Und wenn ich nicht weiß, ob das dieselbe Schnecke ist, hat es jetzt noch fünf Gesundheit. Wenn ich jetzt einen anderen Feind treffe, hat er zehn Hilfe beim Aufheben. Also ist es jetzt richtig, es hat zehn Gesundheit übrig, wenn ich es noch nicht gehört habe und wenn ich es noch einmal treffe, hat es fünf. Wenn ich es nochmal treffe, hat es 0. Jetzt funktioniert es tatsächlich richtig. Das Problem ist jetzt, wenn ich es treffe, sagst du, du wirst sehen, dass es minus fünf, minus zehn sagt. Also geht es weiter, es geht weiter im Minus. Und das müssen wir beheben. Was Sie hier also tun müssen ist, wenn Sie hier abziehen, etwas verwenden, das als Klammer bezeichnet wird. Klammer. Und wir werden diesen namens Float auswählen, weil wir mit Floats arbeiten. Also werden wir den Wert festklemmen damit er niemals unter 0 gehen kann. Was ist also, wie hoch ist der Wert? Der Wert ist dieser, den wir festklemmen möchten. Okay? Was ist das Minimum? Wir wollen nicht unter 0 gehen. Das Minimum ist also 0. Und das Maximum ist nur der Betrag , den dieser Feind in Gesundheit hat. Ich ziehe das einfach und setze es auf das Maximum ein. Was auch immer wir von Anfang an gesagt haben, dann werden wir diese Gesundheit hier festlegen. Anstatt also direkt hierher zu gehen, wird es durch einen Kunden gehen und sicherstellen, dass er nicht unter 0 liegt. Und dann werden wir diese Gesundheit hier anwenden oder bearbeiten. Okay, also so etwas. Und lasst uns mit mir kompilieren, doppelklicken Sie auf diesen Pin, um ihn etwas organisierter zu machen , so etwas. Okay, kompilieren und speichern, und jetzt klicken wir auf Play und testen es aus. Also, wenn ich jemanden treffe, also wenn ich das treffe und hier tatsächlich treffe, 10500, kann es jetzt sehen, dass es nicht unter 0 gehen kann. Ich weiß, dass wir diese Schnecke immer sterben lassen können , wenn ich 0 treffe. Also lass es mich mit diesen Schweinen testen, damit wir 25 sehen können. Und jetzt können Sie sehen, dass es viele Zahlen druckt und das liegt daran, dass ich tatsächlich mehrere Feinde treffe. Das funktioniert jetzt. Das hat 2015, dieser andere hat 20. Sie können also sehen, dass ich alle Feinde treffe und es funktioniert, wenn ich mich mit mehreren Feinden überlappe. Wieder kann unter 0 gehen. Das funktioniert jetzt also einwandfrei. Nur um zu prüfen, ob die Spielerbasis auch geklemmt werden muss. Wir müssen hier nicht wirklich etwas festklemmen. Das einzige, das einzige, was wir brauchen um die Geschäftsgesundheit zu erhöhen, und das müssen wir wahrscheinlich auch tun, denn der Spieler am Feind schadet dem Spieler, was später getan hat. Jetzt funktioniert das. lösche diesen Code hier. Und das ist im Grunde das ****. Man sieht also, dass es nicht wirklich zu komplex ist. Wir nehmen nur die Gesundheit, subtrahieren den Schaden davon und setzen ihn dann in diese Struktur ein. 72. Enemy: Jetzt ist es an der Zeit, die gegnerische Hit-Animation zu machen. Bisher treffen wir nur die Feinde und sie spielen keine Animation. Also müssen wir das jetzt machen. Für die Animationen haben wir diese tatsächlich viel früher erstellt, weil wir die Aufgabe erstellt haben, Sie finden tatsächlich einen weil wir die Aufgabe erstellt haben, zufälligen Ort. Und hier benutzen wir diesen, wo wir den Bewegungszustand in Bewegung setzen. Also diese hier und die feindliche Basis, wir können es tatsächlich ändern, weil wir nicht wirklich erst jetzt die Bewegung und den Leerlauf haben. Wir haben auch den Treffer-Effekt. Und lassen Sie es uns einfach umwandeln wie der Spieler, der Spieler, den wir haben diesen, unreife Bewegungen Status. Lassen Sie uns es auch in einen Bewegungszustand umwandeln. Ich denke, das ist eher so, dass es uns viel besser dienen wird als ein boolescher Wert. So wie wir das noch einmal machen, lassen Sie uns einfach das Hier und die Aufzählung verwenden. Lass uns das einfach benutzen. Wir müssen nicht wirklich ein neues machen. Also drinnen hier, weil der Spieler auch eine Hit-Animation haben wird , werden wir das nicht für den Spieler hier verwenden. Wir werden nur einen Effekt erzielen, aber Sie können einfach entweder eine neue Aufzählung für den Feind machen. Ich werde das eigentlich nur benutzen weil wir meistens dasselbe verwenden. Ich füge diese Treffer hinzu. Und ich werde tatsächlich auch den Tod hinzufügen, aber das werden wir gerade nicht programmieren, aber ich füge ihn gerade hinzu. Und was wir jetzt tun wollen, gehen wir jetzt zurück zur feindlichen Basis. Also im Feind, der feindlichen Basis, Lasst uns jetzt alles retten und fügen wir diesen Bewegungszustand hier hinzu. Nennen Sie es also Bewegungszustand. Lassen Sie uns es in Essen oder Aufzählung ändern, was als E Bewegungsstatus bezeichnet wird, der hier ausgewählt ist. Und jetzt ziehen wir es raus. Und das ist es, was wir hier setzen wollen , anstatt uns zu bewegen. Und jetzt brauchen wir anstelle eines Booleschen, lasst es uns löschen. Wir brauchen hier eine Aufzählung, die Bewegungsstaat genannt wird. Also das Gleiche. Und lassen Sie uns den Namen in den Bewegungsstatus ändern. Verbinden wir es hier. Whoops, ich habe es nicht so getroffen. Und jetzt noch einmal, denken Sie daran, dass dies ein Vertreter benachrichtigt, also müssen wir es zu einer Wiederholungsbenachrichtigung machen. Und hier drüben trennen wir dies, indem wir Alt gedrückt halten und klicken. Jetzt kommt dieser vom Blueprint-Interface, also müssen wir den Boolean hier ändern. Wir können einfach darauf klicken und löschen. Gehen wir also hier zum Blueprint-Interface, und das ist für den Feind. Und hier setze den Status Bewegungen, ich werde es hier löschen und einen neuen namens Auswählen des Aufzählungsbewegungsstatus erstellen und es Bewegungszustände nennen. Jetzt wird es wieder aus irgendeinem Grund ausfallen. Es ist manchmal ein bisschen nervig , dass das ausfällt. Manchmal kann man den Motor und die Muttern schließen. Und manchmal kann man das hier einfach löschen. Ich lösche es einfach. Ja. Klicken Sie nun auf Hinzufügen. Mal sehen, ob das jetzt funktioniert. Das funktioniert jetzt, ich weiß nicht warum es das macht. Nehmen wir manchmal an, setzen Sie Bewegung, Daten, Kompilieren und Speichern ein. Gehen wir zurück zur Spielerbasis, eigentlich nicht zur Spielerbasis, zur gegnerischen Basis. Also statt ein hier, die Bewegung, Lassen Sie uns kompilieren und speichern, um sicherzustellen , dass alles korrekt ist. Verbinden wir es jetzt. Okay, also setze die Bewegungsdaten korrekt. Jetzt gehen wir das durch, Es geht durch den Server, und jetzt wird es diese OnReceive-Funktion aufrufen. Nehmen wir also diesen bewegenden Zustand und sagen, dass Switch Autorität hat. Genau wie das, was wir bisher gemacht haben , das Autorität hat. Wenn du es bist, lass uns sie ausschalten, damit wir nicht wirklich alle haben. Die Sache ist, dass wir nur den Leerlauf haben. Nehmen wir das hier hell und sagen Set Flip Book. Jetzt haben wir nur das Idol und lassen mich das ein paar Mal kopieren. Hier. Wir haben nur drei Dinge. Wir haben den Leerlauf, wir haben, sie rennen, also bewegen sich. Und wir haben den Treffer-Effekt. Wir werden später die Tiefe haben. Also fürs Laufen benutze ich einfach den Lauf richtig. Also benutze entweder den Lauf links oder rechts, das spielt keine Rolle. Ich benutze den Lauf genau hier. Für den Kopf. Ich benutze das hier. Also lasst uns diese Animationen einstellen. Nehmen wir unsere Tierinformationen und brechen sie hier auf. Also brech. Und lass es uns hier nehmen. Jetzt im Leerlauf stecke ich es hier ein. Und für den Umzug stecke ich es hier ein. Und für die Hits Animation, hier auf den Tod einsteckt, werden wir auch damit warten. Klicken Sie später darauf, blenden Sie nicht verbundene Pins aus, ziehen Sie es zurück und kompilieren und speichern Sie. Und jetzt haben wir alles, richtig. nun sicher, dass Sie, wenn Sie dies vergessen haben, Stellen Sie nun sicher, dass Sie, wenn Sie dies vergessen haben, achten Sie darauf, in jeden Feind zu gehen und stellen Sie sicher, dass Sie in den Klassenvorgaben alle diese Animationen hier festgelegt haben , sonst wird es nicht funktionieren. Okay? Jetzt gehen wir zurück zur Basis. Und hier, anstatt uns zu bewegen, lasst uns Ihre öffnen, wir müssen hier tatsächlich etwas ändern. Also geh in der feindlichen Basis jetzt zu deinem Feind. Und drinnen von hier. Und definierte zufällige Aufgaben. Denken Sie daran, dass Sie diesen Bewegungszustand auf „Bewegen“ setzen und sich nicht bewegen. Aber im Moment ist es eigentlich kein boolescher Wert mehr. Es ist der Bewegungszustand. Also halte ich die Kontrolle und klicke hier, um dies zu entfernen. Und das werden wir in R1 umwandeln, oder? Denken Sie daran, die feindliche Basis zu hören Es ist das Laufrecht , das wir für die Bewegung im Verhaltensbaum in dieser Aufgabe verwenden , die wir hierher bewegen werden . Denken Sie daran, dass im Verhaltensbaum auch diesen Bereich hatte , in dem wir die Bewegung boolean auf falsch gesetzt haben. Anstatt falsch zu sein, können Sie es also auf den Leerlauf setzen und sehen , dass es bereits selbst repariert ist. Gehen wir also zurück zum Verhaltensbaum. Jetzt benenne ich dies um, anstatt Bewegung Boolean zu setzen. Lassen Sie mich es einfach umbenennen, zu meinen Aufgaben zurückkehren und dies in den Status „ Bewegungen einstellen“ umbenennen, da es nicht mehr wirklich ein boolescher Wert ist. Es ist schön, so organisiert zu bleiben. Jetzt ist alles in Ordnung. Jetzt gehen wir zurück zur feindlichen Basis. Jetzt haben wir alles in einen Bewegungszustand verwandelt. Hier möchte ich die Hit-Animation spielen, sobald ich als Feind Schaden erhalte. Also werde ich diesen kleinen Weg so ziehen. Ich werde sagen, Setze Bewegungszustände. Ich nenne das vom Feind. Denken Sie daran, dass es nicht vom Spieler ist, sondern vom Feind. Also wähle es hier aus und verbinde es und verbinde es hier. Und ich werde meinen Treffer-Effekt so spielen . Okay? Also klicke auf Play, um es zu testen und klicke auf meinen Spieler. Und ich glaube, ich kann es gerade nicht testen. Wenn ich also auf Treffer klicke, siehst du, dass es trifft und es ist alles wie ein Bug. Aber manchmal stoppt es die Animation, weil sie sich tatsächlich noch in deinem Verhaltensbaum befindet. Aber du siehst, dass es funktioniert. Testen wir es also für den Spieler, Lass uns für den Kunden. Hier können Sie also für den Client die Änderung sehen, die der Player vom Server vorgenommen hat. Für den Kunden funktioniert es auch. Wenn ich mir den Server anschaue, kann ich sehen, dass diese Änderung von der Kline aus vorgenommen wurde. Lassen Sie mich nur sicherstellen, dass ich keine Bugs habe, ändern Sie es, um als Kunden zu spielen. Beide sind also Kunden. Das ist ein Klein, das ist ein Kunde. Und lass mich diesen Spieler auswählen, Omega kleiner. Es ist immer schön, wenn Sie zwei Bildschirme haben, da Sie einen Client auf einen und den anderen hier platzieren können. Weil ich es nicht wirklich mag kann ich das hier für diesen Kurs nicht machen. Ich muss alles auf einem Bildschirm haben. Wenn Sie also auf diesen hier klicken, sehen Sie die Änderungen, die es anwenden , können beide Clients die Änderung sehen. Okay. Das ist also richtig. Alles funktioniert. Wir haben keine Kiste. Lass es mich hier für das Schwein testen. Und du kannst sehen, dass das Schwein auch für das Schwein arbeitet. Das Problem ist, dass sie sich gerade bewegen. Lasst uns das einfach sehr, sehr schnell machen und wir können tatsächlich eine schnelle Lösung machen. Also hier, wenn Sie angreifen und wenn Sie getroffen werden, nehmen wir diese Bewegungskomponente und sagen den Bewegungsmodus einstellen, genau wie das, was wir mit unserer Leiter gemacht haben. Stellen Sie also den Bewegungsmodus ein. Denken Sie daran, dass wir es für unseren Brief auf Fliegen gesetzt haben. Aber dafür setzen wir es einfach auf „None“ weil wir uns überhaupt nicht bewegen wollen. Lassen Sie uns kompilieren und speichern. Und hier als dieser Kunde, lass mich zu den Schweinen gehen. Es ist viel einfacher zu sehen, dass man diesen Feind trifft. Und du kannst jetzt sehen, wenn ich es treffe, es bewegt sich nicht mehr. Okay. Nett. Und der Grund, warum es sich plötzlich bewegt, ist, dass es immer noch unseren Verhaltensbaum läuft. Und gerade jetzt ist der Bewegungsmodus auf „None“ gesetzt, also steckt er hier fest. Das funktioniert also richtig und wir müssen noch etwas Code machen, damit es reibungsloser aussieht. Jetzt, da die Animation funktioniert, wir das näher. Das nächste ist, dass wir den Verhaltensbaum immer dann stoppen wollen , wenn der Feind Kopf ist weil wir nicht herumlaufen wollen. 73. Den Verhaltensbaum stoppen: Okay, also um den Verhaltensbaum am Spielen zu hindern. also daran, dass dies der Verhaltensbaum ist. Es spielt die gesamte Animation immer noch ab, wenn Sie getroffen werden. Aber wir wollen diese Animation beenden. Der Grund, warum ich das tue, ist, nachdem wir den Feind in Maple Story getroffen haben, wird der Feind Sie ständig verfolgen. Wenn ich also hier auf Play klicke und diese Schnecke hier treffe, wird mich diese Schnecke jagen. Es wird nicht so gehen und es wird nicht so gehen. Es wird tatsächlich nach dem Spieler suchen und es wird mich finden und mich jagen. Das ist es, was wir versuchen zu tun. Bevor wir das tun, stoppen wir den Verhaltensbaum damit wir dies nicht mehr ausführen wollen , wenn die Feinde zuschlagen. Hier. Bevor wir das tun, machen wir das Sprite und wir wollen die Logik beenden wenn sie diese Hit-Animation beendet hat. Also, genau wie zuvor mit der Angriffsanimation, können wir für die Hit-Animation das Sprite nehmen und Flipbook sagen. Wir können die Länge nehmen. Wie lange läuft dieses Flip Book? Wir können einen Delay-Knoten machen. Verzögern Sie es mit wie lang diese Hit-Animation ist. Und danach nehme ich diese Bewegungskomponente und sage sofort die Bewegung stoppen. Also hör auf alles, was du so machst. Und danach willst du den Verhaltensbaum stoppen. Im Moment stoppt dieser nur die Bewegung des Feindes, aber Sie möchten den Verhaltensbaum auch vollständig stoppen. Und dies geschieht, indem man den Controller des Feindes bekommt. Denken Sie also daran, dass Sie im Multiplayer einfach „Controller“ sagen können, denn im Moment sind wir im Feind. Also kriegen wir den Controller für diesen Feind. Wir haben zugeschlagen. Und dann werden wir sagen , Gets NME ref. Denken Sie daran, dass wir vor einer Weile feindliche Referenz bekommen haben. Wenn Sie sich nicht erinnern, versuchen Sie, in die Schnittstelle zu gehen und schauen Sie sich diese eine feindliche Basis an. Dies ist der Feind des Schiedsrichters, den du gemacht hast, dem du hörst, dass er auch eine Selbstreferenz So kannst du hier auf den Feind verweisen. Mit diesem Controller , den Sie haben. Jetzt können Sie davon ziehen und Sie wollen bekommen, jetzt haben Sie, Sie haben den Controller, was Sie angeben möchten, genau wie bevor wir sagten, get feind ref. Nun, dieser Controller, Sie sprechen speziell über diesen KI-Controller. Wir müssen also angeben , dass wir speziell über diesen KI-Controller sprechen . Um dies zu tun, denken Sie daran, dass ich einfach auch Besetzung sagen könnte, denn Casting beziehen Sie sich einen Entwurf wie diesen. Aber für den KI-Controller ist es eine große blaue Blaupause, genau wie die Spielerbasis und so weiter. Also erstelle ich eine eigene Schnittstelle. Also klicke hier. Und denken Sie in den Blueprints daran, dass Sie hier ein Blueprint-Interface erstellen können. Nennen wir das hier. Nennen wir es KI-Controller. Anstelle des Spieler-Controllers ist jetzt ein KI-Controller. Und hier sagen wir uns den Controller holen oder nennen wir es wirklich Ai bekommen. Prolog ref. Lassen Sie uns dafür eine Ausgabe machen, und die Ausgabe ist AIC-Feind. Dies rufen wir an den API-Controller auf. Nennen wir es KI-Controller. Und jetzt haben wir diese Variable. Denken Sie nun daran, hier in den Feind zu gehen und in den KI-Controller zu gehen. Und denken Sie daran, zu den Klasseneinstellungen zu gehen und diese KI-Controller-Blueprint-Schnittstelle hinzuzufügen . Hier kompilieren Sie Save. Jetzt können Sie die Funktion sehen. Und hier werden wir die Selbstreferenz machen. Genau wie das, was wir bisher gemacht haben, nichts Neues. Jetzt, da wir das hinzugefügt haben. Jetzt können wir einen Verweis auf diesen KI-Controller machen, ohne zu kosten. Wenn ich also zur feindlichen Basis gehe, kann ich jetzt sagen, hol aae, kontrolliere unsere Referenz. Okay, nun, als Referenz der Luftregler , um einen Verhaltensbaum zu stoppen , müssen Sie nur davon nehmen und die Gehirnkomponente dieser KI nehmen. Also bekomme die Gehirnkomponente und sage: Stoppt Logik. Jetzt wird es den Verhaltensbaum stoppen. Was ist der Grund? Ich sage nur Treffer für den Kopf des Feindes. Für uns spielt es hier keine Rolle. Also der Kopf des Feindes und es wird diesen KI-Controller aufhalten. Okay, wenn ich also auf Jetzt spielen klicke und ich gehe zum Spieler und treffe diesen Feind. Es wird diesen Feind treffen und du kannst sehen, dass er vollständig stoppt. Es wird sich nie bewegen, weil ich den Verhaltensbaum tatsächlich gestoppt habe . Jetzt kannst du es danach bewegen, nachdem wir es getroffen haben. Es ist also nicht vollständig statisch. Sie können diesen Bewegungsmodus einfach kopieren. Ich gehe zurück und füge es ein. Jetzt wird es wieder von keinem zum Laufen gehen. Jetzt werden wir also wieder laufen, nachdem du getroffen wurdest. Und denkt daran, dass wir diese Verzögerung festgelegt haben. So lange Ihre Animation für die Header-Animation ist, Sie werden sie verzögern. Denken Sie daran, ein einfacher Fehler, den ich mir vorstellen kann ist hier und die Vermögensfeinde. So zum Beispiel für den Schneckenhit-Effekt. Denken Sie noch einmal daran, ich sagte vorher, dass dies sehr wichtig sei , die Frames pro Sekunde für diesen Wärmeeffekt zu ändern , obwohl es ein Frame ist. Denn wenn Sie es wie Standard auf 15 einstellen, wird diese Verzögerung hier sehr, sehr klein sein , also werden wir diese Animation hier nicht einmal bemerken. Also schicke es an eins, was 1 Sekunde bedeutet. Es ist also ein Frame pro Sekunde. Und es wird 1 Sekunde warten, und dann wird es das spielen. Okay, also setzen wir es auf laufen, jetzt können wir spielen. Wann immer Sie es treffen, wird es die Kopfanimation abspielen und dann wird es in den Gehmodus wechseln . Aber im Moment ist es im Gehmodus, aber wir haben nicht wirklich angegeben, dass es tatsächlich wieder laufen soll. Lassen Sie uns das also machen, bevor wir dieses Video beenden. Und denken Sie daran, wir können einfach die eingestellte Bewegungslast oder nicht die Motivzustände verwenden. Und hier in der feindlichen Basis, gesetzt, Bewegungen Zustand. Und lasst uns einstellen, dass es richtig läuft, denn wir wollen wieder laufen. Okay, das sollte es also für dieses Video sein. Also lasst uns einfach spielen und sehen, ob es funktioniert. Jetzt habe ich den Feind und er wird in die laufende Ladung gehen. Jetzt wird es gerade stecken bleiben, weil wir ihm nicht gesagt haben, wohin wir gehen sollen. Und damit werden wir in der nächsten Lektion arbeiten, in der wir dem Feind sagen, dass Sie die Ebene tatsächlich verfolgen werden. 74. Feind auf der Suche nach dem Spieler: Jetzt wollen wir, dass der Feind den Spieler jagt. Wenn der Feind also vom Spieler getroffen wird, wird er rübergehen und den Spieler jagen, der ihn getroffen hat. Also lasst uns zuerst alles retten. Lassen Sie mich das alles tatsächlich schließen, weil es ein bisschen zu viel wird. Fangen wir hier von Anfang an. Also hier im Feind möchte ich, dass du den gegnerischen Controller öffnest. Und hier in den Komponenten klicken Sie hier und schreiben Sie Sensor. Sie können also sehen, dass wir etwas haben, das zum Erfassen aufgerufen wird. Es wird also unseren Spieler spüren. Das klingt nach, das klingt wie ein Skynet. Es wird jetzt ein bisschen gruselig. Also lassen wir die Pons spüren und es wird die Punkte spüren. Also der Spieler, und das einzige, was ich hier ändern werde, kannst du sehen, was er tun kann. Zum Beispiel kann es Geräusche hören. Wenn du also wie ein schleichendes Spiel wie Metal Gear Solid machst, kannst du diese warme Empfindung ein schleichendes Spiel wie Metal Gear Solid machst, an die Sonne haben, Geräusche senden, wenn du an die Wand klopfst und so weiter. So ziemlich cooles Zeug. Aber das einzige, was wir hier im peripheren Blickwinkel ändern werden, werde ich es auf 180 setzen, damit es 360 aussehen kann. Lassen Sie uns kompilieren und speichern. Das ist das einzige, was wir tun mussten . Jetzt schließen wir es. Lasst uns die feindliche Basis öffnen. Also hier in der feindlichen Basis, wenn der Feind beschädigt wird. All das haben wir in den vorherigen Lektionen gemacht. Also jetzt bewegt sich der Punkt wieder. Was wir jetzt tun wollen, ist, dass wir den Spieler jagen wollen. Wenn du also anfängst, dich zu bewegen, willst du den Spieler jagen. Die Sache, die wir benutzen werden , heißt Ai move to the one to the one one to the one one one Ai ist zu sich gezogen. Also wird es zum Spieler wechseln. Jetzt wird es dir hier den Punkt sagen, wer sich bewegt. Es ist nur Selbst, es ist der Feind. Also werde ich davon abziehen und mich selbst sagen. Das ist der Teich. Okay, worauf bewegt es sich? Es wird zum Spieler wechseln . Aber wir haben hier nicht wirklich eine Referenz für den Spieler. Hier sehen Sie angezettelt von, und das ist es, was ich den Schaden angerichtet habe, und das ist der Controller. Das ist also eigentlich der Spieler-Controller. Wir können es von hier aus in der Fahrt benutzen. Klicken Sie mit der rechten Maustaste darauf und sagen Sie fördert eine Variable. Ich nenne es Player-Controller, der hier verbunden ist. Und denken Sie daran , diese Informationen zu replizieren , damit der Client dies auch sehen kann. Jetzt haben wir die Plake-Kontrolllinie. Daraus können wir jetzt den Teich holen. Nehmen Sie also den Spieler-Controller, bleiben Sie und kontrollieren Sie weiter. Das ist es, was Sie im Mehrspielermodus tun können. Sie haben also den Controller und Sie können ihn von diesem Player-Controller aus steuern. Jetzt haben wir den Spieler, und jetzt können Sie sehen, wie Sie den Standort des Schauspielers bekommen. Jetzt haben wir den Standort des Spielers und er wird zu diesem Ziel jagen. Es geht also auf den Standort des Spielers hin. Okay, wem jagt es? Wer ist das Ziel? Das Ziel ist der Spieler. Es ist also einfach nur dieses. Dies ist der Player Pawn. Also werden wir es einfach hier verbinden. Und wie ist der akzeptable Radius? Wenn es diesen Radius erreicht hat, wird er aufhören, weil es dir gelungen ist, den Spieler zu jagen. Ich senke es nur ein bisschen ab, vielleicht zwei Einheiten. Also nur ein bisschen niedriger als zuvor. Okay, ich verlege das hier rüber. Und um die Dinge ein bisschen mehr zu organisieren, ist dieses vielleicht hier oben und doppelklicken Sie darauf damit es sichtbarer ist, so etwas. Okay, also sehr, sehr, sehr, sehr leicht zu verstehen. Also geht es, also geht dieser Teich in Richtung des Ziels der Spieler, dem Ort. Und es jagt diesen Spieler her. Okay, also werde ich Erfolg haben, wir müssen etwas tun. Was sollte also passieren, wenn du den Spieler erreichst? Und das ist etwas , das wir später verbessern werden. Also nicht wirklich im Moment. Versuchen wir es also auszuprobieren. Also lass uns mal sehen, Lass uns spielen. Und jetzt können wir sehen, ob ich zum Beispiel diesen Feind und ich rennen kann. Du kannst jetzt sehen, dass es mich tatsächlich erreicht hat. Und wenn ich das noch einmal mache, lass mich tatsächlich viele dieser Feinde entfernen , denn jetzt, wo wir mit dem Feind arbeiten, wirst du es sehen. Whoops, ich lösche das Ganze. Sie werden viel klarer sehen, was ich eigentlich mit nur einem Feind arbeite. Also lösche ich all diese Feinde und füge sie später hinzu. Vielleicht brauche ich nur einen hier unten , nur um das zu testen, beide raus. Und ich kann auf Play klicken. Testen wir es jetzt. Zum Beispiel, auf diesem großen werde ich es jetzt treffen. Und es wird mich für immer jagen, bis es mich erreicht. Also sehr cooles Zeug. Jetzt wird es zu mir gehen und wenn es sich zu mir bewegt, wird still stehen, um mir tatsächlich Schaden zuzufügen. Jetzt macht es nichts anderes, weil wir ihm bei Erfolg nicht gesagt haben , was es tun sollte, wenn es mich erreicht. Jetzt könnte ich vielleicht einfach davon abziehen und einfach ewig weiterschleifen und vielleicht wird es mir einen Fehler geben. Versuchen wir hier zu spielen. So erfolglos, dass es mich einfach weiter schmecken kann. Also wenn ich diese Schnecke hier treffe und sie jagt mich und es trifft mich. Und wenn ich jetzt verschwinde, siehst du, dass es mich jetzt für immer verfolgt. Jetzt ist es mein Haustier. Es ist nicht mein Feind. Ich habe eine Schnecke als Haustier. Ich kann das Schwein auch so haben, wie ich es hatte. Es läuft, sie werden mir jetzt für immer folgen. Okay? Wie du dir das vorstellen kannst, kannst du auch ein Haustiersystem erstellen in dem du einfach dem Spieler folgst. So können Sie all diese Tools sehen, die nützlich sind, um diese Tools zu kennen , damit wir sie so verwenden können, wie Sie es möchten. Okay, ziemlich cooles Zeug. Ich lösche das. Was ich jetzt hier machen möchte, möchte ich das in der nächsten Lektion tun, in der wir verbessern wie der Feind um ihn herumläuft , wenn er den Spieler erreicht. 75. Verbessere den Feind auf der Jagd des Spielers: Okay, also möchte ich diesen Code ein wenig verbessern. Wann immer es sich zum Spieler bewegt, möchte ich nicht weiter zu diesem Spieler wechseln und den Spieler weiter verfolgen. Ich möchte, dass sich die Bewegung ein bisschen zufällig anfühlt, obwohl dies nicht der Fall ist. Was ich möchte, dass du hier auf Erfolg machst, möchte ich etwas namens Move Tool verwenden. Und wählen wir diesen aus, der sich bewegt an Ort oder Schauspieler nennt . Okay, jetzt geht es zum Spieler, und wann immer er erreicht, wird der Spieler diese Funktion ausführen , die man zum Standort oder Schauspieler bewegen nennt. Und ich werde diesen benutzen, Dislokation hier. Also lasst uns diesen Ort aufschlüsseln. Minute Pause, Machen wir einen Vektor. Und das erlaubt uns, X, Y und Z zu sehen. Und jetzt, hier im Controller, braucht es die KI-Controller, wie Sie sehen können, wenn Sie die Maus darüber halten. Also können wir nicht sagen, bekomme den Controller und füge ihn hier hinzu. Es wird es nicht akzeptieren. Es braucht speziell den KI-Controller. Ich sage KI-Controller. Und Sie können sehen, dass wir diesen namens „Get AI Controller“ haben . Und wer ist der kontrollierte Schauspieler? Denken Sie daran, dass wir uns in der feindlichen Basis befinden, also können wir uns einfach so selbst sagen. Also wie ist der Standort hier? Wen ziehe ich auch um? Jetzt, um das Ziel zu erreichen, müssen wir uns nicht wirklich an irgendetwas anschließen , weil es heißt, zum Standort oder zum Schauspieler zu wechseln. Und ich benutze einfach den Standort. Was ist der Ort, an dem wir auch umziehen. Aber ich will es tun ist hier, ich kann es dir tatsächlich zeigen. Wenn der Spieler also hier steht, lass mich zum Beispiel einfach Tsarina nehmen, damit wir ihn viel besser visualisieren können. Serena steht also hier. Wenn der Feind den Spieler erreicht, möchte ich, dass der Feind 100 oder ähnliches Einheiten in diese Richtung bewegt . Und dann wird der Feind zu diesem Spieler zurückkehren. Und wenn du diesen Spieler wieder erreichst, möchte ich 100 in diese Richtung bewegen. So bewegt es sich also weiter. Denn im Moment bewegt es sich einfach zum Spieler und es ist einfach so geblieben. Aber ich möchte, dass es sich hier ständig so um den Spieler bewegt , also jagt es den Spieler weiter, aber es hat ein bisschen mehr Bewegung, als nur hier beim Spieler festzustecken. Wenn wir also hier zur feindlichen Basis zurückkehren, also was ich überprüfen werde, wann ich zuerst überprüfen muss, ob dieser Feind von dieser Seite kommt, müssen Sie auf diese Seite gehen. Wenn der Feind jedoch von dieser Seite kommt, müssen Sie auf diese Seite gehen. Also muss ich überprüfen welcher Seite der Feind kommt. Also muss ich zuerst den Spieler nehmen. Ich muss wissen, wo der Spieler ist. können wir hier machen. Nimm das nochmal. Eigentlich kopiere ich den Code hier. Also bekommen wir den Spieler die Kontrolle darüber, die Kontrollpunkte zu bekommen. Also der Spieler, und wir bekommen den Standort des Spielers. Ich werde das brechen, denn das einzige, woran ich interessiert bin , ist dieser rote Drehpunkt, was die X-Achse bedeutet. Ich interessiere mich also nur für die X-Achse. Das Z oder das Y sind mir egal. Also lasst uns wieder hierher gehen. Ich interessiere mich nur für die X-Achse. Jetzt habe ich den Standort des Spielers. Ich brauche auch den Standort des Feindes. Und ich kann einfach sagen, hol dir Standort des Schauspielers, weil wir bereits im Feind sind, also das Ziel selbst. Und lass mich das auch brechen. Breche diesen Vektor, damit ich X, Y und Z sehen kann. Also werde ich fragen, ist das x, also sind es die Spieler, x. Ist das weniger als der Ort dieses Feindes? Und was bedeutet das ist der Feind, der hier stehende Feind? Es wird fragen, denken Sie daran, hier, wenn Sie sich das x anschauen, wenn ich in diese Richtung gehe, wird es um 0 sein. Also wird es hier ins Minus kommen. Wenn ich in diese Richtung gehe, siehst du, dass es sinkt. Also bin ich, ich frage gerade, ist der Standort des Spielers, der x-Standort? Ist es weniger als die Feinde? Und gerade jetzt ist es, denn gerade jetzt steht der Spieler, der hier stehende Feind, dieses X, man kann sehen, dass das x hier für den Spieler weniger ist als das für den Feind. Es bedeutet, dass der Feind tatsächlich aus dieser Richtung kommt , wenn das stimmt. Was sollte also passieren, wenn das Atom aus dieser Richtung kommt? Und das müssen wir gerade hier angeben. Hier können wir also einen Zweig machen. Und lasst uns das ein bisschen wegziehen. Also können wir einen Zweig machen und sehen, ob das stimmt. Wenn das stimmt, wollen wir diesen Feind auch bewegen. Wie minus fünfhundert, fünfhundert minus 100 Einheiten. Denn denken Sie daran, wann Sie den Spieler erreichen und wenn wir sagen, dass Sie den Standort verschieben , sind Sie minus 100, was bedeutet, dass Sie minus 100 im X erreichen werden, was bedeutet, dass der Charakter tatsächlich wird, oder der Spieler beim Feind bewegt sich 100 an diesen Ort, weil Sie hier einen Minuspunkt haben. Das ist es, was wir versuchen zu tun. Also sagen wir hier, wir sagen, dann nimm das stimmt, nimm dann die Feinde x Ort und subtrahiere 100 davon. Und jetzt ist dies der neue x-Standort. Y und Z, wir interessieren uns nicht wirklich für sie, also werden wir sie einfach so anschließen, wie sie sind. Was wir jetzt sagen, ist, dass die Spieler jetzt der x-Standort des Spielers sind ? Ist es weniger als die Feinde? Das bedeutet, dass der Feind hier steht und der Spieler hier steht. Wenn ja, das stimmt, dann beweg diesen Feind minus, was immer das X gerade ist, was hier ist, minus 100 Einheiten. Das ist unser neuer Zielstandort, was bedeutet, dass Ihre neuen Zielstandorte hier drüben sind. Der Feind wird also von hier nach hier ziehen. Okay? Also sehr, sehr einfach, hier zu tun. Und die andere Sache ist, wenn es falsch ist, müssen wir das nehmen und sagen, dann werden Sie 100 plus 100 Einheiten bewegen. Denn denken Sie daran, wenn es falsch ist, bedeutet das, dass der Feind hier steht. Das heißt, wenn Sie den Spieler erreichen, möchten Sie, dass Ihr neues Ziel plus 100 und x ist, weil Sie es auf diese Weise bewegen möchten. Plus 100 macht es 800 und etwas hier drüben, okay? Wenn du also in die andere Richtung stehst, willst du plus 100 sein. Das ist also dein neues Ziel hier. Also wenn ich diese einfach hierher ziehe, also das x, das y und z, ist uns das egal. Es ist nur das X, das wir anpassen. Und das wird unser neues Ziel sein. Aber anstatt diesen Code einzufügen, kopieren , wenn Sie dies sehen, wie Sie sehen, einfach Einfügecode und sie sehen 100% gleich aus, bis auf einen Wert. Sie können Ihren Code tatsächlich ein bisschen besser machen. Sie können etwas tun, das als Select-Load bezeichnet wird. Was Sie hier tun können, ist, anstatt diesen Zweig zu machen und so zu tun, können Sie sehen, dass dies der gleiche Code ist und es tatsächlich eine schlechte Kodierungspraxis ist tatsächlich eine schlechte Kodierungspraxis , weil Sie nur Code kopieren was fast das Gleiche ist. Also kann es das ein bisschen besser machen. Anstatt hier, kannst du es tun, lass mich das trennen. Und stattdessen addieren oder subtrahieren wir jetzt entweder 100 davon. Wir können daraus ableiten und wählen und diese namens Select Load verwenden. Und jetzt dieser boolesche Wert, verbinden wir es stattdessen mit hier. Jetzt wird es sagen, dass es der Standort des Spielers ist, dieser x-Ort ist weniger als der Standort des Feindes. Wenn das stimmt, müssen wir erneut subtrahieren, wenn das stimmt. Anstatt diese nur zu tun, können wir eigentlich einfach Minus sagen, ich sage eins minus 125. Ich glaube, ich habe mit dieser Nummer getestet. Ich glaube, das ist der beste. Und wenn es nicht stimmt, was bedeutet, dass der Feind hier steht, wollen wir 125 hinzufügen. Sie können also hier sehen, dass wir nicht wirklich all diese Kopie einfügen müssen. Jetzt wird es automatisch für uns erledigt , damit wir den gleichen Code nicht kopieren und einfügen müssen . Es wird wählen, Nehmen, schauen Sie sich das an, wenn es wahr oder falsch ist. Und es wird diese Zahl machen, als würde sie minus oder plus diese Zahl machen. Und wir können nicht wirklich hinzufügen, als ob wir es hier nicht einfach direkt verbinden können , weil es auf diese Zahlen gesetzt wird. Was wir tun müssen, ist diesen x-Wert zu nehmen , und wir müssen diese Zahl darüber hinzufügen. Also hier müssen wir diese Zahl hinzufügen. Nehmen wir zum Beispiel an, das x ist derzeit 600 für den Feind. Dann geht es, wenn das hier stimmt, wird es 600 plus minus sagen, was nur minus 600 minus 125 bedeutet. Und es wird das als neuen x-Standort festlegen. Wenn der Feind hier ist, wenn das falsch wird, so war das wahr und das war falsch. Es sagt 600 plus 127, dann wird es an diesen Ort ziehen. Okay, das ist also viel besser als das Einfügen von Code. Wenn Sie also sehen, dass Sie Code kopieren und einfügen, gibt es wahrscheinlich einen besseren Weg, dies zu tun. Wieder kannst du gerne zu meinem Discord gehen. Ich bin bereit, dir bei all diesen Dingen zu helfen. Es ist schön, all diese guten, guten Praxis-Dinge zu haben , wenn Sie programmieren. Du magst es also nicht, also ist es gut, so sauber zu bleiben. Okay, damit wir diesen Zweig tatsächlich entfernen können. Wir brauchen es nicht mehr wirklich. Testen wir es also tatsächlich. Jetzt müssen wir also tatsächlich etwas tun denn wenn Sie an diesen Ort ziehen, müssen wir die Bewegung hier wiederholen und fertig werden. Ziehen wir diesen Stift und wiederholen Sie das einfach. Ich bin hierher gezogen. Ich doppelklicke auf diesen Pin , um Umleitungsknoten zu erstellen. Lassen Sie es tatsächlich etwas sauberer aussehen , damit es nicht verwirrend so etwas auszusehen. Jetzt kompilieren und speichern wir und lasst uns spielen und sehen, was passiert, wenn wir etwas vergessen haben. Nochmal, ich gehe hier hin. Und lass mich tatsächlich den Spieler löschen, den Spieler hier, wieder spielen. So als würde Luke den Nagel treffen. Es wird sich zu mir bewegen. Wenn es mich erreicht, wird es 125 an diesen Ort bringen , wenn es mich wieder erreicht, 125. Sie können sehen, dass dies die Bewegung ist, die wir hinzugefügt haben , und das ist Phi, ziehen Sie sie hier wieder nach oben. Wenn es mich erreicht, wird es entweder minus 125 zu den aktuellen X-Standort-Tags plus 125 verschoben . Es wird an diesen Ort gehen , wenn der Film fertig ist, es wird diese Bewegung wiederholen, was bedeutet, wenn er steht, wenn ich zum Beispiel zum Spiel zurückkehre, wann Wenn du hier stehst, wird es mich dann wieder jagen. Und wenn es mich dann wieder erreicht, wird es diesen Code noch einmal wiederholen. Es läuft also ständig in dieser kreisförmigen Bewegung. Und ich denke, das ist ein bisschen reibungsloser, um die Bewegung so zu machen, denn jetzt, wenn ich weggehe , wird es mich wieder jagen. Also funktioniert alles richtig. Verfolge mich jetzt, wenn es mich erreicht, es wird 125 in diese Richtung gehen. 125 in diese Richtung. 125 in diese Richtung geht weiter und jagt mich wieder, wenn ich weggehe. So sehr coole Bewegung und das können wir hier mit dem Schwein versuchen . Sie können sehen, wie sich das Schwein bewegt wie die Animation des Schweines. Eigentlich funktioniert es gut. Okay. Also wird es mich jetzt jagen. Und sie stehen mir immer wieder gegenüber und jetzt gehen sie 125 in diese Richtung. Und es gibt, als gäbe es einen kleinen Bug mit diesem, wir müssen möglicherweise die Rampenkollision hier beheben. Es ist wahrscheinlich eine Kollision mit der Statik hier. Was Sie also hier in der Basis tun können, können Sie auf die Kollision klicken, können tatsächlich alles ignorieren außer dass der Po1 und der Kunde Spieler ist. Bewegen Sie sie also einfach von der Überlappung, weil wir uns hier für diese Kollision hier nicht wirklich mit irgendetwas überlappen müssen mit irgendetwas überlappen müssen. Und für diese Kapsel. Wir können das nicht wirklich tun, weil es jetzt läuft, sie werden vom Boden fallen. Wahrscheinlich. Du kannst sehen, dass es keine Feinde gibt, weil sie durch den Boden fallen. musst du also in der Kapsel haben. Also klicke jetzt auf das Spiel, lass uns sehen, das ist die Schnecke, das Schwein hier. Okay, und lassen Sie uns diesen Ort verschieben. Ups, ich hab es nicht getroffen. Okay, ich glaube, es funktioniert jetzt, also hören sie jetzt nicht hier auf der Rampe ab. Okay, so sehr cool. Jetzt haben wir eine sehr einfache, sehr einfache KI-Bewegung. Und es sieht sehr cool aus, sieht auch zufällig aus, obwohl es ein sehr, sehr einfacher Code ist. Es sieht also auch zufällig aus, obwohl es nicht mit Zufall zusammenhängt. So sehr coole Sachen, die wir hier gemacht haben. Und ja, das war's für dieses Video. Ich hoffe, du hattest Spaß. Ich hatte Spaß beim Erstellen und lass uns zum nächsten übergehen. 76. Feind beim Anwenden von Schäden: Okay, jetzt sind wir bereit, den Feind den Schaden anrichten zu lassen, denn bisher ist eigentlich nur der Spieler, der hier diesen Schaden anrichtet. Also richtet nur der Spieler den Schaden an. Wir brauchen den Feind, um dem Spieler ebenfalls Schaden zuzufügen. Und um diesen Schaden anzurichten, wollen wir ihn hier nicht wirklich auf irgendeinen Schaden programmieren , weil wir möchten, dass der Feind den Schaden anrichtet, obwohl er von niemandem getroffen wird. Wenn der Spieler also in den Feind tritt, obwohl der Spieler ihn nicht getroffen hat, kann er dennoch Schaden anrichten. Lassen Sie uns also einfach ein separates Ereignis mit dem Namen Start angewendeter Schaden machen . Und das werden wir tatsächlich sofort tun wollen, wenn sie in das Level spawnen. Okay, also lasst uns zurück zu den Schnittstellen und in der feindlichen Basis, lass mich hier eine neue Funktion machen , die alles anfängt. Und nennen wir es beginnt angewendeter Schaden. Und lasst uns einfach einen booleschen Wert machen, in dem wir den angewendeten Schaden sagen , und dies kann entweder wahr oder falsch sein. Ja, das war's vorerst. Also lasst uns kompilieren, speichern und zur feindlichen Basis zurückkehren. Und was wir hier sagen können, ist, dass wir mit der rechten Maustaste klicken können und Start sagen , Schaden anrichten und dieses Ereignis hier aufrufen können. Jetzt wird dieser wieder durch den Server gehen, um sicherzustellen, dass es nicht der Client ist, der nicht betrügt. So startet der Server Schaden anrichten. Normalerweise nenne ich sie einfach den gleichen Namen wie die normalen Ereignisse und laufe auf dem Server. Zuverlässig. Und jetzt müssen wir diesen boolean hier, wir müssen es offensichtlich wieder hinzufügen, Schaden anrichten. Jetzt können wir sagen, wir können, wir können hier einen Zweig schreiben und sagen, ob das stimmt oder falsch ist. Und damit wollen wir etwas tun. Wir wollen also anfangen, den Schaden anzurichten, wann immer er wahr ist und falsch ist, wir wollen keinen Schaden mehr anrichten. Und wann setzen wir es auf „true“ oder „false“? Lassen Sie mich also zuerst diese Serverfunktion hier ausführen , hier Startlichtschaden und verbunden. Wann wollen wir den Schaden anrichten? Wir möchten den Schaden anrichten, wenn der Spieler mit dem Feind kollidiert. Wenn der Spieler, wenn ich zum Feind zurückkehre, wenn ich zurück zu einer Schnecke gehe, wenn der Feind hier mit dieser kleinen Kollisionsbox wenn der Feind kollidiert, wollen wir anfangen, dem Spieler Schaden zuzufügen. Davor möchten wir keine beschädigten Fälle anwenden. Denken Sie daran, dass wir unseren Code optimieren, also wollen wir den Schaden nicht 24-sieben anrichten, ich möchte nur Schaden anrichten, wenn der Spieler mit dem Feind interagiert. Ich gehe hier zur feindlichen Basis und gehe zum Ansichtsfenster, klicke auf diese Kollision, gehe nach unten und klicke dann auf n-Komponenten-Überlappung. Beim Komponentenbeginn eines Labors, was wir genau wie zuvor gemacht haben, möchten wir es über Switch ausführen, haben die Berechtigung, sicherzustellen , dass es der Server ist, der dieses Ereignis ausführt. Und wieder möchte ich dieses Mal eine neue überlappung machen dieses Mal eine neue überlappung damit wir das auch zur gleichen Zeit tun können. Ich werde prüfen, ob sich der Spieler überschneidet, was sich damit überschneidet. Also nochmal, Schauspieler hat Layer markiert. Wir wissen, wir wissen, dass der Spieler den Tech-Spieler hat und wir können jetzt einen Brunch machen. Ich glaube nicht, dass ich es noch erklärt habe, aber du kannst auch einen Zweig machen, wenn du einfach gedrückt hältst, B auf deiner Tastatur gedrückt hältst und dann klickst, du kannst auch Verzweigungen erstellen. So eine sehr coole Abkürzung , die du machen kannst. Wenn das Tag also ein Spieler für diesen Schauspieler ist, werden wir Schaden anrichten und wir sind nur daran interessiert, dieses Event hier durchzuführen. Es fängt also an, hier in der gegnerischen Basis Schaden zu liegen. Und wir werden das auf wahr setzen. Wenn wir nun die Überlappung beenden, wo Sie nur diesen Code kopieren möchten, fügen Sie diesen ganzen Code ein und wir möchten den Schaden nicht mehr anrichten. Okay, so optimiert man es also. jetzt für den angewendeten Schaden tun möchte, Was ich jetzt für den angewendeten Schaden tun möchte, ist, dass ich kontinuierlich Schaden anrichten möchte. Ich werde dir zeigen, warum ich dir eigentlich nicht zeigen kann, warum ich es wirklich sehr schnell erklären kann. Also wenn der Spieler dabei ist nimm einfach den Spieler, nicht die Schnecke. Wenn also der Spieler hier unter dem Spieler in diesem Feind steht , laufe ich herum, gehe ich in den Feind. Ich werde getroffen. Ich verliere die Gesundheit. Aber wenn ich in dieser Sphäre sicher bleibe und ich mich nie damit überlappt. Obwohl ich ungefähr zehn Sekunden stehe , werde ich keinen Schaden anrichten, weil Sie am Ende Schaden anrichten und anfangen, sich zu überlappen . Aber denken Sie daran, dass dieses Ereignis nur einmal ausgeführt wird, da es nur dann ausgeführt wird, wenn Sie sich überlappen. Und dies wird einmal ausgeführt, da dies der Fall ist, dieses Ereignis wird einmal ausgeführt. Und das ist, wenn du anfängst, den Feind zu überlappen. Aber wir möchten diesem Spieler kontinuierlich Schaden zufügen , wenn Sie sich nicht von diesem Feind entfernen. Vielleicht verursacht es dir alle zwei Sekunden einen Schaden , wenn du nur noch in diesem Feind stehst. Wir möchten die ganze Zeit überprüfen, ob der Spieler tatsächlich hier drin steht und wir Schaden anrichten möchten. Also hier sind wir, wir prüfen schon, ob der Spieler hier in dieser Box steht , weil wir anfangen Schaden anzurichten, wenn der Spieler in dieser Kollision ist und wir Hör auf, hier Schaden anzurichten. Denken Sie noch einmal daran, dass Sie es vielleicht schon erraten haben, wenn Sie kontinuierlich Schaden anrichten möchten, also müssen Sie das Wort kontinuierlich einen Timer verwenden. So genau wie das, was wir vorher gemacht haben. Stellen Sie also den Timer nach Ereignis hier ein. Wir werden von hier aus fahren und es zu individuellen Ereignissen machen. Nennen wir das einen angewendeten Schaden. Wir haben diese benutzerdefinierten Ereignisse und möchten etwas Schaden anrichten. Der Schaden, den wir anrichten möchten. Lasst uns tatsächlich Looping machen und ich werde jede 0,12-Ära überprüfen. Das bedeutet also, dass Sie zehnmal pro Sekunde Schaden anrichten. Und das wird später Sinn ergeben, als würden wir dies reduzieren. Aber was wir tun wollen, lassen Sie es uns hier runter bringen. Was wir tun wollen, ist wieder, überlappende Schauspieler zu bekommen. Wir sind also daran interessiert, die gesamte Spielerbasis zu erhalten. also alle sich überlappenden Spieler bekommen, wollen wir allen Schaden zufügen. Und lasst uns davon ziehen und für jeden sagen. Diese Methode, wenn wir bereits vom Spieler zu den Feinden gegangen sind, ist sie jetzt in die entgegengesetzte Richtung. Jetzt sind es die Feinde, die den Spielern Schaden zufügen. Stellen Sie einfach sicher, dass Sie hier die Spielerbasis ausgewählt haben und nicht die gegnerische Basis oder etwas anderes. für jeden dieser Spieler Was wollen wir für jeden dieser Spieler tun? Jetzt? Sie können auch die Länge überprüfen, ob sie gleich 0 ist, aber das macht keinen Sinn, da Sie bereits überprüfen , ob die Spieler hier drin stehen oder nicht. Also für jeden dieser Spieler, die in der Kollisionsbox stehen . Auch hier wollen wir davon fahren und sagen Schaden anwenden. wen möchte ich jetzt Schaden anrichten? Der beschädigte Schauspieler? Es ist der Spieler. Es ist also nur dieser Typ hier. Und wir müssen angeben, wie viel Schaden jeder Feind mischt. Also müssen wir auf die Struktur in den Tierinformationen zurückgehen . Und hier müssen wir eine neue Variable namens Damage hinzufügen. Lassen Sie es mich einfach hier oben ziehen, unter Gesundheit, und lassen Sie es mich in einen Schwimmer umwandeln. Sparen Sie hier und die feindliche Basis jetzt können wir kompilieren und speichern. Jetzt können wir zu den Feinden gehen. Im Schwein hier können wir also einen Schaden anrichten. Klicken wir also auf die Standardwerte der Klassen, gehen Sie zu Tierinformationen. Und so richten diese Schäden beispielsweise die Schweine 15 Schaden an. Oder vielleicht sagen wir vielleicht 20 Schaden für die Schweine und hier für die Schnecken. Wenn wir zu den Klasseneinstellungen für die Schnecken zurückkehren, tun sie das vielleicht, sagen wir, dass sie zehn Schaden anrichten. Lassen Sie uns kompilieren und speichern. Okay, jetzt machen sie zehn beschädigt, das Schwein verursacht 20 Schaden, also verdoppeln Sie den Schaden. Und hier können wir die Tierinformationen nehmen, sie aufbrechen und den hier hinzugefügten Schaden nehmen . Und jetzt ist es dynamisch. Was auch immer Feind es ist, sie werden ihren Schaden anrichten. Okay, was ist der Controller , der für diesen Schaden verantwortlich ist? Wir befinden uns also in der feindlichen Basis, also brauchen wir nur den Controller dieses Feindes. Auch hier können Sie ziehen und sagen, Gets Controller. Und das ist es für die Schadensartliste ändert sich hier in den Schadentyp. Und das sind alles, was wir hier brauchen. Jetzt richten wir diesem Spieler tatsächlich Schaden zu. Jetzt, später, werden wir einen Gott-Modus hinzufügen, damit der Spieler zehnmal pro Sekunde nicht beschädigt wird , weil dies im Wesentlichen das ist , was gerade passiert. Der Spieler wird zehnmal pro Sekunde beschädigt. Aber wir werden später den Gott-Modus hinzufügen. Es gibt also eine Zeitspanne , in der der Spieler nicht beschädigt wird. Aber im Moment war das alles, was wir tun mussten. Und lasst uns zur nächsten Lektion übergehen. 77. Spieler:innen erhalten Schäden: Okay, jetzt müssen wir den Spieler codieren, der den Schaden vom Feind erhält. Gehen wir nun zurück zur Spielerbasis und gehen wir zum Event Graph. Ich ziehe das Ereignisdiagramm tatsächlich hier rüber und klicke mit der rechten Maustaste und sage Tabs schließen nach rechts. Das haben wir also nur jetzt geöffnet. Jetzt haben wir nur den Angriff erledigt, und jetzt müssen wir tatsächlich irgendeinen Schaden anrichten. Lasst uns mit der rechten Maustaste klicken und Schaden anrichten. Jetzt haben wir diese Veranstaltung. So wie beim Feind Hier müssen wir bei jedem Schaden die Gesundheit des Spielers subtrahieren. Und ich bin mir eigentlich nicht sicher, ob wir das gemacht haben. Ich weiß es nicht mehr. Gehen wir also zur Struktur und anstelle von Spielerinformationen, und das haben wir nicht. In den Spielerinformationen müssen Sie also eine neue Variable namens Health hinzufügen. Diesen kannst du nehmen, du kannst es zu einem Schwimmer machen, bewege es nach oben. Ich verschiebe es nach oben. Speichern Sie hier und die Spielerbasis, die Sie für die Spieler kompilieren und speichern müssen. Ich klicke einfach hier, sie haben alle die gleiche Gesundheit. Also setze ich einfach einen Standardwert für alle ein. Zum Beispiel, für die Gesundheit, machen wir einfach so etwas wie 70. Ich weiß nicht, es ist nur eine Zufallszahl. Also nur 70. Kompilieren und speichern wir jetzt. Und für die geteilten Informationen können wir es jetzt nehmen und wieder brechen. Und was wir tun wollen, ich werde einfach alles verstecken und einfach die Gesundheit zeigen. Das ist das einzige, woran ich gerade interessiert bin. Also nehme ich die Gesundheit des Spielers, subtrahiere, subtrahiere und subtrahiere den Schaden davon. Zum Beispiel wird diese Schnecke zehn Schaden anrichten. Also wird es hier sagen, worauf wir es eingestellt haben. Also 17 minus zehn werden hier 60 sein. Das ist also die neue Gesundheit, genau wie zuvor müssen wir hier die Gesundheit einstellen. also aus dieser Struktur ziehen, müssen wir Set schreiben und Set-Mitglieder auswählen. Was wir innerhalb dieser Struktur aktualisieren möchten, müssen wir die Gesundheitsvariablen aktualisieren. Ich wähle es hier rechts aus, lege es hier hin. Das ist also der neue Wert. Und genau wie zuvor, bevor ich das noch einmal mache, klammern wir diesen Wert, damit er nie unter 0 fällt. wir mit der rechten Maustaste und sagen klettern“ und wählen Sie diese aus, die als Klemm Der Mindestwert ist also 0. Lassen Sie mich eigentlich einfach mit dem Wert hier oben verbinden. Der Mindestwert ist 0. Und der Höchstwert. Jetzt kannst du nicht einfach hier reingehen und das verbinden, denn im Moment wird es tatsächlich so sein. Was Sie also für dieses Maximum tun können, können Sie wieder von dieser Gesundheit ziehen und hier verbinden. Das ist also die maximale Gesundheit. Dann kannst du es hier verbinden und diese einfach verbinden. Ich ziehe das nach unten, lass es mich ein bisschen vorwärts bewegen und das so nach unten ziehen . Es wird also den Wert festklemmen und Ihr Bestes geben, um ihn so sauber wie möglich zu machen. Manchmal ist es eigentlich ein bisschen schwierig und so etwas. Okay? Also so etwas. Wir klemmen den Wert jetzt fest und stellen sicher, dass er nicht unter 0 fällt. Und du musst wieder hier in der äußeren Struktur einstellen, du musst diese Player-Info-Struktur erneut einstellen und replizieren. So kann der Client es auch sehen nur um sicher zu sein, dass Informationen nicht abhören. Und jetzt erhält der Spieler diesen Schaden. Sie können es also wieder auf den Bildschirm drucken, da wir derzeit keine Benutzeroberfläche haben, das werden wir später tun. Aber Sie können diese Struktur durchbrechen und die Gesundheit hier hinzufügen , damit wir diese neue Gesundheit zeigen können. Sie können es auf den Bildschirm drucken und sehen, ob es funktioniert. Also spiele ich diesen Spieler, ich gehe in den Feind. Du kannst sehen, dass es mir schadet und es wird mir zehnmal pro Sekunde schaden. Denken Sie daran, dass wir diesen Timer auf dem Feind haben der sagt, Schaden von 0,1 Sekunden anzuwenden. Also zehnmal pro Sekunde. Sie können sehen, dass es niemals unter 0 fällt, also ist das richtig. Es hört immer auf, wenn ich nicht mehr kollidiere. Aber Sie können sehen, dass wir hier vielleicht ein kleines Problem haben denn wenn es mit meiner Angriffskollision kollidiert, es mir tatsächlich Schaden zu. Und das will ich nicht machen. Ich möchte nur meinem Charakter Schaden zufügen, also müssen wir das beheben. Okay, also habe ich mit den Kollisionen herumgespielt und nur um dir ein bisschen Zeit zu sparen. Also hier in der Spielerbasis, in der Kapsel habe versucht, deine Kollisionen zu meinen zu machen. Also um es ein bisschen zu erklären damit wir es auch verstehen können. Wir erzeugen also Überlappungsereignisse. Hier. Das einzige, was diese Kapsel vier ist, also ist das die Kapsel des Spielers. Wir möchten dem Spieler nur Schaden zufügen. Und denken Sie daran, wenn Sie zum Feind gehen und auf dieses Kollisionsfeld klicken, ist dies die Box, die uns Schaden zufügen muss . Sie können dieses Feld auch sehen, wenn Sie darauf klicken und auf „Im Spiel ausblenden“ klicken und diese entfernen, damit Sie es im Spiel sehen können. Wenn Sie also auf Jetzt spielen klicken, können Sie die Box um den Feind herum sehen, und dies ist die Box, die uns Schaden zufügen wird . Also diese Box hier, denken Sie daran, diese Box, wenn Sie zur Kollision gehen, ist es eine Weltdynamik. Dies ist also das Wichtigste mit dem wir uns überschneiden müssen. Es ist nicht ****, also ist die Kapsel ****. Aber diese ist eine Weltdynamik. Wenn wir also zu einer Spielerbasis gehen, müssen wir die Welt blockieren. Dynamisch. Blockieren, was bedeutet, dass ich gerne damit interagieren möchte. Das heißt nicht, es bedeutet nicht, dass wir das ignorieren, diese Ignorierung über einen Block ignorieren, wenn ich tatsächlich ein Ereignis daraus machen möchte . Also werden wir die Weltdynamik blockieren, was bedeutet, dass wir mit ihr interagieren werden, sowie mit der Welt statisch, weil die Statik ist, sind diese Kacheln auf dem Boden und wenn Sie das entfernen, du wirst durch den Boden fallen. Alles andere können wir tatsächlich ignorieren, so ablenkbar, also haben wir keine Fahrzeuge, Physikkörper, andere Gedichte. Wir müssen gerade nicht wirklich mit anderen Pons interagieren . Ich glaube verrückt. Weil der Schaden tatsächlich von dieser Weltdynamik kommt. Nicht wirklich die Feindkapsel. Es war dann die Feindkapsel, richtig, wir müssen den Teich nicht ignorieren. Aber im Moment kommt es von dieser Kollision, die eine Weltdynamik ist. Deshalb ignoriere ich alles und behalte diese beiden nur an. Für diesen Hellen erzeugen wir keine Überlappungsereignisse. Lassen Sie uns das also überspringen. Für den Angriff. Es ist eine Weltdynamik und wir ignorieren alles, denn das einzige, was wir mit dieser Angriffsbox benutzen, ist, dem Feind Schaden zuzufügen. Und wir wollen Schaden anrichten, wenn diese Box hier mit dieser kleinen Kollision interagiert. Und denken Sie noch einmal daran, dies ist eine Weltdynamik. Wir wollen also interagieren, als ob wir uns mit der Weltdynamik überschneiden, Schaden anrichten wollen , der hier der Feind ist. Der Feind ist Kollision. Das ergibt also Sinn. Gehen wir jetzt zum Feind. Also die Feindkapsel, wir blockieren alles, aber wir überschneiden uns mit den Pons und dem Kunden, die Schichten sind. Und lass uns zur Kollision gehen. Hier. Es ist alles dynamisch. Wir ignorieren tatsächlich alles außer ****. Denn die Art und Weise, wie der Feind **** den Schaden anrichtet, besteht darin, in den Spieler zu gehen. Und es läuft eigentlich nicht in diese Angriffsbox hier. Es läuft in unsere Kapsel und unsere Kapsel ist dran. Und deshalb muss ich mich hier im Feind mit der Kollisionsreaktion des Bauerns überschneiden. also sehr wichtig, einen Blick auf alle Kollisionen zu werfen. Welcher Objekttyp sind sie? Wenn es ein Bauer war , musste ich hier reingehen und mich mit dem Bauern überlappen. Und wenn es so war, sagen wir mal, es war Cholin Spieler und ich wollte Schaden anrichten, dann musste ich weitermachen und mich mit dem Kletterspieler überlappen. Ich habe versucht, sich das anzusehen, versuchte herumzuspielen und zu sehen, wie es funktioniert. Also lasst uns alles retten. Jetzt. Klicken wir auf Play. Lass uns diesen Spieler spielen. Wenn du hier mit meiner Box interagierst, erhalte ich keinen Schaden. Das ist gut für dich. Interagiere mit mir. Ich erhalte Schaden, weil es hier mit meiner Kapsel interagiert. Und hier. Wenn ich jetzt sehen kann, ob ich nur zu meinem Angriff, Angriffskollision zurückkehre , verursacht es keinen Schaden, es sei denn, er kommt tatsächlich in mich hinein. Das funktioniert also wie beabsichtigt. Jetzt funktioniert dieser Code für den Spieler, der den Schaden erhält, ebenfalls. Also lasst uns das vorerst löschen. Jetzt, da wir das getan haben, wollen wir nicht wirklich ständig Schaden anrichten. Lasst uns also in der nächsten Lektion eine Art Gott-Modus erstellen . 78. Player: Okay, also lasst uns einen Gott-Modus für den Spieler hinzufügen. Lasst uns jetzt in die Spielerbasis gehen. Lasst uns eine neue Variable namens Gott-Modus erstellen. Sei also Gott-Modus, und es ist nur ein Boolean , den wir hier benutzen können. Wir haben diesen booleschen Gott-Modus genannt, und wir wollen diesen Gott-Modus einstellen wenn wir hier Schaden erleiden. Kurz bevor ich das alles tatsächlich berechne, wollte ich nur meinen variablen Gott-Modus nehmen und ich möchte ihn auf wahr setzen, weil wir uns jetzt im Gott-Modus befinden. Wir wollen nicht einfach so beschädigt werden. Und denken Sie daran, dies auch an den Kunden zu replizieren. So kannst du sehen, dass du dich innerhalb des Gott-Modus-Zustands befindest. Für den Gott-Modus müssen wir ihn also auf „true“ setzen, aber wir müssen ihn irgendwann auf false setzen. Und du musst eine Art Dauer angeben. Lassen Sie uns also tatsächlich eine neue Variable namens Guard Mode Time erstellen. Und lassen Sie es uns in einen Schwimmer umwandeln. Lassen Sie uns kompilieren und speichern. Für den Reiseführer, China-Zeit. Ich setze es auf 1,5 Sekunden, damit der Feind mich die nächsten 1,5 Sekunden nicht beschädigen kann. Ich nehme das an und sage Verzögerung wie folgt. Und ich werde nur eine Verzögerung festlegen nachdem ich meine Gesundheit berechnet habe. Und dann stelle ich hier meinen Gott-Modus auf falsch ein. Okay, jetzt sitzen wir also auf wahr, wenn wir Schaden bekommen und nach 1,5 Sekunden setzen wir ihn auf „false“. Okay, also gehen wir jetzt zurück zum Feind. Und hier muss man tatsächlich danach als Boolean suchen. Weil wir jetzt nur zehnmal pro Sekunde Schaden anrichten . Aber stattdessen gehst du hierher. Du machst ein, bekommst überlappende Schauspieler und du gewinnst alle Spieler. Jetzt musst du für jeden dieser Spieler prüfen, ob sich der Spieler im Gott-Modus befindet. Nehmen Sie dies also und sagen, müssen Sie zunächst angeben, dass Sie mit diesem Spieler, Spielerbasis, kommunizieren. Wir müssen also sagen, Get Layer REF, die wir schon vor langer Zeit gemacht haben. Verbinden wir es als lass mich das vorerst trennen, damit wir sehen können, was wir tun. Jetzt nehmen wir das und sagen Gott Modus. Also bekommen wir diese Godmodus-Variable. Und nur wenn der Gott-Modus nicht stimmt, können wir Schaden anrichten. Also können wir „Nüsse“ sagen, Boolean. Wenn also der Gott-Modus falsch ist, wenn wir uns nicht im Gott-Modus befinden, machen wir einen Zweig. Wenn wir uns nicht im Gott-Modus befinden, können wir so Schaden anrichten. Wenn wir uns jedoch im Gott-Modus befinden, wenden Sie keinen Schaden an, tun Sie nichts. Dies ist also der ganze Gott-Modus-Code. Also nochmal, sehr mächtig, Booleans wie diese zu benutzen. Und ja, also müssen wir das jetzt noch einmal verbinden. Wer ist der beschädigte Schauspieler? Kann es einfach von diesem Spieler hierher ziehen. Von hier aus musst du es nicht machen. Du kannst es einfach von hier aus machen. Das ist jetzt etwas sauberer. Jetzt versuchen wir es tatsächlich zu testen und zu sehen. Und ich glaube, wir haben unsere Druckzeichenfolge gelöscht. Und lassen Sie mich, lassen Sie mich eigentlich, wir können hier einfach eine Zeichenfolge ausdrucken. Also drucke String aus und lass es uns hier ausdrucken. Eigentlich. Lasst es uns zuerst brechen. Lasst uns die Gesundheit nehmen und ausdrucken. Also kurz vor der Verzögerung werde ich einfach ausdrucken. Und dann nehme ich diese Verzögerung, gehe zurück zu dieser Druckzeichenfolge gehe hier zu dieser Verzögerung zurück. Also werde ich diesen Wert einfach ausdrucken, bevor ich verzögere. Mal sehen, was es macht. Also lasst uns auf Play klicken. Ich gehe in den Feind, ich bekomme Schaden an 60. Und erst nach 1,5 Sekunden nach dem Gartenmodus werde ich wieder angegriffen. Dieser Code funktioniert jetzt. Großartig. Löschen wir das und verbinden es wieder. Okay, jetzt haben wir die Godmodus-Funktionalität zum Spiel hinzugefügt. 79. Player VFX: Jetzt müssen wir einen Blinkeffekt hinzufügen wenn der Spieler getroffen wird. Also hier drüben in der Spielerbasis sind wir wieder hier drin, wir müssen einen beschädigten Effekt für den Blinkeffekt machen. Also lasst uns hierher gehen und neue Events machen. Jetzt müssen wir es in unser Blueprint-Interface schaffen, aber ich bin mir nicht sicher, mit welchen Variablen ich gerade arbeiten muss. Lassen Sie uns es also einfach als benutzerdefinierte Variable oder benutzerdefinierte Ereignisse erstellen und wir können dies später einfach in ein Blueprint-Interface verwandeln. Ich nenne es Schaden VFX, was visuelle Effekte bedeutet. Und ich bin genau wie bei diesem Video, wir werden den Spieler nur zum Blinken bringen, wenn du Schaden vom Feind bekommst. Und natürlich müssen wir dies wieder über den Server laufen, um sicherzustellen , dass der Client das tut, was er darf. Ich werde es zuverlässig durch den Server laufen und ich rufe den Server hier oben auf , der beschädigte VFX genannt wird. Okay, und hier unten, jetzt, dieser Schadenseffekt, bisher haben wir Variablen für die Rep Notify verwendet. Aber ich werde mich hier für den Sprung erinnern. Wenn ich also zum Sprung hochgehe, haben wir einen Multicast benutzt. Und wenn du dich nicht erinnerst, haben wir das schon lange benutzt. Ein Multicast macht dasselbe wie ein Vertreter benachrichtigt. Zeigen Sie also all diese Informationen dem Kunden an. Der Multicast kostet diese Informationen jedoch nur für bereits verbundene Spieler oder Spieler , die in Ihrer Nähe stehen. Es ist also der Spieler, der sehr weit von dir entfernt steht , wird nicht sehen, was der Multicast macht. Dies ist in Ordnung, um einen Schaden-Effekt zu verwenden, da Sie nur zwei Sekunden lang blinken oder wo auch immer, wie lang es ist. Und dann wird dieser Blinkeffekt verschwinden. Es spielt also keine Rolle für die Spieler, die zehn Kilometer von dir entfernt sind zehn Kilometer von dir entfernt oder für Spieler, die noch nicht verbunden sind. Es ist in Ordnung, dass sie diese Änderung nicht sehen, weil es nur ein Blinkeffekt und Sie wieder normal werden. Lassen Sie uns also ein benutzerdefiniertes Ereignis erstellen und Multicastschaden VFX nennen. Und lassen Sie uns das auf dem Server ausführen. Zuverlässig, aktuell, nicht auf dem Server. Lass es uns auf Multicast ausführen. Zuverlässig. Und den Multicast wir werden es durch den Server laufen lassen. Denken Sie noch einmal daran, ein Multicast, Sie ihn nirgendwo anders ausführen können , außer vom Server. Nennen wir es also hier MC beschädigte V-Effekte. Du kannst nicht, du kannst das nicht hier oben nennen. Dies funktioniert nicht, da dies nicht der Server ist. Dies ist sowohl der Server als auch der Client. Also gehe hier runter und lege den Multicast hier unten , der durch den Server läuft. Jetzt wird der Multicast das tun , diesen Blinkeffekt. Also für den Blinkeffekt sehr, sehr einfach. Fangen wir an, damit zu arbeiten. Nehmen wir dieses Sprite. Und wenn es will ist hier auf dem Sprite, wollen wir diese Farbe ändern. Wenn Sie auf die Farbe für das Sprite klicken, möchten Sie dieses Alpha ändern, wodurch Ihr Charakter durchsichtig ist. Wenn ich hier kündige, klicke ich auf einen meiner Charaktere. Wenn ich also auf Tsarina klicke und in die Ansichtsfenster gehe , klicke ich hier auf sie und klicke auf die Sprite-Farbe. Und dann nehme ich die Lautstärke ab. Du kannst hier sehen, dass der Spieler eigentlich nicht die Lautstärke bekommt, das Alpha, tut mir leid, mein schlechtes. Das Alphabet hier kann man sehen, dass der Spieler unsichtbar wird. Das Problem ist gerade, dass der Spieler von vollständig sichtbar zu völlig unsichtbar wird. Es gibt also kein dazwischen und das brauchen wir. Und das, was es verursacht, ist wegen dieses Materials maskiert, unbeleuchtet, ein Sprite-Material. Wir müssen das tatsächlich ändern. Versuchen wir es auch hier zu ändern. Also kann ich dir zeigen, wenn du darauf klickst, du siehst nichts. Und das liegt daran, dass Sie hier auf diese Einstellungen klicken müssen. Und dann müssen Sie auf Entwicklerinhalte anzeigen klicken, Engine-Inhalte anzeigen und Anmeldeinhalte anzeigen. Wenn Sie also auf Zeigen der drei klicken, sehen Sie, wie diese Ordner angezeigt werden. Wir müssen sie nicht wirklich benutzen. Aber wenn du jetzt nach Serena gehst und hier färbst, kannst du jetzt sehen, dass du viel mehr Materialien sehen kannst , wenn du Recht hast, unbeleuchtet. Weil wir mit Pixel-Los arbeiten, interessieren wir uns nur für unlit. Verwenden Sie dieses sogenannte Transluzenz oder durchscheinendes unbeleuchtetes Sprite-Material anstelle von Masken. Ich wähle das aus. Sie können jetzt sehen, wenn ich auf diese helle Farbe klicke und mein Alpha abnehme, wird es einen Zwischenwert geben, sodass er nicht direkt unsichtbar ist. Es gibt tatsächlich ein Zwischen-Level hier, und wir können diesen Blinkeffekt so auf und ab bewegen, der Spieler wird beschädigt. Okay, lassen Sie es uns wieder auf eins setzen und lassen Sie mich auf diesen Pfeil klicken, um zur Standardeinstellung zurückzukehren. Ich möchte nur zu meiner Maske zurückkehren, weil dies die Standardmaske ist. Wir werden das durch Code ändern. Also geh zurück zu meinem Spieler hier. Also müssen wir zuerst das Material ändern. Gehen Sie also hierher, sehen Sie sich festgelegtes Material an und wählen Sie es hier aus. Jetzt. Geben Sie an, welches Material es ist. Jetzt wollen wir es nicht noch einmal direkt hier ändern. Denken Sie daran, wir sind im Multicast und ich mag es oder nicht, dass ich alle meine Variablen zum sehr grundlegenden Ereignis hier bringen muss. Also dieses Material, du kannst es ziehen und hier ablegen. Sie können es weiterhin zu Ihren Events hinzufügen. Und das ist das Hauptereignis , das es ausführen wird, das hier drüben ist. Denn wann immer Sie hier Schaden erleiden, werden wir unseren Schaden als Auswirkungen bezeichnen. Und du wirst es hier laufen lassen. Und hier wählen Sie das Material aus. Und wir möchten die Transluzenz auswählen. Und gehen Sie unten nach unten, durchscheinendes unbeleuchtetes Sprite-Material. Stellen Sie sicher, dass der unbeleuchtete ist. Okay, jetzt haben wir unser Material geändert , okay, was jetzt? Jetzt wollen wir das Alpha ändern, aber wir wollen einen Blinkeffekt erzielen. Und das geschieht durch einen Timer. Wir können dazu wieder einen Timer benutzen. Stellen Sie also Timer nach Ereignissen ein. Mach einen hier. Und es wird ein paar Mal in die Schleife gehen. Und wie lange, wie viel Zeit wird es laufen? Und ich habe einen guten Weg gefunden, dies zu tun, damit wir hier den Gott-Modus übernehmen können. Denken Sie daran, dass der Gott-Modus 1,52 ist. Wenn Sie also hierher legen, wird dieser Blinkeffekt nur alle 1,5 Sekunden erzielt. Und ich denke, das heißt, ich muss es viel schneller machen. Also muss ich diese Zahl teilen. Ich habe den Weg gefunden, als wäre die beste Zahl 16. Also wird es das tun wie dividieren Sie dies durch 16, was 1,5 dividiert durch 16 bedeutet, und das ist 0,09. Es ist also, als würde man hier 0,09 schreiben. Es ist fast so, als würde man 0.1 schreiben, was zehn Mal pro Sekunde bedeutet. Okay, also wird es hier viel blinzeln, also kannst du es so machen. Wenn Sie also Ihren Godmodus-Timer ändern, wird er sich entsprechend ändern. Also können wir es hier machen. Es ist jetzt also irgendwie dynamisch. Also stelle ich stattdessen mein Material hier ab. Anstatt es also hier oben zu machen, ziehe ich dieses Setmaterial. Ich fühle mich von hier getrennt. Ich lasse es hier oben so verbinden und ich muss eine Veranstaltung machen. Ziehen Sie also von hier runter und sagen Sie Schaden. Lassen Sie uns zuerst ein benutzerdefiniertes Ereignis erstellen, Schaden wirkt sich auf Schleife aus. Und jetzt können wir unser Material verbinden. Zuerst wollen wir, dass unser Material durchscheinend ist. Dann wollen wir das hell nehmen und die Farbe einstellen, die Farbe, die auf Sprite-Farbe eingestellt ist, heißt es hier? Und jetzt wollen wir auch diese helle Farbe einstellen. Jetzt können wir es hier nicht wirklich noch einmal ändern, denken Sie daran, dass Sie es durchlaufen müssen . Ziehen Sie also von hier aus, legen Sie es in dieses Ereignis ein. Und jetzt, anstatt neue Farbe zu sagen, sage ich einfach Farbe. Und noch einmal, ziehe sie durch diese Ereignisse, bis sie hier oben landen, wo du es ändern kannst. Okay, also für die Farbe klicke ich einfach hier. Und ich werde das Alpha ändern. Daran interessiere ich mich bis 0.5. Es ist also die Hälfte des Durchsichts. Unser Spielercharakter wird also halb durchsichtig sein. Okay, also ändern wir die Farbe und das Material. Jetzt ist der Spieler also halb durchsichtig und dann wollen wir ihn verzögern. Also setze ich einen Delay-Knoten und möchte löschen. Lassen Sie mich diesen Godmodus-Timer noch einmal nehmen. Ich wollte es verzögern, sagen wir mal wieder geteilt durch 16 hier. Und eigentlich möchte ich es durch 16 teilen. Die können nicht dasselbe sein. Ich möchte das durch acht teilen. Es ist genau wie hier zu schreiben. Zum Beispiel möchten Sie dies jede Sekunde ausführen und möchten dies um 0,5 Sekunden verzögern. Und dann möchten Sie diesen Code kopieren weil Sie jetzt durchsichtig sind. Aber ich möchte in meinen normalen Modus zurückkehren, weil ich denke daran, dass wir einen Blinkeffekt erzielen. Also gehe in meinen durchsichtigen Modus und dann gehe ich wieder normal. Und ich will nur die Hälfte der Zeit dessen, was da oben ist. Lasst uns das also tatsächlich auf acht ändern. Es wird also 1,5 Jahre geteilt durch acht heißen. Und hier wegen der Verzögerung werde ich es viel schneller machen. So geteilt durch 16. So können Sie sich dies durchprobieren und sehen was für Sie funktioniert, wenn Sie möchten, dass es schneller blinkt. Offensichtlich müssen Sie diese Zahlen erhöhen. Wenn Sie langsamer blinken möchten, müssen Sie diese Zahlen reduzieren. Also werden wir es hier um 16 oder Gott-Modus-Zeit geteilt durch 16 verzögern . Und dann werden wir die Materialien auf das einstellen , was sie vorher waren. Ich kopiere einfach das Einfügen und jetzt können wir das Material einfach hier einstellen. Wir müssen all diese Dinge nicht durchmachen , glaube ich nicht. Also lasst uns das einfach versuchen. Wenn Sie also einfach unbeleuchtet schreiben, haben Sie genau wie diesen namens Maskiert auf Let's helles Material. Dies ist der Standardwert. Und die neue Farbe. Hier in Rot ist eins, grün, eins, blau. Dies bedeutet, dass es eine weiße Farbe und das Alpha auch eins ist. Also jeder, alles hier ist eins. Und lass mich kompilieren und speichern. Also lasst uns jetzt prüfen, ob wir alles haben und nichts bekommen. Also lasst es uns versuchen. Versuchen wir das Spiel zu spielen. Und wenn ich in den Feind gehe, siehst du, dass ich tatsächlich diesen Blinkeffekt habe. Es gibt einen kleinen Fehler. Ich werde tatsächlich dunkel. Ich gehe nicht wie meine eigenen Farben, also klicke ich hier. Und das liegt daran, dass das hier nicht weiß ist. Also 111, jetzt ist es weiß, denn wenn es hier nicht weiß, sexuell dunkel ist und wenn es dunkel ist, wird dein Charakter dunkel und du kannst deine Pixel nicht sehen. Also geht's 1.5110 und Alpha. Jetzt versuchen wir es noch einmal. Und Sie können jetzt sehen, dass Sie die Pixel sehen können wenn Sie blinken, einfach so. Okay, jetzt ist es tatsächlich richtig. Und irgendwann wollen wir diesen Blinkeffekt tatsächlich stoppen. Was wir also tun wollen, ist hier, wir wollen es stoppen, nachdem die Godmodus-Zeit vorbei ist. Nach diesen 1,5 Sekunden sind wir also nicht mehr in unserer Bauchmoduszeit und wir wollen es stoppen. Machen wir also einen neuen Timer dafür und sagen wir, dass Sie einen Timer nach Ereignissen einstellen. Und dafür werde ich einfach von diesem Ereignis ziehen ein benutzerdefiniertes Ereignis erstellen. Nennen wir es Stop-Schaden, die Auswirkungen. Und das ist sehr einfach. Nach 1,5 Sekunden wird es einfach so sein. Verbinde den Gott also mehr Zeit mit diesem Timer. Nach diesem Gott-Modus ist die Zeit vorbei, wir werden diesen Griff übernehmen. Lassen Sie mich also mit der rechten Maustaste hier klicken dies zu einer Variablen fördern. Und nennen wir es Schaden den Effekt-Handle. Und lasst uns solche verbinden. Jetzt haben wir eine Variable davon. Jetzt, nachdem die Zeit im Gott-Modus vorbei ist, werden wir diesen Timer nehmen , der hier ist. Wir nehmen es und sagen klare und ungültige Zeit oder von Händel, was bedeutet, diesen Stub zu löschen, diesen Timer. Nachdem der Gott-Modus vorbei ist, werden wir diesen Code hier stoppen. Und offensichtlich wollen wir das nicht schleifen. Das wird nur einmal laufen. Okay, also kompilieren und speichern wir. Probieren wir es also aus. Klicken wir auf Play und lass mich auf den Feind stoßen. Ich blinzle. Und nachdem die Patin mal vorbei ist, blinke ich nicht mehr. Und wenn ich wieder in den Feind gehe, blinkt es. Ich gehe wieder zurück. Lassen Sie mich eigentlich, das ist der Kunde. Lassen Sie mich als Listened Server zum Spiel zurückkehren. Ich möchte es als Server und Clients spielen. Ich werde es minimieren, nur um sicherzustellen , dass ich nichts gekauft habe. Immer schön, Dinge im Multiplayer zu testen. So wie der Player jetzt, als Client, blinke ich und er arbeitet als Server. Ich blinzele uns an beiden zu arbeiten. Okay, also funktioniert es gut. Und wieder können Sie zum Kunden wechseln und sicherstellen, dass alles funktioniert. Ich schaue mir nur beide hier an. Also Serena und Luke, wenn ich hineingehe, blinzele ich. Okay, also funktioniert es. Großartig. Jetzt funktioniert der Code. Sie können immer versuchen, dies ein wenig zu organisieren, daher würde ich Ihnen raten, dies zu tun. Lassen Sie mich einfach diese näher zusammen. Aber diesen können wir es hier hochziehen , also ist es nicht allzu verwirrend. Und mit diesem Sprite, schnell hier, kann es darum gehen, Knoten wie hier umzuleiten. Sie können einen Umleitungsknoten wie diesen erstellen. Und dafür kannst du auch eine umgeschriebene Notiz machen. So etwas hier. Es sieht also ein bisschen organisierter aus. Diesen kann ich eigentlich einfach hier runterziehen. Und dieses Sprite können Sie auch eine Umleitungsnotiz machen. Also immer schön organisiert zu bleiben. Das kann ich nicht genug sagen, weil Ihr Projekt irgendwann sehr groß sein wird und das sehr schwer zu lesen sein wird. Also so etwas. Jetzt hast du das alles fertig. Okay, jetzt ist das der Schaden-Effekt. Und jetzt können Sie für diesen Schadenseffekt jetzt für die Schaden-V-Effekte ihn in ein Blueprint-Interface-Ereignis verwandeln . Aber lassen Sie uns damit in der nächsten Lektion warten , denn wir werden einen Impuls hinzufügen. Lasst uns also zur nächsten Lektion übergehen. 80. Player: Okay, also als letztes für den Schaden, denke ich, dass wir dem Schaden einen Impuls hinzufügen müssen. Wenn der Spieler den Feind trifft, wenn ich in den Feind gehe, , anstatt nur zu blinzeln möchte ich auch meinen Charakter drängen, anstatt nur zu blinzeln, also gibt es diesen Impuls. Also lasst uns das machen. Du machst das, indem du die Charakterbewegung nimmst und du sagst „ Impuls setzen“ und eigentlich keinen Impuls setzen. Lass mich einfach suchen, ich denke, es heißt hier Add Impulse, Add Impuls. Und du willst diesen Impuls hier hinzufügen. Also lass mich das zurückziehen und den Impuls hier hinzufügen. Genau so. Nun, für diese Anzeige, für diesen Impuls, müssen wir sie wieder durch diese, diese Ereignisse hier ziehen , genau wie zuvor. Und jetzt kannst du den Impuls einstellen. Jetzt müssen Sie daran denken, diese Geschwindigkeitsänderung hier zu überprüfen . Und lasst uns kompilieren und speichern. Und jetzt haben wir jetzt einen Impuls hinzugefügt, aber diesen Impuls können Sie es ausprobieren. Zum Beispiel schreibe ich 500 im Z und du kannst sehen, was passiert. Du kannst versuchen, auf Play zu klicken, immer schön, es zu testen. Also was auch immer du tust, versuch es. Du siehst jetzt, wenn ich den Feind treffe, werde ich im Z um 500 nach oben gedrängt. So füge ich Impuls hinzu. Okay? Jetzt können wir hier etwas Spaß machen für den Impuls. Jetzt verwende ich die gleiche Methode wie die, die ich zuvor benutzt habe. Also lass mich sehen, wo ich diese Methode tatsächlich benutzt habe. Es könnte die feindliche Basis sein. Hier drüben. Eigentlich haben wir überprüft, wo der Feind im Vergleich zum Spieler steht. Und wir bewegen diesen Feind. Ich möchte eigentlich das Gleiche machen. Für den Spieler möchte ich meinen Spieler also rückwärts schieben, wenn du auf diese Weise kommst . Wenn ich auf diese Weise komme, möchte ich meinen Spieler auf diese Weise rückwärts schieben. Je nachdem, auf welcher Seite des Feindes du den Feind oder den Feind triffst, der dich trifft. Du willst rückwärts auf diese Seite geschoben werden. Genau wie die UN-Basis werden wir dieselbe Methode verwenden. Also gehe ich hier zurück zu meiner Spielerbasis. Und so wie wir das tun können ist, dass ich das ein bisschen nach unten bewegen werde, also habe ich hier mehr Platz. Ich bekomme jetzt den Standort des Spielers. Also hol dir den tatsächlichen Standort. Denken Sie daran, dass wir gerade im Spieler sind. Holen Sie sich also den tatsächlichen Standort mit einer Selbstreferenz und den Zielen. Ich werde es brechen, weil wir uns nur für den x-Wert interessieren, weil der x-Wert hier ist. waren wir nur interessiert. Jetzt brauche ich den Standort für meinen, für meinen Feind und wir können ihn von hier aus bekommen. Also haben wir das bisher nicht gemacht. Also können wir es von hier aus angezettelt tun, denken Sie daran, dass wir vom Feind Schaden erhalten , damit wir den Controller für den Feind bekommen können. Also kann ich mit der rechten Maustaste hier klicken, dies auf einen Controller oder eine Variable bewerben und ihn feindlichen Controller nennen. Verbinden wir es jetzt. Und ich kann hier klicken und es replizieren, nur um sicherzustellen, dass die Clients den Wert dieser Variablen sehen können . Und jetzt haben wir den feindlichen Controller. Also können wir diesen Controller nehmen und C wird kontrolliert ****. Jetzt haben wir den Bauern des Feindes. Und wir können sagen, hol dir Schauspielerstandort. Jetzt haben wir den Standort des Feindes. Und ich möchte es noch einmal brechen, weil ich mich nur für die X-Achse interessiere. Jetzt frage ich mich hier, ist das x für den Spieler? Ist es weniger als das, was es für den Feind ist? Nun, das heißt wieder, wenn meine Feinde hier stehen, und wenn mein Spieler hier steht, frage ich die Spieler im Grunde nur um den x-Wert niedriger als die Feinde. Und in diesem Fall ist es falsch, weil mein Charakter, wenn ich es tatsächlich treffen kann und das nicht treffen kann, jetzt kann ich es hier nicht treffen. Also lass es mich hier finden. Serena angeführt. So. Jetzt wird der Spieler gerade falsch sein, weil die Feinde x tatsächlich niedriger ist als mein Spieler. Hier im Spieler, fragen wir gerade, ist mein Spieler niedriger als mein Feind? Was ist falsch? Also lasst uns noch einmal von dem Impuls her , bevor wir irgendetwas tun, lasst uns von hier aus fahren und sagen „Vektor machen“. Genau wie zuvor. Anstatt unseren Code einzufügen, können wir einfach diesen Select-Float verwenden, wenn wir zu dem gegnerischen Base von Kamm zurückkehren , der unserem Code gegenübersteht . Ziehen Sie also von hier und sagen Sie Lasten auswählen. Was Sie jetzt tun können ist hier und die Schnittstelle, die Sie hier sehen, wir haben das Plus hier gemacht, weil wir den Standort und was auch immer wir umziehen wollten . In diesem Fall wenden Sie nur eine Kraft an, als würden Sie nur einen Impuls anwenden, zum Beispiel 500. Wir kümmern uns also wirklich nicht um die Werte für X und Y und Z. Wir wollen nur, dass es statisch ist. Also hier für das Z, fügen wir einfach etwas wie 300 hinzu. Also haben wir einen Impuls von 300 nach oben gewonnen. Für das x werden wir das nicht wirklich nehmen und dazu sagen und so weiter. Weil dieser nur der ästhetische Impuls ist, zum Beispiel etwa 300. Es ist entweder 300 oder minus 300, 300 oder minus 300 je nachdem, aus welcher Richtung ich komme. Jetzt müssen wir feststellen, dass ich es hier verbinden werde. Wir müssen bestimmen , welche Richtung welche ist. Sagen wir also hier, ich stehe hier. Mal sehen, Lasst uns als Spieler hier stehen. Ich frage jetzt, ist mein x-Wert niedriger als die Feinde? Ich werfe einen Blick auf diesen Spieler. Du siehst, dass es 615 ist. Klicken Sie auf diesen Feind ist 710. Also im Moment, ja, mein x für den Spieler ist niedriger als die Feinde. In diesem Fall wird es also tatsächlich wahr sein , wenn man reinkommt. Also stimmt es jetzt. Also gehe ich hier zum Feind. Ich möchte eigentlich rückwärts geschoben werden. Und jetzt ist mein Rückwärts eigentlich nur minus 300, weil ich sehen kann, dass der Spieler rückwärts schiebt , im Minus geht. Es wird diese Zahl senken. Also hier schreibe ich minus 300. Und offensichtlich, wenn du auf der anderen Seite bist, wird es falsch werden, was bedeutet, dass ich das jetzt hier machen muss. Falsche Bedeutung hier. Jetzt gehst du auf den Feind zu. Du wirst weggestoßen und den Spieler wegschieben. Dies, diese Seite hier wird plus 300 sagen, was bedeutet, dass Sie hier auf diese Weise weggedrängt werden. Es ergibt also keinen Sinn hier. Sagen wir Eins, 100. Und jetzt wird es entweder minus 300 oder 300 im Impuls gelten . Okay? Lassen Sie uns das also einfach ein bisschen besser organisieren, so. Okay, jetzt haben wir diesen Code angewendet und ich glaube, wir verpassen jetzt nichts. Klicken wir also auf Play und sehen, was passiert. Jetzt bin ich der Spieler. Ich gehe auf den Feind zu. Ich werde auf diese Seite gedrängt. Das ist richtig. Jetzt gehe ich von dieser anderen Seite hier aus. Das ist richtig. Ich werde auf diese Seite gedrängt. Wenn ich von dieser Seite komme, werde ich von dieser Seite hierher gedrängt. Jetzt werde ich jetzt in die richtige Richtung geschoben . Okay? Jetzt können wir also machen, manchmal kann man lustige Dinge machen , die man hier sehen kann. Sie können einen Impuls hinzufügen. Der Feind stößt dich weg, während du springst. Wir haben also viel Kraft. Wenn Sie möchten, können Sie die z-Wertkraft vielleicht auf 150 senken , mal sehen, wie das aussieht. Vielleicht ist es zu viel im z. Ich kann so etwas machen. Oder du kannst einfach, ich denke es war witzig. Vielleicht ist es etwa 250 statt 300 oder repariere so etwas. Man sieht es manchmal so, als ob man bereits eine Geschwindigkeit hat, weggeschoben werden kann. Wenn Sie möchten, können Sie Ihre eigene Geschwindigkeit auf 0 einstellen , bevor Sie beschädigt werden. Dies wird das Problem beheben, aber ich denke, das ist hier in Ordnung. Jetzt siehst du hier das, dieses Schwein hier. Wenn ich es treffe und hier gehe, wingt es manchmal hier draußen auf der Rampe. Und das liegt daran, dass Sie versuchen, das frühere Video anzusehen in dem wir die Schnecke repariert haben, damit sie hier nicht gebellt hat. Wir haben es nicht wirklich für das Schwein getan, weil das Schwein es ist, du kannst sehen, dass es jetzt Dollar ist. Und wir haben es nicht wirklich für das Schwein repariert, nur für die Schnecke, weil das Schwein tatsächlich hier hochläuft. Aber du kannst, genau wie zuvor, als wir es im früheren Video repariert haben, glaube ich an Abschnitt eins, der Feind sein. Als wir den Feind erschaffen haben, kannst du einfach die Kugel, die Kollisionssphäre vergrößern und dann den Feind runterziehen. Und das wird das Problem beheben. Okay, jetzt haben wir diesen Push-Effekt. Ich blinkende Wirkung, wenn wir beschädigt werden. Jetzt sind wir bereit, als hätten wir den gesamten Schadenseffekt verursacht. Lassen Sie mich das einfach hier organisieren. Lass mich das hier rüberziehen. Jetzt, da wir all das fertig haben, können wir tatsächlich anfangen, am Tod der Spieler zu arbeiten. Und danach glaube ich, dass wir die Benutzeroberfläche machen können. Lassen Sie mich das also einfach näher ziehen, stellen Sie sicher, dass auch die feindliche Basis organisiert ist. Und ich glaube, alles sieht gut aus. Wenn du willst, kannst du alles kommentieren. Und wieder können Sie all diese Dinge hier innerhalb von Kategorien organisieren . Und ich denke, alles sieht gut aus. Wir können das so runterziehen es ein bisschen besser aussehen lassen. Ich weiß nicht, so etwas. Und ja, das war's für dieses Video. Und lasst uns alles speichern und lass uns zum nächsten übergehen. 81. Player: Lasst uns jetzt am Tod der Spieler arbeiten. Bisher haben wir den Hitzeeffekt gemacht und wenn wir in den Feind gehen, bekommen wir Treffer und verlieren die Gesundheit. Aber wir haben bisher noch nicht an dem Tod gearbeitet. Das haben wir bisher also. Lasst uns jetzt das Spiel beenden und mit den Todesfällen beginnen. Also haben wir hier eine Menge Dinge zu tun. Gehen wir also zuerst zur Spielerbasis. Und drinnen wollen wir ein neues individuelles Event machen. Und das sind die Schaden-V-Effekte. Ich werde es tatsächlich auskommentieren damit wir hier nicht verwirrt werden. Und ich nenne es einfach Schaden die Effekte. Dann haben wir den Schaden hier. Hier möchten wir programmieren. Die Hauptsache. Lassen Sie mich diesen Schadenseffekt also nach unten verschieben. Und das ist der Angriff. Das werde ich auch kommentieren . Fallen Sie ihn in den Sack. Okay. Also hier dafür, jeder Schaden. Lass mich mal hier nachschauen. Hier berechnen wir also die Gesundheit und setzen die neue Gesundheit ein. Und was wir hier tun wollen, wir möchten prüfen, ob die Gesundheit 0 ist, weil wir das Todesereignis anrufen wollen , wann immer es 0 ist. Lasst uns zuerst das Todesereignis machen. Woraus sollte es bestehen? Also lass mich das hier runterziehen. Machen wir eine neue Veranstaltung namens und wir können es einfach zu einer Gewohnheit machen. Eigentlich wird es nur einen booleschen Wert enthalten, also wissen wir das bereits. Gehen wir also hier zur Interface-Player-Basis. Und nennen wir es einfach Tod. Und wir können eine Eingabe eines Booleschen namens B is dead hinzufügen. Der Spieler ist also tot. Und hier können wir das Ereignis „tot“ oder „Tod“ nennen , nicht tot. Und was wir tun können, ist, dass wir benutzerdefinierte Ereignisse nennen können , die tatsächlich das genannt werden, was ich herausgefunden habe. Also sehr cooles Zeug. Wenn Sie mit der rechten Maustaste klicken, können Sie anstelle von benutzerdefinierten T-Punkten schreiben, und auf die rechten T-Punkte erhalten Sie diese benutzerdefinierten Ereignisse automatisch. Also sehr, sehr schnelle Verknüpfung hier, um die benutzerdefinierten Ereignisse zu erstellen und es uns in die Todesfälle des Servers zu schaffen. Gehen Sie also durch den Server und lassen Sie ihn zuverlässig auf dem Server laufen. Und lasst uns den vom Server hier oben laufen lassen. Und dann müssen wir dafür sorgen, dass das Boolesche B tot ist. Und lasst es uns hier durchlaufen. Was wir hier tun können, können wir mit der rechten Maustaste klicken und zu einer Variablen werben. Und wir können es so nennen. Ist das, in Ordnung, also dieses, was ich tun möchte, möchte ich, wenn wir also vom Feind getroffen werden und wir 0 Gesundheit haben, wollen wir unsere Todesanimation einstellen. Und übrigens habe ich mich bisher im Video verändert . Ich habe dir vorher gesagt, dass wir unsere Todesanimation extrahieren müssen. Aber mir wurde klar, dass es besser war, diese Todesanimation in einem einzigen Frame zu machen . Wenn du dir das ansiehst, hast du wahrscheinlich nur einen Frame. Lassen Sie uns das alles hier löschen. Und lassen Sie mich nur diese eine Gehirntod-Animation hier importieren diese eine Gehirntod-Animation , die Sie in Ihren Kursmaterialien haben. Und lass mich Papiertextur 2D auftragen und ein Sprite erstellen, es S Death nennen und aus diesem sogenannten Tod oder Toten ein schnelles Flipbook erstellen. Nennen wir es einfach Tod statt Schulden. Und die Frames pro Sekunde werden einfach eins sein. Ich glaube nicht, dass es dafür wichtig ist. Lass es uns schließen, jetzt haben wir das. Ich gehe hier schnell zu Luke und Serena und dem Blueprints Player. Ich werde diese hier unten und die Todesanimation hinzufügen, nur um sicherzustellen, dass sie hier hinzugefügt haben, wenn Sie die Standardeinstellungen der vollständigen Blueprint-Editor-Klasse öffnen . Und genau das, was wir bisher gemacht haben. Also hier unten in den Spieler-Info. Und ich füge hier wieder meine Todesanimation für Serena hinzu. Okay, also haben wir das jetzt hinzugefügt, kompilieren und speichern alles. Also wollen wir dieses Flipbook hier spielen, wann immer wir tot sind. Gehen wir also zurück zur Spielerbasis, wann immer dies der Fall ist, also machen wir wieder eine visuelle Änderung und setzen ein Flipbook. Also müssen wir eine Wiederholungsbenachrichtigung durchgehen, da dies der Server und diese Rockbenachrichtigung ist, das einzige, was es tun wird. Nehmen wir zuerst das ist tot und stellen sicher, dass es stimmt. Wenn es also stimmt, wenn du tot bist, wollen wir den Status „ eingestellte Bewegungen“ oder den Spieler, der sich bewegt, zu Tode nennen . Okay, damit wir den Tod rufen und nur sicherstellen, dass wir das Set haben. also zu den Unruhenbewegungen gehe und hier, dass wir das bisher nicht gesagt haben, werde ich dieses Flipbook kopieren. Und lasst uns den Tod hier verbinden. Und wenn Sie es noch nicht bearbeitet haben, bearbeiten Sie es noch, denken Sie daran , dies ein Aufzählungsbewegungsstatus ist, und dies ist der, den wir früher gemacht haben. Wenn Sie also bearbeiten möchten, wenn Sie noch nicht bearbeitet haben, können Sie zum Bewegungsstatus der Aufzählungen wechseln und hier den Tod hinzufügen, und er wird hier in der Liste angezeigt. Okay, also lassen Sie uns für die Animation hier klicken und wir haben eine Todesanimation für die, für die Struktur. Und klicken wir darauf, damit es erscheint. Und wir können davon ziehen und hinzufügen. Wenn es nicht erscheint, denken Sie daran, dass Sie hier auch einen Pfeil haben. Sie können nach oben und unten klicken. Manchmal verstecken sie sich. Wenn Sie diese nicht benötigen, können Sie tatsächlich auf Nicht verbundene Pins ausblenden klicken und diese etwas sauberer ausblenden. Du kannst das ein bisschen sauberer machen. Es sieht gerade ein bisschen chaotisch aus, ungefähr so. Okay, Verbindungen, die jetzt gespeichert wurden, haben wir das hinzugefügt. Gehen wir zurück zum Event Graph. Wann immer der Spieler tot ist, wird er also immer dann unsere Todesanimation abspielen, unsere Todesanimation abspielen um sicherzustellen, dass der Spieler sich nicht bewegen kann. Ich nehme die Charakterbewegungskomponente und sage sofort die Bewegung stoppen. Ich wollte nur sicherstellen, dass sich der Charakter nicht bewegt, einfach so. Okay, also jetzt ist das verbunden, wir auch sicher, dass sich der Spieler nicht bewegen kann, wenn er tot ist. Also gehe ich zum Event Graph, gehe ich zuerst zu meinem, dieser bewegt sich nach rechts und links und nehme das ist tot. Und wieder, genau wie vor dem Schreiben eines NOT Boolean. Und von hier aus klicke einfach auf diesen Pin hinzufügen, dann kannst du weitere hinzufügen. Jetzt kann das auch tatsächlich verbunden werden. Wenn der Spieler also klettert, Wenn der Spieler also klettert, kannst du dich nicht nach links und rechts bewegen. Wenn der Spieler angreift, können Sie sich offensichtlich nicht nach links und rechts bewegen. Und auch wenn du tot bist, kannst du dich nicht nach links und rechts bewegen, dass wir es zu Dingen hinzufügen müssen , die der Spieler nicht benutzen soll. So klumpen zum Beispiel auch hier auf und ab. Und wir können sagen und hier und Boolean hier. Und wir können diese Angriffe hinzufügen und stattdessen hier verbinden. Also müssen wir das ein wenig strukturieren. Jetzt wird es ein bisschen chaotisch, aber das ist okay. Wir können es immer bald aufräumen. Lass mich Einfügen kopieren. Das ist auch tot und wir können für den Sprung bearbeiten. Also hier für den Sprung kannst du nicht springen, wenn du tot bist. Und das Letzte ist der Angriff. Der Angriff ist also hier unten. Du kannst nicht angreifen , wenn du tot bist. Okay? Einfach so. Nur um sicherzustellen, dass wir keine Bugs haben. Also erkundigen wir uns bei Booleans genau so. Okay, also kannst du jetzt nicht angreifen, okay, also haben wir das tot und was sollte passieren, wenn du tot bist? Machen wir das später. Wann wollen wir diese Veranstaltung hier aufrufen? Wir wollen es anrufen, wenn die Gesundheit 0 ist. Also der Schaden hier, der Spieler wird beschädigt. Und wir berechnen die Gesundheit hier neu. Jetzt haben wir die aktualisierte Gesundheit hier. Also lasst uns das nehmen und Pause sagen. Und jetzt haben wir diese Gesundheit. Und ich kann gleich sagen, das ist gleich 0. Was sollte passieren? Ich werde die anderen Pins einblenden. Was also passieren sollte, wenn sie Gesundheit 0 ist, können wir hier einen Zweig machen. Wenn also die Gesundheit 0 ist, wollen wir unser Todesereignis nennen. Also schreibe den Tod, nenne das Ereignis hier und setze es auf wahr. Okay, jetzt stimmt das. Wann immer es falsch ist, wollen wir etwas anderes tun, was bedeutet, dass wir nicht tot sind, wir werden gerade getroffen. Also werde ich das tatsächlich von hier entfernen , weil wir es wahrscheinlich hier hinzufügen müssen. Wir wollen nicht geben, wir wollen den Gott-Modus nicht entfernen und haben auch diese Verzögerung, bevor wir prüfen, ob der Spieler tot ist oder nicht. Denn denken Sie daran, wenn Sie dies tun, werden Sie den Code verzögern. Sie berechnen also die Gesundheit, Sie werden den Code verzögern. Und wenn du tot bist, wirst du nach dieser Verzögerung tatsächlich sterben, was keinen Sinn ergibt, weil du bereits tot bist, aber es gibt Verzögerungen bei deinem Tod und es ergibt keinen Sinn. Schauen wir uns also an, klicken Sie auf Control X, um es auszuschneiden und stattdessen hier einzufügen. Wir berechnen nur die Gesundheit so. Und jetzt hier unten können wir diesen Code hier machen. Wenn deine Gesundheit nicht gleich 0 ist, werden wir sie hier verzögern und den Gott-Modus entfernen. Oder wenn du schon tot bist. Wenn also die Gesundheit 0 ist, gehen wir direkt zum Todesereignis. Und wir wollen immer noch, dass der Gott-Modus hier wahr ist. Denn wenn du tot bist, wollen wir nicht , dass der Feind dich trifft. Also lasse ich den Gott-Modus immer noch eingeschaltet. Okay, also lass uns hier unten sehen. Die Tiefe wird sich also beziehen. Lass uns das Spiel spielen und sehen, was passiert. Also lass mich auf Play klicken. Und jetzt können wir diesen Charakter platzieren , du wirst beschädigt. Lassen Sie mich tatsächlich die Gesundheit meines Charakters verringern, damit ich das testen kann und nicht oft getroffen werden muss. Also lass mich nachsehen, wofür ich den Schaden angerichtet habe. Denken Sie daran, dass Sie im Feind für die Schnecke und das Schwein für die Schnecke und das Schwein Schaden hinzugefügt haben. Und lass mich nachsehen , was der Schaden war. Der Schaden für die Schnecke hier in den Tierinformationen. Der Schaden betrug zehn und ich glaube, es waren 20 für das Schwein. Lassen Sie mich also einfach meine Gesundheit für den Spieler angeben. Hier in den Spieler-Info. Lass es mich einfach auf 20 setzen. Also bekomme ich einen Schlag vom Schwein, aber ich bekomme zwei Treffer von der Schnecke. Klicken Sie also auf Play, damit ich das schnell testen kann. Jetzt können wir sehen. Ich bin gestorben. Und eigentlich blinkt mein Grab hier, wenn ich tot bin. Das gefällt mir nicht, also blinkt es hier. Und das gefällt mir eigentlich nicht. Also müssen wir uns umstrukturieren , die ein bisschen getötet wurden. Denn wenn wir hier im Schaden beschädigt werden, ist dies eine feindliche Basis. Hier in der Spielerbasis. Wir bekommen einen Impuls und wir bekommen diesen Blinkeffekt. Ich möchte es eigentlich machen, wenn ich nicht tot bin. Denn wenn ich tot bin, will ich nicht blinzeln. Ich will nicht, dass mein Grab blinkt. Also müssen wir es tatsächlich trennen, weil mir der Impuls hier tatsächlich gefallen hat. Ich mag den Impuls, aber ich blinke nicht gern. Also müssen wir es trennen. Lassen Sie uns diesen Effekt also trennen. Also hier in den Schadenseffekten werde ich ein benutzerdefiniertes Ereignis machen, und dieses wird ein Impuls sein. Also werde ich diese tatsächlich in Blueprint-Interfaces verwandeln . Also gehe ich hier zum Interface und zur Spielerbasis. Machen wir jetzt einen namens Schaden-Impuls. Und das andere hatten wir. Also lass uns zurückgehen. Der andere wird durch Effekte beschädigt und nimmt Farbe und Material als Eingänge an. Lassen Sie mich also eine neue machen, die als Schaden die Effekte bezeichnet wird. Okay, also nimmt der Impuls einen Vektor an. Also hier unten, Vector, und ich nenne es einfach den Impuls. Und der andere, der Schaden durch Effekte nimmt eine Farbe an. Und Sie können hier sehen, wenn Sie auf die Farbe klicken, können Sie sehen, um welche Art von Variable es sich handelt. Das Material ist eine Materialschnittstelle und dieses ist eine lineare Farbe. So können Sie zurück zum Interface gehen und hier Material auswählen. Und es hieß das Material. Ich glaube nicht, dass es etwas gibt , das als Materialschnittstelle bezeichnet wird. Es war eigentlich eine Materialschnittstelle, daher müssen wir diese hier ausgewählte auswählen. Und die andere war hier eine lineare Farbe, und diese ist eine lineare Farbe. Okay, also nenne das einfach eine Farbe. Und jetzt wird es wieder sein, ich werde das löschen, kompilieren und speichern, wieder Buck und ich muss es vielleicht löschen. Nennen wir es stattdessen einfach Ebenenfarbe. Und das hier, Spielermaterial. Okay, also kompilieren und speichern. Und jetzt lass uns zurückgehen und es hier anrufen. Nennen Sie es Schaden, die Auswirkungen hier. Und Material geht hier rein, der lineare Alarm geht hier rein und der Impuls wurde getrennt. Also klicke ich auf den Server und entferne den Puls, er wird ihn von hier entfernen. Und diesen einen Multicast, ich werde den Impuls auch entfernen , weil wir ihn hier nicht wollen. Ich entferne diesen Impuls von hier und füge ihn einfach hier ein. Stattdessen. Ich werde ein neues Ereignis machen, daran erinnere mich, dass wir gerade den Schaden-Impuls gemacht haben. Also nenne ich dieses Schaden-Impulsereignis. Führen Sie es erneut als Harvey-Schaden-Impuls durch den Server . Und dieser wird hier diesen Vektor haben. Ich werde es einfach so anschließen und es hier anschließen, der Server-1 genannt wird. Und lasst es uns zuerst hier unten durch den Server laufen. Und nennen wir den Serverschaden in Umfragen. Okay, jetzt sind sie verbunden. Jetzt haben wir sie getrennt. Und lass mich diesen Multicast wieder verbinden , bevor ich diesen vergesse , eigentlich mache ich es hier falsch. Wir müssen einen Multicast hinzufügen. Also nochmal, bei einem Multicast, Schaden-Impuls. Und wieder brauchen wir hier unten einen Vektor. Und lasst uns es durch einen Multicast führen und zuverlässig. Und wir müssen den Multicast hier über diesen Server ausführen . Also das hier. Okay, jetzt haben wir diesen Schnitt. Ich werde ein bisschen mehr Platz schaffen. Wir haben also Platz für diese Veranstaltung. Genau so. Und jetzt mal sehen, ob uns etwas fehlt. Und ich denke, das sieht gut aus, bis jetzt können wir das ein bisschen näher bringen, es macht keinen Sinn, es so weit können wir das ein bisschen näher bringen, weg zu haben. So. Okay, jetzt haben wir den beschädigten Impuls getrennt. Was wir hier oben tun können, wird Ihnen einen Fehler geben, weil wir hier keinen Impuls haben . Also lasst uns runter gehen und einen Blick darauf werfen. Also haben wir Impuls, Impuls, die Auswirkungen beschädigt , okay? Dieser gibt einen Fehler aus. Lass es uns löschen. Ich weiß nicht, warum es den Impuls nicht löscht. Lasst uns also nach Schaden suchen. Impuls. Ich möchte, dass mein Impuls hier ist. Für meinen Impuls möchte ich, dass es hier ist. Das ist also richtig. Lasst es uns einfach anschließen. Aber ich will meine Farbe und nicht hier sein, aber ich möchte meine Farbe spielen, wenn ich nicht tot bin. Also will ich den Blinkeffekt nicht. Ich möchte meinen Blinkeffekt hier oben nicht spielen , wenn ich tot bin. Lassen Sie uns stattdessen den Blinkeffekt hier spielen. Und es hieß hier Schaden UV-Effekte. Und für den Schaden über Effekte muss man wieder ein Material auswählen, entweder hier entfernen. Klicken Sie also erneut auf Einstellungen, zeigen Sie Entwicklerinhalte an, zeigen Sie Engine-Inhalte an und zeigen Sie Plug-In-Inhalte an. Und jetzt kannst du das Material auswählen und es hieß Sharon, Schleuse und C sind durchscheinend und gehen runter und finde es hier durchscheinendes, unbeleuchtetes Sprite-Material und ändere die Spielerfarbe auf 1.5110 im Alpha. Schnell, okay, jetzt haben wir es wie zuvor. Und wenn ich runtergehe und einen Blick hier werfe, ist das Material auf alles eingestellt, was wir gesagt haben, und dann werden wir es in die Moschee zurücksetzen, was unsere normale Farbe war. Okay, das sieht also gut aus. Jetzt lasst uns tatsächlich testen und sehen, ob das jetzt gut ist. Also lasst uns spielen. Jetzt werden wir getroffen. Das ist nett. Ich mag es nicht dass ich die Blinkeffekte nicht mag, also ist das jetzt nett. Und ich werde es auch als Server versuchen. Also Plato als Listening Server. Und nur um sicherzugehen. Okay, jetzt sind wir eine Tube und das sieht gut aus. Das ist alles, was wir für den Tod des Spielers tun mussten . Und im nächsten, wir erstellen das Menü I, damit wir tatsächlich eine Benutzeroberfläche haben und unsere Gesundheit aktualisieren können . 82. Erstellen der Main: Entwerfen wir jetzt die Haupt-Benutzeroberfläche für das Spiel. Bisher haben wir keine Benutzeroberfläche im Spiel. Gehen wir also zur Benutzeroberfläche. Und hier lassen Sie uns mit der rechten Maustaste klicken und zur Benutzeroberfläche gehen und einen Widget-Blueprint erstellen. Und wählen Sie dieses Widget, Benutzer-Widget aus. Und nennen wir das eine WB gemacht. Dies ist also die Haupt-Benutzeroberfläche. Doppelklick hier drauf. Zuerst müssen wir wieder nach Canvas suchen und wir müssen einen Canvas hinzufügen , bevor wir hier etwas machen. Was ich jetzt erstellen möchte, ist, dass ich hier unten unsere Health Bar erstellen möchte. Das Hauptergebnis, nach dem wir suchen , ist das tatsächlich hier. Es ist also immer schön zu visualisieren und zu wissen, was Sie tun, bevor Sie es tun. Wenn ich mir das ansehe, haben wir ein Overlay, weil wir Gesundheitsbalken auf einem Hintergrund haben. Das heißt, wir haben ein Overlay und dann haben wir zwei Balken. Also die Health Bar und die Erlebnisleiste übereinander. Und ich kann mir sagen, dies eine vertikale Box ist. Denken Sie daran, dass wir die vertikale Box verwenden und dies, weil sie vertikal ausgerichtet sind. Und ja, versuchen wir es mit zwei. Versuchen wir hier anzufangen. Zuerst brauchen wir ein Overlay, weil wir einen Hintergrund mit Gesundheitsbalken darüber brauchen . Wenn Sie also hinzugefügt haben, geht es hier hoch, lassen Sie mich einfach, Sie können den Ankerpunkt hier neu gestalten. Denken Sie daran, das zu tun. also beim Overlay Setzen Sie also beim Overlay den Ankerpunkt hier unten, denn hier wollen wir ihn. Und lass es mich vorerst einfach runterziehen , irgendwo hier unten. Also hier möchten wir zuerst den Hintergrund hinzufügen und der Hintergrund ist nur ein Bild. Suchen Sie also oben auf dem Overlay nach einem Bildeditor. Klicken Sie auf dieses Bild und lassen Sie uns dieses Bild ändern, um tatsächlich zu sehen, dass ich viele seltsame Dinge bekomme , und das liegt daran, dass wir alle diese in der vorherigen Lektion aktiviert haben . Verstecken Sie also den Inhalt des Plug-Ins anzeigen, blenden Sie den Inhalt der Engine anzeigen und blenden Sie Entwicklerinhalte aus Gehen wir zurück und klicken Sie auf diese Bilder, damit wir nur unsere eigenen sehen können. Und lasst uns den Knopf wählen, Black Square flat. Das hier. Sie können das Ganze hier füllen, also eine Linie horizontal und vertikal. Also füllt es das Ganze. Ich dupliziere es. Steuern Sie D zum Duplizieren, oder wir können mit der rechten Maustaste klicken und auf Duplizieren klicken und dieses Bild auswählen. Jetzt möchte ich dieses in Buttons blaue quadratische Flats ändern . Und ich möchte das y zu fünf machen, eigentlich nur fünf, man kann sehen, dass sich nichts geändert hat. Und das liegt daran, dass wir diese vertikale Ausrichtung ausgewählt haben . Ich wähle diese obere Ausrichtung aus. Also dekoriere ich nur meinen Hintergrund. Ich kann alle gestrichelten Linien entfernen, indem ich hier oben klicke. Also dekoriere ich nur ein bisschen. Ich klicke hier oben auf Control D auf das Bild. Und ich werde es unten ausrichten. Jetzt habe ich dieses tolle Design. Und was wir jetzt tun wollen, ist Glück zu haben. Wenn ich mir das schon mal ansehe. Wir brauchen jetzt eine vertikale Box, in der wir diese beiden Fortschrittsbalken übereinander haben. Lassen Sie mich also nach einem vertikalen Feld suchen, fügen Sie es hier zum Overlay hinzu. Suchen wir nun nach Fortschrittsbalken. So können Sie den Fortschrittsbalken hier in das vertikale Feld ziehen. Und was Sie jetzt tun können, ist, dass Sie, jetzt können Sie sehen, nicht viel gesehen werden kann , weil Sie es tatsächlich hinzufügen müssen. Also im Stil für den Fortschrittsbalken und ich denke, für das vertikale Feld, lassen Sie es mich zuerst hier in der Mitte ausrichten, das sind die vertikalen Fehler Klicken Sie auf den Fortschrittsbalken. Ich ändere das Hintergrundbild. Lassen Sie mich es in dieses ändern, schwarzes Quadrat, dunkel flach, also ist es ein bisschen dunkler als diese Farbe hier. Was ich dann machen möchte, ist, dass ich meine vertikale Box hier ganz horizontal ausrichten möchte. Mein Fortschrittsbalken richtet sich also ganz aus. Und was ich will, dass du jetzt machst, ist hier nach rechts und links zu gehen. Also hier nach rechts. Also schiebe ich es von rechts, ich schiebe es. Es ist also nicht hier an den Rändern. Ich werde es vielleicht mit 203030 und auch links 30 auffüllen . Und wir können versuchen hinzuzufügen Gehen wir zurück zum Fortschrittsbalken. Gehen wir zum Rechnungsbild und zum Festzelt-Bild. Und lasst uns ein rotes für die Gesundheit hinzufügen. Also auch diese rote 14 Taste , eine rote. Jetzt sieht man also, dass es viel größer ist. Und wenn Sie diesen Prozentsatz erhöhen, können Sie hier sehen, dass sich dieser Prozentsatz ausfüllt, aber er wird nicht wirklich so gelesen, wie wir uns entscheiden. Und das liegt daran, dass Sie aus irgendeinem Grund den Fortschrittsbalken und die Füllfarbe und Deckkraft heruntergehen und die Füllfarbe und müssen. Ich habe keine Ahnung, warum es blau ist. Du schaffst es also. Wenn Sie hier einfach 111 schreiben oder diese Schieberegler einfach vergrößern und verringern können, machen Sie es hier einfach weiß. Und wenn es weiß ist, können Sie sehen, dass Ihre echte Schaltflächenfarbe oder die Farbe des Fortschrittsbalkens angezeigt wird. Das ist also der Fortschrittsbalken. Sehr cool. Und gerade jetzt stimmt es hier auf Los aus. Also vertikale Box, wir richten uns hier aus. Und für den Fortschrittsbalken denke ich, dass das vorerst gut ist. Wir können die Größe immer ändern, wenn sie später zu groß ist. Bisher sieht es gut aus. Wir brauchen jedoch tatsächlich ein Overlay, denn denken Sie daran, dass wir hier den Text oben auf der Leiste haben, also brauchen wir hier tatsächlich einen Text, also benötigten wir zuerst ein Overlay. Ziehen wir also ein Overlay in dieses vertikale Feld und setzen diesen Fortschrittsbalken in das Overlay. So können wir hier auch Text darüber und das Overlay hinzufügen . Wir haben also Fortschrittsbalken und einen Text darüber. Auf dem Text richte ich ihn in der Mitte aus. Und nennen wir es 100%. Dies ist zum Beispiel die Gesundheit. Ich ändere den Text in, versuchen wir es halb fett. Halb fett, eigentlich fett, vielleicht Source Sans Pro Bold. Und ich glaube, lasst uns tatsächlich mit dem Schwarzen gehen. Schwarz Und das ist die Größe, ich werde es auf 14 reduzieren. Also sehr kleiner Text hier. Ich gebe ihm einen Umriss. Also hier in den Gliederungseinstellungen, also werde ich es auf eins legen. Es hat also einen Umriss. Wenn du willst, kannst du auch Schatten hinzufügen. Also zuerst hier in der Schattenfarbe musst du zum Alpha gehen. Und wenn du einen schreibst, erscheinen die Schatten vollständig. Und wenn du 0 schreibst, lass mich deine 0,35 erhöhen. Es bedeutet fünfunddreißig Prozent Schatten. Und ich verschiebe den Schatten-Offset zwei auf zwei, damit er etwas mehr entfernt ist. Sie können sehen, ob Sie mehr hinzufügen, es wird etwas mehr vom Text entfernt. Also 22 ist gut für mich. Okay, also was Sie jetzt tun können, können Sie die Größe immer verringern , indem Sie dieses y hier verringern. Ich glaube, es ist zu groß. So etwas verringert das Y. Also so etwas , vielleicht wie 42. Ja, ich denke, das ist auch gut für dich. Ich kopiere das auch hier oben. Und jetzt sieht es gut aus. Das ist also unsere Health Bar. Was wir jetzt tun können, ist kompilieren und speichern, und wir können es duplizieren. So können wir auf das Overlay klicken. Wir können auf Control D klicken. Jetzt duplizieren wir es. Und lass mich einen Abstandhalter zwischen diesen beiden Abstandshaltern zwischen den Overlays hinzufügen . Und dieser Abstandhalter ist vielleicht zehn und das Y. Es gibt also ein bisschen Platz zwischen ihnen. Vielleicht ist 1515 gut. Das ist also die erfahrene Bar. Anstatt Rot, ändern wir es in gelb oder grün. Das ist normalerweise der Standard für Erfahrung. Und lasst uns es hier unter der Health Bar ändern , es waren 42. Lassen Sie mich das also kopieren und für 24242 hier einfügen, so. Und für die erfahrene Bar. Und vielleicht wird es so etwas wie 23 Erfahrung sagen , dass Sie von 150 haben, die benötigt werden, um aufzusteigen. Also so etwas. Jetzt haben wir diese Benutzeroberfläche gesagt. noch einmal daran, auf das Overlay zu klicken, ändern Sie Ihren Anker in hier unten. Und Sie können versuchen, diese Position am X und Y anzupassen. Ich aktiviere die gestrichelten Linien damit ich tatsächlich sehen kann, wo sie platziert sind. Ich weiß nicht, so etwas spielt im Moment keine Rolle. Lassen Sie uns kompilieren und speichern für die Antwort. Wir wollen so etwas tun wo es heißt, dass du getötet wurdest und dann sagt es, wovon du getötet wurdest. Und dann drücken Sie OK, um zu antworten. Also auch hier brauchen wir ein Overlay, um Text darüber zu legen. Und wir brauchen einen Button mit einem Overlay weil wir einen Button und einen Text darüber haben. Gehen wir also zurück und fügen wir zuerst ein Overlay hinzu. Auf der Suche nach Overlay minimiere ich das hier. Ich füge es der Leinwand hinzu. Dieses Overlay wird hier in der Mitte, in der Mitte, hier oben oben platziert . Und ich schreibe 0 und die Position. Und Sie können sehen, dass es nicht in der Mitte ausgerichtet ist, was es hier an dieser Ecke ausrichtet. So können Sie diese Ausrichtung hier anpassen Ich sehe, dass es 0,5 ist , wenn Sie sie perfekt in der Mitte ausrichten möchten. Und vielleicht kann ich für die Position y 100s sagen, also ist es hier unten. Was Sie jetzt im Overlay tun können, können Sie wieder ein Bild zum Overlay hinzufügen. Sie können es horizontal und vertikal füllen und dieses schwarze Quadrat flach hinzufügen. Und wieder können Sie auf Control D klicken, um es hier unten zu kopieren. Und dann kannst du es in dieses ändern und vertikal ausrichten . Sie können es oben ausrichten. Und ich ändere die Größe auf fünf. Hier. Auch hier machen wir dieses Design. Klicken Sie auf Control D und richten Sie es jetzt nach unten aus. Also haben wir das wieder. Und ich werde diese gestrichelten Linien entfernen. Was Sie jetzt tun können, ist, dass Sie Text darüber hinzufügen können, und er befindet sich in einem vertikalen Feld. Fügen Sie also eine vertikale Box zum Overlay hinzu. Und jetzt können wir zwei Texte hinzufügen. Also dieser eine Text. Und der zweite, der erste wird sagen, dass du getötet wurdest. Dann wird es mit was sagen, zum Beispiel Schnecke. Und der andere wird sagen: Drücken Sie OK, um so zu antworten. Der erste Text hier oben, ich werde die Schriftart hier auf halb fett ändern. Und die Größe wird 12 sein. Und dann werde ich es hier auf die Mitte ausrichten , bei der gleichen Sache mit diesem werde ich es zur Mitte ausrichten. Und für diese zweite werde ich die Schriftart auf fett ändern . Ich ändere die Größe auf 18. Der erste, ich möchte auch einen Schatten hinzufügen. Also gehe ich hier runter und für den Schatten, wenn du das Gleiche für beide tun willst, kannst du einen auswählen, Strg halten, den nächsten auswählen und einfach die gleiche Bearbeitung für beide vornehmen. Also hier in der Schattenfarbe und dem Alpha 0,35. Und für den Schatten-Offset sage ich zu zwei. Es ist also ein bisschen mehr, was Sie sehen können, dass es jetzt in beiden Texten einen subtilen Schatteneffekt gibt. Jetzt kann man sehen, dass sie nicht wirklich in der Mitte sind, obwohl man sie hier in die Mitte ausrichtet. Und das liegt daran, dass sie sich in einer vertikalen Box befinden. Die vertikale Box muss also auch in der Mitte sein. hier hochklicken und das vertikale Feld in die Mitte legen , wird das Problem behoben. Jetzt können wir dies ein bisschen größer machen , um diesen Kontext nicht verdichtet zu haben. Versuchen Sie also einfach, die Größe so zu ändern, wie Sie möchten. Das liegt an dir. Es spielt keine Rolle. So etwas. Vielleicht sieht es gut aus. Und lass mich die Größe einfach so verkleinern. Und jetzt können Sie einen Abstandhalter zwischen diesen beiden hinzufügen. Ich glaube, sie sind zu nah dran. Lassen Sie mich also einen Abstandhalter zwischen diesen beiden Texten hinzufügen. Und der Abstandhalter kann hergestellt werden oder etwas wie fünf. Es gibt also ein bisschen Abstand zwischen ihnen. Was wir jetzt brauchen, brauchen wir diesen Button hier. Sie können also sehen, dass wir diesen Okay Button brauchen. Dieser Okay Button befindet sich tatsächlich in einem, wir müssen eine vertikale Box hinzufügen, da wir dieses Jahr haben und vertikal einen Button haben. Also mussten wir das gesamte Overlay tatsächlich in eine vertikale Box legen. Also vertikale Box legen Sie es hier ab und Sie können dieses Overlay hineinziehen. Stellen Sie einfach sicher, dass dieses vertikale Feld nicht in dieses Overlay eingefügt wurde. Dieser Fehler kann passieren. Minimieren Sie dies einfach und stellen Sie sicher, dass Sie sie hier haben , wo sie sein sollten. Ziehen wir dieses vertikale Feld jetzt. Jetzt haben wir eine vertikale Box. Wir können die Anker später machen. Fügen wir hier im vertikalen Feld hinzu, wir haben dieses Overlay. Fügen wir ein weiteres Overlay mit der Schaltfläche und dem Text hinzu. Suchen wir hier nach dem Button und suchen wir nach Text. Hier. Wir haben den Button und den Text für den Button. Lassen Sie uns einen blauen Knopf hinzufügen, also heißt dieser Blue Square flat. Und wieder können Sie mit der rechten Maustaste mit der rechten Maustaste die Umschalttaste gedrückt halten, während Sie mit der rechten Maustaste auf Kopieren klicken und die Umschalttaste gedrückt halten, Oder Sie können einfach mit der rechten Maustaste klicken und auf „Kopieren“ klicken und Sie können die Bindung auch hier sehen. Ich werde Einfügen sein. Ich mache das Gleiche hier. Ändern Sie stattdessen dieses abgerundete Feld in eine Box. Rechts, halten Sie die Umschalttaste gedrückt, klicken Sie mit der rechten Maustaste auf CoBie , halten Sie die Umschalttaste gedrückt Und für diese Marge 0,5. Und ich schreibe 0.5 damit es richtig kacheln kann. Also klicke ich hier mit der rechten Maustaste darauf kopiere diesen Rand ein. Und für diese Tönungsfarbe werde ich sie für die normale Farbe auf das Weiß verschieben, damit es keinen Farbton gibt. Und für den Harvard lege ich es einfach etwas hier hin. Und für die Brust werde ich es einfach etwas dunkler machen als die schwebende. Das ist deprimiert. Jetzt denke ich, dass das gut ist. Okay, also haben wir das und für die Erleuchtung, also für den Button, eigentlich dieses Overlay, das ganze Overlay, es ist, dass es gerade richtig ausgerichtet ist. Gehen Sie also zu diesem Knopf, richten Sie ihn hier aus und füllen Sie ihn horizontal aus. Und welche Arten von Pellet vertikal, das ist okay. Für diesen Text richten wir ihn in der Mitte aus. Ändern Sie diese Schriftart in fett und ändern Sie die Größe auf 14. Und ich füge wieder einen Schatten hinzu, 0,35 und setze den Schatten nach 222. Wir haben also die gleiche Konsistenz, das gleiche Design, und wir können hier einfach in Ordnung schreiben. Zwischen der Schaltfläche muss also ein Leerzeichen vorhanden sein. Also lasst uns einen Abstandhalter machen. Fügen wir einen Abstandshalter zwischen diesen beiden Overlays hinzu. Wir können vielleicht 20 oder 15 machen. Ich denke, 15 ist gut. Jetzt können Sie sehen, dass die Schaltfläche groß ist und das liegt daran, dass Sie auf das vertikale Feld klicken müssen. Denken Sie daran, dass Sie es zum Füllen geschafft haben. Hier hast du es sich also auch gefühlt. Sie sehen hier, dass es sich horizontal und vertikal anfühlt Wenn wir also auf das vertikale Feld klicken und seine Größe ändern , sollte es die Größe ändern. Aber das ist momentan nicht wirklich der Fall. Und das liegt daran, dass wir hier auf „Ausfüllen“ klicken müssen. Im Moment ist es also auf auto eingestellt. Wir müssen es tatsächlich füllen, also wird es den ganzen Raum ausfüllen. Ich möchte meine UI-Dynamik so machen , damit ich es einfach anstelle von Folk ausfüllen kann, anstatt die Größe hier auf den Bildern neu zu gestalten, ich möchte sie einfach ausfüllen, damit ich auf das Elternelement der Eltern klicken kann das Elternelement und ich kann die Größe einfach so ändern, wie ich möchte, und es wird viel einfacher für dich sein. Okay? Dies ist tatsächlich auch gut, wie fortgeschritten, denn später, wenn Sie Multiplayer und Namen haben usw., können sie länger sein als Ihre Benutzeroberfläche. Dies wird sich also automatisch dehnen , wie lange der Name auch ist, und so weiter. Das ist also eigentlich sehr, sehr gute Praxis. Also lass mich einfach so etwas. Und ich denke, ja, ich glaube, es ist gut. Also lasst uns jetzt eine Zeile richtig Klicken Sie auf das vertikale Feld. Du kannst sehen, dass der Anker hier drüben ist. Klicken Sie auf den Anker, legen Sie ihn in die obere Mitte und schreiben Sie 00 in die Position. Wieder werde ich hier 0.5 ausrichten und 100 und das y schreiben. Also schiebt es es hier runter. So sieht es bisher aus. Lassen Sie uns kompilieren und speichern. Jetzt haben wir die Benutzeroberfläche erstellt und ich denke, es sieht gut aus. Lasst uns alles speichern, kompilieren und wir können mehr Sachen hinzufügen, wenn wir mehr Sachen brauchen. Aber im Moment denke ich, dass das gut ist. Lasst uns mit dem nächsten Video fortfahren. 83. Hinzufügen der Main zum Viewport: Fügen wir nun die Benutzeroberfläche zum Player-Controller hinzu. Und denken Sie daran, dass die Benutzeroberfläche clientseitig ist, und das tun wir im Controller. Innerhalb des Player-Controllers machen wir die gesamte Benutzeroberfläche. Und es ist clientseitig, was bedeutet, dass es nur du als Spieler bist. Sie werden nur Ihre eigene Benutzeroberfläche sehen. Ein anderer Spieler erhält seine eigenen neuen Augen. Es ist also nicht so, dass du es nicht teilst, du siehst dir nur dein eigenes an. Dies ist es, was auf der Clientseite bedeutet, wie auf dem eigenen Client zu laufen , er läuft nur auf Ihrem PC , auf Ihrem Bildschirm. Und es macht keinen Sinn zu teilen. Eine Benutzeroberfläche ergibt keinen wirklichen Sinn. Du kannst nur deine eigene Gesundheit sehen. Und wenn Sie möchten, dass andere ihre Gesundheit sehen, können Sie diese Informationen bei Bedarf jederzeit teilen. Also jetzt, hier und der Spieler-Controller, was wir vorher gemacht haben, ist, dass wir das Widget initialisiert haben, was hier in der Charakterauswahl bedeutet. Wenn wir also auf Play klicken, die Charakterauswahl angezeigt. Willst du es jetzt auch machen. Nicht so, dass wir das Menü I nicht direkt zum Ansichtsfenster hinzufügen möchten das Menü I nicht direkt zum Ansichtsfenster , da wir den Zeichenauswahlbildschirm haben. Was wir jedoch tun möchten, ist, die Haupt-Benutzeroberfläche nach dem Zeichenauswahlbildschirm hinzuzufügen . Aber wir möchten das Widget auch initialisieren. Nehmen wir das zuerst noch einmal, erstellen Sie Widgets. Und wieder tun wir das im Client, der auf dem eigenen Client läuft. Hier wählen wir das Menü aus, das ich gerade als zusammengesetzte Speicherung erstellt habe. Und lassen Sie uns mit der rechten Maustaste auf eine Variable befördert werden, nennen wir es WB made. Das ist alles, was wir hier tun mussten. Wir möchten es nicht zum Ansichtsfenster hinzufügen , denn wenn Sie dies tun, wird es tatsächlich auch die Haupt-Benutzeroberfläche zum Ansichtsfenster hinzufügen . Sie können sehen, dass es die Haupt-Benutzeroberfläche hinzugefügt hat. Das wollen wir nicht wirklich machen. Also lasst uns das entfernen. Und wenn Sie das Ansichtsfenster nicht hinzufügen, können Sie sehen, dass Sie es als Variable bearbeiten, aber Sie haben der Engine nicht mitgeteilt , dass Sie es tatsächlich im Ansichtsfenster haben möchten. Und wir wollen es momentan nicht unter Sichtport. Wir möchten dies jedoch tun, wenn Sie auf eines der Zeichen klicken oder eines der Zeichen auswählen, es wird die Haupt-Benutzeroberfläche zum Ansichtsfenster hinzugefügt. Was wir also tun können, ist, dass wir das schließen können. Denken Sie daran, dass wir hier im Zeichenauswahlbildschirm in der Grafik diese beiden Ereignisse entworfen haben, wenn Sie auf einen der Charaktere klicken. Also lasst es uns tatsächlich hier machen. Lasst uns, wir haben bereits den Spieler-Controller. Wir können also einfach diesen WB Main nennen, den wir gerade gemacht haben. Und hier können Sie nach x suchen und unsere Suche, auf die Sie jetzt schreiben können . Wir entfernen den Zeichenauswahlbildschirm wenn wir das Zeichen auswählen, aber wir möchten dies auch dem Ansichtsfenster hinzufügen. Also möchten wir unseren Charakter, unsere Haupt-Benutzeroberfläche, hinzufügen. Ich kopiere das hier unten einfügen. Wenn wir also Luke oder Serena auswählen, fügen wir dies den Ansichtsfenstern hinzu. Ich mache nur diese Flips, lass das ein bisschen besser aussehen. So etwas. Okay, jetzt werden wir es hinzufügen. Wenn ich also auf Play klicke, wähle ich zum Beispiel eine Schleife aus. Sie können sehen, dass ich jetzt meine Benutzeroberfläche auf dem Bildschirm habe. Auch hier möchte ich nicht wirklich, dass dies so ist, immer dann verfügbar ist, wenn ich gerade spawnt habe, weil dies die Todesbotschaft oder die Antwortnachricht ist . Was wir also tun können, ist zur Haupt-Benutzeroberfläche zu gehen. Wir können es hier auswählen, dieses übergeordnete Element auswählen, das vertikale Feld. Du siehst, dass dies der Richtige ist. Und was wir damit machen wollen, ist hier unten und die Sichtbarkeit. Ändern wir die Sichtbarkeit in „Versteckt“. Wir wollen es nicht sofort sehen. Also werden wir es ebenso verstecken wie diesen Fortschrittsbalken. Die Gesundheit liegt also von Anfang an bei 100%. Also erhöhe ich den Standardprozentsatz tatsächlich auf 100. Und sie haben erlebt, dass man unten ist, wie 0 Erfahrung, wenn man anfängt. die Zahl betrifft, so sind dies zunächst 100 Prozent, und für diese ist es 0 von etwas. Ich weiß es noch nicht, also lass uns hier nichts hinzufügen. Wenn du jetzt auf Play klickst, siehst du jetzt, dass es richtig ist. Jetzt wird diese Nachricht hier oben nicht angezeigt. Und wir können unsere Gesundheit und unsere Erfahrung hier sehen. Ich werde die Größe ein wenig ändern. Ich denke, das ist zu groß. So etwas. Meine OCD löst aus. Ich habe nicht wirklich OCD, aber vielleicht habe ich so etwas. Ich denke, es ist viel besser. Sieht gut aus. Wir können das ein bisschen hier im Y verschieben. So etwas. Okay, sieht perfekt aus. Jetzt haben wir die Gesundheit und die Erfahrung sieht interessant aus. Und dann haben wir den Tod. Wie auch immer, ich möchte tatsächlich, dass es erscheint, wann immer wir sterben. Und das werden wir tun, wenn wir mit dem Spieler arbeiten, antworten. Das haben wir bisher also. Und das nächste, was wir tun können, ist diese Gesundheitsleiste zu aktualisieren. Es ist sehr einfach, weil wir diese Logik bereits hatten. Lasst uns also zum nächsten Video übergehen. 84. Aktualisieren der Gesundheitsleiste: Um die Health Bar zu aktualisieren, gehen wir zurück zur Benutzeroberfläche und gehen zur Haupt-Benutzeroberfläche. Dies ist die Gesundheitsleiste, die wir hier aktualisieren werden , damit der Fortschrittsbalken es einfacher macht. Hier in der Grafik zum Codieren können Sie sehen, dass all diese Müllnamen haben. Lassen Sie uns also einfach diesen Namen des Fortschrittsbalkens in Prag ändern. Normalerweise nenne ich das als Fortschrittsbalken. Und dann Gesundheit. Wir wissen also, dass es der Fortschrittsbalken für die Gesundheit ist. Und dieses hier werde ich den Namen für Text und Gesundheit in TXT ändern . Lasst uns das in Prager Erfahrung umstellen. werden wir später benutzen, nicht gerade jetzt. Und dieser namens TXT Experience, Compile und Save for the button hier oben. Lassen Sie uns auch den Namen ändern, während wir die Schaltfläche „Bearbeiten“ sind. Und einfach, okay, das hier oben, wir wollen uns auch später ändern weil wir den Namen ändern werden. Ich nenne es TXT. Erschlagen, nennen wir es von Verbindungen getötet. Sparen Sie. Jetzt können Sie hier für diesen Text sehen, dass wir ihn auch festlegen möchten, aber wenn Sie beispielsweise auf diesen Fortschrittsbalken klicken und zum Diagramm gehen, können Sie sehen, dass der Fortschrittsbalken hier eine Variable ist. Aber wir möchten diesen Text auch hier ändern. Wenn Sie jedoch auf das Diagramm klicken, gibt es keinen Text. Und das liegt daran, dass Texte standardmäßig keine Variablen sind und Sie diese hier namens S Variable aufnehmen müssen , und dann wird es hier im Diagramm angezeigt. Es gibt jedoch viele Bilder. Bilder sind Standardvariablen, aber manchmal müssen Sie Ihr Projekt bereinigen , also müssen Sie beispielsweise auf dieses Bild klicken und es als Variable entfernen, da Sie es nicht wirklich benötigen um dies im Spiel zu ändern. Auch für den Hintergrund hier kann ich es entfernen, wenn du willst, kann das auch bereinigen. Entfernen Sie also diesen Hintergrund ist eine Variable. Entferne einfach alle hier. Dies kompilieren und speichern. Und Sie können sehen, dass Ihr Projekt viel sauberer ist, wenn Sie nur die Variablen haben, mit denen Sie arbeiten werden. Lassen Sie mich also diese Standardereignisse löschen und lassen Sie uns einen Aufruf machen, machen wir ein benutzerdefiniertes Ereignis, und nennen wir es Update-Health. Was ich normalerweise für die Benutzeroberfläche mache, erstelle ich nie Blueprint-Interfaces. Ich meine, du kannst, du kannst einfach reingehen und eins dafür erstellen. Aber es macht keinen Sinn, weil Sie normalerweise nicht viele Ereignisse haben. Und Sie müssen viele Schnittstellen erstellen . Als müsste man für jede einzelne Benutzeroberfläche eine erstellen. Und das möchte ich nicht tun, also erstelle ich normalerweise nur benutzerdefinierte Ereignisse für sie. Also hier für die Update-Gesundheit, was wir tun wollen, wollen wir den Fortschrittsbalken für die Gesundheit verwenden und den festgelegten Prozentsatz angeben. Das ist das, was wir aktualisieren möchten. Und du kannst sehen , wie es heißt. Wenn Sie auf den Fortschrittsbalken klicken und hier runter gehen, sehen Sie, dass er Prozent heißt. Wenn Sie also nur suchen, suchen Sie nach Prozent. Wenn Sie nicht wissen, wie es heißt, werden Sie diesen hier sehen. Wir möchten also den Prozentsatz festlegen, aber wir möchten auch diesen Text namens Health aktualisieren , der auch als setText bezeichnet wird. Also wollen wir diesen Text auch festlegen. Für diesen Prozentsatz werde ich es einfach durch dieses Ereignis führen und wir können es noch einmal an einem anderen Ort nennen. Lassen Sie mich es einfach Prozent statt persönlich für diese Texte nennen , es wird nur ein Prozentsatz von allem sein , was dies durchmacht. Und du wirst später sehen, was ich meine. Aber jetzt ziehen wir einfach von hier aus und sagen „Geschenk“. Und für den Float hast du etwas, das als Prozent bezeichnet wird. Es wird dies also als Prozent für Text umwandeln. Und dann können wir es hier einstecken. Es wird also hier als Prozentsatz angezeigt. Jetzt können wir immer versuchen zu testen und zu sehen, ob das richtig funktioniert. Jetzt, da wir diesen Compound-Verkauf haben, denken Sie also daran, dass wir die Benutzeroberfläche innerhalb des Player-Controllers behandeln. Lassen Sie mich also zurück zum Blueprints Player Controller. Und drinnen von hier. Letztendlich wollen wir es also von der Spielerbasis aus hier nennen, denn die Spielerbasis überprüfen wir, als würden wir die Gesundheit hier drüben berechnen . Und das wollen wir tatsächlich anzeigen, wie zum Beispiel die Benutzeroberfläche von hier aus aktualisieren. Es wird von der Spielerbasis zum Spieler-Controller und am Ende zu diesem wechseln . Erstellen wir also jetzt den beim Player-Controller. Im Moment initialisieren wir also beim Player-Controller Widgets. Wir haben diesen Charakter und wir haben den Spieler spawnen. Also jetzt hier unten, lass uns noch eins machen. Und nennen wir es. Machen wir ein benutzerdefiniertes und wir können es zu einem Blueprint-Interface machen. Und ein bisschen wollte ich nur sehen, was wir hier tun können. Machen Sie es also blind in Ihren Kunden, aktualisieren Sie, aktualisieren Sie es, Health Bar und lassen Sie uns dieses Ereignis aufrufen. Nehmen Sie also hier im WB-Hauptteil teil, denken Sie daran, dass sich das Ereignis hier innerhalb der Haupt-Benutzeroberfläche befindet. Wir haben also bereits eine Variable in unserem Spieler-Controller. Wir haben es uns gerade hier ausgedacht. Wir haben diese Variable gerade gemacht. Wir können diese Variable jetzt verwenden und wir können dieses Ereignis namens Update-Health aufrufen. Nennen wir es sagen „Gesundheit“. Und jetzt findest du es hier. Als nächstes wollen wir einfach gehen und diesen Prozentsatz hineinbringen. Und das brauchen wir. Lassen Sie uns diesen tatsächlich in einen laufenden, besitzenden Client umwandeln und zuverlässig. Was wir jetzt tun müssen, ist, dass wir dieses benutzerdefinierte Ereignis hier oben haben wollen. Machen wir es zu einem Blueprint-Interface. Gehen wir zurück zu den Schnittstellen, zum Player-Controller. Und hier, lasst uns wie haben wir es genannt? Aktualisieren Sie die Gesundheitsleiste. Und nennen wir es hier, aktualisiert die Gesundheitsleiste. Fügen wir hier einen Float hinzu und nennen ihn Prozent. Ich glaube, es hieß Present und nennen wir es jetzt hier, sagen wir Update Health Bar. Und wir können diese Interface-Ereignisse aufrufen. Und jetzt können wir diesen clientseitigen Eins nennen und die Gesundheitsleiste aktualisieren. Und lasst uns das durchziehen. Also jetzt müssen wir die Spielerbasis durchrufen. Nennen wir es also hier. Um also die Gesundheit zu aktualisieren, gehen wir jetzt tatsächlich zurück mit der Spielerbasis ist da. Also subtrahieren wir und rechnen damit. Wir müssen es hier machen. Also müssen wir das tatsächlich ein bisschen weiter wegbewegen . Und jetzt brauchen wir den Spieler-Controller. Und lass mich sehen, was wir hier gemacht haben. Wir hatten den feindlichen Controller. Wir haben den Player-Controller nicht, also können wir tatsächlich darauf verweisen, sagen wir, den Controller holen, weil wir bereits im Player sind , damit wir den Controller wie Dies und dann sagen Sie erhält Layer Control unsere Referenz, weil wir diesen Player-Controller hier verwenden möchten . Wo ist es? Dieser? Insbesondere beziehen wir uns auf diese PC Maple Story. Und von hier aus werden wir das Update Health Update Health Bar aufrufen , ich glaube, es wurde aufgerufen und es ist eine Nachricht. Denken Sie also an die Nachricht hier, denn es ist eine Blueprint-Interface-Funktion, die wir erstellt haben. Es ist also eine Nachricht, wenn Sie darauf klicken, kompilieren und speichern. Jetzt müssen wir also etwas in diesen Prozentsatz stecken und für diesen, also denken Sie daran, Sie können mich das hier nicht einfach aufschlüsseln lassen. Eigentlich müssen wir das nicht ständig machen. Wir können das einfach gebrauchen. Lassen Sie mich das vorerst trennen. Wenn wir diese Gesundheit verwenden, können wir sie nicht einfach in Prozent stecken. Denn für die Benutzeroberfläche, wenn Sie sich den Fortschrittsbalken ansehen, für die Benutzeroberfläche, geht Ihr Fortschrittsbalken tatsächlich von, schauen wir uns hier an. Es geht von eins auf 0, also geht es nicht auf 100%, es geht auf 0 zu eins. Wenn Sie also einen Prozentsatz geteilt durch 100 haben , um diese Zahl zu erreichen. Andernfalls, wenn Sie nur 100% anschließen, werden es immer 100 sein, denn dann ist die maximale Zahl tatsächlich eins und das Minimum 0. Also 0 zu eins. Denken Sie daran, nicht auf 0 bis 100 zu stehen. Gehen wir also zurück zur Spielerbasis. Und was ich tun muss, Lassen Sie uns eine neue Veranstaltung namens Max Health machen weil wir einen Prozentsatz nehmen müssen und um ein Prozent machen zu können, müssen wir wissen, was es vorher war. Lassen Sie uns eine maximale Gesundheitsvariable machen. Und anstatt es hier unten zu tun, kannst du es einfach in den Spielerinformationen machen. Gehen wir also zu den Strukturen als Spielerinfo und machen wir einfach eine neue Gesundheitsvariable. Nennen wir es Max Health. Und sagen wir mal, manchmal wie in RPGs, können Sie diese maximale Gesundheit verbessern. Und diese Gesundheit ist genau so, als würden wir diese Gesundheit nur benutzen, um sie ständig zu ändern. Dies führt jedoch dazu, dass die Gesundheit immer auf dem Maximum bleibt und Sie können sie später mit Upgrades aktualisieren. Also haben wir die maximale Gesundheit und gehen wir tatsächlich zum Spieler-Basis-Compound-Sparen. Und in der Spielerbasis musst du festlegen, was diese maximale Gesundheit ist. Stellen wir es einfach auf 20 ein. maximale Gesundheit ist 20. Lasst uns jetzt gehen. Lass mich einfach alles zusammenstellen. Gehen wir zurück zur Spielerbasis. Jetzt haben wir die maximale Gesundheit als Prozentsatz. Sie müssen diese verbleibende Gesundheit nehmen und teilen, durch die maximale Gesundheit teilen. Jetzt erhalten Sie die prozentuale Zahl , die Sie hier anschließen können. Und jetzt, da Sie diesen Update-Zustand in Prozent haben, wird dies jetzt durch den Player-Controller gehen. Sie rufen dies also von der Plake-Kontrolle über ihre Gesundheit an den Spieler-Controller, wird durch die Clients gehen. Denn denken Sie daran, dass die Benutzeroberfläche clientseitig ist, also wird sie durch den Client gehen und die Gesundheit aktualisieren, die hier ist. Und es verwendet auch die Nummer, die Sie haben. Wenn Sie zum Beispiel bei maximaler Gesundheitszahl sind, wird hier bei 1 und der Fortschrittsbalken hier 1 sein, wenn Sie nur als Prozentsatz tun, glaube ich, dass es mit einer 100 multipliziert wird. Also steckt es hier im Text. Aber wir müssen es tatsächlich testen und sehen, ob es richtig funktioniert. Jetzt als Prozentsatz. Und jetzt kannst du diese verbinden und fragen, ist, ist diese Gesundheit hier? Ist es gleich 0? Sagen wir nochmal gleich 0. Wir können hier einfach löschen und stattdessen verbinden. Du kannst einfach weitermachen , was du vorher getan hast. Jetzt aktualisieren Sie den Fortschrittsbalken und speichern Sie alles. Und bevor wir fortfahren, glaube ich, dass es das war. Versuchen wir einfach zu sehen, ob es funktioniert. Also ist es bei 100 und dieser wird mich treffen. Also bin ich eigentlich, wir können sehen, dass wir hier einen Fehler haben. Aber versuchen wir das später zu beheben. Also lasst uns mal sehen, wovon das verursacht wurde. Das hier. Du kannst sehen, dass es mich trifft und ich habe 50 übrig, weil es mich für 50 trifft. Und wenn ich 0 habe, bin ich dieses Grab und nichts passiert. Das funktioniert also wirklich einwandfrei. Und wenn ich meine Gesundheit steige, gehen wir an, wir gehen zu den Spielerinformationen und erhöhen die maximalen Hügel um 50 zu sagen. Und wir fangen auch mit 50. Also lasst uns jetzt spielen. Und jetzt können Sie sehen, dass es einwandfrei funktioniert. Und wenn ich hierher gehe, wird es mir viel mehr schaden. Und dann wird er mich umbringen. Jetzt funktioniert das einwandfrei. Der Prozentbalken ist korrekt und der Prozentsatz hier, der Text hier ist ebenfalls korrekt. Für diesen Bug unter dem Buchstaben muss ich das tatsächlich beheben. Wenn du also springst, greift es aus irgendeinem Grund nicht. Ich kann sehen, dass es hier stecken bleibt. Und lass mich einfach versuchen, mit diesem Schwein hier auf die Leiter zu springen . Es funktioniert also, wenn ich mich nicht bewege, aber es nervt. Wenn ich von der Seite springe, was sehr seltsam ist, hat es vielleicht etwas mit den Kollisionen zu tun , die wir hinzugefügt haben. Also lass mich eigentlich sehen, lass mich hier sehen. Wenn wir also tief hier oben sind, lass mich zum Cholin gehen , das auf und ab ist. Wir klettern also und wir haben diese Unwrap Funktion namens isClient sein. Wie viel gibt es hier nur eine Zeichenfolge aus, um zu sehen, ob das so ist, als ob wir durch die Kollisionen, die wir haben, vermissen. Jetzt wird es also Hallo sagen. Ja, du siehst , dass es oft sagt. Es ist eigentlich nicht viermal, wenn ich das nur zehn Sekunden lang mache. Also kann ich es erklären. Du siehst hier, wir werden drauf springen. Es ist eigentlich ein Say zweimal, eins vom Server und eins vom Client. Und wir haben offensichtlich noch einen vom Server. Also ist es eigentlich dreimal hier. Wir haben mehrere Kollision, als ob es das nicht dreimal tun sollte. Dieser Code muss also nur einmal ausgeführt werden. Es gibt also etwas mit den Kollisionen, die wir anpassen müssen, was dieses Problem verursacht weil wir nur einmal damit kollidieren müssen. Also lass mich für den Spieler auf diese Kapsel klicken und schau es mir an. Und wir ignorieren alles außer dem Dynamischen und Statischen. Und lass mich diese Angriffskollision machen. Vielleicht hieß es, dass die Angriffskollision, wir ignorieren alles außer der Weltdynamik. Und lass mich einen Blick auf die Leiter werfen. Lassen Sie mich also zu den Blaupausen zurückkehren die Linie blind basiert, werfen Sie einen Blick auf die Kollisionsbox für diesen Hier überlappt alles. Und diese Renderkomponente ist auf keine Kollision eingestellt. Das hat also keine Kollision. Also der Spieler, nur um sicherzustellen, dass das Sprite auch keine Kollision hat. Eigentlich hat es Kollision, aber keine Überlappungsereignisse. Also lass mich diese Kollisionsbox versuchen. Lassen Sie mich zum Kostüm gehen und tun, wie wir die Weltdynamik ignorieren können und versuchen, auf Play zu klicken und zu sehen, was passiert. Jetzt kannst du sehen, dass es tatsächlich funktioniert. Testen wir das ein paar Mal, nur um sicherzustellen , dass das nicht plötzlich blockiert . Lass mich als Kunde spielen. Lassen Sie mich also den Kunden hier hochziehen und sicherstellen, dass er auch funktioniert. Das funktioniert. Es passt unseren Standort an. Okay. Also funktioniert alles. Und das Problem war, dass wir zwei Kollisionen hatten, die damit verbunden waren. Für die Kollision war es also derjenige, der damit kollidierte. Denn denken Sie daran, dass die Angriffskollision eine Weltdynamik ist und sich die Leiterkollision mit der Weltdynamik überlappen wird. Wir müssen also die Weltdynamik ignorieren, was bedeutet, dass wir diese Angriffskollision ignorieren müssen. Und das wird es nicht mehr durcheinander bringen. Das war also die Lösung hier, eine sehr einfache Lösung. Stellen Sie es einfach auf den Kunden ein und entfernen Sie es. Ignoriere das gut dynamisch und das wird das Problem beheben. Damit haben wir dieses Problem behoben und auch die Health Bar UI aktualisiert. Gehen wir zur nächsten und aktualisieren die Todessteuer. 85. Den Death aktualisieren: Gehen wir nun zurück zur Benutzeroberfläche und gehen zum Haupt. Hier möchten wir diesen Text aktualisieren. Es heißt also, du wurdest von getötet und es heißt Schnecke. Also müssen wir diesen Text hier aktualisieren. Klicken Sie also erneut auf diesen Text, denken Sie daran, ihn auf Variablen zu setzen, damit wir ihn bearbeiten und hier in die Grafik gehen können . Und ich rufe das an, erstelle ein benutzerdefiniertes Ereignis und nenne es Todesnachricht anzeigen. Und wir können uns auch anschauen, als könnten wir die Nachricht anzeigen und diese Texte auch aktualisieren. Wenn wir diesen Text nehmen , müssen wir zuerst diese Nachricht anzeigen. Denken Sie daran, dass es standardmäßig versteckt ist. Nehmen wir an, was wir tun wollen. Ich glaube, wir müssen es auch in eine Variable verwandeln. Wir möchten, dass dieses vertikale Feld angezeigt wird. Denken Sie daran, dass wir es auf versteckt gesetzt haben. Also müssen wir, lasst uns den Namen ändern. Also VB für vertikale Box und lass mich es antworten nennen. Antwort oder Todesbotschaft. Nennen wir es Todesbotschaft. Und lasst es uns in eine Variable einfügen, damit ich es im Code sehen kann. also hierher gehen und dies nehmen können, was wir sagen können, ist, die Sichtbarkeit zu setzen. Und jetzt können wir es sichtbar machen . Und lass es uns verbinden. Jetzt ist es also sichtbar. Und das nächste, was wir tun wollen, ist diesen Text hier anzuzeigen. SetText hat also tatsächlich den Text geändert , der genau wie das hat, was wir hier mit diesem gemacht haben. Aber mit diesem werde ich dir jetzt etwas Neues beibringen. Du hast also etwas Dynamik. Es wird also sagen, dass du von Schnecken getötet wurdest. Also kopiere ich einfach diesen Text ein und platziere ihn hier. Dann wollte ich gehen, du wurdest getötet. Du wurdest von Schnecke getötet. Diese Schnecke, manchmal ist es ein Schwein, manchmal ist es ein neuer Feind, den du deinem Spiel hinzugefügt hast, also ist es nicht unbedingt eine Schnecke. Wenn Sie also dynamische Texte wie diese haben , die sich während des Gameplays ändern müssen, müssen Sie hierher ziehen und etwas namens Formattext verwenden . Benutze das stattdessen. Wenn Sie einen dynamischen Text haben, der nicht ständig statisch ist, füge ich meinen Text hier erneut ein. Die Sache, die du dynamisch sein willst . Dieser Text ist also statisch. All das, das einzige, was ich ändern möchte , ist diese Schnecke hier. Manchmal ist es ein Schwein oder manchmal ist es ein anderer Feind , den du hinzugefügt hast. Um dies zu tun, musst du diese lockige Klammer schreiben. Diese beiden lockigen Klammern. Und in der Mitte kannst du einfach schreiben, was du willst. Drücken Sie die Eingabetaste, und Sie können sehen, dass Sie hier eine Variable haben , die Sie anschließen können. Jetzt. Du kannst hier schreiben, was du willst. Zum Beispiel versuchen wir hier, den Namen des Feindes festzulegen. Also nenne ich es einfach irgendeinen Namen. Sie können sehen, dass es sich entsprechend ändert. Sie können also alles in lockige Klammern schreiben. Dies ist der dynamische Text , den wir ändern müssen. Dieser Text wird der Name des Feindes sein und wir haben noch keine feindlichen Namen angegeben. Gehen wir also zurück zur Struktur. Denken Sie daran, dass wir dieses Tier haben, tierische Informationen, sehr nützlich. Wir können Informationen über die Tiere haben. Also lass mich das einfach nennen, eigentlich keine Schnecke, lass mich es Namen nennen. Also haben wir den Namen des Feindes hier. Und lass mich das in eine Zeichenfolge ändern. Compounds sparen und lass es mich hier oben stellen. Wenn Sie dies jetzt noch einmal tun, denken Sie daran, dass Sie zu Feind, Feindbasis, Kompilieren und Speichern gehen können . Jetzt kannst du es bei allen Feinden sehen. Gehen Sie zum Beispiel zur Schnecke in den Standardeinstellungen der Klasse. Jetzt haben wir diese Namenszeichenfolgenvariable hier. Und du kannst diese eine Schnecke einfach nennen. Und lass uns hier zum Schwein gehen und den Namen angeben. Nennen wir es „Pick“. Du kannst ihm sogar einen Namen geben, wie du es Victor nennen kannst oder was auch immer du tun willst. Aber denk dran, das ist für alle Schweine. Also werden sie alle Victor heißen. Nennen wir das ein Schwein. Und lass uns das machen. Okay, jetzt haben wir den Namen hier und es ist eine Zeichenfolge. Also lasst uns hier klicken und String sagen. Und nennen wir diesen einen feindlichen Namen, Tangente in eine Schnur. Und jetzt können wir es hier unten verbinden. Und Sie können jetzt sehen, dass Sie eine Variable durch diese in diesen Formattext steuern können . Jetzt, da wir das haben, denken Sie daran, dass dies eine Benutzeroberfläche ist, also müssen wir zum Player-Controller gehen und es dann hier anrufen. Aber um deinen Code ein bisschen besser zu machen, kannst du gehen, lass uns hier zum Hauptteil zurückkehren. Wie diese Anzeige wird die Todesmeldung angezeigt, wenn Ihr Gesundheitszustand 0 ist. Denken Sie daran, dass Sie hier im Update-Zustand bereits nach dem Gesundheitszustand suchen . Sie können es sich also einfach einfacher machen , anstatt nur ein anderes Ereignis hier zu machen und der Spieler-Controller Updates, Todesbotschaft oder ähnliches sagt . Du suchst bereits nach der Gesundheit. Sie wissen also bereits von hier, wann immer es 0 ist und wann immer es 0 ist, wird diese Todesbotschaft angezeigt. Das ist es, was du brauchst. Also hier im Prozentsatz können wir einfach gleich 0 sagen. Und danach können wir einen Zweig machen. Und wenn es 0 ist, rufen Sie diese mit der Bezeichnung Todesnachricht anzeigen auf. Wir können also einfach sagen, dass diese Nachricht angezeigt wird. Und jetzt hast du es. Sie müssen dies jedoch erneut durch all diese Ereignisse fahren . Also ziehe ich diesen feindlichen Namen hier durch. Jetzt geht es zu den Player-Controller-Treibern hier durch, den Client. Und hier müssen Sie diese durchgehen, aber das können Sie nicht tun, da dies eine Blueprint-Interface-Funktion namens Health Bar aktualisieren ist . Ich gehe zurück zum Interface-Controller namens Update Health Bar. Und fügen wir hier eine Zeichenfolge hinzu, die feindlicher Name genannt wird, Feind kompilieren und speichern oder den Spieler-Controller. Wir können sie jetzt verbinden. Und denken Sie daran, dass es in der Spielerbasis ganz vorbei ist. Gehen wir also zurück zum Spieler, Spielerbasis. Jetzt kannst du es in der Spielerbasis sehen. Lass uns zum Code gehen. Und Sie können es jetzt hier sehen , wenn wir die Gesundheit aktualisieren. Eigentlich muss ich ihm auch den Namen nennen. Klicken Sie also hier rüber, denken Sie daran, dass wir es hinzugefügt haben. Dieser ist also eigentlich die Spieler-Info. Wir haben es in die feindlichen Informationen oder Tierinformationen hinzugefügt. Also für die Tierinformationen müssen wir es hier nennen. Also lasst uns das im Spieler machen. Wie nennen wir das? Denken Sie daran, dass es in der feindlichen Basis gespeichert ist , Basispläne. Haben wir etwas , das wir tun können um den feindlichen Basisplan zu nennen da dieser eine verbundene Spieler tatsächlich ein alter ist , den ich löschen muss. Haben wir also etwas, von dem wir den Feind **** nennen können ? Und ja, wir haben, denken Sie daran, dass wir den feindlichen Controller haben. Dies ist diejenige, die wir hier definiert haben. Wann immer wir kommen, wie wenn wir Schaden bekommen, ist dies vom Feind. Wir haben also bereits den Controller des Feindes und wir können sehen, dass er kontrolliert wird, und so bekommen wir die feindliche Basis. Denn jetzt können wir sagen, bekommt feindliche Referenz wie diese. Und von hier aus können wir Tierinformationen sagen. Jetzt können wir es hier kriegen. Und jetzt können wir es brechen und wir können den Namen so einfach verstehen. Also klicke hier auf diesen Namen, so. Also müssen wir dies in unseren Code aufnehmen. Damit wir hier sehen können, können wir es hier einbeziehen. Lassen Sie mich das alles so bewegen. Lassen Sie mich einfach hier unten einbeziehen, wir können es einfach ein bisschen aufräumen. Es ist gerade ein bisschen durcheinander. Und wir können den Namen hier drin stecken. Was funktioniert jetzt eigentlich richtig? Hoffentlich können wir das natürlich testen, bevor wir es glauben. Lassen Sie uns jetzt versuchen, diese ein bisschen besser zu organisieren. So etwas. Sie können diese auch so näher bringen. Und doppelklicken Sie hier, um einen Eisenbahnknoten zu erstellen und ihn ein bisschen besser aussehen zu lassen. So hier. Und Sie können sogar dazu hier doppelklicken und stattdessen tun. So etwas sieht es etwas sauberer aus. Ja, das sieht gut aus. Jetzt können wir also kompilieren und speichern. Jetzt legen wir den Namen fest. Es wird durch den Spieler-Controller gehen. Hier. Es wird durchgehen, es wird das blinde Ereignis durchlaufen, wird die Update-Gesundheit durchlaufen, die dann hier durchgehen wird. zu diesem Zweck wird hier durchgehen und diesen feindlichen Namen setzen. Und es wird dynamisch sein weil Sie bereits in der Schnecke definiert haben , wie der Name der Schnecke ist und im Schwein, wie der Name des Schweins lautet. Jetzt sollte es also klappen. Aber wir können dies derzeit nicht testen. Eigentlich ist die Wirtschaft, die wir bereits zeigen, nur die Antwort , die wir noch nicht definiert haben. Also lass mich einfach den Zahler schlagen, damit ich schneller sterben kann. Jetzt kannst du sehen, dass es heißt, du wurdest von Pig getötet. Drücken Sie OK, um zu antworten. Und dann kannst du auf OK klicken, wir haben einen kleinen Bug. Sie können sehen, dass die Schaltfläche nicht oben gedrückt werden kann , okay, Text und nur hier draußen gedrückt werden. Also lasst uns das in Ordnung bringen. Und ich möchte das ein bisschen größer machen. Es ist ein bisschen zu klein. Gehen wir also zurück zum Menü. Ich gehe zum Designer. Möchten Sie dies ein bisschen größer machen, damit Sie auf das Bild klicken Größe etwas größer machen und das vertikale Feld vergrößern können, damit die Schaltfläche größer wird. So etwas. Was wir jetzt tun können, ist dafür, okay, hier, erinnere dich an das Ding wie wenn Bugs ausgeht und es deinen Button hier blockiert und es gibt keine Blocksets. Sie müssen hier hinunter zur Sichtbarkeit für diesen Text gehen und ihn auf „None Hit Testable Self“ setzen. Und das bedeutet, dass Sie das nicht mit der Maus treffen können. Deine Maus wird das also ignorieren. Und so kannst du dich einfach auf den Button konzentrieren. Denken Sie also daran, dies mit blockierenden Elementen oder Schaltflächen zu tun. Wenn du zum Beispiel einen, einen Ingame-Shop oder so machst und Symbole hast, musst du das für die Icons tun. So können Sie jetzt sehen, dass ich auf den Button klicken kann , obwohl ich auf dem Text bin. Ich sage einfach den Namen hier. Jetzt funktioniert alles richtig. Das nächste, was wir tun wollen, ist, wenn du darauf klickst, okay, wir werden auf das Spiel antworten. 86. Player: Arbeiten wir jetzt an der Antwort für den Spieler. Gehen wir also zurück zu Blaupausen und zum Spieler, Spielerbasis. Also haben wir das alles codiert, jeden Schaden bisher. Und wir haben die Spieler in den Tod gesetzt wo immer der Spieler stirbt, aber wir haben nie angegeben wann Sie nicht mehr tot sein werden. Und wir wollen tot sein, wenn Sie einfach auf den Okay Button innerhalb der Haupt-Benutzeroberfläche klicken . Also lasst uns das zuerst machen. Gehen wir jetzt zuerst zur Haupt-Benutzeroberfläche. Und drinnen hier, wenn Sie auf diesen Button klicken , klicken Sie hier auf den Button und gehen Sie zum Button. Und dann können Sie alle diese Ereignisse sehen diese Ereignisse wenn Sie auf die Schaltfläche klicken, klicken Sie auf dieses Plus, um dieses Ereignis zu erstellen. Wenn Sie also auf diesen Okay Button klicken , was sollte passieren? Ich wollte nur meinen Tod auf falsch setzen. Nun, da wir uns in diesem Kurs befinden, versuchen Sie dies selbst zu tun. Versuchen Sie, ein festzulegen, versuchte mit diesem Blueprint zu kommunizieren und versuchen Sie, es selbst auf falsch zu setzen. Wenn du willst, wenn du hier versagst, kannst du mir immer folgen. Und lass es uns jetzt zusammen machen. Sie können das Video anhalten, wenn Sie es selbst machen möchten. Was wir jetzt tun wollen, ist, dass wir mit der Spielerbasis kommunizieren wollen. Wir wollen das, die Pons irgendwie kriegen. Denken Sie in der Benutzeroberfläche daran, dass dies clientseitig ist, also hat jeder einzelne Punkt, jeder einzelne verbundene Player diese Benutzeroberfläche. Also kann ich einfach mit der rechten Maustaste klicken und sagen: Get Owning Layer Pawn. Holen Sie sich also einen Spieler, den Spieler-Controller, holen Sie sich den Owning Player Pawn erhält das Pfand-Steuerelement auf ****. Hit die besitzende Plattform. Und Sie können sehen, dass der Player Pawn mit dieser Benutzeroberfläche verknüpft wird . Und von hier aus können wir einfach „Spielerreferenz abrufen“ sagen. Und was wir jetzt tun können, ist, dass wir diesen Tod hier nennen können , weil dies innerhalb der BP-Spielerbasis gemacht wird. Also können wir das einfach Todesereignisse nennen . Und es ist eine Nachricht, weil es eine Blueprint-Interface-Funktion handelt. Und wir können es einfach auf „false“ setzen. Und denken Sie daran, wir müssen festlegen, dass diese Todesbotschaft wieder versteckt wird, da sonst auf dem Bildschirm angezeigt wird. Stellen Sie also die Sichtbarkeit so auf versteckt ein. Ups, so. Okay, also jetzt ist das behoben. Okay, jetzt haben wir gesagt, dass der Tod falsch ist. Gehen wir also zurück zur Spielerbasis. Ich habe ich bin mir nicht sicher, was wir hier eigentlich gemacht haben. Ja, wir mögen nur Wir haben nicht viel getan. Wir setzen dies nur auf falsch und wahr. Stimmt das hier, wie wenn du tot bist, wird es das zeigen, um dir das Buch umzudrehen. Also was wir hier machen wollen, lass mich einfach einen Zweig machen. Was soll es also tun, wenn du das nicht mehr bist? Also wenn du reagierst. Zuerst möchte ich meine Gesundheit wieder auf 100 setzen , weil es jetzt 0 ist. Also nehme ich mein hier in den Properties, meine Struktur. Schon wieder. Ich möchte meine Gesundheitstasche einstellen, also setze Mitglieder hier und wähle das aus, wähle die Gesundheit aus. Jetzt wollen wir die Gesundheit festlegen. Worauf willst du es einstellen? Sie möchten es auf die maximale Gesundheit einstellen. Also bringe ich es jetzt kaputt. Denken Sie daran, dass wir eine maximale Gesundheitsvariable gemacht haben. Jetzt wollen wir uns nur verbinden , die Gesundheit hier macht. Lass mich einfach diese anderen Pins verstecken. Okay, jetzt stellen wir die Gesundheit auf die maximale Gesundheit ein und wir sind wieder bei vollem Gesundheitszustand. Also lasst es uns verbinden. Verbinden wir es also dem Falschen, denn wenn du nicht mehr tot bist, bedeuten die Falten das. Hier. Wir müssen uns daran erinnern, dass wir die Spielerinformationen so wieder hier einstellen müssen. Jetzt haben wir den vollen gesundheitlichen Rückschlag. Das nächste, was wir tun müssen, müssen wir die Benutzeroberfläche aktualisieren denn obwohl wir diese Variable festlegen, denken Sie daran, genau wie bevor Sie den Fortschrittsbalken aktualisieren müssen. Es zeigt Ihnen also, dass Sie bei 100 Gesundheit sind. Was wir dafür tun können, können wir das hier kopieren und einfügen. Also hol den Controller, hol dir den Spieler-Controller. Also diese beiden hier oder ich kann es einfach schreiben, wenn du willst. Also kriegen wir den Spieler-Controller hier. Und was Sie hier tun können, ist, was der Player-Controller, wieder können Sie die Aktualisierungs-Gesundheitsleiste aufrufen. Hier als die Botschaft. Ich glaube, es war die Botschaft hier. Ja, das war richtig. Und habe ich es tatsächlich als Nachricht genannt? Ja, das hab ich hier. Ich will nur sehen, ob ich hier oben einen Fehler gemacht habe. Jetzt ist es also richtig. Und für den Prozentsatz können Sie wieder die Gesundheit geteilt durch die maximale Gesundheit nehmen. Also nochmal, genau wie zuvor, nimm das, nimm es auf und nimm diese Gesundheit und teile sie durch die maximale Gesundheit, genau wie zuvor. Also derselbe Code hier. Und dann kannst du es mit dem Prozentsatz verbinden. Was die Eliminierten angeht, brauchen wir es nicht wirklich. würdest du diese Benutzeroberfläche nicht anzeigen , wenn du lebst und nicht tot bist. Es spielt also keine Rolle, was es sagt, denn es ist sowieso versteckt. Also werde ich das hier nicht wirklich machen. Also okay, jetzt haben wir die Benutzeroberfläche aktualisiert. Was kommt als Nächstes? Das nächste ist, dass du antworten musst. Wo also, wo reagierst du? Und erinnern wir uns daran, wie vor einiger Zeit haben wir diesen gemacht, denke ich, dass wir zu Beginn des Kurses den Spawn-Standort des Spielers festgelegt haben und es auf den Spielerstart gesetzt haben . Lassen Sie uns also diesen einen Satz Spieler-Spawn-Standorte verwenden. Also werden wir dort spawnen. Ich gehe runter, es ist hier. Lassen Sie uns den Spawn-Standort des Spielers als diesen festlegen. Und der Grund, wenn Sie verwirrt werden, hören Sie manchmal das Spawnen von Set-Playern. Lass mich es dir zeigen. Hier hätten Sie also Nachricht und keine Nachricht auswählen können. Und das ist eine Blueprint-Interface-Funktion. Und vielleicht fragst du dich, warum hast du diese Nachricht nicht hier ausgewählt? Warum hast du diesen ausgewählt? Es gibt nicht so, als ob Sie so sind , ist die Blaupause, in der wir ihn programmieren. Und wenn die Blueprint-Interface-Funktion, wenn sie tatsächlich innerhalb der Spielerbasis erstellt wird. Wenn ich also dazu gehe, die Schnittstellen und die Spielerbasis hier, kannst du sehen, dass wir es bereits innerhalb des hier gesetzten Spieler-Spawn-Ortes geschafft haben. Wenn Sie es innerhalb des Blueprints aufrufen , in dem Sie es erstellt haben, müssen Sie nicht wirklich eine Nachricht auswählen. Die Botschaft ist nur für die Kommunikation gedacht. Und du hättest eine Nachricht ausgewählt, wenn du sie vom Player-Controller von woanders aus angerufen hättest, hättest du eine Nachricht ausgewählt. Aber wenn Sie es in sich selbst anrufen, dann wähle ich dieses einfach ohne die Nachricht aus. Okay, jetzt spawnst du den Spieler. Und denk dran, dass wir immer noch den Gott-Modus haben. Wir haben den Gott-Modus hier nie entfernt. Der Gott-Modus wird nur entfernt wenn du nicht stirbst, sondern wenn du tot bist. Setze das niemals auf „false“. Lassen Sie mich also diesen Code hier kopieren, dass die Verzögerung, jetzt nach der Verzögerung hier. Also der Grund, warum ich den Spieler in Verspätung gebe, also antworten wir und du hast tatsächlich den Gott-Modus, während du reagierst, weil ich nicht sofort Schaden erhalten möchte , wenn ich antworte. Also gebe ich dem Spieler die Chance zu antworten und keinen Schaden zu erhalten. Und ich glaube, das war's. Ich weiß nicht, ob ich etwas vergessen habe. Lass mich eigentlich einfach auf Play klicken. Mal sehen, was passiert. Wenn wir also sterben, lass mich tatsächlich zum Schwein gehen. Wir sterben hier schneller. Wir sind tot und sagen, dass du von Pig Press getötet wurdest. Okay. Wenn ich auf Okay drücke, siehst du, dass ich antworte. Und lass mich einfach wieder sterben , um zu sehen, ob das abgehört ist oder nicht. Es funktioniert richtig. Jetzt können Sie wieder sehen, dass diese abhören. Sie können erneut versuchen, die Kollisionsfelder neu zu skalieren und zu verkleinern. Dies sind diejenigen , die sie manchmal hier in den Rampen zum Bug bringen . Wenn ich jetzt auf Okay klicke, siehst du, dass ich antworten kann. Ich möchte tatsächlich, dass mein Spieler blinkt, wenn ich antworte, weil ich wissen möchte , dass ich im Gott-Modus bin, wenn ich antworte. Lassen Sie mich also diesen Blinkeffekt nehmen , den wir hier gemacht haben, und wir haben ihn hier hinzugefügt, tatsächlich Schaden durch Effekte. Lassen Sie mich hier eine Kopie davon kopieren und lassen Sie es mich gleich danach einfügen, kurz zuvor. Eigentlich, gleich nachdem ich geantwortet habe, kann ich es einfach hier machen. Wenn ich also antworte, spiele ich diesen Effekt. Und dann entferne ich diesen Gott-Modus nach diesem Effekt. Lass mich auf Play klicken. Und wenn ich sterbe, klicke ich auf Okay. Du kannst sehen, dass ich diesen Gott-Modus-Effekt habe. Und dann antworte ich, ich denke, das ist ein kleiner Effekt. Ich werde diese Kollisionsboxen tatsächlich verstecken. Auch hier brauchen wir sie nicht mehr wirklich , das glaube ich nicht. Also lass mich auf diese Angriffskollision klicken und sie im Spiel ausblenden. Und geh hier in die feindliche Basis und klicke auf diese Kollision und verstecke sie auch im Spiel, kompiliere und speichere alles. Jetzt, wo alles funktioniert, können Sie versuchen, das Spiel zu testen und sehen, ob alles so funktioniert, wie es sollte. Wir können diesen Kunden immer aufnehmen. Bevor ich fertig bin, möchte ich eigentlich mit beiden schreiben. Sehen Sie hier, ob sowohl der Client der Server sehen können, was los ist. So können Sie sehen, dass der Server tatsächlich sehen kann , dass der Client gestorben ist. Und da der Server jetzt ist es ein bisschen schwierig, beide auf einem Bildschirm zu haben . Jetzt sind beide gestorben. Und wenn ich auf OK klicke, während der Client antwortet, okay, und wenn ich auf OK klicke, ist es der Server, ich antworte auch und blinke richtig. Wenn ich angreife, funktioniert das, wenn ich hier nachschaue, es funktioniert, als ich die Leiter aufgewacht bin. Es funktioniert für beide. Okay. Also lass es mich jetzt als Kunde versuchen. Spielen Sie als Kunde, um sicherzustellen , dass alles funktioniert, bevor wir Tsarina hier auf diesem Client auswählen. Und beim zweiten Kunden wähle ich Luke aus. Und lass mich einfach auf diesen Feind hineingehen. Hier. Ich bin tot. Ich laufe hier hin. Das habe ich auch getan. Okay. Es scheint also, als würde jetzt alles funktionieren. Und ich gehe hoch. Der Brief funktioniert auch. Okay, also jetzt keine Bücher, also ist das cool. Alles funktioniert so, wie es sollte. Also sind wir bereit weiterzumachen und lassen uns jetzt tatsächlich am Feind arbeiten, damit wir den Feind töten können. 87. Beheben bestehender Fehler: Wir fahren fort, wir haben ein paar Bücher, die wir reparieren müssen. Und ich habe sie alle hier geschrieben. Also als ich das Spiel getestet habe und die sieben Dollar gefunden habe und ich denke, wir sollten sie reparieren, bevor wir fortfahren. Der erste ist also ein Todesfehler während des Angriffs. Wenn ich also hier rübergehe und das Spiel spiele, und ich bin in die Feinde gegangen, also lass mich hier einfach meine Gesundheit verlieren. Wenn ich jetzt angreife, bevor ich sterbe, siehst du, dass ich so spawne. Und das soll ein Grab sein. Und wenn du willst, kannst du versuchen, das selbst zu beheben. Versuche zu überlegen, wo könnte das sein? Wie? Was läuft das vorher? Denn wenn wir angreifen und gleichzeitig sterben, kehren wir in diesen untätigen Zustand zurück. Versuchen Sie also zu überlegen, wenn Sie selbst wollen , wo dieser Fehler auftreten könnte. Und Sie können einen Print-String-Knoten verwenden , um Ihren Code zu debuggen. Immer schön, einen Print-String-Knoten zu verwenden. Klicken wir auf Okay und lassen Sie uns das verlassen. Um diesen Fehler jetzt zu beheben, gehen wir zum Angriffscode, da er im Wesentlichen passiert , wenn wir angreifen. Also setzen wir den Angriff auf wahr , wenn wir angreifen. Und dann nach einiger Zeit sterben wir dazwischen hier, also greifen wir an und sterben. Und denk dran, dass wir das hier haben. Dies ist der Angriff ist abgeschlossen. Wir verzögern den Code mit dieser Animation und nach dem Code setzen wir ihn auf false. Wenn also der Angriff auf false gesetzt ist, versetzt es unseren Charakter in den Ruhezustand, also passiert es tatsächlich hier. Der einzige Weg, wie wir nach der Tiefe gesucht haben, ist hier oben, damit wir nicht angreifen können, solange wir tot sind. Aber was ist, wenn wir bereits angegriffen haben? Was ist, wenn wir schon hier sind und dann gestorben sind? Das wird gerade nicht überprüft. Also enden wir hier und am Ende befinden wir uns im untätigen Zustand. Also können wir versuchen, dieses Jahr zu nehmen ist tot, dieser Boolean und versuchen auch hier zu überprüfen. Sie können entweder hier nachsehen oder hier nachsehen. Angreifen muss also falsch sein. Also lasst es uns tatsächlich hier machen. Ich denke, das ist der bessere Weg. Also hier greift man an. Wenn es auf „false“ eingestellt ist, überprüfen Sie unsere Verwendung. Bist du tot? Lassen Sie uns das eigentlich bemerken, denn das ist, glaube ich, besser für mich selbst zu lesen . Wenn du also nicht tot bist, kannst du wieder einfach weitermachen und idol. Wenn Sie jedoch tot sind, kopieren wir dies und bringen Sie in die Todeszustände. Einfach so und das sollte das Problem beheben. Wenn wir also jetzt spielen und ich die Gesundheit verliere, greife ich in der Zwischenzeit an. Whoops, ich bin nicht gestorben. Ich nehme es in der Zwischenzeit. Sie können sehen, dass es das Problem behoben hat. Und wenn ich auf Okay klicke, antworte ich. Okay, das war also das erste Buch, das wir hier repariert haben. Das ist also behoben. Der nächste ist, dass die Tiere auf der Rampe stecken bleiben. Und wenn ich einfach ein paar Tiere kopiere und das haben wir schon vorher da drin gesehen. Andere Lektionen und ich möchte dieses Problem nur beheben. Wenn ich also einfach eine Menge Feinde kopiere, fügen Sie das hoffentlich sehr schnell ein. Jetzt können wir hier sehen, dass dieses Schwein hier auf der Rampe feststeckt. Das Schwein läuft gerade ins Zimmer. Und die Schnecke macht das manchmal. Also die Schnecke, Sie können sehen, wie die Schnecke hier gelöscht wird. Also werden sie manchmal gepumpt. Lassen Sie mich das tatsächlich beheben, bevor ich fortfahre, ich ärgere mich nur ein bisschen über diesen Fehler. Also lasst uns zu den Feinden gehen. Und die Sache ist, dass wir vorher tatsächlich eine Lösung gefunden haben, also müssen wir einfach dasselbe tun. Und die Lösung war, wenn ich zum Beispiel nur zur Schnecke gehe , können wir damit beginnen. Die Kollision hier ist eigentlich diese Kapsel. Hier ist, was es macht. Wenn wir also die Größe dieser Kapsel vergrößern, wird dies den Fehler verhindern. Also stellte ich fest, dass 35 mal 35 Länge, diese Kapsel auf mindestens 35 erhöht , das Problem beheben wird. Und denk dran , dass du die Schnecke runterziehen musst. Schnecke wird so schweben. Also die Schnecke runterziehen, vielleicht so etwas. Vielleicht ist das zu niedrig. Vielleicht ist das vielleicht ein bisschen zu niedrig. Ich glaube. Minus, minus 25 vielleicht. Okay, also so etwas. Jetzt ist die Schnecke hier oben und du wirst feststellen, dass die alte Schnecke nie mehr bockt, wenn du sie einfach für einige Zeit laufen lässt. Und lass uns das Gleiche mit den Schweinen machen. Also geh hier zum Schwein. Und ich klicke hier auf die Kapsel und vergrößere die Größe auf 35 um 35. Nimm dieses Schwein auch ein bisschen mehr runter. Und lass mich versuchen zu sehen, wie das aussieht. Es läuft auf dem Boden. Es sieht gut aus. Und wenn wir es jetzt für einige Zeit spielen lassen, wird es nicht mehr stören. Also wenn die Schweine gehen werden. Also diese Rampe kann man sehen, dass sie gut laufen. Das sollte also jetzt behoben werden, das ist das Richtige dafür. Vergrößern Sie also die Kapsel und ziehen Sie dann dieses Schwein nach unten. Sie sehen also aus, als würden sie immer noch auf dem Boden laufen. Das behebt also das zweite Problem, das wir hier haben. Die dritte ist , dass die Feinde die Angriffskollision nicht erkennen. Wir hatten schon einige Probleme damit, aber ich habe es bis jetzt nicht sehr ernst betrachtet. Sie können sehen, ob ich hier durch Technologie angreife, Sie können sehen, dass mein Angriff nicht erkannt wird. Und sie erkennen meinen Angriff nur , wenn ich sehr nahe komme. Wenn ich also im Feind stehe, erkennen sie mich tatsächlich. Aber wenn ich ein bisschen vom Feind entfernt bin, werden sie eigentlich nicht angegriffen. Okay, also müssen wir das reparieren. Also habe ich mein Bestes versucht, diese Kollision, SR-Angriffskollision, zu verwenden . Aber da diese Kollision hier den Code hat , in dem wir tatsächlich zur Schnittstelle zurückkehren, lassen Sie mich die Schnecke und das Schwein schließen. Und wenn ich hier zur Kollision gehe, denke daran, dass wir diesen Code erstellt haben, in dem wir Schaden anrichten. Und so wird diese Kollision immer Schaden anrichten. es also am besten tun, müssen wir tatsächlich einen anderen namens Head Box machen , wo wir den Feind treffen. Lassen Sie uns also einfach eine neue Kollision erzeugen. Und lassen Sie uns mit diesem eine kugelförmige Region erstellen, nennen wir es Hitbox. Also werden wir es einfach als Hitbox benutzen. Ich ziehe es einfach von dieser Kollision hier zu dieser Kapsel raus . Das erste ist also hier in die Kapsel zu gehen. Lassen Sie uns also unsere Kollisionen überprüfen , um sicher zu sein, dass wir diese Hitbox haben. Also die Kollisionen für diese Kapsel, das einzige, was wir mit dieser Kapsel wollen, und Sie können hier den Grund sehen, warum ich es bin, ich erstelle diese Hitbox und ich benutze diese Kapsel nicht , weil Sie sich daran erinnern diese Kapsel haben wir hier tatsächlich die Größe vergrößert. Dies ist die Größe der Kapsel und ich denke, die Hits, Hitbox ist viel zu groß, als könnten wir diese Kapsel benutzen, um den Feind zu treffen. Aber ich denke, dieser Hit Bucks ist viel zu groß und ich mag es nicht. Sie können also sehen, ob ich darauf klicke und im Spiel ausgeblendet klicke Wenn ich es entferne, kannst du sehen, wie groß diese Trefferbox ist. Und ich denke, das ist viel zu groß, wie ein Kopf für eine Schnecke. Also werde ich diese Trefferbox nicht benutzen und wir können die Größe verringern, sonst wird es in der Rampe stecken bleiben. Also lass es mich einfach wieder hier in der Interface-Kapsel verstecken . Eigentlich war es hier in der Schnecke, die Kapsel, und ich werde sie einfach wieder im Spiel verstecken. Okay, willkommen zurück in der feindlichen Basis. Also was wir mit dieser Kapsel machen wollen, Lasst uns zuerst alles ignorieren. Was Sie nicht ignorieren möchten, ist die weltstatische und die Weltdynamik. Und das soll nur nicht den Punkt durch den Boden fallen lassen , weil der Boden, diese Bodenkollisionen hier unten, weltstatisch sind. Und wenn du das einfach entfernst, fällst du tatsächlich zu Boden. Und da ich das nur für die Kollision dieser Kapsel hier verwende , werde ich entfernen und Überlappungsereignisse generieren. Ich verwende es nicht für Überlappungsereignisse, also verwende ich es nur, um diese Brunnen statisch und dynamisch zu blockieren diese Brunnen statisch und , damit sie nicht durch den Boden fallen. Im Wesentlichen verwenden wir diese Kapsel nicht wirklich für Überlappungsereignisse. Gehen wir runter zu den Heat Bucks. Also diese Kopfbox klicke ich auf Nein, kann der Charakter aufsteigen? Ich klicke auf „Nein“. Und ich setze das auf Kosten ein. Whoops, keine Kollision. Ich klicke hier auf Control Z und custom. Und ich werde alles außer der Weltdynamik ignorieren . Und denken Sie daran, hier im Spieler, also greifen sie Koalition an, die wir haben. Wenn Sie nach unten gehen und sich den Objekttyp ansehen, lohnt es sich dynamisch. Und deshalb überschneide ich mich mit Dynamic, weil ich mich mit meiner Angriffskollision überlappen möchte . Dies ist auf Weltdynamik eingestellt. Okay? Das überlappe ich also Listen. Jetzt ist das richtig und lassen Sie mich zum Sprite gehen, stellen Sie sicher, dass es keine Überlappungsereignisse generiert. Und ich gehe hier zur Kollision. Das ist es, was unseren Teich beschädigt, der unser Spieler ist. Und ich werde das tatsächlich ändern statt der Weltdynamik. Ich werde das in ein **** ändern weil wir diese starke Kapsel im Wesentlichen nicht verwenden . Also kann ich das genauso gut auf einen Punkt ändern. Das ist also im Grunde unsere Po1-Kollision hier. Okay, also lasst uns das merken. Denken wir daran, dass wir es hier auf einen Pfand gesetzt haben. Also lass mich jetzt zur Spielerbasis gehen. Und hier auf der Kapselkomponente, einfach darauf, dass Sie alles noch einmal ignorieren. Das einzige ist die weltstatische und die Weltdynamik, mit der Sie sich überschneiden. Und denken Sie daran, wir haben gerade diese geändert, diese Kollision, die uns zu **** schaden wird. Also müssen wir uns tatsächlich anderswo damit überschneiden , um keinen Schaden daraus zu bekommen. Also überschneiden wir uns damit. Und für das Sprite wird es keine Überlappungsereignisse erzeugen. Und für diese Angriffskollision wird es sich nur mit der Dynamik der Welt überschneiden. Und lasst uns zurückgehen und sehen, ob das stimmt. Es überschneidet sich also mit der Weltdynamik. Und das ist unsere Hitbox und unsere Head Box ist auf Weltdynamik eingestellt. Das ist also richtig. Es überlappen sich jetzt , denn das ist was dynamisch, das ist was dynamisch. Und sie überschneiden sich beide mit der Weltdynamik, was bedeutet, dass sie sich überschneiden. Diese Kollision sollte also jetzt vollkommen korrekt sein. Also lasst uns jetzt auf Play klicken , bevor wir das tun, du kannst auf diese Angriffskollision klicken. Und du kannst versteckt in Spielen entfernen, damit du es sehen kannst. Und es kann auch zum Feind gehen, klicken Sie auf die Kopfbox. Und du kannst versuchen, ein verstecktes Spiel zu entfernen. Und lasst uns auch zum Schwein gehen und die versteckte Box anpassen. Und für diese Kopfbox werde ich einfach tun, lass uns vielleicht das Gleiche machen wie diese Kollisionsgröße hier, also 25. Und wieder können Sie die Umschalttaste gedrückt halten und mit der rechten Maustaste klicken , um sie hier zu kopieren und einzufügen. Und dann werde ich den Ort hier gleich setzen. Also Rechtsklick. Du kannst es hier kopieren, hier einfügen, und jetzt ist die Kollision da. Das ist also die Kopfbox. Machen wir das Gleiche für die Schnecke. Lassen Sie mich also zum Ansichtsfenster gehen, klicken Sie auf das Head Box tatsächlich die Kollision kopieren Sie dies, fügen Sie es in das Kopffeld ein. Kopiere das hier oben, das ist der Ort, und füge es in die Kopfbox ein. Klicken wir auf Jetzt abspielen. Und jetzt können Sie sehen, dass dies die Head Boxen sind , die viel besser sind als zuvor. Jetzt kannst du sehen, dass ich so beschädigt werde. Okay, das ist also nett. Lass es mich nochmal versuchen. Du siehst, dass ich hier tatsächlich beschädigt werde. Obwohl ich bei dieser Kollision bin, ist das eigentlich ein weiterer Fehler, also lass dich hier nicht ausgetrickst. Also lass mich eigentlich einfach sehen, du siehst hier, ich werde gerade nicht beschädigt. Wenn ich so in meiner Angriffskiste stehe, kannst du sehen, dass es funktioniert, also kollidiert es nicht. Es gibt jedoch einen kleinen, es gibt einen weiteren Fehler. Und wenn ich jetzt angreife, siehst du, dass ich meine Feinde treffe. Okay, also funktioniert es jetzt voll. Es gibt jetzt einen weiteren Bug. Du siehst, ob ich beschädigt werde. Jetzt werde ich tatsächlich an meiner Angriffsreligion beschädigt, was nicht passieren soll. Dies geschieht aus irgendeinem Grund nur dann, wenn ich beschädigt werde. Du siehst es. Aber wenn ich das Spiel einfach zurücksetze, ist dies tatsächlich unser nächster Block. Also wenn ich das Spiel einfach zurücksetze und einfach hierher gehe, siehst du, dass ich nicht beschädigt werde. Ich muss einige der Feinde entfernen. Eigentlich habe ich viel zu viele. Lassen Sie mich jetzt einfach viele von ihnen löschen. Es ist ein bisschen, es ist ein bisschen schwer mit all diesen Zentimetern zu zeigen. Also lass mich stattdessen einfach eine Schnecke hier stecken. So etwas. Und lass mich auf Jetzt spielen klicken. Wenn ich jetzt auf Schnecke stehe, kannst du sehen, dass ich nicht an meiner Angriffskollisionsbox beschädigt werde . Immer wenn wir jedoch beschädigt werden, werden wir plötzlich beschädigt. Noch ein Angriff, Kollisionsbox. Es gibt einen kleinen Bug. Plötzlich ändert sich. Und das ist eigentlich unser Nächstes. Also hier die gegnerische Angriffsreichweite. Plötzlich greift es uns bei unserer Angriffskollision an. Also habe ich eine halbe Stunde damit verbracht einen Blick darauf zu werfen, was das sein könnte. Und ich dachte, es wären vielleicht die Kollisionskästen. Und das stimmte eigentlich nicht wie die Kollisionsboxen, sie sind richtig. Es macht keinen Sinn , dass es dort ein Bug ist. Und eigentlich ist das ein kleiner, kleiner, alberner Fehler von meiner Seite. Vielleicht hast du dich schon daran erinnert während du die Videos machst. Ich habe es vielleicht vergessen, aber du kannst versuchen, es selbst zu reparieren, wenn du willst. Aber plötzlich, wie wenn wir angegriffen werden, empfangen wir plötzlich gerade beim Sex auf unserer Kollisionsbox. Und der Grund dafür ist, wenn Sie zum Feind gehen , gehen Sie zum Ereignisdiagramm. Denken Sie daran, dass wir diese Kollisionsereignisse Wenn unser Spieler also mit dem Feind kollidiert, wir Schaden an. Das passiert also jetzt richtig, wie von Anfang an. Also wann immer wir in den Feind gehen, und das bedeutet nicht unsere Kollisionsbox, aber wir werden nicht mit unserer Kapsel in den Feind gehen. Plötzlich richten wir auch diesem Schaden zu. Dies liegt daran, dass wir nie gesagt haben, wann wir aufhören sollen, Schaden anzurichten, da wir diese Endüberlappung haben. Aber das macht nicht wirklich so , als wäre es richtig. Aber hier oben, denken Sie daran, dass wir damit begonnen haben, beschädigt zu werden. So läuft es. Das ist also auf wahr. Und wenn es stimmt, wird es Schaden anrichten. Aber wenn wir es auf false setzen, haben wir nie angegeben, was hier zu tun ist, wenn es auf false eingestellt ist, sodass es ständig Schaden anrichtet. Wir müssen es tatsächlich sagen, dass er keine Schäden mehr anrichten soll. Also lass mich das machen. Und das ist nur ein kleiner Fehler von mir. Ich glaube, ich habe gerade in diesem Video geredet und habe es nicht bemerkt. Lassen Sie mich dies auf eine Variable bewerben, dieser Timer befördert und nenne es Schaden anwenden, handhaben. Okay, also nehmen wir diesen Griff und sagen Clear und Invalidate Timer Nach Handle. Jetzt wird dieser Timer jedes Mal angehalten , wenn wir dies auf false setzen. Jedes Mal, wenn wir die Komponente verlassen, setzen die Kollisionskomponenten sie auf false und es wird keinen Schaden mehr anrichten. Also müssen wir erneut damit kollidieren, um den Schaden anzurichten. Versuchen wir also, auf Jetzt spielen zu klicken. Und jetzt. Dies funktioniert wie zuvor richtig. Aber wenn ich beschädigt werde und davor stehe, sieht man, dass es immer noch funktioniert. Und das liegt daran, dass es wieder in meine Kapsel laufen muss, bevor es Schaden anrichten kann. Okay, also funktioniert das jetzt so, wie es soll. Das war der nächste Bug hier. Das ist behoben. Der nächste ist, dass der Spieler am Seil nicht beschädigt werden kann. Wenn ich also auf dem Seilsymbol stehe, wurde das beschädigt, und das ist ein sehr einfacher Fehler zu beheben. Wenn du also einfach zur gegnerischen Basis gehst und hier zur Kollision gehst, als ob der Feind mit dem **** kollidiert, aber du willst auch mit dem Kunden kollidieren, der Spieler ist aber du willst auch mit dem Kunden kollidieren . Denk dran, wir haben diese Gewohnheit angefertigt. Das ist also einfach behoben. Das war also eine sehr schnelle Lösung. Okay, also die andere Sache ist, lass mich einfach mehr Feinde um die Schläge hinzufügen , damit wir den Dollar viel schneller sehen können. Also lass mich auf Play klicken. Okay, also wenn ich hier stehe, kannst du sehen, was das Problem ist. Ich werde so beschädigt. Aber ich möchte meinen Spieler tatsächlich vom Seil hier schieben. Wenn ich also einfach zu meiner Ebene gehe, Layerbasis und wir haben diesen Schaden, erhalten wir Schaden, aber ich möchte, dass mein Spieler nicht mehr am Seil ist. Was ich hier beim Klettern machen werde, ich nehme das ist Klettern. Denken Sie daran, dass wir uns hier in unserem Klettercode ausgedacht haben, wir haben gemacht, dass Cholin ist, wann immer Sie klettern. Also wenn ich es tatsächlich finde. Jetzt haben wir es hier unten geschafft. So klettern hier, klettert. Wir haben gemacht, dass das eine Set klettert. Also lasst uns das hier unten benutzen. Fragen Sie also einfach den Code, ob Sie Schaden erhalten. Klettern Sie schon, wenn Sie es sind, wollen wir etwas anderes machen. Wenn nicht, machen wir einfach alles, was wir vorher gemacht haben. Wenn du also schon kletterst, lass mich das klettern und setze es auf falsch, weil ich nicht mehr klettern will. Und dann lass uns einfach zurückgehen und was auch immer tun lass uns versuchen zu sehen, was das macht. Also lass mich auf das Seilstand hier gehen. Und du kannst sehen, dass es richtig funktioniert. Es gibt einen kleinen Bug, den wir jetzt mögen, wenn wir uns bewegen, es ist, als würde man unsere Flipbooks pausieren , damit die Animationen nicht abgespielt werden. Und denken Sie daran, dass Sie im Kunden etwas hier hatten, wenn Sie zu Ihrem Code zurückkehren . Wir haben „Pause“, „ klettern“, „Buch“ genannt. Und wir benutzen diese Pause, wenn wir uns nicht am Seil bewegen, wir posieren das Flipbook, damit es nicht so aussieht , als würdest du klettern, während du still stehst. Also müssen wir das auch machen. Also lass mich hier runter gehen und einfach hier weitermachen. Anstatt das einfach zu tun, können wir es tun, wieder hochklettern. Hervorragend in diesem hier. Es kann hier klettern. Nehmen wir das auch. So kann Set klettern, um falsch zu sein. Set klettert, um falsch zu sein und zu setzen. Mal sehen wir uns die Pause hier an. Pausieren, klettern, Buch umdrehen, um falsch zu sein. So klettert sowohl der Can Climb Pause-Binding Flip Book ist auf false gesetzt. Lassen Sie mich also einfach den Code verschieben, so etwas. Also machen wir das, wir entfernen zunächst nur den Klettermechaniker. Und das sind wir, ich glaube, wir können jetzt loslegen. Versuchen wir also, das Seil herunterzuspielen. Und du kannst sehen, dass es jetzt richtig funktioniert und ich kann wieder aufs Seil springen. Und wenn ich das mache, bleib hier und werde beschädigt. Wenn diese Schnecke mich trifft. Wenn ich also hier beschädigt werde, sieht man, dass es immer noch funktioniert. Okay, also dieser Bug ist jetzt behoben, Tod und Schaden. Und es gibt eigentlich noch ein kleines Buch, wie wenn du am Seil stehst. Du siehst, ich sehe so aus. Wenn ich tatsächlich am Seil sterbe. Und das passiert im Wesentlichen denn wenn wir hierher zurückkehren und zu isClient gehen, steigt tatsächlich die Unwrap Funktion, wenn ich sie hier finden kann. Also ist es, wenn es klettert ist falsch. Es wird es hier darauf einstellen. Lass mich einfach verstecken. In diesem Jahr. Es wird unser Jump-Flipbook hier einstellen. Aber das wollen wir nicht tun. Wir wollen den Tod spielen. Versuchen wir das zu nehmen. Boolean ist hier tot. Lass uns nachsehen, ob du jetzt schon tot bist, eigentlich sage ich das nicht, denn das ist besser zu lesen. Also lasst uns die vorerst verbinden. Und jetzt sagen wir, kletterst du? Ja, das bin ich. Bist du nicht ganz so, wenn du von einem Feind getroffen wirst und vom Seil fällst, dann wird das falsch sein. Du kletterst nicht mehr. Okay, wir spielen nicht mehr Bing. Dann wirst du nachsehen, bist du tot? Wenn du nicht tot bist, okay. Lass uns weitermachen und einfach dasselbe tun wie zuvor, wo du abfällst. Wenn Sie jedoch tot sind. Also lass mich das einfach herziehen. Wenn du das bist, lass mich das einfach machen. Wenn du das jetzt bist, lass uns das hier nehmen, den eingestellten Bewegungsmodus. Und ich werde es auf laufen lassen, anstatt wieder auf Kollision zu fallen, wir müssen zu dieser Bauerkollision zurückkehren denn bevor wir der Kletterspieler waren, müssen wir zurück zum Bauern Kollisionskanal hier. Und anstatt das Flipbook auf Jump-Animation einzustellen, können wir einfach den Bewegungsmodus sagen. Und diese Bewegungsmodi setzen Bewegungszustände für den Spieler hier in der Int-Spielerbasis, stellen Sie den Bewegungsmodus auf Todesfälle ein. Jetzt sind wir also tot, weil das falsch sein wird, was bedeutet, wenn du nicht tot bist, wirst du dasselbe tun. Wenn Sie jedoch das tun, tun Sie dies hier unten wo Sie den Gehmodus oder den Bewegungsmodus auf Gehen einstellen, und dann werden Sie es hier auf Tode setzen. Lasst uns also diesen Code spielen. Lassen Sie mich eigentlich nur ein bisschen mehr Feinde spawnen , nur damit wir es schneller testen können. Und jetzt werden wir hier ein bisschen beschädigt. Und jetzt kann man am Seil sehen, dass ich eigentlich ein Grab bin. Jetzt funktioniert das richtig und wenn ich auf Okay klicke und ich herumlaufen kann, kann ich dasselbe tun wie zuvor. Ich werde von der Leiter gestoßen. Wenn ich drauf stehe. Ich meine, du kannst einfach dazu bringen, dass dein Spiel nicht in den Brief geschoben wird. Das liegt an dir. Sie können auch gerade Schaden unter Brief erhalten. Nun, ich denke, es sieht viel besser aus, wenn du es einfach vom Brief abschiebst und dieses Grab bekommst, wann immer du stirbst. Das funktioniert jetzt also richtig. Das war also der sechste. Und der siebte ist Reagieren Okay, Button ist fokussierbar. Was ich damit meine ist, wenn ich hier oben auf OK klicke und dann sterbe ich. Und das ist etwas in der Benutzeroberfläche. Also fy, dy und klicke auf die Leertaste auf meiner Tastatur oder Enter. Du siehst, dass ich auf den Button klicke. Wenn ich also auf Space klicke und wenn du das nicht willst, möchte ich das nicht für dieses Spiel machen. Sie können also zur Benutzeroberfläche gehen, zum Hauptmenü gehen. Nun, in diesem Hauptmenü, das Menü I. Und hier für diese Schaltfläche, wenn Sie darauf klicken, gibt es etwas namens fokussierbar und sagt die Schaltfläche manchmal nur mit der Maus klickbar sein sollte und niemals Tastatur fokussierbar Und das ist es, was passiert. Wenn ich also mit der Maus darauf klicke, und später können wir einfach mit der Tastatur wie Leerzeichen klicken , um zu klicken. Okay. Du kannst es behalten, wenn du es willst, aber ich werde es entfernen, was bedeutet, dass ich das nur mit meiner Maus anklicken kann. Ich kann nicht auf meiner Tastatur oder einem Leerzeichen auf Enter klicken. Und manchmal ist es nervig, als ob Sie ein Inventarsystem haben, möchten Sie nur mit der Maus auf die Registerkarten klicken und nicht mit Ihrem Inter und Raum. Vielleicht versuchst du ins Spiel zu springen. Und du kannst nicht springen weil das fokussiert ist und es klickt, okay, anstatt zu springen und so weiter. Also wird es ein bisschen durcheinander bringen. Aber in diesem Fall ist es in Ordnung, es als fokussierbar zu haben , wenn man tot ist. Es kann also einfach auf Leerzeichen klicken, um zu antworten. Aber ich glaube, ich entferne es einfach. Und ich lehre Ihnen hier auch nur etwas über diese Interaktion bei, damit wir dies entfernen können , ist fokussierbar und kompilieren und speichern, und das war's. Wenn wir also einfach klicken, spielen wir es tatsächlich auch als Listened Server ab. Wir haben das nicht getan , nur um sicherzustellen , dass ich auf dem Leiterbrief bin und das mache ich. Das sieht richtig aus. Und wenn ich einfach den Kunden aufnehme und mal sehen, was passiert. Lassen Sie mich das ein wenig minimieren, damit es Platz gibt. Okay, jetzt sind wir der Kunde und der Kunde wird auch weggeschoben. Der Server kann das sehen. Okay, also funktioniert es richtig. Und lass mich sehen, ob ich hier sterbe. Und das tue ich. Okay, das funktioniert also richtig. Klicken wir jetzt auf Okay und schließen wir das ab. Alle Fehler sind also behoben und Sie können sehen dass es nicht allzu lange dauert, um diese Fehler zu beheben, aber immer schön, Ihr Spiel auszuprobieren. Wenn Sie debuggen möchten, verwenden Sie den Print-String-Knoten, versuchen Sie zu sehen, ob es sich um Ihre Kollision handelt, und versuchen Sie, sich mit Booleans zu erkundigen. Also zum Beispiel, wenn die Spieler, dass wir keine bestimmte Aktion machen wollen. Es gibt also einige Dinge, nach denen Sie suchen können. Und jetzt kann ich das schließen. Wir haben alle Bugs behoben. Lasst uns alles speichern und lass uns zur nächsten Lektion übergehen. 88. Player auf dem Tod entfernen: Lassen Sie uns nun den Feind dazu bringen, den Spieler zu jagen , wann immer der Spieler das ist. Gehen wir also zu unserem Blueprints-Ordner und zum Feind und innerhalb der feindlichen Basis. Also drinnen haben wir diese Logik in der die Feinde den Spieler jagen, aber der Feind jagt immer noch den Spieler, wann immer die Feinde, die die Spieler sind , die wir so machen müssen Der Feind hört auf den Spieler zu jagen, wann immer die Spieler das haben. Also lasst uns das hier machen. Wir haben diese Logik , wenn wir die KI bewegen, also bewegen wir uns zu dem Charakter und dem, was der Feind den Spieler hier bei Erfolg erreicht. Anstatt einfach direkt zu gehen, versuchen wir zu überprüfen, ob der Spieler tot ist oder nicht, denn das haben wir bereits. Das wird also einfach sein. Lassen Sie mich das alles zur Seite bewegen , damit wir hier etwas Code schreiben können. Was ich tun möchte, ist nur zu prüfen, ob der Spieler das ist, denken Sie daran, dass wir diesen Spieler-Controller bereits haben. Und wir können sagen, er wird kontrollierter Bauer. Hier brauchen wir einen Verweis auf die Spielerbasis. Sagen bekommt also Spielerreferenz. Also genau wie das, was wir vorher gemacht haben. Und lasst es uns hier verbinden. Und hier möchte ich das benutzen , das heißt, dass wir es geschafft haben. Also hol dir diesen booleschen Wert. Und lasst uns einen anderen Booleschen Wert schreiben damit es besser für die Lesbarkeit ist. Und lasst uns das nehmen und Zweig sagen. Jetzt fragen wir, ob der Spieler nicht tot ist, dann mach weiter und tu alles, was du vorher getan hast. Also gehe zu diesem neuen Ort. Wenn der Spieler jedoch tot ist, möchten wir etwas anderes tun. Lassen Sie mich diesen Code ein bisschen näher ziehen. Jetzt, da wir diesen Code hier haben. Vielleicht so etwas. Okay, lass mich das jetzt näher bringen. Okay, also haben wir diesen Code hier. Und jetzt können wir sagen, ob der Spieler tot ist, also nicht tot ist falsch, was bedeutet, dass der Spieler tot ist. Wir wollen uns nur daran erinnern, bevor wir das mit der Stub-Logik gemacht haben, also haben wir ihren Verhaltensbaum gestoppt. Jetzt können wir einfach das Gegenteil tun. Also können wir einfach mit der Logik beginnen. Es kann also einfach kopiert werden, wenn Sie es einfach hier kopieren möchten. Und lasst es uns verbinden. Also wollen wir mit der Logik beginnen. Schon wieder. Wir wollen den Verhaltensbaum starten. Und jetzt wird es das Ganze noch einmal durchlaufen. Versuchen wir also, auf Play zu klicken und zu sehen, ob es funktioniert. Lasst uns hier als Server spielen. Also treffe ich hier etwas. Ich werde getroffen. Im Moment jagen die mich also. Und eigentlich lese ich all diese beiden. Jetzt sterbe ich. Und mal sehen, ob sie gehen. Man sieht, dass sie nicht wirklich viel mehr jagen. All das, was ich getroffen habe, ging ihren eigenen Weg. Also funktioniert es jetzt tatsächlich richtig. Jetzt haben wir aufgehört, den Spieler zu jagen. Wann immer die Spieler, die so erfolglos sind, prüfen wir, ob der Spieler tot ist oder nicht. Und wenn der Spieler nicht tot ist, werden wir das Event hier schleifen , das wir zuvor gemacht haben. Wenn die Spieler jedoch, dass wir gerade den Verhaltensbaum ausführen, was hier ist, was bedeutet, dass wir laufen werden, die einen zufälligen Ort finden und was auch immer wir zuvor getan haben, bevor wir den Feind treffen . 89. Enemy und Respawn: hier in der intimen Basis Lasst uns hier in der intimen Basis nun am feindlichen Tod arbeiten. Jetzt haben wir den Tod des Spielers beendet, aber jetzt brauchen wir den feindlichen Tod. Also genau wie der Spieler, lass uns hier ein neues, neues Event machen. Und lassen Sie es uns einfach innerhalb des Blueprint-Interface machen . Gehen Sie also zu den Schnittstellen in der feindlichen Basis und fügen wir eine neue Funktion namens Tod hinzu. Und wieder brauchen wir einen Booleschen Wert wie zuvor, und nennen wir es B ist tot. Und das nervt wieder. Ich lösche es. Ich weiß nicht, warum es gerade so häufig passiert. Sagen wir einfach, b ist tot. Und nennen wir es Tod. Genau wie der Spieler. Gehen wir jetzt zurück zur Schnittstelle. Und hier drin Lasst uns mit der rechten Maustaste klicken und Tod sagen und dieses Ereignis anrufen. Dann brauchen wir wieder ein benutzerdefiniertes Ereignis, das durch die Server läuft und sicherstellt, dass der Client nicht betrügt. Und lassen Sie es uns zuverlässig durch den Server laufen. Und jetzt können wir den Server hier oben betreiben , also Servertod. Und fügen wir hier unten einen Booleschen Wert hinzu, damit wir sie verbinden können. Nennen Sie es ist, D ist tot, genau so. Und jetzt können wir hier unten etwas tun. Lassen Sie mich dies also zu einer Variablen fördern. B ist tot. Und ich kann bereits denken, dass wir dies in eine Wracks ändern müssen , weil wir die Todesanimation für die spielen müssen , für den Feind und die Wiederholungsbenachrichtigung. Denken Sie daran , dass wir alle Kunden über den visuellen Wandel informieren werden. So können alle Kunden die Animation für den Feind sehen , wenn er stirbt. Das ist es, was wir gerade brauchen. Also hier oben, jetzt werden wir hinzufügen, bevor wir hier etwas tun, Lasst uns tatsächlich hierher gehen und sehen, wann der Feind würfelt. Und ich werde die nicht verbundenen Pins hier verstecken , damit es sauberer aussieht. Also hier berechnen wir die Gesundheit und setzen sie hier ein, also ist es hier. Wir verzögern die Animation, wir stoppen die Bewegung. Dann stoppen wir die Logik. Und lasst es uns tatsächlich hier machen. Also möchte ich es gleich nach dieser Verzögerung machen. Wenn wir also den Feind treffen, wird es sich verzögern. Es wird beendet, diese Hit-Animation abzuspielen , bevor sie stirbt. Es sei denn, du hast eine Kopie, wie kopiere diese und verbinde sie wieder hier und lass es mich hier platzieren nachdem diese Top-Logik keinen Sinn ergibt. Es macht keinen Unterschied. Ich meine, es macht keinen Unterschied. Aber ich denke, es ist sauberer, die Bewegung zu stoppen, hat alle Logik sofort vor dieser Verzögerung gestoppt. Manchmal macht es keinen Sinn, Ihre Notizen zu organisieren, damit sie in der richtigen Reihenfolge kommen. Und jetzt wird es diese Animation verzögern und kurz bevor ich anfange zu laufen, aber weil ich vielleicht tot bin, also möchte ich nicht sofort anfangen zu arbeiten. Hier ist also eine gute Position , um zu überprüfen, ob der Feind tot ist oder nicht. Bevor Sie also anfangen zu laufen, prüfen Sie, ob der Feind tot ist oder nicht, denn es macht keinen Sinn zu laufen, wenn Sie tot sind. Lassen Sie mich das alles auswählen und es hierher zur Seite verschieben, damit ich etwas Platz habe, mit dem ich arbeiten kann. Nehmen wir nun die Tierinformationen. Oder wir können es einfach von hier nehmen und Pause sagen. Und dann können wir die Gesundheit nehmen und gleich sagen. Und lass es uns den ganzen Weg hierher ziehen und nicht verbundene Pins ausblenden. Ich kann einfach doppelklicken, um einen Umleitungsknoten zu erstellen und ihn viel sauberer zu machen. Okay, jetzt können wir es hier sagen, also wenn die Gesundheit gleich 0 ist, wollen wir die Todesereignisse spielen. Wenn es nicht 0 ist, machen wir einfach weiter und tun, was wir vorher gemacht haben. Also hier, wann immer es 0 ist und die Spieler tot sind, lasst uns das Todesereignis hier spielen. Und die feindliche Basis ist tot ist auf wahr gesetzt. Und wir müssen auch die Kopfbox und die Kollision nehmen und diese Kollisionen deaktivieren, nur um sicherzustellen , dass wir keinen toten Feind treffen können. dies nehmen und überschneiden, und Sie können erkennen , dass Sie hier unten sind, haben wir etwas, das als gesetzte degenerierte Überlappungsereignisse bezeichnet wird. Und was wir versuchen , ist, wenn Sie auf dieses Trefferfeld klicken und wenn Sie hier runtergehen, versuchen wir nur, dieses zu deaktivieren, Überlappungsereignisse zu generieren, denn wenn es dieses deaktiviert wurde, wir können keine Überlappungsereignisse erzeugen und daher können wir den Feind nicht mehr treffen. Setzen wir das also auf „false“. Lassen Sie mich einfach kopieren, fügen Sie dieses noch ein und verbinden Sie diesen. Also haben wir die Kopfbox und die Kollision auf „false“ gesetzt, damit wir sie nicht treffen können. Und danach müssen wir eine Reaktionszeit oder eine Verzögerung haben , bevor wir den Feind wieder hervorgebracht haben. Lassen Sie mich also einfach eine neue Variable namens Response Timer erstellen. Und lass uns schwimmen gehen. Und nehmen wir diesen Reaktions-Timer und sagen „Verzögerung“. Jetzt werden wir mit diesem Antwort-Timer verzögern. Und jetzt stellen wir es einfach auf fünf Sekunden ein. Also lasst uns kompilieren und speichern. Und standardmäßig schreiben wir fünf Sekunden so. Nach fünf Sekunden wird der Feind reagieren. Wenn du willst. Sie können es auch der Struktur hinzufügen. Also jeder, jeder Feind. Wird einen eigenen Reaktions-Timer haben. kannst du auch machen. Ich werde es einfach hier reinlegen, momentan nicht allzu wichtig. Also nur fünf Sekunden für alle Feinde. Wenn Sie es jedoch dynamischer gestalten möchten, können Sie es hier zur Struktur hinzufügen. Und für jeden Feind kannst du einen separaten Reaktions-Timer haben. Nun, was wir den Code mit jeder Menge von Sekunden verzögern den Code mit jeder Menge von Sekunden werde ich das hier unten verschieben, eigentlich so. Okay, nachdem wir es hier um einige Sekunden verzögert haben, müssen wir die Gesundheit wieder auf 100 setzen oder was auch immer es vorher war. Weil es momentan immer noch 0 ist. Wir müssen tatsächlich definieren, was die maximale Gesundheit für den Feind ist. Also muss ich zurück zur Struktur, Tierinformationen. Und genau wie das, was wir für den Spieler getan haben, fügen wir eine neue Variable namens Max Health hinzu. Und fügen wir es hier unten unter dieser Gesundheit hinzu und ändert sich zu einem Float. Diese Gesundheit ist etwas, das wir während des Spiels ständig ändern, aber diese wird statisch bleiben. Also lasst uns alles retten. Lassen Sie mich zu jeder Basis Kompilieren und Speichern gehen. Und lass mich zu den Feinden zurückkehren. Also zuerst das Schwein hier. Für das Schwein werde ich hier in der Tierinformationsklasse Standardwerte festlegen. Stellen wir die maximale Gesundheit auf etwa 30 ein. Also fange genau so an. Und lass uns zurück zur Schnecke gehen. Und für die Schnecke fangen wir einfach mit 15 als maximaler Gesundheit an, genau wie diese. Lassen Sie uns kompilieren und speichern. Und jetzt gehen wir zurück zur feindlichen Basis. Und hier können wir die Tierinformationen nochmal aufnehmen. Wir können Sets sagen. Denken Sie daran, dass wir die Variable festlegen, also legen wir diesen Gesundheitswert fest. Womit setzt es zurück? Wir setzen es mit dem Maximum gesünder ein. Also lasst uns hierher ziehen und Pause sparen. Nehmen wir die maximale Gesundheit und stecken sie in die Gesundheit und verstecken nicht verbundene Pins. Was wir also im Wesentlichen tun, ist, dass wir den maximalen Gesundheitswert nehmen , den wir hier in Schwein geschrieben haben, Schnecke. Und wir setzen diesen Gesundheitswert nur wieder auf die maximale Gesundheit zurück , denn jetzt hat der Feind reagiert und wir wollen nur , dass er diesen maximalen Gesundheitswert hat. Okay? So etwas hier. Und nachdem wir die Gesundheit festgelegt haben, wir daran, diese Tierinformationen zu nehmen und sie hier auf die Struktur wie diese zu setzen. Und dann wollen wir angeben , wo wir den Feind spawnen wollen. Also lasst uns das hier unten machen. Lassen Sie uns hier eine neue Variable namens Response erstellen. Und lassen Sie es uns tatsächlich über das Blueprint-Interface machen. Also lasst uns hierher gehen und eine neue Funktion namens Response erstellen. Lassen Sie uns kompilieren und speichern. Gehen wir zurück zur feindlichen Basis. Ruf es hier an, antworte. Lassen Sie uns natürlich den Server antworten lassen , indem wir seinen Server so aufrufen und ihn dann zuverlässig über den Server laufen lassen. Und lasst uns die Antwort hier oben ausführen. Was wir mit der Antwort machen wollen, erinnern Sie sich hier in unserem Verhaltensbaum einem definierten zufälligen Ort, wir wollen eigentlich nur dasselbe tun. Wir wollen also nur einen zufälligen Ort finden. So kann es tatsächlich sogar Paste kopieren, schreiben wir es einfach noch einmal nur zum Üben. Also lasst uns Schauspieler des Unterrichts holen, Schauspieler des Unterrichts holen. Wir wollen nur unsere Navigation Bound Mesh, nav, nav mesh, Bounce-Volumen, dieses hier bekommen. Jetzt wollen wir die Grenzen der Akteure ermitteln, damit wir sehen können, wie groß das Navigationsnetz ist. Und damit lasst uns die Tränen brechen, weil wir uns nur für die X-Achse interessieren. Denken Sie daran, dass wir ein 2D-Spiel machen, also interessieren wir uns nur für die Größe hier in der X-Achse. Das Z oder das Y sind mir egal also werden wir es nicht tun. Wir möchten nur diesen x-Wert hier verwenden. Was wir hier tun wollen, möchten wir sagen, dass Sie einen zufälligen erreichbaren Punkt im Radius erhalten. Das ist es, was wir verwenden möchten. Denken Sie daran, dass es andere gibt, also erhalten Sie einen zufälligen Punkt im navigierbaren Radius. Ich möchte diesen jedoch im erreichbaren Radius verwenden, denn wenn die Feinde hier oben sind, ist der Feind hier oben. Die Sache ist, wenn Sie es hier im Radius auf erreichbaren Punkt eingestellt haben , wird es spawnen. Es wird hier oben auf der Plattform weiter laichen, also gefällt es nicht zufällig. Wenn du hier oben Feinde hast, spawnen sie nicht zufällig hier unten. Also möchte ich sie hier oben behalten. Und deshalb verwende ich hier erreichbar. Okay, also weiterer Radius, lass uns einfach dieses x verbinden, denn jetzt haben wir hier die Grenzen dieses Navigationsnetzes, und das ist unser Radius. Und der Ursprung ist genau dort, wo der Schauspieler gestorben ist. Also lasst uns den Standort des Schauspielers besorgen. Der Feind hier, hol dir den Standort des Feindes, das ist der Ursprung, nach dem du suchen wirst. Lassen Sie uns im Wesentlichen eine neue Variable erstellen. Was wir hier tun wollen, ist eine Vektorspalte namens Spawn-Position zu erstellen. Und diesen Vektor werden wir auf eine Wiederholungsbenachrichtigung setzen , weil wir versuchen, eine visuelle Änderung vorzunehmen. Wir versuchen den Feind zu spawnen. Und innerhalb dieser Rippe benachrichtigen Sie den Spawnstandort. Wir werden nur sagen , Standpunkt des Schauspielers. Das ist es, was wir versuchen zu tun. versucht, die Position des Akteurs auf einen zufälligen Punkt im Navigationsnetz festzulegen . Also versuchen wir es hier zu spawnen. Der Standort der Schauspielerin und der eingestellte tatsächliche Standort eine visuelle Veränderung, da Sie den Standort der Schauspielerin ändern. Und deshalb legen wir es in eine Rippenbenachrichtigung. Gehen wir jetzt zurück zum Event Graph. Und anstatt hier zu sein, versuchen wir das zu setzen. Wir versuchen, diese Variable auf den zufälligen Ort festzulegen. Aber denken Sie noch einmal daran, ich interessiere mich nur für den x-Wert. Lassen Sie mich das tatsächlich hier runter ziehen . Also habe ich mehr Platz. Wir versuchen es nur, als ob wir hier nur an dem x-Wert interessiert sind. Also mach es hier auf und lass mich den Vektor hier machen. Also trenne ich die Werte, damit ich sie ändern und hier nicht direkt angeschlossen habe. Für das x interessiere ich mich für dx, also schließe ich normalerweise einfach den Akzent an, weil wir das wollen. Und für das y möchte ich die Schauspieler y behalten. Also den eigentlichen Standort. Ich werde es kaputt machen. Und ich bin daran interessiert, die Schauspieler, wie den Standort der Feinde, konstant zu halten . Ich will es hier oben nicht ändern. Und was den Z-Standort angeht, können wir dies wieder verwenden, aber wir können diesen Bone Z Standort verwenden. Und was ich tun möchte, werde ich einfach Plus sagen und versuchen wir plus 20 zu sagen. Und lass mich erklären, warum ich das mache. Für den z-Standort. Denken Sie daran, dass das Z hier oben ist, dies ist der Z-Standort. Ich sage nur 20, weil es manchmal eine Chance gibt, dass sich die Feinde hier verbinden und sie im Boden stecken bleiben. Ich sage nur plus 20, wenn Sie einen neuen Standort finden. Es wird also sagen, dass plus ein t n diesen Feind hier nach oben drängen wird. Und es wird den Feind hier spawnen. Und dann wird es den Feind hier fallen lassen. Denn denken Sie daran, die Feinde haben Schwerkraft, also werden sie nicht hier oben bleiben. Manchmal. Ich versuche nur, das Problem zu vermeiden, bei dem sie in unserem Kollisionsnetz laichen. Und ich sage plus 20. Also das hier oben. Und sie sagen, ich glaube nicht, dass du es merken wirst. würden wir sie bemerken, wenn sie hier oben spawnen, weil es eine Schwerkraft hat und hier unten fallen wird. Und wenn Sie es bemerken, verringern Sie diese Zahl einfach auf etwas niedrigeres. Wenn du es etwas sehr hohes machst, wirst du es bemerken, weil es vom Himmel fallen wird. Also denke ich 20, es wird nicht auffallen. Genau so. Und jetzt verbinden wir es von hier bis hier. Lass mich das ein bisschen runterdrücken. Jetzt legen wir den zufälligen Standort und verwenden ihn tatsächlich hier oben. Nachdem wir also die Hüften auf 100 gesetzt haben, wollen wir die Antwort aufrufen, dass wir darauf antworten werden. Es wird einen zufälligen Ort für den Feind finden und darauf reagieren. Dann denk daran, dass wir das wie gestoppt haben, wenn du tot bist, du hast die Logik hier gestoppt. Also müssen wir ihren Verhaltensbaum erneut starten. Also kann ich das wieder einfach hier kopieren und verbunden sein und sagen startet Logik. Jetzt fangen wir wieder mit Logik an, Sie führen den Verhaltensbaum aus. Denken Sie daran, die Kollisionen hier erneut zu aktivieren, damit sie nicht deaktiviert sind. Schon wieder. Verbinden wir sie so. Was wird jetzt im Wesentlichen passieren? Lasst uns tatsächlich das komplette tatsächliche noch nicht ziehen. Lasst uns hier in den Tod gehen , weil wir nichts getan haben. Und das einzige, was vorerst ist , einfach zu dieser Unwrap Funktion für die Toten zu gehen. Und was wir tun wollen, ist, dass wir das tatsächlich nehmen und prüfen, ob die Spieler das nicht sind. Wenn der Spieler also tot ist, wollen wir nur die Todesanimation abspielen. Nehmen wir das also an und wir haben diesen namens „Set Movement States“. Eigentlich eingestellt. Mal sehen, Du sagtest Bewegungen Staaten. Dieser für den Feind. besagten Bewegungen geben an, und lasst uns den Tod wählen , nur um zu überprüfen, ob wir es tatsächlich geschafft haben. Wenn wir also zu den Unreifen für die Bewegungsstaaten gehen, haben wir es eigentlich nicht angeschlossen. also sehr wichtig zu überprüfen, ob Ihr Code tatsächlich verbunden ist. Kopieren wir also dieses Flipbook ein. Verbinden wir die Sprites mit dem Ziel. Lasst uns diesen Tod hier verbinden. Und jetzt zur Todesanimation, Nehmen wir diese Struktur und lassen Sie uns diese Pin hier treffen, die Todesanimation genannt wird. Wir haben es vor einer Weile geschafft und es uns verbinden lassen. Jetzt, hier unten, lass mich nicht verbundene Pins einfach so verstecken. Jetzt ist es verbunden. Und lass mich hier nach dem Schwein suchen, ob wir die Todesanimation eingestellt haben, also haben wir hier und die Todesanimation für diese Schnecke. Prüfen wir es in den Standardeinstellungen der Klasse. Und wir haben hier die Todesanimation gesagt. Jetzt überprüfe ich die Geschwindigkeit der Animation. Also gehe zu Feinden. Und das geht auf Zeit. Eigentlich wähle ich drei Frames pro Sekunde aus. Also 1 Sekunde spielen wir diese ganze Animation ab. Und was die Schnecke angeht, schauen wir uns das hier an. Also acht Frames pro Sekunde. Ja, ich denke, das ist in Ordnung. Wir können es immer ändern, wenn es nötig ist. Gehen wir zurück zur intimen Basis und gehen zur Entpack-Funktion für die Toten. Also werden wir die Todesanimation spielen und das war's vorerst. Also lasst uns auf Play klicken und hoffen, dass alles funktioniert. Ich treffe es jetzt. Und lass mich tatsächlich meinen Trefferschaden überprüfen meinen Trefferschaden , weil ich das nicht ewig tun will. Also lasst uns mal sehen, wo wir es gemacht haben. Wir haben es anstelle von Blueprints und dem Spieler, Spielerbasis gemacht. Und dann lass uns hier zu diesen Spieler-Info gehen. Und wegen des Basisschadens. Die Gesundheit für die Schnecke ist also 15. Ich werde tatsächlich zehn als Basisschaden legen. Also habe ich zweimal auf die Schnecke geschlagen und sie wird sterben. Also traf die Schnecke, die anderen Schnecken und all diese. Und du kannst sehen, dass es jetzt stirbt. Wir müssen diese Animation nur pausieren , damit sie nicht ewig abgespielt wird. Und du kannst sehen, dass es tatsächlich hier spawnt. Okay, also glaube ich nicht, wir diese Todesanimation nicht pausieren müssen. Du kannst es tun, wenn du willst, genau wie das, was wir mit der Seil-Animation für den Spieler posten . Aber ich glaube, wir werden eine verblassende Animation machen und das Fade wird sie verschwinden lassen. Es spielt also keine Rolle, ob die Animation des Feindes hier Post ist oder nicht. Aber du kannst hier sehen, dass sie laichen, weiß ich im Boden, also müssen wir das beheben. Oder weil der Gehmodus eingestellt werden muss. Also lasst uns genau jetzt gefallen, ich denke, es ist in Ordnung. Arbeiten wir am Verblassen. Denn mit dem Verblassen verwenden wir das vielleicht, um den Walking-Modus und die Nüsse innerhalb der Todesanimation einzustellen den Walking-Modus und die Nüsse innerhalb der , weil Sie sehen können, dass sie funktioniert, aber das liegt daran, dass Sie hier sehen können, wenn ich zurück zur feindlichen Basis und hier drinnen gehe, gehen wir zum Event Graph. Und denken Sie daran, dass wir den Bewegungsmodus auf keinen gesagt haben, und wir haben ihn nie wieder auf Gehen eingestellt. Deshalb stecken als wären sie nicht wirklich im Boden stecken. Ich glaube, ich glaube, es liegt daran, dass wir es nicht mögen, dass wir das nicht zum Gehen gesagt haben. Und das kannst du jetzt in der Todesanimation oder des Todesereignisses hier tun. Aber ich denke, wir werden einen verblassenden Effekt erzielen. Und damit stellen wir den Walking-Modus ein. Lasst uns also zum nächsten übergehen. 90. Enemy: Okay, also hier in der Basis, Lasst uns jetzt einen verblassenden Effekt machen, wenn der Feind würfelt. Mal sehen, ob wir das besser strukturieren können. Jetzt haben wir die Todesanimation hier, wir haben die Spawn reagierende Animation. Sie können einfach versuchen, die Fade-Animation hier zu erstellen. Ich gehe zurück zu meinem Blueprint-Interface und mache eine neue Funktion namens „ Actor Fade“. Und lasst uns einen Booleschen Wert machen und es einfach „fade“ nennen. Also nur um zu sehen, ob es verblassen soll oder nicht. Gehen wir zurück und scrollen das Ereignis, das als atrophied bezeichnet wird. Und lasst uns ein Server-Ereignis machen. Benutzerdefinierte Ereignisse, die durch den Server gehen , der als atrophied bezeichnet wird. Und lassen Sie es uns zuverlässig durch einen Server führen. Und lasst uns das Server-Event hier oben ausführen, Schauspieler fade und machen wir einen neuen booleschen Wert. Also die gleichen Dinge, die wir bisher gemacht haben. Jetzt verbinden wir es. Okay, jetzt haben wir diesen Schauspieler verblassen. Lassen Sie uns dies zu einer Variablen fördern. Und ich weiß nicht, ob wir es vorerst zu einer Vertretungsbenachrichtigung machen müssen . Lassen Sie es uns vorerst einfach so sein. Was wir also versuchen , ist, den Feind zu ernähren, wenn er stirbt. Also hier drüben und der feindliche Tod, ich werde es hier gerade verblassen, bevor ich tatsächlich, nachdem ich das auf falsch gesetzt habe, den Feind vor dem Reaktions-Timer füttern können. Lassen Sie mich also nicht entfernen, sondern verschieben Sie das hierher und nennen Sie das Fade-Event des Schauspielers hier. Darin verblasst Schauspieler. Und lassen Sie es uns auf wahr setzen. Okay, was sollte also passieren , wenn das Fade stimmt? Was stimmt? Was ich tun muss, ist eine TEM-Linie aufzurufen. Denken Sie also daran, dass wir vorher eine Zeitleiste gemacht haben. Lass es uns jetzt nochmal machen. Klicken Sie also hier und nennen wir das einen Hauptdarsteller. Und lasst es uns von Anfang an spielen. Was wir also hier tun müssen, das Ziel dieser Zeitleiste ist es, die Farbe für den Feind zu verblassen. Und denken Sie daran, den Fading-Effekt zu erzielen, Sie müssen zu diesem Feind gehen. Und setzen Sie dieses Material wieder auf ein durchscheinendes, unbeleuchtetes Material, weil Sie diese Farbe nicht direkt verblassen können , als würde sie plötzlich verschwinden. Du kannst nicht mögen, dass es keinen Zwischenschritt gibt. Es erscheint einfach und verschwindet so. Also müssen wir es wieder auf transluzent setzen, genau wie der Spieler, den wir mit dem Blinkeffekt gemacht haben. Also lasst uns hier zur feindlichen Basis gehen. Und eigentlich machen wir das hier drüben tot ist. Also lasst uns das machen, bevor wir verblassen. Wenn der Spieler also tot ist, gehen wir zu ist tot. Und hier können wir das helle nehmen und Set-Material sagen. Und lasst uns es auf das sogenannte Transluzenz, durchscheinendes, unbeleuchtetes Sprite-Material einstellen. Jetzt lehnen wir uns zurück und lassen es uns einstellen. Denken Sie daran, es wieder hier zu setzen , wenn der Spieler das nicht mehr ist. Also zu maskiertem, maskiertem unbeleuchtetem Sprite-Material. Okay, jetzt haben wir das Material dazu gesagt und wir können den Spieler füttern oder den Feind verblassen. Gehen wir hier zur Timeline. Okay, also versuchen wir eine lineare Farbe festzulegen. Lassen Sie mich also eine neue Variable erstellen und sie Akteur-Fade-Farbe nennen . Und lassen Sie uns die neue Variable hier in eine lineare Farbe verwandeln. Und lass es uns nehmen und einstellen. Das ist es, was wir also einstellen wollen. Ich schaffe es zu einem Wrack. Benachrichtigen. Denn denken Sie daran, dass dies eine visuelle Veränderung ist. Wir ändern das Alpha des Spielers, was bedeutet, dass wir es undurchsichtig machen. Also gehe hierher und setze es auf eine Netzhaut Phi. Und was wir hier in der Unwrap Funktion versuchen ist, dass wir versuchen, dieses Sprite zu nehmen und Sets zu sagen. Ich glaube, es hieß zuerst Sprite Color. Ja, es ist eine helle Farbe. Das ist es, was wir hier einstellen wollen. Und nehmen wir diesen Schauspieler gefälschte Farbe und verbunden. Also werden wir die Farbe einstellen und sie im Laufe der Zeit einstellen , weil wir sie ständig über diese Zeitleiste aktualisieren . Und was wir versuchen, ist, lass uns eine Loop-Note verwenden. Also hat es versucht, einen Loop-Knoten zu verwenden. Und wenn Sie nach Schleife suchen, können Sie diese finden, als könnten wir diese verwenden, aber ich glaube, diese bessere Idee, wie Sie das brechen können. Du kannst sehen, nimm das und du hast Recht, mach, mach lineare Farbe. Auf diese Weise. Sie können das Alpha hier durch einen Float ändern. Und es kann tatsächlich nur einen Loop-Knoten verwenden , da dies ein Float ist. Es ist jedoch ein besserer Weg, dies zu tun. Es gibt eigentlich eine Schleife für eine lineare Farbe spezifisch. Also kann es stattdessen das benutzen. Und Sie können lineare Farben durchlaufen. Anstatt dies hier zu tun, lass mich das löschen. Und hier für die Schleife kannst du es einfach so verbinden. Und für die erste Farbe fangen wir damit an, einfach wir selbst zu sein. Also hier 1111, alle sind auf eins eingestellt. Dies macht nur die Pixel so, als hätten wir unseren Charakter ohne Farbe. Und der zweite. Ich wollte nur noch einmal 1111 machen, aber für das Alpha, also die Deckkraft, die wir auf 0 setzen wollen, eigentlich 0, also wird sie verschwinden. Es wird von 0 zu eins gehen. Als wäre dieser 0 und dann geht es zu eins. Es wird also von 0 auf eins verblassen. Und wir wollen es reibungslos machen. Anstatt nur einen hier zu schreiben, wenn wir das einfach ohne irgendetwas anderes tun , wird es tatsächlich verschwinden, wenn wir das Spiel beginnen. Aber wir wollen gehen, wollen reibungslos von 0 zu eins gehen. Und deshalb verwenden wir eine Zeitleiste. Wenn ich also auf die Timeline klicke, mache ich hier einen neuen Float-Track. Nennen wir es „Fade Alpha“. Hier, klicken wir mit der rechten Maustaste und machen zwei. Lassen Sie mich hier eigentlich drei Punkte machen und Sie werden sehen warum. Zum Zeitpunkt 0 möchte ich, dass der Wert 0 ist. Lasst uns tatsächlich die Länge dieser 1 Sekunde machen. Also zu der Zeit, also der letzte Punkt hier, also zuerst 00, der letzte Punkt zum Zeitpunkt, ich möchte, dass es einer ist. Und dieser zum Zeitpunkt von 0,75 möchte ich, dass es noch 0 ist. Also möchte ich den Feind nicht sofort verblassen. Ich möchte es ungefähr 0,75 Sekunden verblassen. Es wird also die Animation ein wenig abspielen, und dann wird die Animation ausgeblendet. So kannst du es auch machen. Sie müssen es also nicht so machen wo es mit der Zeit einfach verblasst. Ich werde einfach so untreu sein bis es hier am Ende der Animation schnell verblasst . Also lasst uns hierher gehen und lasst uns das Alpha jetzt verbinden. Und jetzt haben wir diese glatte Zeitleiste , die unsere Animation verblassen wird. Und was wir jetzt tun können, ist, dass wir nach dem Tod zu unserem Kodex gehen können . Eigentlich haben wir es jetzt schon hier geschafft. Also Schauspieler verblassen, lass mich versuchen es zu spielen und zu sehen, was passiert. Wenn ich es jetzt spiele. Und ich töte ein paar Feinde. Man kann sehen, dass sie verblassen und es spielt keine Rolle. Als ob unsere Animation immer noch so läuft wie zuvor, aber wir sehen sie nicht wirklich weil wir zum Feind passen. Wenn ich also versuche, diesen jetzt zu töten, kannst du sehen, dass es die Animation abspielt und danach verblasst es. Was ist ziemlich cool. Und lassen Sie mich eigentlich, bevor ich etwas anderes mache, meine Kollisionen hier entfernen. Ich will sie nicht mehr sehen. also zum Schwein gehen, glaube ich, dass wir gerade auf einen von denen geklickt haben, damit die Kopfbox im Spiel versteckt sein sollte. Eigentlich glaube ich, dass es durch die feindliche Basis geschehen wird. Also hier versteckt im Spiel. Ich wollte nur so meine Kopfboxen schlagen und verkaufen. Also trage oder verstecke die im Spiel versteckten Angriffskollision der Spieler. Okay, jetzt haben wir diese verblassende Animation, aber denken Sie daran, dass wir irgendwann zwei Unbevorzugte haben. Ich werde sofort unphasenlos wenn ich meinen Spawn-Standort finde. Bevor wir also mit der Logik beginnen, beginnen wir den Entfaltungsprozess. Darsteller verblassen, ich rufe das gleiche Event aus. Und anstatt dies wie zuvor anzukreuzen, haben wir es jetzt deaktiviert. Und das bedeutet, dass es sich entfalten wird. Die Art, wie wir das machen, ist hier. Wie lautet die Zeitleiste? Die Zeitleiste ist da. Anstatt von Anfang an zu spielen, machen wir hier einen Zweig. Nehmen wir das also und machen einen Zweig und verbinden uns. Wenn es also stimmt, wenn wir verblassen, wird es von Anfang an spielen wie zuvor. Wenn Sie jedoch nicht mehr verblassen , wird es falsch. Ich möchte das eigentlich von Ende an umgekehrt spielen . Und es wird von diesem unsichtbaren zu sichtbar werden. Also wird es in meinem Charakter tatsächlich verblassen. Dies ist im Wesentlichen der Fall, wenn Sie es auf „deaktiviert“ setzen und es hier hinzufügen, das unkontrollierte, was falsch ist , um vom Ende umzukehren. Denken Sie daran, dass ich es hier machen möchte. also im Gehmodus daran, dass wir den Bewegungsmodus nicht eingestellt haben . Wenn ich also im Schaden hierher zurückgehe, setzen wir den Bewegungsmodus auf „None“. Ich kopiere das. Ich gehe hier runter und füge es ein. Und anstatt es auf „None“ zu setzen, werde ich es tatsächlich wieder laufen lassen. Sonst wird es stecken bleiben und niemals, niemals bewegen. Jetzt haben wir den Arbeitsmodus, also versuche ich zu sehen, was uns fehlt. Also gibt es eigentlich etwas, das wir vermissen. Was uns fehlt ist Wir haben nie angegeben, wenn der Charakter nicht mehr tot ist. Also hier legen wir fest, dass das wahr ist. Und denken Sie daran, dass wir es auf „false“ setzen müssen weil hier drin ist, ist tot. Wir haben hier standardmäßig festgelegt, wir setzen das Material wieder auf Maske. Also müssen wir das machen, und ich glaube, ich mache das. Anstatt es hier zu tun, also kannst du es nicht, kannst du nicht einfach hier reingehen und das sagen. Denn denken Sie daran, Sie es sind, Sie spielen ein Schauspieler Fade, was eine Zeitleiste ist. Und du wirst tatsächlich festlegen, wie wenn du das hier aufrichtest, den Tod, den du einstellen wirst. Dieses Material wird unbeleuchtet maskiert, was dieser Zeitleiste keine Möglichkeit gibt , die Farbe von unsichtbar in sichtbar zu ändern. Denken Sie daran, wenn Sie das Material als Standard zum Maskieren von Schlitzen haben , können Sie diesen reibungslosen Übergang nicht haben, den Feind verblassen. Wenn du das hier oben machst, wird es sofort nach dem Verblassen des Schauspielers tun . Und es wird das Material so ändern, dass es unbeleuchtet maskiert, gibt was der Zeitleiste nicht zufällig genug Zeit , um dies hier zu diesem Übergang von wie dem Fade-In-Effekt zu tun . Also lasst es uns tatsächlich hier in der Timeline machen. Wenn die Zeitleiste mit dem Verblassen endet, können wir diesen Tod dann auf „falsch“ setzen. Und das wollen wir nicht ständig tun , denn denken Sie daran, obwohl das Feld auf true eingestellt ist und Sie es hier spielen, wird es dies zu falsch spielen weil wir es nicht wirklich müssen tun Sie das, wenn Sie verblassen, was hier getan hat, wir wollen es nicht auf falsch setzen, wie den Tod, weil wir auch einen Antwort-Timer haben und deren Notwendigkeit einige Zeit dauern muss. Ich mache hier einen Booleschen Wert. Dieser hier ist wieder der Feed. Und lassen Sie uns einfach einen booleschen Wert machen. Eigentlich ist es eine Art Feed, nicht wirklich erklärend ist. Lass es mich stattdessen nach dem Verblassen ändern. Lassen Sie mich dieses so einstellen , dass es repliziert wird weil Sie daran denken, dass es auf dem Server läuft, also muss der Client davon wissen. Und lass mich diesen Schauspieler verblassen, einen Zweig setzen und uns ihn hier verbinden. Wenn der Feind verblasst, werden wir nichts tun. Aber wenn der Feind nicht mehr verblasst, was bedeutet, dass du hier drüben bist. Dann werden wir diesen Code ausführen, diese Zeitleiste ausführen und die Zeitleiste endet. Wir werden sagen, ja, der Schauspieler verblasst nicht. Es wurde auf „false“ gesetzt. Dann setzen wir das auch tatsächlich auf „false“. Jetzt können wir es also so machen statt da oben. Okay, also lasst uns jetzt kompilieren und speichern, und hoffentlich haben wir alles repariert. Und klicken wir auf Play und lassen Sie uns ein paar Feinde töten. Wir haben also viele Feinde im Sterben. Und mal sehen, ob sie richtig reagieren. Also jetzt antwortet dieser auf diesen, antworte. Diese antworten. Okay, es scheint also, als würde alles richtig funktionieren. Und wenn ich sie nur einmal treffe, werden sie es tun und du kannst sehen, dass es tatsächlich einen kleinen Fehler gibt. Ich glaube, dieser hat es nicht gemocht , dass es keine generierten Überlappungsereignisse mit diesem gibt. Das Problem hier mit dem überlappenden Problem ist also , dass ich vergessen habe, sie auf wahr zu setzen. Also haben wir sie hier auf false gesetzt, aber am Ende habe ich vergessen, sie auf wahr zu setzen. Wir müssen also Überlappungsereignisse generieren. Also lasst uns kompilieren und speichern. Lass uns wieder das Spiel spielen. Und lass es uns nochmal versuchen. Also lasst uns sie jetzt treffen. Sie werden sterben. Offensichtlich brauchen wir sehr bald einige Soundeffekte. Und Sie können sehen, dass sie richtig reagieren. 91. Platzierung der feindlichen Niveaus: Diese Lektion ist ein bisschen anders. Das tun wir nicht, wir werden nichts codieren. Und jetzt werden wir die Feinde einfach um das Level legen. Und du kannst das mit dem Code machen. Sie können also einfach ein Laichereignis machen und einfach alle Feinde automatisch spawnen , wenn Sie dem Spiel beigetreten sind, und es auf zufällige Orte einstellen. Aber ich glaube, wenn Sie etwas ohne Code machen können, dann schlage ich vor, dass Sie es ohne Code tun , weil Sie daran denken , codieren, Sie werden etwas Erinnerung an das Spiel verwenden. Und warum machst du das, wenn du einfach hierher kommen und sie einfach umsonst platzieren kannst . Dies ist sehr optimiert. Du musst keinen Code schreiben. Wann immer Sie vermeiden können, all diesen Code zu schreiben, versuchen Sie, Schleifen zu vermeiden. Versuchen Sie es zu vermeiden, diesen Code zu schreiben. Wenn wir es zum Beispiel vermeiden könnten, diesen Code zu schreiben, hätte ich ihn nie geschrieben. Aber da wir es bereits mögen, da wir dies schreiben müssen, müssen wir es schreiben, damit es funktioniert. Aber für die Laichereignisse, wie anstatt einen Laichcode für die Feinde zu erstellen, wenn du einfach hierher kommen kannst als ob er zu deinem Spiel passt. Natürlich müssen einige Spiele Code spawnen, damit es funktioniert. Aber für diesen Fall haben wir Feinde ersetzt. Da wir die Feinde platziert haben, können wir sie einfach aufnehmen und einfach platzieren, wo wir wollen. Und das war's. Also müssen wir hier nichts für die feindliche Basis programmieren . Wenn ich also zurückgehe, haben wir mit der feindlichen Basis hier für die Reaktion gemacht , dass wir im Grunde nur den Feind verstecken und dann die Unterstützung des Feindes einblenden. Schon wieder. Wir entfernen den Feind nicht wirklich dauerhaft aus dem Spiel. Denken Sie jedoch daran, dass Sie in Ihrem Spiel etwas Benutzerdefiniertes machen und diesen Kurs nicht vollständig befolgen, wenn Sie den Schauspieler zerstören möchten, z. B. entfernen Sie ihn vollständig vom Level. Denn wenn du es einfach so fütterst, wenn du es verblasst, bist du verrückt. Als ob der Schauspieler im Grunde immer noch da ist. Wenn ich einfach hier zum Feind gehe und die Kopfbox so setze , dass er nicht im Spiel versteckt ist. Und du siehst tatsächlich, als ob ich das Spiel jetzt spiele, treffe ich diesen Feind hier und würfeln. Sie können sehen, dass die Kollisionsbox immer noch hört, dass der Feind noch hier ist. Es ist nur verblasst. Das ist also in dieser Situation in Ordnung da wir wie eine bestimmte Anzahl von Feinden haben. Zum Beispiel brauche ich nur vier Schnecken und mein Level. Also verblasse ich es einfach und antworte es woanders. Wenn du es jedoch nur komplett vom Level aus zerstören willst und niemals dieses **** hast. Denn wenn Sie noch einen Teich laichen haben, wird dieser Blueprint-Code immer noch ausgeführt und er wird nicht optimiert wenn Sie weiterhin Feinde laichen und sie niemals aus dem Level entfernen. Wenn Sie es also vollständig entfernen möchten, können Sie dieses mit der Aufschrift „Destroy Actor“ verwenden. Zerstöre Schauspieler werden es komplett aus dem Spiel entfernen und es kann versuchen zu sehen, was es tut. Also wenn ich das hier einfach umbringe und es irgendwo verblassen wird , lass mich einfach noch etwas töten und auch diesen töten. Sie können also jetzt sehen, dass sie tatsächlich so sind, als würden woanders antworten und nach dem Antwortcode werden sie zerstört. Jetzt werden sie vollständig aus dem Spiel entfernt. Dies ist optimiert, weil Sie dann nicht all diesen Code für diesen Feind im Spiel ausführen . Für dieses Spiel habe ich jedoch ständig nur vier Feinde. Und ich verblasse es einfach und antworte es woanders. Also behalte ich diese vier Feinde. Ich habe nie fünf Feinde oder sechs oder sieben Feinde hervorgebracht. Wenn du das tust, denk daran, den Schauspieler zu zerstören. Wenn nicht, wenn du das nur machst, kannst du es einfach woanders und auf dem Level antworten. Jetzt können wir vermeiden, Code für die Antwort zu schreiben , damit wir sie einfach ersetzen können. Was ich hier also anfange , ist, das nur auf einen zu setzen. Und manchmal sieht man Feinde die sich durchschneiden. Und das liegt daran, dass sie es haben, alle haben eins im Y. Manchmal gehen sie einfach ineinander. Sie schneiden so zusammen. Sie können sehen, dass es einige Clipping gibt. Und das liegt daran, dass sie den gleichen Y-Wert haben. Was Sie hier also manuell tun können, wird einige Zeit dauern, aber Sie können zum Beispiel einen für diesen schreiben , den zweiten, ich schreibe 1.1. Und für den dritten schreibe ich 1.2. Es wird sich also nie gegenseitig schneiden. Du siehst jetzt, dass sie vor einander stehen. Sie werden niemals zusammenschneiden. Und das kannst du einfach machen. Halten Sie also Alt gedrückt und ziehen Sie zum Kopieren, und dieser ist 1.3. Und ziehe nochmal 1 für diese 1,51. Also so etwas, und du kannst es hier oben platzieren, es erneut ziehen, 1.6. Also werde ich einfach diese Feinde haben. Und hier oben wegen der Schweine füge ich ein paar Schweine hinzu. Also 0 und das y. Für das y fange ich tatsächlich wieder mit einem an weil der Spieler eigentlich nicht der Spieler ist. Diese Kacheln sind bei 0, also möchte ich nicht, dass sie hinter den Kacheln sind. Deshalb habe ich mit einem angefangen. Und lass es uns noch einmal ziehen und 1.1 sagen. Und manchmal, als ob 1.1 nicht genug ist, kann man einfach 1.1.15 oder so etwas sagen. Also 1.2 dafür, 1.31, für diesen können wir immer überprüfen, ob sie abschneiden, wir können diese Größe zwischen ihnen erhöhen. Und für den Spieler beginnt der Spieler bei zwei, also ist der Spieler immer vor den Feinden. Lasst uns auf Play klicken. Und schauen wir es uns an und versuchen einfach zu sehen, ob es Clipping gibt. Lassen Sie mich tatsächlich zur feindlichen Basis gehen und dieses Kollision- oder Hit-Box-Versteckungs-End-Spiel hier deaktivieren . Also kann ich sie klarer sehen. Jetzt kannst du sie dir ansehen und sehen ob sie jemals eines Tages abgeschnitten werden, durcheinander gehen. Und manchmal, wenn sie abschneiden, können Sie diese Trennzahlen einfach erhöhen. Sie können einfach den Y-Wert erhöhen. Ich denke, es sieht gut aus und sieht gut aus. Auch hier können Sie die Trennung und das Y erhöhen , wenn Sie möchten. Aber das ist mehr, dies ist ein optimierterer Weg, dies zu tun. Wenn Sie mit etwas davonkommen können, indem Sie nicht programmieren, können Sie das tatsächlich tun und es wird optimierter. Aber manchmal muss man Code schreiben und man kann es nicht wirklich vermeiden. Jetzt, da wir alle Feinde im Level platziert haben , speichern wir alles und lass uns zur nächsten Lektion übergehen. 92. Hit, Tod und Respawn SFX: Wir haben das Ende erreicht und es ist fast Zeit für das Nivelliersystem. Und bevor wir das tun, fügen wir tatsächlich ein paar Soundeffekte und machen hier etwas Interessantes. Ich denke, es klingt viel besser wenn man Soundeffekte hinzufügt . Lass uns zu Audio gehen. Und ich habe diese für Sie in die Kursmaterialien aufgenommen und diese haben wir hier. Wir benutzen den Sprung bisher nur. Also wähle einfach alle von ihnen aus, außer dem Sprung. Und lass mich sie hier in meinen Audioordner ziehen. Und dann haben wir all diese. Klicken wir auf Datei und speichern Sie alle. Was Sie jetzt tun können, ist, dass Sie dieses Level mit der rechten Maustaste nach oben heben können und Sie können einen Sound-Cue Ball erstellen. Es ist der Sound-Cue-Pegel höher. Und das werden wir später benutzen. Sie können auf Play klicken, um zu hören, wie es klingt. Nur ein paar Geschichten, Soundeffekte. Und für diesen Angriff kannst du mit der rechten Maustaste klicken und ein Q erstellen, es Angriff nennen und dasselbe mit den Angriffshits tun , Angriff nennen, Treffer. der rechten Maustaste für den Tod und erstellen Sie einen Sound-Cue und nennen Sie ihn Soundwarteschlange, Tiefe. Der Sprung, den wir bereits gemacht haben. Also geht's und das Level nach oben. Wir haben das getan, um den Tod zu wählen, Cue zu hören, den Tod zu wählen. Und lasst uns das auch für den Schneckentod tun. Sound Cue Schnecke Schulden. Und wir haben eine Antwort, diese antwortet, klingt, antwortet. Und mal sehen, ob uns etwas fehlt. Also haben wir jetzt den Text Tod, wir haben jetzt alles. So kannst du es auch für die Musik machen. Wir haben etwas Musik namens Sound-Cue Music, eigentlich nur Tennessee genannt, ich nenne es Genesis. Das ist die Musik. Okay? Und ich werde es jetzt nicht anschließen , weil ich denke, dass es nervig sein wird , wenn wir das Spiel debuggen und weiterhin Musik spielen. Also werde ich das vorerst draußen halten. Das erste, was wir tun können, ist , wenn wir mit dem Spieler angreifen. Gehen wir also zum Spieler und gehen zur Spielerbasis. Und für den Angriff machen wir das hier. Also haben wir den Angriff. Wir gehen durch den Server und erinnern uns an Soundeffekte. Sie müssen entweder durch den Kunden gehen. Wenn Sie also möchten, dass Soundeffekte nur von Ihnen gehört werden, möchten Sie benutzerdefinierte Ereignisse aufrufen und über den Client ausführen . Wenn Sie jedoch möchten, dass der Soundeffekt von allen um Sie herum gehört wird , müssen Sie es tun. Eigentlich vergesse ich, meine Verknüpfung hier für dieses benutzerdefinierte Ereignis zu verwenden . Sehr schnelle Abkürzung. Wenn Sie möchten, dass der Soundeffekt von allen gehört wird, müssen Sie ihn durch einen Multicast laufen lassen. Multicast, wenn jeder es hören sollte, liniert, nur wenn man es hören sollte. Ich denke, alle Kunden sollten diese Geräusche hören, also lass mich das einfach tun. Lassen Sie mich also benutzerdefinierte Ereignisse erstellen und es MC-Angriff nennen. Und dafür werden wir sagen, Play Sound vor Ort. Also werden wir den Sound an dem Ort abspielen , an dem der Spieler angreift. Und ich ziehe diese Variablen einfach in die Ereignisse und nenne es Attack S Effekte, denn es ist Sounds, Soundeffekte und Standort in Ordnung. Und jetzt spielen wir es. Denken Sie daran, dass Multicast nur über den Server ausgeführt werden kann. Für den Angriff haben wir zwei verschiedene Sounds. Wir haben 14. Hier, schauen wir uns nach dem Angriff. Und wir haben eins für das Angriffskit. Also wann immer du etwas triffst, also lass es uns hier machen. Also hier prüfen wir, ob wir tatsächlich Feinde treffen. Und wenn wir das sind, spielen wir den Hit One. Also hier drüben, lass mich eigentlich einfach MC-Angriff nennen. Und lassen Sie uns diesen Code ein wenig so vorantreiben, und Sie können ihn später immer näher bringen. Es wurden diese Soundeffekte gespielt und es wird diesen Treffer-Effekt spielen. Was Sie tun können , um die Konsistenz dieses Spiels zu verbessern , können wir zu Struktur- und Spielerinformationen gehen und einfach Variablen für die Angriffseffekte hinzufügen und Sound-Cue wählen. Für den nächsten können Sie einfach einen Tech-Hit S Effekte machen. Also müssen wir angreifen, Geräusche angreifen. Und lasst uns tatsächlich hier in der Spielerbasis machen, anstatt es separat in Luke und Serena zu machen, machen wir es einfach hier in der Spielerbasis weil ich nur einen Sound für alle Spieler habe. Lass mich also zu Spieler-Info gehen. Stellen Sie sie einfach hier statt in jedem Zeichen ein. Jetzt suche ich einfach nach einem Tech- und Angriffshit. Also haben nur alle Charaktere den gleichen Soundeffekt. Gehen wir also zurück zur Spielerbasis. Und hier können wir jetzt unsere Spieler-Info nehmen. Tolle Kinder, und lass uns einfach nicht verbundene Pins verstecken und einfach meinen Angriff zeigen. Eigentlich ein Tech-Hit dafür. Und hier verbunden. Was ist der Standort? Der Standort ist nur der Standort dieses Spielers. Also bekommen wir den tatsächlichen Standort und sind verbunden. Und wann immer, anstatt dies zu tun, glaube ich, dass wir einen Fehler bekommen werden , weil dieser auf dem Server läuft und der Client dies niemals hören kann. Also der Server, wenn ich etwas treffe, werde ich es hören, aber ich glaube, als Kunde werde nichts hören. Lass es uns versuchen. Eigentlich funktioniert es nicht, also können wir das tatsächlich tun. Aber wenn du willst, kannst du vielleicht auch manchmal denke ich, dass es viel sauberer ist das einfach zu speichern und es stattdessen einfach hier durchlaufen zu lassen. Aber lasst es uns vorerst einfach so behalten. Kontrollieren wir einfach Z. Ich werde es einfach so behalten. Lass es mich kopieren, füge es hier ein. Wenn es funktioniert, warum nicht? Ziehen wir es hierher und verbinden es. Und was versuche ich eigentlich für diesen Angriff zu tun? Wir müssen die Verzögerung hier tatsächlich so durchmachen. Okay, also hier unten spielen wir den Soundeffekt , bei dem wir nichts treffen. Und hier unten, nehmen wir diese Kopie, die hier unten eingefügt wurde. Stattdessen können wir den Angriff zeigen, Angriffseffekte und den Standort der Schauspieler wieder hier unten bringen , einfach so. Also was wir jetzt spielen können und lassen Sie mich uns einfach vor Kunden spielen, nur um sicher zu sein. Wir spielen uns Kunden gegenüber. Jetzt schlagen wir zu. Du siehst es. Und wenn ich ja nicht treffe, klingt das gut. Okay. Das nächste ist, dass wir die Schnecke und die Schweinetiefe wollen. Lasst uns also zum Feind gehen und sehen , wo wir das spielen. Also haben wir das beschädigt durch den Server laufen lassen. Es wird dann dieses Todesereignis hier spielen, und fügen wir es tatsächlich hinzu. Der Tod wird also durch den Server gehen und vom Server aus wollen wir einen Multicast ausführen. Lassen Sie mich diese beiden also zusammenstellen, aber das hier unten und hier drüben werde ich ein individuelles Ereignis namens MC Death machen und es auf Multicast ausführen. Hier. Spielen Sie wieder Sound, Standort M und nennen Sie es einfach feindlichen Tod oder einfach nur Tod oder keine unmittelbaren Auswirkungen. Also solche Dinge. Der Standort. Und jetzt können wir den Multicast-Tod nennen. Und für diesen Multicast-Tod lassen wir mich jetzt tatsächlich all diese ziehen, haben immer das Weltraumproblem hier. Für diesen, für den feindlichen Tod, machen wir das Gleiche. Für die Struktur können wir also eine neue Variable namens S Effects hinzufügen. Und machen wir es zu einem Sound-Cue. Sparen Sie hier. Und lass mich gehen, jetzt lass mich zuerst zur feindlichen Basis gehen, kompilieren und speichern und dann zum Feind, zum Schwein gehen. Und dann müssen wir zu den Standardeinstellungen der Tierfüllung gehen und dann müssen Sie den tauben Soundeffekt auswählen. Lass mich nach Schwein suchen und wähle dieses aus. Wähle das aus, kompiliere. Lass uns zu einer Schnecke gehen. Und die Schnecke, wir werden diese Schnecke benutzen, Tod. Lass mich zurück zur feindlichen Basis. Was wir jetzt tun können, ist diese Tierinformationen zu ziehen, Kinder zu brechen, nicht verbundene Pins zu verstecken und ich kann diese verwenden, Tod als verbundene Effekte. Und wo ist der Standort? Denken Sie daran, dass wir uns in jeder Basis befinden, also können wir einfach sagen, dass wir den Standort eines Schauspielers abrufen weil es überall ist, wo dieser Feind ist. Okay, also lasst uns Compounds speichern, wenn wir auf Play klicken und sehen, ob es funktioniert. Wenn es stirbt. Ja, ich spiele den Klang davon ab. Also hat dieser tatsächlich ein paar Mal gespielt. Das ist witzig. Weil wir es hier tatsächlich so machen müssen, ist der Feind tatsächlich tot. Das war witzig. Es hat mehrfach gespielt. Also können wir das nehmen und Branch sagen. Und erst wenn der Feind stirbt, wollen wir den Sound spielen, nicht wenn er reagiert. Klicken wir also auf Play und versuchen es erneut, nur um sicher zu gehen, dass das funktioniert. Und tatsächlich gibt es einen kleinen Bug, während ich das teste. Du kannst sehen, dass es tatsächlich mein Charakter hier oben funktioniert. müssen wir beheben. Lassen Sie mich also zuerst den Ton ausprobieren , bevor wir etwas reparieren. Also lass mich hier oben bleiben und spielen. Sie haben ein bisschen mehr Gesundheit, also muss ich es noch einmal versuchen. Okay, das funktioniert auch. Großartig. Der Sound funktioniert also. Wir müssen dieses Buchstabenproblem in ein wenig beheben. Das nächste, was wir tun wollen, ist Death Sound der Spieler zu spielen. Gehen Sie also zur Spielerbasis, gehen Sie zum Schaden, und wenn der Spieler stirbt, also hier im Tod, wenn er auf wahr eingestellt ist. Also lasst uns hier unten wieder zu Tode gehen. Ich bin auf wahr, wir wollen den Multicast spielen. Lasst uns das hier hochziehen, um mehr Speicherplatz einen benutzerdefinierten Ereignismulticast-Tod aufzurufen. Lassen Sie uns es zuverlässig durch den Multicast führen und dann Sound vor Ort abspielen. Also machen wir das Gleiche noch einmal. Es ist gut zu üben, es einfach immer wieder zu machen. Und plötzlich siehst du dich selbst und Experte darin. Also lasst uns den Tod als Auswirkungen machen. Und für diesen müssen wir wieder zur Struktur zum Player gehen, um einen neuen Sound namens Death Sound-Effekt zu erhalten. Sparen Sie. Und alle Spieler haben die gleichen Soundeffekte. Ich klicke einfach auf diese und den Spieler, Spieler-Info. Und ändere das hier unten in den Tod. Und das hier. Okay, also wenn du zu diesem gehst, ist die Tiefe eingestellt. Lassen Sie mich jetzt einfach nicht verbundene Pins verstecken. Und hier drüben nennen wir sie Multicast-Tod. Jetzt nennen wir es hier und setzen diesen Texteffekt. Nehmen wir jetzt die Spielerinformationen und lassen Sie mich etwas mehr Platz schaffen. Hier können wir Break und Haydn verbundene Pins sehen und wir können den Tod hier einfach als Auswirkungen nutzen. Und das hier können wir sagen, Hol dir einen Schauspielerstandort. Und lass es mich tatsächlich hochziehen. Es gibt mehr Platz zum Arbeiten. Und zieh das alles nach unten. Einfach so. Jetzt spielen wir den Soundeffekt. Lass mich tatsächlich sterben und testen es aus. Wenn ich also nur auf diese Bilder stoße, kannst du sehen, dass du diesen Soundeffekt hast. Und jetzt brauchen wir auch einen Response Soundeffekte. Also lass mich hier rauf gehen und einen Blick auf den Code werfen. Vielleicht musst du es einfach in den Tod falsch schreiben. Werfen wir einen Blick auf den Code. Wenn wir also sterben oder nicht sterben. Das ist also nicht mehr. Und das wiederholen, und mal sehen, wo wir den Tod tatsächlich auf falsch gesetzt haben. Ich weiß eigentlich nicht , wo wir es gemacht haben. Versuchen wir also zu mögen, was Sie jetzt tun können, um etwas zu finden. Dies ist ein gutes Lehrbeispiel. Wenn ich jetzt mag, erinnere mich nicht, wo ich das Falsche gemacht habe. Ich kann mit der rechten Maustaste klicken und Referenzen suchen sagen. Und dann kann ich einfach so nur Referenzen in dieser Blaupause findet, dass das nur Referenzen in dieser Blaupause findet, was meiner Meinung nach in Ordnung ist, weil ich denke, dass es hier verwendet wird. Aber wenn Sie möchten, können Sie darauf klicken. Finden Sie in allen Blaupausen. Das wird diese verwendete Funktion tatsächlich in all Ihren Blueprints finden . Also kann es das tatsächlich tun, um aufzuspüren , wo er das Todesereignis tatsächlich wieder benutzt hat. Also hier habe ich es im Widget Blueprint in unserer Haupt-Benutzeroberfläche gefunden. Ein Doppelklick hier würde dich zum Menü bringen. Und genau hier haben wir es gemacht, wo wir geklickt haben, Okay, und es hieß, der Tod sei falsch. Jetzt machen wir es hier drüben im Tod. Gehen wir also zurück zur Spielerbasis. Und wenn die Schulden falsch sind, spielen wir den Multicast-Tod, wo es so ist, als hätte er die Reaktions-Soundeffekte. Was wir hier also tun können, ist, dass wir einfach diesen Tod benutzen können, anstatt einen neuen namens Multicast zu antworten . Also werde ich das ein bisschen wegziehen. Was wir hier unten tun können, nennt man Multicast-Tod. Und jetzt können wir zu den Player-Info zurückkehren eine neue Variable namens Response Soundeffekte erstellen. Und es ist ein solider Hinweis , der zur feindlichen Basis geht. Klicken Sie nun auf die Spielerinformationen und stellen Sie den Soundeffekt so ein, dass er reagiert, kompiliert und gespeichert wird. Gehen wir nun zum, lasst uns hier unten gehen, nehmen Sie diese Spieler-Info, brechen Sie sie entweder nicht verbundene Pin. Also verwende ich die Antwort. Und dann können wir es einfach hier verbinden und wieder den Schauspielerstandort bekommen. Und jetzt spielen wir den Response Soundeffekt. Also lass es mich versuchen, und ich glaube, es wird funktionieren. Also spielt es diesen Santa Fe. Und wenn wir auf Okay klicken. Und Sie können sehen, dass ich diese Antwort und Wirkung habe. Okay, Ehrfürchtig. Also, dass die Arbeit am Client und es wahrscheinlich auch auf dem Server funktionieren wird, weil dies durch den Server ausgeführt wird. Das waren also alle Soundeffekte. Wenn du willst, kannst du auch die Musik hier hinzufügen. Das hier. Sie können dieses einfach spielen und dieser wird wahrscheinlich clientseitig spielen. Ich denke nicht, dass Sie dies durch einen Multicast spielen sollten , weil die Spieler die Geräusche natürlich zusammen hören, als würden sie nicht denselben Soundtrack in derselben Sekunde teilen . Spielen Sie das einfach durch die Kunden und versuchen Sie zu üben. Vielleicht versuche einfach da reinzugehen und das selbst zu machen. Aber ich werde das wahrscheinlich am Ende dieses Kurses machen , weil es ein bisschen nervig ist, die Musik ständig zu spielen , während ich spreche. Klicken wir also auf Datei und Alles speichern. Und lass uns zur nächsten Lektion übergehen. 93. Beheben des Totenkopfes der Leiter: Lasst uns nun den Leiterfehler beheben, wir im vorherigen Video gesehen haben. Also hier oben. Wenn ich also hier oben beschädigt werde, bleibe ich drin stecken, lasst es uns noch einmal versuchen. Ich bleibe hier in dieser Kollisionsbox stecken. Und das liegt daran, also lass mich dieses Spiel tatsächlich schließen und zurück zur Spieler- und Spielerbasis gehen. Und der Grund dafür liegt hier in unseren IstKundenwesen. Wenn wir also setzen, klettert es auf „false“, und das stimmt nicht. Sie können hier sehen, dass wir den Kollisionstyp auf **** ändern . Und denken Sie daran, dass wir diesen Kletterspieler gemacht haben um dies zu umgehen, diese Kollisionsboxen hier oben. Und wenn wir es ändern, ist wie Kollisionstyp in **** , bleiben wir tatsächlich in diesen Kollisionsfeldern stecken . Das ist es, was wir versuchen zu tun. Also müssen wir hier etwas neu oder kleine Neuprogrammierung machen. Wenn ich auf diesen klicke, lass mich diesen Pin ausblenden. Okay, also um damit anzufangen, gehen wir tatsächlich zurück. Ich habe gefunden, dass die beste Lösung dafür darin besteht, hier zu den Kachelkarten und innerhalb der Kachelkarten zu gehen . Wir haben also etwas, das als Insight national geführt wird, minimieren dies und gehen zum Klettern und Klettern. In dem Kunden, der hergestellt wurde, haben wir etwas gemacht, das als obere Kollisionsbox bezeichnet wird. Und hier stellen wir fest, ob du hochklettern kannst oder nicht. Und du siehst die Kiste hier. Das ist, ich weiß nicht, ob man es visuell sehen kann , als wären dies die Bugs tatsächlich. Der über dem Buchstaben. Dies ist die, die wir hinzugefügt haben, was dazu führt, dass Sie nicht hochklettern können. So können wir den Up-Button überspannen. Wenn Sie auf der Leiter sind und sich daran erinnern, können Sie versuchen, das Buchstabenvideo anzusehen , wenn Sie sich nicht erinnern, aber es ist eines, das wir hinzugefügt haben. Und anstatt es hier hinzuzufügen, lass mich tatsächlich etwas anderes machen. Also in der Kachelzuordnung, die wir hinzugefügt haben, also geht dieser Schauspieler in das Ansichtsfenster, Lassen Sie uns tatsächlich ein Kollisionsfeld um diese Plattform erstellen , ist , dass wir diese Plattform definieren. Um dies zu tun, klicken wir hier hoch und fügen Sie eine Kollision bei einer Box-Kollision hinzu und suchen Kollision bei einer Box-Kollision wir es leugnen, klettern Sie hoch. Wir verweigern also, dass der Spieler die Aufwärtstaste drückt, damit er die Leiter dort oben spammen. Und das Gute daran, es hier drin zu schaffen. Selbst wenn wir zehn Buchstaben oder zehn Seile hinzufügen, wird dies für alle funktionieren, denn es ist eine Schachtel, die hier alles bedeckt. Der beste Weg, dies hier zu setzen, ist jetzt, lass uns in die Perspektive gehen und auf die rechte Ansicht klicken und dann hier oben in den Lit-Modus gehen. Und du wirst das viel besser sehen können. Und lass mich einfach ein bisschen rauszoomen. Okay, also diese Kollisionsbox hier, der beste Weg, dies zu tun, ist, dass Sie nur diese Plattform abdecken müssen , damit Sie versuchen können , mit dem x hier zu gehen, oder? Hundert, zweihundert, dreihundertachtzig. Und du kannst einfach versuchen, diesen Bereich abzudecken. Also vielleicht 375, nur ein bisschen kleiner, so etwas oder 73 AT nur um sicherzustellen , dass es auch hier draußen den Bereich abdeckt. Und für die Kollisionsbox Y und Z sind es vielleicht 35. Ich denke, es deckt schon viel davon ab. Und versuche einfach genau über dem Gras zu decken. Du musst damit nicht wahnsinnig werden. Also entferne ich das Schnappen. Und genau wie die obere Linie knapp über diesen Kollisionskästen hier unten auf dem Rasen liegt . Okay, also denke ich, das deckt es gut ab. Lassen Sie uns kompilieren und speichern, und lassen Sie uns dazu gehen und klicken Sie darauf, wenn sich die Komponente überlappt. Also klick hier und sag, Schauspieler hat markiert. Und nochmal, sagen wir, es ist der Spieler. Drinnen von hier. Wir müssen es erneut durch eine Behörde führen. Switch hat also die Berechtigung und stellt sicher, dass es der Server ist, auf dem er ausgeführt wird. Lasst uns einen Zweig machen. Jetzt fragen wir also, ist es der Spieler? Wenn ja, nehmen wir dies und sagen, erhält Spielerreferenz. Und das wollen wir einfach noch einmal nennen. Kann hochklettern. Denken Sie daran, eine Nachricht zu wählen. Kann hochklettern, kann also nicht klettern, sondern kann Nachricht hochklettern. Und wann immer Sie kollidieren, denken Sie daran, was auch immer Sie mit dieser Box kollidieren, die wir gerade hier hinzugefügt haben. Sie können die Aufwärtstaste nicht drücken, gerne klettern, weil Sie sonst das Seil ausgeben können. Also nimm es und setze es negativ aus. Das ist also richtig. Als Nächstes klicken Sie hier und klicken Sie auf Endüberlappung. Und lassen Sie uns einfach diesen Code einfügen und verbinden Sie ihn hier. Also andere Schauspieler hier unten, auch andere Schauspieler hier oben. Und lasst es uns wahr werden. Jetzt kannst du jetzt hochklettern, wenn du nicht in dieser Box bist. Okay, jetzt haben wir den Code hier. Also lasst uns zur blinden Basis gehen. Und anstatt die Basis zu klettern, löschen wir jetzt den Code hier , weil wir ihn nicht brauchen. Lassen Sie mich dieses Feld tatsächlich vollständig löschen. Entferne es. Ich werde dir Fehler geben und all dies auch entfernen. Also jetzt haben wir den Code stattdessen hierher verschoben. Das ist es, was es stattdessen einstellen wird. Das nächste, was wir tun können, ist zu gehen, lass uns zur Spielerbasis gehen und einen Blick auf den Client werfen, der Code ist. Der Kunde, der Code war, war also hier oben. Und innerhalb des Klettercodes hatten wir dieses Set genannt. Set kann hochklettern. Dies ist die, die wir gerade hierher gezogen sind. Also was ich tun will, lass mich tatsächlich zurückgehen. Wo ist es hier? Was ich hier drin machen möchte, ist jetzt wie Branch hier zu machen und einen NOT Boolean zu schreiben. Wenn Sie also nicht aufstellen können, was bedeutet, dass Sie tatsächlich mit dieser Box kollidieren, haben wir gerade hinzugefügt. Also wenn du damit kollidierst und auch fragst, ob du kletterst. Also lasst uns loslegen ist klettern. Und es ist hier klettert. Und schreibe ein UND-Boolean. Lass es mich eigentlich einfach machen, damit ich es dir viel besser erklären kann . Also verbinde das hier. Also was ich hier machen möchte. Wenn du also Bob nicht besteigen kannst, was bedeutet, dass du hier mit dieser Box kollidierst. Wenn ich es einfach überziehe, kann es sie tatsächlich alle zusammen haben. Wenn Sie also mit dieser Box kollidieren, bedeutet das, dass dies falsch ist, als ob Sie nicht Geld klettern können, was dies hier wahr macht. Wenn du also nicht hochklettern kannst und deine Klienten sind, dann bist du immer noch auf der Leiter. Sie stehen also unter Brief, aber Sie überlappen dies auch, was bedeutet, dass Sie hier oben sind. Dann wollen wir uns noch einmal daran erinnern, bevor wir es hier im isClient setzen , ist auch der verklumpende Spieler. Das wollen wir. Denn wenn Sie klettern und diese Box überlappen, möchten Sie die Kollisionsfelder hier oben deaktivieren , damit Sie hochklettern können. Das ist es, was wir versuchen zu tun. Lassen Sie mich also zurück zum Event Graph. Lassen Sie mich das zuerst schließen und um es mir selbst leichter zu machen, erstellen wir tatsächlich eine Aufzählung. Klicken wir also mit der rechten Maustaste auf die Blueprints Enumeration, und nennen wir es einen Kollisionsstatus. Wofür ich diese Aufzählung namens Collision State verwenden werde. Ich werde nur eine Liste von zwei Gegenständen erstellen, dieselbe Kollision an und Kollision aus. Sehr, sehr einfache, sehr einfache Aufzählung hier. Also nur um zuzuhören, denken Sie daran, und Aufzählung ist nur eine Liste aller gewünschten Elemente. dieser willen wollen wir die Kollision nur ein- und ausschalten. Dies ist nur die Liste. Schließen wir es und gehen wir hier tatsächlich zur Spielerbasis zurück. Denk dran, wir können diese Kapsel nicht einfach nehmen. Whoops, wir können einfach diese Kapsel nehmen und sagen Kollisionsobjekttyp einstellen und dann zum Beispiel auf Kletterspieler setzen. Wir können das nicht tun, denn denken Sie daran, dass wir dies über den Server ausführen , damit der Client einen Fehler hat. Wenn Sie also auf Jetzt spielen klicken und versuchen Sie tatsächlich zu sehen, ob das funktioniert. also als Kunde spiele, kann ich hochklettern. Du kannst sehen, dass ich hier klettern kann, aber es wird unseren Charakter stören. Und anstatt es auf diese Weise zu tun, müssen Sie es durch eine Vertretungsbenachrichtigung ausführen nur um die Kunden auch über diese Änderungen zu informieren. Nehmen wir also an, Lasst uns zuerst alles speichern und jetzt können wir unsere Aufzählung verwenden. Machen wir eine neue Variable. Nennen wir es eine Kollisionszustände. Du kannst es auch etwas anderes nennen, wenn du willst. Aber ich nenne es einfach Collision State. Und ich ändere den Variablentyp in den E-Kollisionsstatus, wie auch immer wir es hier in der Aufzählung nennen. Also E Kollisionsstatus, so nannten wir es hier draußen. Also lasst uns jetzt zusammensparen. Und ich werde diese Replikation zu einer Wiederholungsbenachrichtigung machen und dann die Funktion entpacken. Ich übernehme diesen Kollisionsstatus und sage Enumeration einschalten. Also haben wir das jetzt ein paar Mal gemacht. Wenn die Kollision aktiviert ist, möchte ich, dass Sie meine Kapsel nehmen und den Kollisionsobjekttyp als Teich festlegen , weil wir mit allem wie diesem kollidieren wollen. Wenn meine Kollisionen von ich kopiere, füge es ein und setze es so ein, dass er als Spieler klettert. Also wird es die Plattformkollision bringen, eigentlich alle Kollisionen des Bodens. Also sehr einfache Aufzählung, einfach die Kollision ein- und ausschalten. Jetzt können wir das sehr nützlich nutzen. Also können wir diesen Kollisionsstatus übernehmen und ihn auch hier einstellen. Also denken wir jetzt, dass ich dachte, dass wir es tun würden , wenn wir nicht hochklettern können, was bedeutet, dass wir hier oben mit dieser Box kollidieren. Und wir klettern. Das bedeutet, dass wir die Kollision ausschalten wollen, weil wir klettern und diese Plattform umgehen wollen. Wenn wir diese Kiste jedoch nicht hier treffen oder wenn wir nicht klettern, dann wollen wir die Kollision einschalten , denn vielleicht, wenn wir nicht klettern, obwohl wir diese Box berühren, wenn wir nicht klettern, stehen wir vielleicht oben drauf und dann wollen wir die Kollision nicht ausschalten, sonst fallen wir durch den Boden. Also wollen wir die Kollision einschalten, wenn wir nicht klettern oder wenn wir uns nicht berühren. Diese Box hier oben bedeutet, dass wir hier unten sind und dann wollen wir tatsächlich, dass unser Boden liegt. Das ist also richtig. Eine andere Sache ist, ich meine, du kannst versuchen, es zu spielen und zu sehen, was passiert. Also spielst du es hier. Ich kann hier rauf gehen. Und wenn ich getroffen werde, siehst du, dass ich immer noch stecken bleibe. Und das Problem liegt hier in der kolumbianischen Unwrap Funktion. Denken Sie daran, dass wir all diese hatten. Ich werde sie tatsächlich alle löschen. Und ich verbinde die Pins wieder wie zuvor. Weil wir sie nicht mehr wirklich brauchen. Und du kannst all das einfach näher bringen. Okay, also lasst uns kompilieren und speichern und versuchen wir jetzt zu spielen. Mal sehen, ob es funktioniert. Jetzt kann ich sehen, ich kann klettern und spiele gerade als Kunde. Also kann ich das machen. Der andere Bug ist gerade, dass ich nicht runterklettern kann. Ich versuche runter zu klettern, aber ich kann nicht. Aber du kannst sehen, dass der Tod funktioniert hat. Alles funktioniert. Das Problem ist gerade so, als würde es gerade funktionieren. Und wenn ich zu Boden springe, kann ich wieder laufen. Wenn ich hier hochspringe, kann ich wieder laufen. Das Problem ist, dass ich nicht runtergehen kann. Also müssen wir das beheben. Also müssen wir zum Event Graph gehen. Und das Problem ist hier drüben. So kann klettern ist wahr, wenn man klettern kann und versucht nach unten zu klettern. Also das ist es, was, denken Sie daran, dass wir diesen Timer gemacht haben, wo wir prüfen ob der Spieler versucht, nach unten zu klettern. Und ja, wenn du runterkletterst, aber wir haben die Kollision nicht wirklich ausgeschaltet. Lassen Sie mich also kopieren, fügen Sie das hier oben ein. Also hier im Timer. Wenn Sie also tatsächlich mit dem Klettern beginnen, ist die Klemmung auf „true“ eingestellt. Ich möchte meine Kollision ausschalten. Und hier oben, wenn wir den isClient absagen. Wenn du also mit dem Klettern fertig bist, kann ich es tatsächlich so einstellen, dass es wieder läuft. Also richte es auch hier ein. Jetzt sollten alle Probleme behoben werden, wenn wir das richtig gemacht haben. Also lasst es uns noch einmal versuchen. Ich kann klettern, ich kann laufen, ich kann auch runterklettern. Alles funktioniert und wenn ich hier oben sterbe, werde ich einfach gedrängt. Das funktioniert auch. Und wenn ich sterbe , funktioniert das auch. Also denke ich, dass es eine einfachere Möglichkeit ist, mit der Kollision umzugehen, und versuchen wir, hier oben weggeworfen zu werden. Das funktioniert auch. Ich kann klammern und ich kann auch hier oben sterben. Ja, das funktioniert auch. Okay, das ist also eine einfache Möglichkeit, dies zu tun, indem Sie einfach eine Aufzählung mit der Kollision ein- und ausschalten und dann auf eine Wiederholungsbenachrichtigung schalten. In der Benachrichtigungsfunktion schalten Sie die Kollision nur ein und aus je nachdem, was Sie hier einstellen. Und denken Sie an die Variablen „On“ oder „Rep Notify“. Sie können Benachrichtigungen nur über einen Server festlegen. Ereignisse können sagen, dass das genug ist. Denn denk dran, du kannst nicht einfach hier rein und es durchmachen. Sie müssen auf dem Server sein bevor Sie ungelesene Funktionen einstellen können. Also sehr, sehr wichtig und das ist es, was wir tun, um immer zu überprüfen ob es der Server ist, über den Sie laufen , und ob dies der Fall ist, das ist richtig. Ja. Das war es dafür behoben. Und lass uns zum nächsten übergehen. 94. Strukturen Erfahrung hinzufügen: Lassen Sie uns nun unser Nivelliersystem erstellen. Also zuerst, was wir für die Nivellierung brauchen, ist hier in der Struktur und den feindlichen Informationen oder Tierinformationen, wir müssen Feinden Erfahrung geben , denn offensichtlich wird jeder Feind etwas geben Art von Erfahrung und es wird anders sein. Schreiben Sie also Erfahrung hier in der Struktur und ändern Sie sie in eine ganze Zahl. Wie du kannst, du kannst es in einen Schwimmer stecken. Aber die Erfahrung, die ich will, du hast kein wirklich Komma, also hast du keine Dezimalstellen. Und deshalb brauchen wir nicht wirklich einen Schwimmer. Das sind also ganze Zahlen. Und ich hätte gerne, wenn du ein Spiel mit etwas hast, das zum Beispiel 20,5 Erfahrung gibt, als du es auf einen Float setzen müsstest. Sonst gehe ich nur mit einer Ganzzahl, weil nur ganze Zahlen sind, die ich mache. Und für die Erfahrung werde ich es tatsächlich direkt unter den Schaden legen. Dieser wird also angeben, wie viel Erfahrung jedes Tier geben wird. Also lasst uns jetzt zum Feind gehen und dann stützen wir uns. wir daran, wie kurz zuvor zu kompilieren und zu speichern. Und lass uns zum Schwein gehen und den vollständigen Blueprint-Editor öffnen. Und da drinnen für die Erfahrung für das Schwein, lassen Sie uns zum Beispiel jedes Mal 20 Erfahrung machen, wenn wir ein Schwein töten. Für die Schnecke bekommen wir jedes Mal, wenn wir eine Schnecke töten , zum Beispiel zehn Erfahrungsverbindungen. Sparen Sie. Whoops. Okay, das wird also für das Tier getan, die Struktur für die Tiere. Lasst uns jetzt in den Spieler gehen. Der Spieler benötigt zwei Variablen. Also brauchen wir zuerst ein Level. Also was ist dein Level derzeit? Und lassen Sie uns das in eine ganze Zahl setzen. Das sind ganze Zahlen. Und lassen Sie uns auch Erfahrung machen. Wie viel Erfahrung hast du gerade? Und das ist auch eine ganze Zahl. Lasst uns die ausdrücken. Ich lege sie hier oben direkt unter den Basisschaden. Okay, also lasst uns das aufheben. Und das letzte Ding. Lassen Sie mich jetzt zuerst zur Spieler- und Spielerbasis gehen und kompilieren und speichern. Und hier in den Eigenschaften und der Spieler-Info-Struktur, dem Level als Standard, beginnst du mit einem. Denk also daran, du beginnst nicht mit Level 0, du beginnst mit Level eins. Denken Sie also daran, das hier als ausländische Erfahrung zu schreiben. Wir werden das später aktualisieren, also mach dir darüber keine Sorgen. Lass es uns schließen. Also das Letzte, was du definieren musst, wie viel Erfahrung du pro Level benötigst. Sie haben also irgendwie so, als ob Sie eine Liste benötigen , welche Erfahrung für welches Level benötigt wird. Das brauchen wir also, um tatsächlich eine neue Struktur zu schaffen. Klicken wir mit der rechten Maustaste und gehen wir zu Blueprints und erstellen eine neue Struktur. Und dieses hier nenne ich es Level-Info. Es enthält also Informationen darüber, welche Erfahrung wir für jedes Level benötigen. Es braucht also nur zwei Variablen. Wir brauchen das Level. Und das wird eine ganze Zahl sein. Und diese nennt man Erfahrung. Wie viel Erfahrung braucht man? Und das wird auch eine ganze Zahl sein. Also zu zwei sehr grundlegenden Dingen, wie hoch ist das Level? Und statt Erfahrung können wir es einfach als Erfahrung erforderlich bezeichnen. Es ist also ein erklärendes Niveau und Erfahrung erforderlich, um aufzusteigen. Lasst es uns schließen. um mit dieser Struktur arbeiten zu können, müssen wir tatsächlich mit Datentabellen arbeiten. Tische. Wir werden in der nächsten Lektion mit denen arbeiten. Also lasst uns weitermachen. 95. Einführung in Datentabellen: Jetzt, da wir diese Level-Info-Struktur haben, lassen Sie uns mit Datentabellen arbeiten und sie sind so nützlich, dass Sie sehen, dass sie gut zu verwenden sind und auch sehr einfach sind, nicht, nicht wirklich komplex konzept. Gehen wir zum Ordner, erstellen einen neuen Ordner, nennen ihn Datentabellen und haben alle unsere Datentabellen hier. Im Moment werden wir nur einen haben, aber ich war gerne strukturiert. Und jetzt können Sie mit der rechten Maustaste hier klicken und Sonstiges. Und hier können Sie Datentabelle auswählen, diese. Jetzt fragt es Sie , nach welcher Struktur soll ich eine Datentabelle erstellen? Und dann müssen Sie die Struktur angeben. Und die eine ist diese Level-Info , auf die wir geklickt haben. Okay, und nennen wir es d t für Datentabelle Ups. Und ich nenne es auch Level-Info. Und doppelklicken Sie darauf. Und hier befinden wir uns in einer DataTable. Jetzt brauchst du einen neuen Wert, also musst du hier auf Addieren klicken. Jetzt um einen Mehrwert zu schaffen. Dieser Wert gibt Ihnen eine Zeile und dann können Sie die Variablen sehen, die Sie innerhalb der Level-Info-Struktur erstellt haben . Jedes Mal, wenn Sie eine neue Variable in Ihrer Struktur hinzufügen, befindet sie sich hier in dieser Datentabelle. Was diese Datentabelle ist, können Sie sich diese nur als Excel-Excel-Dokument vorstellen , in dem Sie beispielsweise das erforderliche Niveau und die Erfahrung haben . Und dann machst du einfach mehr Zeilen und definierst diese. Für die erste statt einer neuen Zeile benenne ich sie einfach in eine um. Wenn Sie also auf F2 klicken, um umzubenennen und auf eins zu klicken, können wir auch mit der rechten Maustaste klicken und auf Umbenennen klicken. Das liegt an dir. Hier fangen wir also auf Stufe eins an, offensichtlich nicht 0. Hier muss man also schreiben, wie viel Erfahrung benötigt wird, um bis zu zwei zu erreichen. Also 50 Erfahrung, um bis zu zwei zu erreichen. Und dann lass mich einen neuen Wert hinzufügen und dass die Zeile ich einfach zwei aufrufe. Und das ist sehr wichtig. Wir werden diese tatsächlich benutzen, also nenne sie unbedingt 1234 und so weiter. Für diesen braucht man auf Stufe zwei 75 erfahrene Love Lab. Und das rufe ich drei an. Auf Stufe drei brauchst du 100, um aufzusteigen, und lass uns einfach fünf machen. Also um vier braucht man 125 und das ist für Sie geeignet, um einhundert, einhundertfünfundzwanzig . Und auf Stufe fünf und fünf brauchst du 150, um aufzusteigen. Wir können also einfach definieren wie viel Erfahrung Sie benötigen, um zu verbessern. Und offensichtlich kommt das Spieldesign hier ins Spiel. Sie müssen alle diese Zahlen ausgleichen. Also schließen wir es jetzt und das war es für Datentabellen. So kannst du weitermachen und alles speichern. Und lasst uns zur nächsten Lektion übergehen. 96. Daten-Tabellen über Google Sheets: Das Coole an Datentabellen ist also, Sie dies nicht wirklich ständig manuell machen müssen, wie zum Beispiel alle diese Zeilen erstellen. Manchmal hat man zum Beispiel das Spiel, das ich auf Steam veröffentlicht habe, wenn man Gegenstände nur in lustiger Geschichte hat. Im Farmschwanz habe ich wie alle Artikel, die Sie im Shop kaufen können, ich habe sie tatsächlich in einer Datentabelle. Und das wird so viel Zeit in Anspruch nehmen, denn wenn Sie zehn oder 20 Variablen für jedes einzelne Element haben , wird es ewig dauern. Und deshalb ist die Verwendung von Google Sheets viel schneller und ich würde das empfehlen. Also hier in Google, Beispiel wenn du ein Konto erstellst und hier reingehst und zur Fahrt gehst. Hier drin können Sie einfach mit der rechten Maustaste klicken und ein neues Google Sheets erstellen. Und in diesem Google Sheet kann ich mir jetzt meine Datentabelle ansehen. Wenn Sie also nur minimieren, wenn Sie sich nicht an die Struktur erinnern, gehen Sie einfach zurück zur Struktur, schauen Sie sich sie an und dann müssen Sie einfach die Namen hier schreiben. Wenn ich zum Beispiel in mein Google-Blatt zurückgehe, musst du den genauen Namen Helden schreiben, auch mit den Großbuchstaben. Also kann ich zum Beispiel sagen, lass uns normalerweise mit der Zeilennummer anfangen und eigentlich genau hier. Versuchen wir es einfach. Also diese Nummer hier, und ich werde hier einfach den Stil ändern, nur um es viel besser aussehen zu lassen, nur um meinetwillen. Und hier oben wird es mutig sein. Okay? Also hier oben haben wir die erste Variantenvariable, die Level sagt. Und der nächste sagt, dass Erfahrung erforderlich ist. Ich werde das größer machen. Also so etwas. Das könnte mein, mein Google Sheet sein. Nun, das ist meine Datentabelle. Also in der Reihe bei Nummer eins. Wir haben also Level eins und das spielt keine Rolle. Ich mache sie einfach als Zeilennummern. Also auf Level 23, und du kannst sehen dass es viel schneller ist, weil ich einfach so ziehen kann. Jetzt kriegt es das alles. Und wenn Sie neu bei Google Sheets sind, können Sie sich ein Tutorial auf YouTube ansehen. Es dauert zwei Minuten. Wenn ich diese Zahlen auswähle, kann ich zum Beispiel nach unten ziehen und diese automatisch auflisten lassen. Und die nötige Erfahrung kann ich zum Beispiel sagen, wir fangen mit 50 an und dann kann ich 75 sagen. Und ich glaube, das kann es automatisch machen. Lass es mich versuchen. Das kann es auch automatisch machen. Sieht, dass du 25 darüber hinzufügst und das macht es einfach automatisch. Sie können sehen, dass dies viel schneller ist, als hier unten jede einzelne Zahl einzugeben. Das macht es automatisch für mich. Und Sie können sogar Formeln in Excel erstellen, um Ihr Spiel auszugleichen, sodass Sie nicht jede einzelne Zahl manuell eingeben müssen . Aber offensichtlich müssen wir das Spiel testen , um sicherzustellen, dass es funktioniert. Nehmen wir an, dieses Google-Blatt war in Ordnung und gut. Und jetzt klicke ich auf Datei, gehe zum Download und gehe zum Download als CSV, sehr wichtiger CSV. Aber jetzt wird es heruntergeladen. Dies ist meine heruntergeladene Datei, also kann ich sie jetzt umbenennen. Und in was Sie umbenennen müssen , ist derselbe Name wie die Datentabellen. Wenn ich also hierher gehe, heißt es DT Level Info. Stellen Sie also einfach sicher, dass Sie genau den gleichen Namen haben, Informationen auf DT-Ebene mit den Großbuchstaben. Ich ziehe es rein und lege es hier in dieser Datentabelle ab. Und eigentlich denke ich, dass ich das muss, eigentlich muss ich es nicht, aber wenn Sie es nicht hatten, damit Sie sehen können, ob Sie darauf doppelklicken, können Sie sehen, dass Sie alle diese Einträge bekommen. Sehr, sehr nett. Es hat das automatisch gemacht und es kann diese Informationen jetzt tatsächlich verwenden. Und ich kann sehen, dass es so viel schneller ist. Was ich jetzt vorher gesagt habe, können wir es tatsächlich auch löschen. Wenn Sie also nichts haben, wenn Sie es noch nicht geschafft haben und die Struktur haben, lassen Sie mich zuerst alles speichern. also zu diesen Datentabellen gehen, können Sie sie einfach hier hineinziehen. Dann werden Sie gefragt, dass Sie diese Datentabelle importieren, Zeilentyp der Datentabelle. Dann musst du hier die Level-Info auswählen, die eine. Und ich werde nur sagen, ignoriere zusätzliche Felder. Manchmal habe ich zusätzliche Felder, um meine Formel zu berechnen. Es sollte also einfach zusätzliche Felder ignorieren. Und zusätzliche Felder sind genau so, als ob es sich nur Ihre, Ihre Variablen hier oben ansieht . Wenn Sie etwas haben, z. B. wenn Sie eine andere Variable haben, die in Ihrer Struktur tatsächlich nicht existiert, wird dies ignoriert. Das bedeutet es also. Und ignoriere fehlende Felder. Eigentlich will ich das nicht, denn was ist, wenn wir etwas verpassen? Und das Feld Schlüssel importieren sind hier nur unsere Zahlen. Also lass mich das versuchen. Unsere Nummer hier ist also mein Eingabeschlüssel, und Sie werden sehen, wofür dieser Schlüssel später verwendet wird. Also mach das und lass uns versuchen, das zu tun. Vielleicht kann es das nicht, vielleicht kann es manchmal bei Bugs raus. Lassen Sie uns also anwenden und doppelklicken. Jetzt können wir sehen, dass es klappt. Jetzt können Sie all diese Einträge sehen. Und es sieht großartig aus. Also lasst uns jetzt alles speichern. Und ich würde empfehlen, Google Sheets jedes Mal zu verwenden , wenn Sie ein Spiel machen und ein Projekt erstellen, es ist so viel schneller zu verwenden. Sie können diese Zahlen wahrscheinlich optimieren. Vielleicht benötigen Sie diesen Zeilennamen nicht wirklich und Sie können das Eingabeschlüsselfeld genau mögen. Du kannst dieses Level einfach hier schreiben. Und das können Sie nur tun, um alle diese Zeilen hier zu minimieren. Aber jetzt funktioniert das. Lasst uns mit dem nächsten übergehen. 97. Eine Funktionsbibliothek erstellen: Okay, das nächste, was wir tun müssen um diese Datentabelle in unserem Code zu verwenden, müssen wir sie durch eine Bibliothek schaffen. Und das haben wir noch nie gelernt, aber es ist sehr einfach. Keine Sorge. wir jetzt mit der rechten Maustaste. Und lasst uns einen neuen Ordner erstellen und ich nenne ihn Bibliotheken. Dies ist das letzte neue , was wir hier lernen werden. Also lasst uns hier reingehen und mit der rechten Maustaste klicken. Und hier im Tab Blueprints haben Sie etwas, das als Funktionsbibliothek bezeichnet wird. Bisher haben wir von den Blueprint-Kursen erfahren. Wir haben etwas über die Strukturen erfahren, wir haben etwas über Aufzählungen erfahren. Wir haben etwas über Blueprint-Interfaces erfahren, und jetzt werden wir eine Blueprint-Funktionsbibliothek erstellen. Sie können also sehen, dass wir all das durchgemacht haben. Und diese ist auch eine Bibliotheks-Makro-Bibliothek. So sehr ähnlich. Aber machen wir uns vorerst nur Sorgen um die Funktionsbibliothek. Also lasst uns drauf klicken. Und ich nenne es einfach Funktionsbibliothek, einfach so. Lassen Sie mich hier hineingehen und jetzt sagen, dass die Funktion, die wir erstellen möchten , heißt Levelinfo. Wir versuchen also, diese Ebene Informationen aus dieser Datentabelle zu erhalten , die wir extrahieren möchten. Das machen wir also in der Funktionsbibliothek. Wir versuchen, Informationen aus dieser Datentabelle zu extrahieren , und wir können diese in unserem Code verwenden. Also hier, hol dir Levelinformationen. Ich schaffe es rein. Und denken Sie daran, wenn wir etwas reines machen, ist es so, als würde man sie in diese grüne Funktion verwandeln. Wenn ich also zur Spielerbasis gehe, kannst du ein Beispiel sehen, und wenn ich mich zum Beispiel nur umsehe , bekommt das die Kontrolle. Rotation ist eine reine Funktion und diese, die blaue, ist eine unsichere Funktion. Also die reine Funktion, Sie haben diese Ausführungspins nicht , weil Sie sie hier nicht wirklich benötigen. Denken Sie daran, wann immer Sie nur Informationen benötigen, benötigen Sie keine Ausführungsstifte. Ausführungspins dienen nur zum Festlegen von Informationen. So stellen Sie zum Beispiel die Bewegungseingabe ein, Sie setzen in diesem Fall das x ist der z-Wert. Aber hier bekommst du gerade die Kontrolle Rotation. Einen Vektor abrufen wird nur Informationen erhalten. Sie müssen nicht wirklich neue Informationen festlegen. Hier, Informationen auf Gate-Ebene, die ich bekomme. Ich setze es auf rein. Und die Eingabe wird aus den Schlüsseleingaben extrahiert , die Sie hier eingeben. Die Tasteneingabe ist also nur eine Zahl. Also mache ich neue Eingaben und es wird eine ganze Zahl sein. Und ich nenne es Level. Also versucht es zu sehen. Das, was ich hier machen werde, ist in der Spielerbasis, es wird einen Blick auf die Spielerinformationen werfen und einen Blick darauf werfen, welches Level du bist. Und von dieser Ebene aus kann es die Nummer eins sehen. Von dieser Ebene aus wird es Ihnen sagen, welche Erfahrung erforderlich ist, um bis zu zwei zu erreichen. Das ist es, was wir versuchen zu tun. Was dieses Level und das, was wir verwenden müssen , heißt Datentabelle abrufen. Abrufen der Datentabellenzeile. Wir versuchen, eine bestimmte Reihe aus diesem Level herauszuholen. Wenn wir also Stufe vier sind, wird es auf vier gehen. Und dann wird es eine Tabellenzeile bekommen und diese Informationen 125 in der erforderlichen Erfahrung verwenden. Also lasst uns das versuchen. Wir können es nicht einfach so anschließen, aber wir können zwei Strings sagen. Also konvertieren wir es zuerst in eine Zeichenfolge, und dann kann es es schaffen. Konvertieren Sie es zuerst in eine Zeichenfolge und konvertieren Sie es dann in einen Namen. Und dann gehen wir hier rein, lass es uns verbinden. Und die Datentabelle, aus der wir extrahieren möchten, haben wir nur eine. Also wähle es hier aus. Und dann lass uns von hier fahren und zurück sagen. Und wir fügen einen Return-Knoten hinzu. Und das ist die Information, jetzt ist dies die Tabelle. Jetzt weiß es, als ob wir auf Stufe vier sind, sehen Sie hier draußen in den Informationen , dass wir Stufe vier sind. Und wir brauchen so viel Erfahrung, um aufzusteigen. Hier. Nennen wir es einfach Level Info Satz von Informationen über Outgrow Level. Okay? Und das Coole an Bibliotheken, die man eigentlich kann, sind globale Funktionen. Du kannst sie überall anrufen. Wenn ich jetzt einfach in meine Spielerbasis gehe und einfach noch Levelinformationen sage, kannst du es sehen. Es ist hier aus der Funktionsbibliothek, also ist es eine globale Funktion, die Sie überall verwenden können. Und du könntest fragen, warum programmieren wir nicht einfach alles oder viele Dinge hier drin? Es ist tatsächlich teuer, dies zu tun. Ich habe viel darüber gelesen. Und manche Leute verzögern tatsächlich ihre Spiele. Wenn Sie diese Funktionsbibliothek haben, ist es sehr schwer. Ihr Spiel ist zurückgeblieben. Es klingt also so, als wäre dies sehr, sehr schwer zu benutzen, wenn Sie zu viel haben, aber in Fällen wie diesem, in denen wir es tatsächlich benutzen müssen. Und manchmal müssen Sie nur denken, dass Sie eine Funktion verwenden müssen, die ich in 50 Blueprints verwenden muss , die ständig in fünf Blueprints verwendet werden muss, dann sollten Sie wahrscheinlich gehen in und schaffen Sie es hier rein, zum Beispiel, die Level-Informationen zu erhalten, können wir das in unserem Spieler-Controller, in unserer Benutzeroberfläche, in unserem Spieler-Controller verwenden oder nicht wie die Spielerbasis und die gegnerische Basis steuern und so am. Wir können es also an vielen, vielen Orten verwenden und es ist wahrscheinlich eine gute Idee, es hier anstelle einer bestimmten Blaupause zu schaffen . Okay, also kannst du hier sehen, dass ich einfach Informationen auf Gate-Ebene sagen kann, und jetzt müssen wir hier etwas anschließen , damit wir diese Player-Info anschließen können, zum Beispiel kann ich dir einfach sehr schnell zeigen. So können wir zum Beispiel die Spieler auf das aktuelle Niveau bringen und wir können es hier anschließen. Und wenn der Spieler zum Beispiel Stufe drei ist, extrahiert er diese Zeile Nummer drei, und er weiß, dass Sie es brauchen. Jetzt kannst du es von hier aus nehmen und es aufbrechen und es kennt dein Level drei. Und du brauchst hier 100 Erfahrene, um aufzusteigen. Also sehr, sehr coole Methode, um es zu machen. Also haben wir, wenn ich es einfach sehr schnell erkläre. Also hast du hier eine Struktur namens Level-Info erstellt und diese Variablen erstellt. Und danach sind wir einfach in Google Sheets gegangen und haben das hier gemacht. Jetzt können Sie diese Informationen ziehen und in diese Datentabelle ablegen. Ich werde nur hier im Content Browser sein. Und dann müssen Sie auswählen, für welche Struktur diese Datentabellen diese Datentabellen. Und das haben wir gemacht. Also schaffe es einfach das für uns. Dann gehen Sie weiter und gehen zur Funktionsbibliothek und erstellen diese, holen Sie sich die Datentabellenzeile. Dann wählen Sie aus, welche Datentabelle und wie lautet der Zeilenname? Ihr eigener Name sind hier nur Zahlen. Wenn Sie zum Beispiel den Zeilennamen auf Hallo bearbeiten, wird er nicht wissen, ob Sie ein Level eins sind, wird nicht wissen, was das ist, weil Ihr Zeilenname Hallo ist. Es ist keine Zahl, aber wir haben sie als Zahlen. Und es wird wissen, dass wir, wenn Ihre Stufe drei herausgeben wird und diese Informationen herausgeben wird, wenn Ihre Stufe drei diese Informationen und diese Informationen herausgeben wird, sie tatsächlich hier nennen und überall verwenden können. Also lasst uns alles speichern und lass uns zum nächsten übergehen. 98. Erfahrungen mit feindlichem Tod hinzufügen: Hallo und willkommen zurück. Jetzt werden wir Erfahrung hinzufügen, wenn das Tier stirbt. Und hier bin ich in der Spielerbasis. Und zuerst müssen wir eine Veranstaltung namens Ad Experience erstellen , da wir dem Spieler Erfahrung verleihen möchten. Also wollen wir das etwas später bereinigen, aber fügen wir es einfach hier hinzu, wo Platz ist. Lassen Sie uns weitermachen und ein individuelles Ereignis erstellen. Und lassen Sie uns das über die Blueprint-Interface-Funktion tun. Gehen wir also zu den Schnittstellen, zur Spielerbasis und lassen Sie uns eine neue Funktion namens Add Experience erstellen. Und hier ist die Eingabe nur die ganze Zahl, weil es nur die Erfahrung ist. Und nennen wir es erfahren hinzuzufügen. Lass uns kompilieren und speichern und lass uns zur Spielerbasis zurückkehren und alles hier speichern. wir nun mit der rechten Maustaste und rufen Sie die Anzeigenerfahrung Und dieses Mal lassen Sie uns einen durch den Server namens Ad Experience laufen lassen, um sicherzustellen, dass der Client nicht betrügt. Lassen Sie uns es durch den Server führen, der zuverlässig ist. Und nennen wir es hier, Server-AD-Erfahrung. Jetzt brauchen wir wieder eine ganze Zahl namens Experience, um hinzuzufügen. Und lasst uns sie hier verbinden. Okay, also haben wir diese Veranstaltung hier und wir haben gerade nichts damit zu tun. Aber die Sache ist, wenn man einen Feind tötet, muss man einstecken, wie viel Erfahrung Sie für die geschickten oder erschlagenen Feinde hinzufügen müssen . Also lasst uns jetzt zum Feind gehen. Also lasst uns innerhalb der feindlichen und feindlichen Basis finden wir hier, wo wir den Feind töten. Also töten wir den Feind. Dies ist der Schaden. Und so prüfen wir hier, ob die Gesundheit 0 ist. Und wenn ja, werden wir weitermachen und es zu Tode bringen. Bevor wir das tun, töten wir hier den Feind. Wir sind sicher, dass der Name tot ist. Also hier rufe ich tatsächlich meine Anzeige an, um das Event hier und die Spielerbasis zu erleben. Um den Spieler zu bekommen, haben wir bereits einen Spieler-Controller. Wir können sagen, er wird kontrollierter Bauer. Und dann können wir „ Layer-Referenz abrufen“ sagen , weil wir versuchen, die Spielerbasis zu referenzieren. Und lasst uns es verbinden. Whoops, lasst uns es verbinden. Genau so. Darf es stattdessen einfach hier hochziehen. Okay, also haben wir das jetzt und jetzt können wir davon abziehen und sagen, Add Experience. Und es ist eine Nachricht, weil sie von einer Blueprint-Interface-Funktion stammt. Und wie viel Erfahrung möchten Sie hinzufügen? Denken Sie daran, wir haben in der Tierstruktur gemacht, das haben wir bereits gemacht, damit wir es hier brechen können. Verstecken wir vorerst alles und klicken und klicken wir auf diese Erfahrung, klicken und klicken wir auf diese Erfahrung denn wir haben bereits festgelegt wie viel Erfahrung jedes Tier geschenkt wird. Jetzt wollen wir nur diese Erfahrung geben, die der Feind würfeln wird. Also verschiebe es einfach hierher. Und dann werden wir mit unserem Code fortfahren. Ich verschiebe es ein bisschen nach oben, genau so. Okay, jetzt fügen wir Erfahrung hinzu, wenn der Feind getötet wird und die Erfahrung hier zur Spielerbasis übergeht. Und es wird hier durchgehen. Jetzt, da wir dies erstellt haben, sind wir bereit, die Erfahrung für den Spieler zu aktualisieren. 99. Die Erfahrung aktualisieren: Okay, also lasst uns jetzt weitermachen und das Erlebnis für den Spieler aktualisieren. Jetzt haben wir die Erfahrung, wie viel der Feind gibt, und er wird diese Werbeerlebnisse durchlaufen. Jetzt sind wir hier auf dem Server bereit, diese Spielerinformationen zu aktualisieren. Nehmen wir also diese Spielerinformationen und lassen Sie es uns aufschlüsseln. Verstecken wir jetzt alles und machen einfach diese eine Erfahrung, die wir gemacht haben. So viel Erfahrung hat der Spieler gerade. Und offensichtlich fängst du mit 0 an. Nehmen wir also diese Erfahrung , die Sie gesammelt haben, und sagen Plus und fügen Sie sie mit der aktuellen Erfahrung hinzu , die Sie haben. Wenn du also 0 hast und das Schwein dir 20 gibt, hast du jetzt 20, weil du sie addiert hast und das ist der neue Wert. Stellen wir es also hier auf den neuen Wert ein, damit es aktualisiert wird. Nehmen wir also diese Info. Sagen wir Set-Mitglieder, und lassen Sie uns es hier verbinden. Was wir damit machen können, ist es tatsächlich so nach unten zu ziehen und es aufzunehmen. Und was, was willst du einstellen? Wir wollen die Erfahrung einstellen, und dies ist die Erfahrung, auf die wir sie einstellen möchten. Dies ist die aktualisierte Nummer. Und dann denk daran, diese Spielerinformationen zu nehmen und hier einzustellen. Jetzt hast du aktualisiert wie viel Erfahrung dein Spieler durch die Struktur hat. Das ist also eigentlich so einfach wie das. Jetzt haben Sie die aktualisierte Erfahrung, wie viel Erfahrung Sie haben. Und offensichtlich wird es in der Benutzeroberfläche nicht aktualisiert , da wir noch keine Benutzeroberfläche erstellt haben. Aber Sie können eine Zeichenfolge erneut drucken und sehen, ob das stimmt. So kannst du das noch einmal aufbrechen und alles verstecken, das Erlebnis machen und es immer auf dem Bildschirm ausdrucken , um den neuen Wert zu sehen, damit du auf Play klicken kannst. Und hier kann ich Feinde treffen. Der Server wird jetzt zehn sagen. Und wenn ich den zweiten töte, wird es 20 sagen, weil jede Schnecke zehn Erfahrungen gibt. Wenn 3040, weil es auch getötet wurde. Sie können also sehen, dass das jetzt einwandfrei funktioniert. Jetzt, da die Erfahrungen des falsch sind, werden wir sehen, wie wir auch das Level aktualisieren können. 100. Aktualisieren des Niveaus: Wir sind jetzt bereit, das Level für den Spieler zu aktualisieren. Ich hoffe also, dass Sie für diese Lektion vollkommen wach sind. Es gibt etwas Mathematik, die wir machen müssen, nicht wirklich zu komplex, aber wir müssen einfach ganz wach sein und wissen, was wir tun. Jetzt, da wir die Erfahrung des Spielers aktualisiert haben , können wir jetzt überprüfen, ob der Spieler diese Erfahrung überschritten hat , die zum Aufsteigen erforderlich ist. Denken Sie also daran, dass wir diesen namens Gets Level Info zuvor gemacht haben. Und damit können wir das auflösen und versuchen zu sehen, ob der Spieler über diese erforderliche Erfahrung verfügt. Und wir müssen angeben, welches Level der Spieler derzeit ist. Und wir können das tun, indem wir hier oben klicken, und lassen Sie uns dieses Level hier machen. Also beginnen wir standardmäßig mit Level eins und lassen mich es einfach hierher ziehen und das hier machen. wir also versuchen, wie hier zu sehen, schreiben wir eins weil der Spieler Stufe eins ist und diese Datentabelle durchläuft und er weiß, dass wir 50 Erfahrung brauchen. Das wird also 50 hier in der erforderlichen Erfahrung sagen . Was wir also tun werden, ist, dass wir das machen werden, und lassen Sie uns diese Erfahrung zuerst machen. Nehmen wir das hier und sagen: Ist es größer oder gleich? Ist es größer oder gleich als die erforderliche Erfahrung? Und lasst uns hier oben einen Zweig machen. Und lasst es uns verbinden. Also töte ich zum Beispiel jemanden und sagen wir, ich habe 200 Erfahrung und sie werden benötigt, ist vielleicht nur 150. Also frage ich nur, ist 200 größer oder gleich als das erforderliche, was zweihunderteinhundertfünfzig ist. Das heißt, wir müssen den Spieler aufsteigen. Wenn das nicht der Fall ist, tun wir nichts. Also aktualisieren wir vielleicht einfach die Benutzeroberfläche oder was auch immer wir versuchen. Ich verstecke das hier. Das ist also das, was wir tun werden. Wenn es also stimmt, werden wir den Spieler nivellieren. Es ist falsch. Wir tun nichts außer dem Aktualisieren der Benutzeroberfläche, was wir später tun werden. Okay, also um den Spieler zu nivellieren, sagen wir mal, dass es wahr ist. Sie haben mehr Erfahrung als ihre erforderliche Erfahrung. Dann musst du, lass uns diese Spieler-Info nehmen. Und lasst uns zuerst diese Erfahrung machen. Sagen wir also, wir haben 200. Subtrahieren wir es. Subtrahieren Sie es von der erforderlichen Erfahrung. Nehmen wir an, Sie haben 200 um 150 subtrahiert, was vielleicht erforderlich ist. Das gibt dir also 50 erfahrene übrig. Also müssen wir zuerst diese Erfahrung subtrahieren und dann den Spieler lieben, lieben. Lassen Sie uns also versuchen, ein paar Umrichtungsnotizen zu machen, damit es ein bisschen besser aussieht. Und anstatt das von hier aus zu tun, nur um es sauberer zu machen, mag ich das Aussehen nicht. Wir können das einfach weiter wegschieben und das aufbrechen und die Erfahrung sagen, denn jetzt ist es aktualisiert. Nehmen Sie also die Erfahrung von hier aus. Und jetzt können wir das Ding hier sagen. Diese Erfahrung wurde von der benötigten Erfahrung abgezogen. Und wir können es hier nehmen und wie hier ablegen. Und statt dieses Levels von hier aus können wir das einfach wieder verstecken, nur um es besser aussehen zu lassen. Wir können es eigentlich einfach von hier nehmen nur damit sie nicht zu weit voneinander entfernt sind. Und lass es mich einfach anschließen. Okay, also so etwas, ich ziehe das hoch, nur damit es ein bisschen besser aussieht. Ziehen Sie dies möglicherweise nach unten damit sie nicht miteinander kollidieren. Okay, so etwas hier. Also fragen wir: Ist diese Erfahrung, die wir gerade haben, ist sie größer oder gleich als die erforderliche Erfahrung? Wenn das stimmt, nehmen wir die Erfahrung auf und subtrahieren sie von der erforderlichen Erfahrung. Also vielleicht 200 minus 1 Fünftel. Wir haben zum Beispiel 50 Erfahrene übrig. Und jetzt müssen wir die neue Erfahrung machen. Also werden wir die Splitter-Informationen erneut nehmen und Setmitglieder sagen und wir möchten die Erfahrung auf diese Zahl 50 setzen, vielleicht ist das die Nummer. Und dann müssen wir den Spieler aufsteigen, weil der Spieler den erforderlichen Betrag überschritten hat. Doppelklicken wir also hier und machen eine Umleitung, um das noch besser aussehen zu lassen. So etwas. Okay, und hier haben wir jetzt die neue Erfahrung aktualisiert und lasst uns die Struktur zuerst setzen. Jetzt, da wir die Struktur festgelegt haben, können wir sie hier aufschlüsseln und wir können alles verstecken. Und wir könnten das Level erreichen und plus plus plus plus Mittel sagen . Du kannst es sehen. Fügen Sie einen zum angegebenen Wert und legen Sie ihn dann genau so fest. Dies bedeutet, dass dies das Gleiche ist wie dies. Also nimm es hier raus und sag Plus und schreibe eins, nimm das dann und setze diesen Wert genau so. Das ist das Gleiche. Also nehmen Sie einfach Plus-Plus heraus, um es zu bearbeiten und einzustellen. Und dann müssen wir natürlich unsere Struktur mit dieser Nummer aktualisieren. Jetzt haben wir ein neues Level. Sie können also wieder hier herausziehen und Set-Member sagen. Und jetzt wollen wir hier die Stufe zwei und die neue Nummer festlegen , einfach so. Okay, und denken Sie noch einmal daran, diese Struktur genau so festzulegen . Jetzt haben wir die Erfahrung aktualisiert, Sie haben das Level aktualisiert. Und was ich jetzt tun möchte, denken Sie daran, dass Sie viele Feinde töten können und vielleicht haben Sie die erforderliche Erfahrung sowohl für Stufe zwei als auch für Stufe drei überschritten . Nehmen wir an, Sie haben einen Feind getötet, der Ihnen so viel Erfahrung gegeben hat , dass Sie statt eins Level zwei Level Sub haben. Also müssen wir noch einmal überprüfen, als ob es in Ordnung ist, ob Sie diese Erfahrung abgezogen haben, aber Sie müssen noch einmal überprüfen, diese neue Erfahrung, die Sie in Ihrer Tasche haben, wieder höher als sie erforderlich sind für das nächste Level. Denn vielleicht müssen wir zwei Ebenen gleichzeitig anstelle von einer hinzufügen , wenn Sie diese Anforderung erfüllt haben. Also ziehen wir davon, und tatsächlich ziehe ich wieder in diesen Zweig und doppelklicken, um Umlenknoten zu machen, genau so wie es ist. Sieht hier besser aus. So etwas. Ich ziehe alles so hoch. Okay, also was wir hier machen, ist, dass wir es noch einmal überprüfen , ist die Erfahrung, die Sie gerade mit dieser aktualisierten Erfahrung haben. Sie daran, dass wir unsere Erfahrung aktualisiert haben, obwohl es davon und Erfahrung nehmen Denken Sie daran, dass wir unsere Erfahrung aktualisiert haben, obwohl es davon und Erfahrung nehmen wird. Also diese Erfahrung haben wir jetzt das aktualisierte. Ist das höher als das nochmal für das nächste Level erforderlich? Es prüft also ständig, ob es erforderlich ist, Beispiel wenn wir eine höhere Erfahrung als die erforderliche Raumerfahrung haben , wenn nicht, wird es zu falsch gehen und nichts tun. Es wird also nichts zu unserem Level hinzufügen. Das ist es im Grunde genommen. Dies ist der Code. Wir haben also so, wie wir sind, wir fügen die Erfahrung hinzu, wenn wir einen Feind töten. Dann prüfen wir, ob wir die Erfahrung haben , die erforderlich ist, damit diese Ebene steigt. Und es wird diese Informationen aufgrund dieser Level-Info-Funktion , die wir durchgeführt haben, aus der Datentabelle nehmen aufgrund dieser Level-Info-Funktion , die wir durchgeführt haben, aus der Datentabelle dieser Level-Info-Funktion , die wir durchgeführt haben, aus der , Funktionsbibliothek. Und dann wird es unsere neue Erfahrung auf den neuesten Stand bringen , weil wir diese Erfahrung von den erforderlichen subtrahieren , weil wir uns verbessern. Wir brauchen also nicht wirklich all diese Erfahrung. Und kommen wir mit dieser neuen Erfahrung wieder auf die erforderliche Erfahrung für das nächste Level? Wenn nicht, aktualisieren wir vielleicht einfach die Benutzeroberfläche oder wo auch immer wir hier tun werden. Jetzt, da wir mit diesem Code fertig sind, lassen Sie uns tatsächlich die Nivellierung oder die Ebene der Benutzeroberfläche erstellen. 101. Erstellen der Level: Um die schöne URL zu erstellen, kehren wir zu unserem UI-Ordner innerhalb des erstellten Widget-Blueprint-Hauptplatzes zurück. Und lasst uns einfach das Level hier hinzufügen. Es liegt an dir, wo du es hinzufügst. Und das ist nur ein Kurs, wie Sie einfach das gewünschte Design machen können. Aber hier fügen wir einfach ein angezeigtes Level hinzu. Nehmen wir also an, ich möchte es direkt neben dieser Benutzeroberfläche hinzufügen. Also muss ich tatsächlich ein horizontales, horizontales Feld hinzufügen , damit sie horizontal ausgerichtet sind. Also gehe ich zu einer horizontalen Box. Und dann lege ich dieses Overlay in eine horizontale Box. Und ich werde ein weiteres Overlay in die horizontale Box legen. Hier möchte ich mein Level EY entwerfen, indem ich einfach diese horizontale Box die Richtung ziehe und es sieht so aus, weil es nicht füllt. Also klicke ich auf dieses Overlay und klicke hier auf Füllen, damit es das Ganze füllt. Und mit diesem ist dies die Nivellierungs-, Nivellieranzeige. Und hier will ich ein Bild als Hintergrund, genau wie dieses. Ich gehe mit dem gleichen Design. Wenn dieses Bild auf ein schwarzes Quadrat flach eingestellt ist und diesen ganzen Raum ausfüllt, werde ich dort ein Leerzeichen zwischen diesen beiden Overlays legen . Stellen Sie einfach sicher, dass sich der Abstandhalter außerhalb der Overlays befindet, wenn Sie sie minimieren . Also hier dazwischen. Und das ist der Abstand in X-Richtung, also vielleicht etwa zehn. Okay? Und hier, lassen Sie mich dieses Bild duplizieren und lassen Sie mich das blaue Bild auswählen, das jetzt blau flach ist. Und nochmal, klicke einfach oben auf diese Ausrichtung und mache die Größe auf fünf. Duplizieren Sie dies, nehmen Sie die Ausrichtung nach unten vor. Wir haben also das gleiche Design wie zuvor. Und jetzt möchte ich etwas Text hinzufügen. Und den Text möchte ich zuerst ein vertikales Feld hinzufügen , weil ich Texte machen möchte. Und der erste wird Level sagen. Also hier wird es Level sagen. Und der zweite auf meinem vertikalen Feld wird nur dieses Level angezeigt. Stufe eins ist also der Anfang. Und das möchte ich in die Mitte legen und diesen auch in die Mitte legen. Und die ganze vertikale Box möchte ich auch in die Mitte legen. Jetzt können Sie beide Texte auswählen, damit wir sie zusammenfügen können. Und für die Font-Familie wähle ich Bold aus. Für die Größe. Ich lasse es einfach 24 sein. Und dieses für den Schatten setze ich den Schatten-Offset 22 und ändere das Alpha auf 0,35. Wir haben eine Art Basis-Display, und Sie können sehen, dass dies sehr klein und schmal ist. Es wird davon weggedrängt. Sie können also auf dieses zweite Overlay klicken und auf Ausfüllen klicken, um es auszufüllen. Und wenn Sie es hier nicht so groß wie diese füllen möchten . Sie können diese Füllnummer einfach ändern, jetzt ist es 1. Du kannst 0.5 schreiben und es kann es kleiner machen. Ich glaube, ich gehe mit 0.4 und ich werde meine horizontale Box etwas größer machen meine horizontale Box etwas , weil ich denke, dass dies viel zu klein ist. Etwas, so etwas. Und was wir jetzt tun können, einfach sicher, dass der Ankerpunkt korrekt ist. Klicken Sie also auf den Anker und legen Sie ihn stattdessen hier ab. Und dann schreiben Sie Nullen 0 und die Position, die Sie sehen können unter unserem Fenster ausgerichtet. Und das wollen wir nicht. Spielen Sie also noch einmal mit den Achsen und deshalb ist die Ausrichtung hier. Und das ist nur auf eins eingestellt, und es wird hier oben sein. Nun, für die Position, werde ich es auf vielleicht 30 im x und minus 30 in y setzen . Minus 30 geht nach oben. Jetzt haben wir unsere Nivellierungsanzeige. Um es uns in den Variablen einfacher zu machen, klicke ich auf diese Nummer und nenne sie die nächste Stufe. Und dafür müssen wir es nicht wirklich in eine Variable verwandeln , weil wir sie nicht brauchen. nur sicher, dass ich hier auf diesen Text klicke , weil wir ihn ändern müssen, stellen Sie sicher, dass er variabel ist. Aber diese für diese Ebene stellt auch sicher, dass es variabel ist. Und das nennt man Texterfahrung. Ebene der Texte. Dieser Fortschrittsbalken wird als Prog-Erfahrung bezeichnet. Und ja, das ist alles darum. Als hätten wir alles was wir brauchen und lasst uns alles retten. Und im nächsten werden wir dieser Benutzeroberfläche Funktionen hinzufügen. 102. Level: Also hier bin ich wieder in meiner Haupt-Benutzeroberfläche und lass uns nun diesem Erfahrungsnivelliersystem Funktionalität hinzufügen. Das, was wir tun müssen, ist, uns Diagramm zu gehen und etwas zu codieren. Also hier möchte ich mit der rechten Maustaste klicken und lasst uns ein neues benutzerdefiniertes Ereignis erstellen und nennen wir es Updates Erfahrung. Und dieser wird das Erlebnis und das Level aktualisieren . Also wird es diese Erfahrung haben. Und wenn wir über die erforderliche Erfahrung verfügen, werden wir auch das Level aktualisieren. Jetzt weiß ich nicht, was wir hier in die Inputs einfügen müssen, wie wir das vorerst herausfinden müssen, lass es uns einfach so sein. Und das erste, was wir tun müssen, ist diese Fortschrittsbalkenerfahrung zu machen. Und genau wie zuvor sagen wir mit der Health Bar Prozent. Und dies wird letztendlich den Prozentsatz für diesen Fortschrittsbalken hier festlegen . Also wird es sich ausfüllen. Und normalerweise beginnt es wie hier standardmäßig als 0. Also werden wir den Prozentsatz um etwas festlegen. Und danach haben wir diese Erfahrung. Und wir werden diesen Text auch auf diesen Fortschrittsbalken setzen . Das ist also dieser Text an der Spitze. Und denken Sie daran, wenn wir dynamische Texte haben, genau das, was ich Ihnen vorher beigebracht habe, müssen wir Formattext verwenden. Also nochmal, dieselbe Methode, rappen, Formattext speichern. Und wir brauchen zwei Variablen. Wir brauchen, wie viel Erfahrung Sie haben und wie viel Erfahrung benötigt wird, um zu steigen. Machen wir also zwei Variablen hier. Machen wir geschweifte Klammern und schreiben Erfahrung, Erfahrung. Das ist also die aktuelle Erfahrung. Und dann, wie außerhalb der geschweiften Klammern, schreibe ich einen Schrägstrich. Und dann machen wir neue geschweifte Klammern und nennen es Erfahrung nötig. Und mach es wie fertig mit geschweiften Klammern. Wir haben also zwei geschweifte Klammern. Wir haben diesen hier, wir haben einen Schrägstrich und diesen zweiten. Jetzt haben wir zwei Variablen, die wir als dynamische Variablen festlegen können. Ich sehe, dass wir, wie in den Spielerinformationen, vielleicht brauchen wir hier nur eine Spielerinformation, denn anstatt alle diese Variablen hier einzustecken, wir tatsächlich genau, wie wir es verwenden können, wie wir kann alle diese Informationen mithilfe der Spielerinformationen aktualisieren. Also werde ich dies tatsächlich als Eingabe- und Schreib-Layer-Info erstellen , genau so. Und nennen wir es Spieler-Info. Eigentlich machen wir es von hier aus. Also mit dem, was wir bisher haben, probieren wir es aus. Nehmen wir die geteilten Informationen und brechen sie auf. Und jetzt können wir diesen Prozentsatz hier verwenden. Denken Sie daran, dass dies die Erfahrung ist. Wie viel Erfahrung Sie gerade haben, geteilt durch die erforderliche Erfahrung , die Sie benötigen. Verstecken wir also alle nicht verbundenen Pins damit wir die erforderliche Erfahrung benötigen. Denken Sie daran, dass die Funktion, die wir in der Bibliothek erstellt haben, global ist. Also können wir einfach sagen, hol dir die Levelinformationen und du kannst hier darauf zugreifen. Sie müssen das Level eines Spielers angeben. Das haben wir hier in unserer Struktur so. Und jetzt kannst du das aufbrechen. Jetzt haben Sie die erforderliche Erfahrung. Die Erfahrung, die Sie durch die erforderliche Erfahrung geteilt haben , gibt Ihnen den Prozentsatz. Und eigentlich gibt es hier einen kleinen Fehler. Wie wenn Sie es so machen, wird es tatsächlich 0 anzeigen, weil Sie daran denken, dass dies eine Ganzzahl ist und dies eine Ganzzahl ist und dies ein Float ist. würde es diese Daten korrekt verarbeiten, aber die Zahl wird falsch angezeigt, denn denken Sie daran, dass Sie beim Teilen von Ganzzahlen eine ganze Zahl erhalten . Es wird Ihnen keinen Prozentsatz geben, als hätten Sie keine Dezimalstellen oder Ganzzahlen. Wenn Sie zum Beispiel sagen, ist die Erfahrung, die Sie haben, zehn geteilt durch 50. Und diese Zahl, die Sie erhalten, ist eine Dezimalzahl. zeigt nicht, dass diese Zahl gleich 0 ist, da ganze Zahlen keine Dezimalstellen haben können. Der richtige Weg, dies zu tun, besteht darin dies zuerst in einen Float umzuwandeln. Sagen wir also zwei Schwimmer. Und mach das Gleiche, damit dieser schwebt. Und lasst uns das löschen. Und jetzt werden wir sagen, dass diese Erfahrung geteilt ist. Und jetzt arbeiten wir stattdessen mit einem Float. Stellen Sie also sicher, dass Sie es zuerst zu einem Float machen sonst erhalten Sie diese Dezimalstellen nicht, aber Sie haben nur ganze Zahlen. Jetzt haben wir die Dezimalstellen. Doppelklicken wir und erstellen hier einen Eisenbahnknoten. Und jetzt die Zahl , die wir gerade haben, können wir sie im Prozentsatz verwenden. Wir werden den Fortschrittsbalken korrekt aktualisieren. Okay, also das ist jetzt fertig. Und als Nächstes, klicken wir zuerst auf diese und verstecken Pin, nur damit es ein bisschen besser aussieht. Das nächste ist also, dass wir die Erfahrung aktualisieren müssen , die Sie haben und die sie erfahren haben. Das ist sehr einfach, denn die Erfahrung, die wir haben, ist genau diese Erfahrung. Lassen Sie mich doppelklicken und hier einen Umleitungsknoten erstellen. Und die nötige Erfahrung ist nur diese erforderlich. Also kann ich einfach doppelklicken und es hier ablegen. Und lassen Sie mich das einfach nach unten ziehen, damit es nicht das Ganze mit den Linien hier überläuft. So etwas. Das sieht etwas sauberer aus, besser zu arbeiten. Okay, jetzt haben wir diese Informationen gesetzt. Was wir als Nächstes tun müssen, ist die Levelanzeige für die Spieler zu aktualisieren. also diese Textebene nehmen, möchten wir diese Ebene jetzt hier aktualisieren. Nehmen Sie also diese Ebene und sagen Sie Text einstellen. Und jetzt ist das auch sehr einfach, weil wir bereits das Level für den Spieler haben. Wir können das einfach nehmen oder Sie können das nehmen , was Ihnen überlassen ist, und stecken Sie es hier an. Und nochmal, mach einen Umleitungsknoten , damit er viel besser aussieht. So etwas. Jetzt haben wir tatsächlich alle Informationen, die wir aktualisieren, den Prozentsatz, wir aktualisieren den dynamischen Text in diesem Fortschrittsbalken. Und wir aktualisieren hier auch den Nivellierungstext. Jetzt können wir kompilieren und speichern, und jetzt können wir diese Update-Erfahrung in unserem Player-Controller nutzen , um die Erfahrung und das Level des Spielers zu aktualisieren. 103. Fertigstellung des Leveling: Hallo und willkommen zurück. Lassen Sie uns jetzt das Nivelliersystem abschließen. Gehen wir zum Spieler-Controller. Denken Sie daran, dass wir die UI-Updates im Player-Controller durchführen. Also gehe hier zum Spieler-Controller und jetzt lass es uns einfach hier unten schaffen. Wir haben die Update-Gesundheitsleiste hier oben. Lasst uns ein neues machen. Dafür nenne ich es einfach Update Experience. Lassen Sie uns also zuerst im Player-Controller Blueprint Interface zu den Schnittstellen zurückkehren . Und machen wir es hier namens Update Experience. Es wird daran denken, die Informationen des Strukturspielers als Variable zu betrachten Informationen des Strukturspielers , da dies diejenige ist, die wir erstellt haben. Und nennen wir es Spieler-Info. Kompilieren und speichern. Lass uns zurückgehen und es hier anrufen, aktualisiere das Erlebnis. Und jetzt nochmal, führe es durch die Kunden. Denken Sie daran, dass es nicht der Server ist, es ist jetzt der Client weil wir die Benutzeroberfläche bearbeiten und die Benutzeroberfläche über den Client geht. Also benutzerdefinierte Ereignisse und gehen durch den Client, sagen Update-Erlebnis. Und lassen Sie es uns zu einem eigenen Kunden laufen und zuverlässig. Und lassen Sie uns die Spieler-Info-Variable hier hinzufügen. Suchen Sie also nach Spielerinformationen. Jetzt können wir es hier aufschreiben, Cl Update, Erfahrung. Jetzt wird es hier durchlaufen, durch den Client laufen, und der Client wird die Widget-Blueprints-Funktion ausführen, die wir hier in WB Main erstellt haben, hier Update Experience genannt. Das werden wir jetzt tun. Jetzt kannst du von hier ziehen. Und tatsächlich müssen wir auf das Widget Blueprint Main zugreifen. Und wir erinnern uns bereits daran , dass wir das als Variable in unserem Spieler-Controller haben. Fangen wir also von hier aus an und sagen Update Experience, und Sie werden es hier sehen. Also ruf es hier an, verbinde sie und verbinde sie dann hier. Jetzt wird es also gehen und diese Informationen einspeisen, hier rein und aktualisieren alles für uns. Jetzt haben wir nicht angegeben , wo wir das hinzufügen werden. Aktualisieren Sie die Erfahrung, gehen wir tatsächlich zurück zu, speichern wir alles und gehen wir zurück zum Spieler, Bassisten, Spielerbasis. Und denken Sie daran, dass wir diese Werbeerlebnisveranstaltungen hier gemacht haben. Und das möchten wir hier hinzufügen denn wenn Sie sich verbessert haben, aktualisieren wir die neue Erfahrung. Wir aktualisieren das neue Level. Und dann wird es noch einmal nachsehen. Müssen Sie wieder aufsteigen? Wenn ja, wird die Erfahrung erneut aktualisiert, aktualisieren Sie das Level. Danach wird es nein sagen, du musst nicht mehr aufsteigen. Du bist nicht, du triffst nicht die erforderliche Erfahrung für dieses Level, in dem du dich befindest. Also mach einfach weiter und aktualisiere die Benutzeroberfläche hier. Die Benutzeroberfläche ist wieder, es ist jetzt die Funktion, die wir brauchen oder das Ereignis, das wir brauchen, um darauf innerhalb des Player-Controllers zuzugreifen. Wir können jetzt „Get Controller“ sagen. Wir sind innerhalb der Spielerbasis. Und hier lassen Sie uns sagen, dass der Spieler-Controller REF , den wir viel früher gemacht haben. Verbinden wir es hier. Lasst uns nun davon ziehen und Update Experience sagen. So nannten wir die Interface-Funktion. Und es ist eine Nachricht, weil es sich um eine Blueprint-Interface-Funktion handelt. Jetzt braucht es die Informationen. Also ziehe ich einfach von hier unten und ziehe diese Spielerinformationen hinein. Und jetzt wird es die Erfahrung aktualisieren. Also lassen Sie uns das Element kompilieren und speichern geben Sie dem Spieler viel mehr Hilfe. Ich will einfach nicht ständig sterben. Setzen Sie also die maximalen Hügel auf vielleicht 500 und der Strom hilft auf 500. Und lass uns jetzt spielen. Okay, jetzt bin ich der Spieler, ich treffe das. Wir können jetzt sehen, dass es aktualisiert wird. Aber anfangs kann man sagen, dass es 0 von 100 sagt. Das ist nicht richtig. Also müssen wir ein erstes Update machen. Denken Sie daran, dass Ihre Benutzeroberfläche nur aktualisiert wird , wenn Sie Erfahrung sammeln. Wenn Sie also spawnen, aktualisieren Sie Ihre Benutzeroberfläche nicht. Du aktualisierst es nur, wenn du etwas tötest. Also lasst es uns tatsächlich hier oben machen, lassen Sie mich diesen Code kopieren und lassen Sie mich hierher gehen und es am Anfang machen. Wenn ich also gerade anfange, das Spiel zu spielen und auf den Spieler reagiert, der auf die Kamera reagiert, stellen wir die Kameraansicht ein. Eigentlich mache ich es hier. Gleich nachdem Sie die Kameraansicht eingestellt haben, füge ich dies hinzu. Und ich werde meine Benutzeroberfläche als erstes Update aktualisieren. Also genau hier, so etwas. Okay, und jetzt kompilieren und speichern wir. Jetzt klicken wir auf Play. Und Sie können sehen, dass dies bei der ersten Aktualisierung der Fall ist, und Sie haben jetzt die richtigen Informationen. Jetzt kann ich etwas töten. Es gibt dir zehn Erfahrungen. Die Leiste wird ebenfalls aktualisiert. Großartig, und mal sehen, ob wir aufsteigen. Also bringe ich noch ein paar mehr um. Jetzt fühlt es sich an wie ein Spiel. Wenn alle Elemente zusammenkommen. Jetzt können wir sehen, dass ich sicherstellen werde , dass ich auf Stufe zwei und meine geknetete Erfahrung jetzt 75 Jahre alt ist. Und wenn ich weiter töte, wird es es jetzt erhöhen. Jetzt wird es tatsächlich richtig aktualisiert. Und wenn ich hier rauf gehe und ein paar davon fülle, okay, also sehe ich jetzt, dass ich 70 von 75 habe. Mal sehen, ob es richtig berechnet wird. Wenn ich also denke, dass jedes Bild 20 Erfahrungen gibt, also wenn ich nur eine töte, sollte es jetzt 15 sagen. Also lass mich einen töten. Ich falle nicht runter. Es sagt 15, also berechnet es tatsächlich richtig und es hat mich ausgeglichen. Das ist also schön und alles wird jetzt richtig aktualisiert. Das Letzte, was wir tun müssen, ist, einfach einen Soundeffekt und einen visuellen Effekt hinzuzufügen , wenn wir aufsteigen. Also werden wir es ein bisschen interessanter machen. 104. SFX und VFX aufwerten: Aber das Letzte hier im Nivelliersystem, Lasst uns weitermachen und etwas Klang und visuellen Effekt zum Aufsteigen hinzufügen . Gehen wir zurück zur Spielerbasis. Und hier drin, gehen wir zu unserer Anzeigenerfahrung und fügen wir nun einen Multicast hinzu. Also klicken wir mit der rechten Maustaste. Mache ein benutzerdefiniertes Ereignis. Und lasst uns Multicast machen. Und ich nenne es einfach genauso. Du kannst es Level hoch nennen oder ich nenne es einfach ein Erlebnis, weil ich es dort oben einschließe. Und ich werde es in einen Multicast zuverlässig umstellen. Ich werde den Soundstandort genau wie zuvor spielen. Und diese Variablen hinzufügen. Ich nenne es Pegel Up Soundeffekt. Okay? Und wir möchten auch wie ein visueller Effekt spielen, wenn Sie aufsteigen, aber der visuelle Effekt ist ein Flipbook. In den Kursmaterialien, die ich für Sie aufgenommen habe, diese Textur , die Sie hinzufügen müssen. Also hier in der Ebene des Charakters, Lasst uns hier zu unseren Asset-Charakteren gehen. Und lassen Sie uns diese Texturstufe hineinziehen. erneut mit der rechten Maustaste darauf und wenden Sie Papier auf die Einstellungen und extrahieren Sie nun diese Sprites. Und das Netz dafür ist, dass ich glaube, es war 180 mal 180. Und jetzt klicke auf Extrakt. Und jetzt benenne ich all diese um. Jetzt, da Sie sie hier vor sich haben, ich jetzt auf alle, klicken Sie mit der rechten Maustaste und erstellen Sie ein Flipbook. Und ich nenne es ein B-Level nach oben. Okay, jetzt doppelklicke ich auf dieses Flipbook und setze die Frames pro Sekunde auf acht. Und du siehst, dass es seltsam aussieht. Und das ist, denken Sie daran, Sie können es vielleicht herausfinden, aber es liegt wahrscheinlich daran, dass dies dieses Material hat. Wechseln wir also das Maskenmaterial in das durchscheinende Material. Also auf der Suche nach durchscheinendem. Also haben wir es jetzt ein paar Mal benutzt. Durchscheinendes, unbeleuchtetes Sprite-Material, man sieht es jetzt viel besser aus. Schließen wir diesen Effekt also ab. Wenn Sie diese Materialien nicht sehen, denken Sie daran, zu den Einstellungen zu gehen und den Content-Engine-Inhalten und Plug-In-Inhalten des Entwicklers zu aktivieren Content-Engine-Inhalten und Plug-In-Inhalten des Entwicklers . Wenn Sie mit ihnen fertig sind, können Sie sich immer so von ihnen entfernen. Sie sehen also nicht alle diese zusätzlichen Ordner. Manchmal ist es nervig, all diese Ordner zu sehen. Also klicke ich einfach weg und ich habe es sauberer. Also zeig ich ihnen einfach wann immer ich sie brauche. Gehen wir also zurück zur Spielerbasis und jetzt müssen wir diesen Level-Up-Effekt spielen. Aber das ist ein Flipbook und wir können die Figuren-Flip-Bücher nicht wirklich ändern. Also müssen wir uns ändern. Sie können das Flipbook für Charaktere nicht ändern. Also müssen wir hier eine weitere Komponente hinzufügen. Fügen wir also eine neue Komponente hinzu. Und nennen wir es oder suchen einfach nach einem Flip Book. Also Papier Flip Book. Ich nenne das hier, vielleicht nivellierst du die V-Effekte. Du nennst es einfach so. Ich werde es vorerst an mein Sprite anhängen. Für dieses Flip Book ändern wir es zu, Lasst uns unser Level hier oben finden. Das ist der Effekt Liebe, Liebe, also haben wir ihn hier. Und zuerst wollen wir das nicht ständig zeigen. Also gehe ich tatsächlich runter und unsichtbar. Ich werde das hier sichtbar entfernen, also ist es im Spiel zunächst nicht sichtbar. Was ich also machen möchte, wenn ich aufstieg, ist, dass ich dies nehmen und die Sichtbarkeit sichtbar machen möchte. Ich verbinde das hier. Nachdem es sichtbar ist. Ich werde es dann um einige Zeit verzögern und es dann wieder auf unsichtbar setzen. Ich werde es bis zum Zeitpunkt dieser Flip Books verzögern. Ich nehme das und sage „Flip Book“, und wir können dieses auswählen, Buchlänge und Verzögerung umkehren. Und nachdem wir uns verzögert haben, so lange dieses Flipbook auch läuft, werden wir es wieder auf unsichtbar setzen. Nehmen Sie diese Sichtbarkeit also hier und schließen Sie sie mit diesem an. Doppelklicken, um eine Umweisung vorzunehmen. Um es besser aussehen zu lassen, können Sie die Sichtbarkeit hier falsch festlegen. Wir verstecken es wieder, was auch immer. Wir haben eine Schleife dieses Flipbooks beendet. Und ich bin mir einfach nicht sicher, ob das tatsächlich von Anfang an spielen wird, also stellen wir es auf sichtbar ein. Aber was ist, wenn das was ist diese Flip Books tatsächlich in der Mitte spielen, wenn wir es auf sichtbar setzen? Also werde ich das tatsächlich von hier entfernen. Und lasst uns den Code hier tatsächlich durchsetzen . Also stellen wir es auf sichtbar ein. Und dann lass uns dieses Flipbook nehmen und „Flipbook einstellen“ sagen. Weil wir es nur von Anfang an zeigen wollen , wann immer wir es zeigen wollen. Und dann müssen wir wählen, welches Flipbook. Machen wir es nicht hier. Ziehen wir es einfach in dieses Ereignis. Und anstatt ein neues Flip Book zu rufen, können wir es als Level Up the Effects bezeichnen. Und lassen Sie mich das hochziehen, nur um es sauberer zu machen, indem wir es stattdessen hier öffnen, wir haben den VFX als Effekte und den Standort. Und wenn Sie einen Umleitungsknoten erstellen, können Sie aus diesem eine Umleitungsnotiz machen, damit er besser aussieht, so. Und ja, das sieht jetzt gut aus. Wir haben also diese Anzeigenerfahrung mit Effekten und müssen sie irgendwo hinzufügen und wir müssen sie hinzufügen wenn der Spieler steigt. Wenn wir also hier zum Anzeigenerlebnis gehen, müssen wir herausfinden, wo der Spieler steigt. Und wenn Sie sich an den Code erinnern, steigt der Spieler auf. Hier können wir es einfach hier am Ende dieses Codes ändern. Dies ist die Nivellierung des Effekts. Und nehmen wir das, nehmen Sie das hier und sagen Sie MC, MC Werbeerfahrung wie diese. Und du kannst das hier nehmen und einen weiteren Umleitungsknoten erstellen. Oder du eigentlich werde ich es stattdessen hier aufstellen. Hier unten gibt es keinen Platz. Einfach so. Okay, also so etwas hier. Und jetzt haben wir diese Anzeigenerfahrung und müssen den visuellen Effekt und den visuellen Effekt wählen. Sie können es einfach zur Struktur hinzufügen, wenn Sie möchten. Gehen wir also zurück zur Struktur. Gehe zu Spielerinformationen wurden hier hinzugefügt. Nennen Sie es Level nach oben als Effekte. Und auf der Ebene der Effekte, der Effekte oder der V-Effekte werde ich es tatsächlich hier aufstellen. Und das liegt nur daran, dass ich möchte, dass die Soundeffekte zusammen sind und die visuellen Effekte, wenn Sie mehr zusammen sein müssen. Lasst es uns ändern. Dieses V wirkt sich auf ein Flipbook aus Papier. Und der Soundeffekt ist ein Sound-Cue. Und denken Sie daran, dass wir bereits einen Soundeffekt hinzugefügt haben. Also kompiliere und speichere alles. Und lass uns hier zum Spieler gehen. Spielerinformationen, und lassen Sie uns den Soundeffekt auf Pegel aufstellen , um für alle Spieler gleich zu sein , da wir nicht wirklich mehr als einen haben. Also hier. Und das Niveau der V-Effekte können wir hier klicken und aufsteigen sagen. Und wir können den wählen, den wir gerade gemacht haben. Und jetzt kompilieren und speichern wir. Und lasst uns gehen und es hier tatsächlich wählen. Nehmen wir also an, wir können es hier tatsächlich aus diesen Spielerinformationen brechen. Wir haben es schon hier. Also lasst es uns kaputt machen. Und lassen Sie uns alles verstecken und einfach das Niveau seiner Effekte und das Niveau der Effekte auswählen . Steck sie hier ein. Und dann haben wir den Standort, der Standort des Spielers ist. Also nimm es hier und sag, bekommt Schauspielerstandort. Einfach so. Und ich glaube nicht, dass uns etwas fehlt. Also werde ich diese nicht verbundenen Pins ausblenden und kompilieren und speichern. Okay, jetzt haben wir diesen Leveling-Soundeffekt und wir können versuchen, auf Play zu klicken und zu sehen, was passiert. Klicken Sie also auf den Play-Button und spielen Sie uns hier. Versuchen Sie jetzt, aufzusteigen, um zu sehen, ob das tatsächlich funktioniert. Und ich versuche hier hochzugehen, um schneller aufzusteigen. Es gibt also einige Fehler bei diesen Animationen. Später werden wir in der nächsten Lektion tatsächlich reparieren , ich habe es gefunden. Ich kann sehen, dass ich tatsächlich aufgestiegen bin. Und es gab ein gewisses Effektspiel. Also lasst es uns noch einmal versuchen. Nett. So können Sie sehen, dass der Effekt abgespielt wird und der Soundeffekt ebenfalls abgespielt wird. Sie können sehen, dass dies der Fehler ist, den ich in der nächsten Lektion tatsächlich beheben möchte. Und jetzt sieht es aus, sieht eigentlich gut aus. Und wenn Sie möchten, dass der Effekt auf Ihrem Kopf spielt, denken Sie daran, dass Sie zum Spieler zurückkehren können. Und da Sie es gerade als Effekt hinzugefügt haben, können Sie einfach auf diese Ebene klicken, VFX-Ebene. Und denken Sie daran, dass dies nur ein Flipbook ist, fügen Sie es hinzu, damit Sie es einfach über Ihren Kopf ziehen können , angekündigt wird, über Ihrem Kopf zu spielen. Und wann immer du aufstiegst, wird hier oben spielen. Also rette alles. Das war's vorerst. Jetzt lasst uns tatsächlich die letzten Bugs beheben , die ich beim Spielen des Spiels gefunden habe. Ich habe ungefähr eine halbe Stunde gespielt und habe versucht, Bugs zu finden. Und ich habe zwei von ihnen gefunden. Also lasst uns weitermachen und die reparieren. Und wir sind fertig, fast fertig mit diesem Spiel. 105. Beheben der letzten Fehler: Okay, also lasst uns jetzt die beiden Bücher reparieren , die wir derzeit haben. Der erste ist also, dass Sie angreifen können, wenn Sie auf dem Brief stehen , und das wollen wir nicht tun. Gehen wir also zur Spieler-A- und Spielerbasis. Und was ich hier drinnen bearbeitet habe. In deiner Angriffslogik musst du nur diesen booleschen Wert hinzufügen. Im Moment haben wir also, dass wir nicht angreifen wollen, wenn du bereits angreifst . Wenn du schon tot bist, willst du nicht angreifen. Die, die Sie hinzufügen müssen. Klicken Sie hier auf dieses Plus und fügen Sie dies hinzu. Wenn du also schon bestiegen bist , willst du auch nicht angreifen. Also sehr einfach zu beheben, wir müssen nur danach suchen. Die zweite Sache ist manchmal die Feinde in der Todesanimation. Und das liegt daran, dass wir vergessen haben, den Gehmodus hinzuzufügen. Und lass uns zurück zur feindlichen Basis gehen. Also habe ich viel Zeit damit verbracht , diesen Code umzustrukturieren. So kann es versuchen, es hier zu sehen und zu kopieren. Im DNA-Schaden haben wir einen Display-Controller und ich habe diese Gesundheitsberechnung tatsächlich zuerst vor allem anderen verschoben . Versuchen Sie also zu Disk und ich glaube, diese waren zuerst wie vor diesem gesünder. Aber ich denke, dass es strukturell sinnvoller ist, zuerst die Gesundheit zu berechnen. Und nachdem Sie das **** berechnet haben, können Sie den Bewegungsmodus auf None einstellen. Ich glaube, das war das Gegenteil. Also das war hier und das war hier. Aber ich denke, es wird nur ein bisschen besser aussehen lassen, sie zuerst in den Arbeitsmodus einzustellen , bevor Sie den versteckten Zustand einstellen. Die andere Sache ist, wenn ich für die Logik festgestellt habe, dass es besser ist , diesen KI-Controller anstelle von Controller zu verwenden . Und als ich den KI-Controller bekam, fand ich, dass es besser ist, diesen KI-Controller zu verwenden , den wir auch hier verwendet haben, und den Wechsel zum Standort oder Schauspieler. Verwenden Sie diesen KI-Controller und nehmen die Gehirnkomponente davon und stoppen Sie dann die Logik. Okay, also haben wir das hier. Und dann gehe ich zur Verzögerung. Ich glaube, wir hatten sofort einen Stopp. Stoppen Sie sofort hier. Sie können dies löschen und wir werden dies später hinzufügen. So sieht es gerade aus, ganz einfach. Und jetzt verzögern wir es, genau wie zuvor. Wir fragen, ob der Feind tot ist oder nicht. Wenn der Feind nicht tot ist, wird er gehen und es laufen lassen, oder? Ich glaube , das haben wir auch vorher gemacht. Die Move Ai ist gleich, alles ist gleich. Und dann habe ich hier etwas Neues hinzugefügt. Wenn der Feind also tot ist, sind wir wie anstatt die Logik neu zu starten. Also versuche das zu löschen, wenn du das jetzt hast. Wenn Sie also den Controller abrufen und Logik starten oder Logik neu starten, können Sie diese entfernen. Und stattdessen habe ich hier ein neues, ein neues Ereignis gemacht , ich habe einen namens Neustart Behavior Tree gemacht . Ich denke, das ist viel besser als die Logik neu zu starten. Denn manchmal, wenn Sie die Logik neu starten, starten Sie diese Logik und nicht den Verhaltensbaum neu. Und deshalb werde ich speziell den Verhaltensbaum neu starten. Ich habe diese Box ein bisschen gefunden. Und so etwas wird perfekt funktionieren , wenn wir tatsächlich hierher gehen. Und denk daran, dass ich vorher geredet habe, du könntest zerstören, was diesen Schauspieler komplett entfernt. Und wenn wir das täten, hätten wir dieses Problem nicht. Das ist also nur dieses projektspezifisch. Nur für dieses Projekt, das ich mache, wird das ein Problem sein. Aber wenn du den Schauspieler tatsächlich zerstörst, wird das kein Problem sein. Aber an diesem Tag bewege ich zwei werden immer noch irgendwie ausgeführt weil sie die Logik stoppen und Logik starten startet einfach diese Logik anstelle des Verhaltensbaums. Also habe ich diesen namens Neustart Behavior Tree gemacht. Und es ist nur eine Funktion oder Ereignisse, die tatsächlich innerhalb der Funktion der feindlichen Basisschnittstelle entstanden sind. Wenn Sie also zur Schnittstelle und zur feindlichen Basis gehen, habe ich diesen namens Neustart Behavior Tree erstellt. Und ich habe es hier in der feindlichen Basis genannt. Und dann habe ich zeilenseitige Ereignisse gemacht. Also läuft auf dem eigenen Kunden und zuverlässig und ruft ihn dann hier auf, natürlich den Kunden. Also läuft es hier runter und hier unten. Ich stoppe die Bewegung sofort. Und dann stoppe ich die Logik, nur um sicher zu sein, dass die Logik gestoppt wurde. Und dann nehme ich meinen KI-Controller und bekomme einen Verweis auf meinen KI-Controller. Eigentlich hier gemacht. Wir haben in der Schnittstelle ai-Controller hergestellt, wir haben dies namens Good AI-Controller ref gemacht. Ich verstehe das, damit ich einen Verweis auf meinen KI-Controller bekommen kann . Und da drinnen statt meines KI-Controllers, lass mich jetzt zurück zum feindlichen Luftregler. Ich hab das gemacht. Also bevor wir diesen Run Behavior Tree hier oben hatten. Und anstatt dies zu tun, mache ich tatsächlich mein benutzerdefiniertes Ereignis namens AI-Tree ausführen. Und wenn ich anfange zu spielen, führe ich dieses Event hier aus. Und der Grund, warum ich diese Veranstaltung gemacht habe, ist , dass ich es auch an anderen Stellen ausführen möchte . Also nicht nur im Startspiel, sondern ich möchte es auch hier laufen lassen. In meiner feindlichen Basis wann immer ich anfange. Ihr Verhaltensbaum wurde neu gestartet. Also führe ich diesen Run AI-Baum aus. Wir führen diesen Verhaltensbaum einfach wie zuvor aus. Das ist also, was im Wesentlichen passiert wenn wir den Verhaltensbaum neu starten. Also habe ich hier oben bearbeitet, ich führe diesen Neustart-Verhaltensbaum wenn der Spieler tot ist. Wenn der Feind uns also jagt und der Spieler stirbt, wird er den Verhaltensbaum neu starten. Okay, also wenn der Feind würfelt, fügen wir die Erfahrung genau wie zuvor hinzu. Wir setzen den Schreibtisch um wahr zu sein. Und hier, wie kurz bevor wir antworten oder so, entfernen wir die generierten Überlappungsereignisse. Dann verblassen wir den Charakter. Danach haben wir den Delay-Timer. Wir legen etwas Zeit. Wir setzen die Gesundheit auf den Feind zurück. Dann aktivieren wir die generierten Überlappungsereignisse. Dann habe ich diese hinzugefügt, die Set-Bewegung zum Gehen und Schreiben vorher. Deshalb spawnte der Feind in der Todesanimation. Denn denken Sie am Anfang an hier drüben, setzen wir diesen Bewegungsmodus auf „ None“ und den Bewegungszustand, der getroffen wird. Wenn der Feind würfelt. Wir haben es nie zurückgesagt. Wenn der Feind also würfelt und reagiert, setze ihn einfach wieder auf Laufen und Lauf hier. Die feindliche Reaktion. Denken Sie daran zu mögen, ich habe das auch verschoben. Ich habe die Antwort danach verschoben weil ich sicherstellen möchte, dass meine generierten Überlappungsereignisse „true“ eingestellt sind, bevor ich antworte. Dann antworte ich und dann fragte ich ihr Schicksal auf falsch. Und dann habe ich diesen namens Neustart Behavior Tree hinzugefügt . Ich glaube, dass die Todesfunktion auch hier war, also habe ich sie gelöscht. Und der Grund ist, dass die Todesfunktionen hier bereits laufen. Denken Sie also daran, dass dieser Schauspieler verblassen wurde. Und wenn der Schauspieler fertig ist und wenn es hier auf falsche Bedeutung gesetzt ist, wenn er auf false eingestellt und wenn der Schauspieler fertig ist, wird es diesen Tod führen. Es ergibt also keinen Sinn, diesen Tod hier oben zu haben. Also lösche das von hier aus, und ich habe gerade dieses Neustartverhalten hinzugefügt um zu lesen, nur um sicher zu sein , dass es funktioniert. Und hier unten glaube ich auch, dass wir die Laufrechte hatten , sind Gehmodus eigentlich die Arbeitslast. Sie können das von hier aus löschen, denn jetzt haben wir es bereits hier oben. Wir müssen es also nicht wirklich hier unten haben. Und so sieht es aus und wenn es fertig ist. Wenn der Tod auf „false“ eingestellt ist, ich auch den Verhaltensbaum neu nur um sicher zu sein, dass er nicht abgehört. Versuchen Sie auch, es aus dem Code zu lassen und prüfen Sie, ob es funktioniert. Wenn Nüsse, um es wieder anzuschließen. So sieht es gerade aus. Und wenn wir das Spiel spielen und probieren wir es aus. Mit dem Code sieht es also viel besser aus, als ob nichts nervt. Ich habe 15 Minuten lang versucht zu spielen. Also habe ich gerade die Gesundheit für den Feind geändert , damit ich sie etwas schneller töten kann. Aber es sieht so aus, als würde jetzt alles funktionieren. Sie laichen nicht und lagern nicht. Sie laichen nicht mit ihrer Todesanimation. Und wir können darüber nachdenken, das Spiel so zu spielen. Alles funktioniert richtig, wie Sie sehen können. So genial. Und das waren die Bugs dafür. Und wenn die Feinde wieder, unser Durchschneiden, Sie diese Trennung zwischen ihnen erhöhen können , wie ich es Ihnen zuvor gesagt habe, habe ich das auch hier getan, weil es Clipping gab. Also klickte ich auf den ersten, sagte der E21, klickte auf den zweiten auf 1.2, dann den dritten, also 14 und klickte auf den vierten, antwortete auf 1.6. Also kann ich es um weiter erhöhen. Wenn Sie sehen, wie sie ausschneiden, können Sie sie immer vergrößern. Aber ja, jetzt ist alles repariert und hoffentlich testen wir die Leiter kurz bevor wir das beenden. Das hab ich nicht gemacht. ist also auch nicht unmöglich, den Brief anzugreifen, nur wenn ich von der Leiter falle. Sie können also nur sehen, wenn ich den Brief abgeschlagen habe, kann ich tatsächlich angreifen. also auf dem Brief selbst stehe, kann ich nicht angreifen, aber wenn sie mich abgeschlagen haben und ich markiere, kann ich sie angreifen. Okay, also das war es für diese Lektion und lasst uns alles speichern. Und lass uns weitermachen. 106. Erstellen der schwimmenden Text: Hallo an alle und willkommen in dieser Rubrik. In diesem Abschnitt habe ich darüber nachgedacht, Namensschilder zu erstellen, aber stattdessen erstellen wir tatsächlich schwebende Kampftexte. Ich denke, es ist an dieser Stelle interessanter , dies zu schaffen. Und ich füge die Namensschilder in meine zukünftigen zusätzlichen Videos ein. Für den schwebenden Kampftext. Es sind nur ein paar Texte. Wenn du den Feind triffst , erscheint dieser Text und er zeigt dir, wie viel Schaden du dem Feind zugefügt hast, denn im Moment hat der Spieler keine Chance, ihn zu sehen. Es wird also hochfliegen und dir sagen, wie viel Schaden du angerichtet hast. Und wenn der Feind dich trifft, zeigt dir der Feind wie viel Schaden er dir als Spieler zugefügt hat. Fangen wir also damit an. Fangen wir an, mit der Benutzeroberfläche zu arbeiten. Gehen Sie also zum UI-Ordner, und hier können wir mit der rechten Maustaste klicken und einen neuen Benutzer-Widget Blueprint erstellen. Lasst uns das hier erstellen. Und nennen wir es w b und schwebenden Text. Das ist also das Menü, das ich benutzen werde. Hier drin. Diese Benutzeroberfläche wird sehr einfach sein. Beginnen wir noch einmal mit dem Canvas-Panel. Beginnen Sie immer mit einem Canvas-Panel , wenn Sie eine Benutzeroberfläche erstellen. Und drinnen von hier, suchen wir nach einem Overlay tatsächlich Quantile Quantile Box. Und ich zeige dir , was ich hier mache. Also horizontale Box und das einzige, was wir brauchen, ist ein Bild im horizontalen Feld und einen Text innerhalb des horizontalen Feldes. Es wird also nur ein Bild sein und das wird eine Ikone sein, offensichtlich dieses Bild hier. Und dann einige Texte, die dir zeigen, wie viel Schaden du dir allen Feind zugefügt hast. Für die Benutzeroberfläche, wo Sie nicht den ganzen Bildschirm benötigen. Zum Beispiel brauchen wir hier oben nur einen schwebenden Text. Anstatt mit dem Bildschirm zu gehen, müssen Sie ihn auf den gewünschten Wert ändern. Erwünscht ist nur dieser Teil hier zu sein, damit Sie sehen können, dass die Leinwand verschwunden ist oder tatsächlich nicht verschwunden ist. Es ist immer noch da, aber es hat sich hier nur an diesen Inhalt angepasst. Klicken wir also mit dem Bild auf das Bild und importieren wir es tatsächlich. Also nochmal, in dem Kursmaterial, das ich für Sie in die Benutzeroberfläche und die Bilder aufgenommen habe , diese Art und dieses Blutsymbol. Nehmen wir die also, gehen wir zu den UI-Bildern. Und drinnen von hier, lass uns diese beiden importieren. Dies ist keine Pick-Slots, daher müssen wir nicht mit der rechten Maustaste klicken und Dampf-2D-Einstellungen anwenden. Jetzt gehen wir zurück und klicken hier auf dieses Bild. Suche zum Beispiel nach Blut. So. Und jetzt kann ich sehen, dass es nicht in der richtigen Größe ist. Klicken Sie also auf dieses horizontale Feld, damit ich die Größe wie diese ändern kann , damit es korrekter angezeigt wird. Und klicken Sie auf diese, anstatt horizontal und vertikal zu füllen, machen wir in der Mitte. Und für die Größe mache ich nur 44 um 44 Pixel. Also viel kleiner als zuvor. Und für den Text, Klicken wir darauf und lasst uns zum Beispiel etwas Schaden reiten . Zum Beispiel habe ich Two 135 Schaden angerichtet. Dies wird sich je nach Schaden wieder dynamisch ändern . Ändern wir die Schriftart in Schwarz. Und ich verwende diese sehr schweren Schriftarten gerne denn wenn du im Spielbereich bist, möchte ich, dass der Text sehr sichtbar ist. Wählen Sie das aus und richten Sie es auf die Mitte aus. Und auch hier unten zur Begründung, auch ausrichten und zur Mitte ausrichten. Richten wir es tatsächlich nach links da es sich auf der linken Seite dieses Bildes befinden sollte. Je länger dieser Text sein wird, so wird es sein. Das ist also tatsächlich richtig. Lassen Sie es uns einfach hier links zur Rechtfertigung behalten. Und hier drüben versuchen wir für diese Größe etwas wie 30. Also ein bisschen größer. Und lasst uns eigentlich, bevor wir irgendetwas tun, einen Abstandhalter zwischen diesen beiden hinzufügen. Suchen wir also nach einem Abstandhalter zwischen dem Bild und dem Text. Und lasst uns den Abstandhalter auf etwa zehn einstellen , so etwas. Und dazu fügen wir eine Gliederung hinzu. In der Gliederungsgröße füge ich eine ein. Wir haben also einen kleinen Umriss. Sie können hier diese schwarze Farbe sehen. Anstatt ganz schwarz zu sein, machen wir es einfach etwas grauer. Also nur ein kleiner Effekt. Du kannst den Unterschied erkennen. Dies ist der alte, das ist das Neue. Also ein sehr, sehr kleiner Unterschied, nicht etwas sehr Schweres. Für den Schatten. Ich werde tatsächlich Schatten anwenden. Nun, lasst uns vielleicht 0,5 anwenden. Und wenn das zu viel ist, können wir es immer reduzieren. Also 0.5 und es wird Schatten anwenden, damit wir es tatsächlich in der Umgebung klarer sehen können . Und was die Farbe angeht, können wir sie tatsächlich dynamisch ändern, damit wir die Farbe hier nicht wirklich ändern müssen. Und jetzt müssen wir den Drehpunkt richtig ausrichten. Anstatt also hier auf die horizontale Box ausgerichtet zu sein, gehen wir nach oben und verankern es in der Mitte. Und lasst uns die Ausrichtung 0.5 bis 0.5 machen und die Position 0 ist 0. Einfach so. Jetzt ist es vollständig in der Mitte ausgerichtet. Und wenn Sie vielleicht nicht verstanden haben, wie diese Ausrichtung war, wenn Sie sie wieder auf 0 haben, können Sie sehen, dass sie immer auf diese obere linke Ecke ausgerichtet ist. So 0.5, wir können sehen, dass es in der Mitte auf das x ausgerichtet ist. Und hier richtet es sich in der Mitte zum y. Sie können also sehen, dass es in der Mitte ausgerichtet ist. Wenn Sie 0,5 bis 0,5 schreiben, wenn Sie einen schreiben, können Sie sehen, dass es auf diese Weise ausgerichtet ist, 0 oder Zeilen auf diese Weise. 0,5 ist also in der Mitte. Und du siehst, dass wir hier noch etwas Zufallsraum haben. Und das liegt daran, dass wenn Sie auf das horizontale Feld klicken, sehen Sie, dass die Größe hier nicht dem Text entspricht. Sie können also einfach auf diese Größe klicken, um den Inhalt zu erhalten, und es wird automatisch auf das angepasst, was Sie hier haben. Wenn Sie also Ihren Schaden viel höher haben, können Sie sehen, dass das horizontale Feld automatisch auf diese Zahl skaliert wird . Das ist also ein sehr cooler Trick, um den Inhalt anzupassen. Jetzt haben wir diese Kampftexte und es ist bereit, auf das horizontale Feld zu klicken, Sie können sehen, dass es in der Mitte ausgerichtet ist und es sieht jetzt völlig korrekt aus. 107. Hinzufügen von UI: Lassen Sie uns jetzt eine UI-Animation hinzufügen , um sie etwas interessanter zu machen. Also haben wir noch nie mit Animation gearbeitet. Und wenn Sie diese App nicht haben, versteckt sie sich manchmal hier. Sie haben also einen Animations-Tab oder wir finden ihn hier im Fenster. Animationen. Sie können es auch hier finden, wenn es geschlossen ist. Aber hier unten können Sie einfach klicken und ziehen und Sie können sehen, dass diese Animationsregisterkarte angezeigt wird. Wir möchten also eine Animation für dieses Jahr erstellen, und ich möchte das Ganze verschieben, sowohl das Symbol als auch den Text. Also klicke ich auf dieses horizontale Feld und lass uns vorerst den Namen ändern. Nennen wir es HB für horizontale Box. Und lassen Sie es uns in schwebenden Text umwandeln, damit sie es sind. Also jetzt haben wir das. Hier unten in der Animation können Sie auf diese Schaltfläche klicken, um eine Animation hinzuzufügen. Und nennen wir es „ Laden von Textanimation“. Jetzt können Sie auf diese Animation klicken und dann auf Track hinzufügen klicken. Und dann musst du auswählen, wozu du Animation hinzufügen möchtest? Und ich möchte mögen, dass du das auswählen musst , zu dem du die Animation hinzufügen musst. Zum Beispiel wähle ich dieses horizontale Feld aus und klicke hier. Und jetzt kann ich auf dieses horizontale Feld klicken , um eine Animation dafür zu erstellen. Die Sache ist, dass wir es tun wollen, ist zuerst, dass wir es einfach verschieben wollen. Es läuft also wie wenn ich einen Feind treffe, wird es von hier aus gehen. Also hier im Laufe der Zeit zum Beispiel mehr als 1 Sekunde, also wird der Text hochfliegen. Das ist also die Hauptsache, die wir gerade machen wollen. Hier im horizontalen Feld kann ich auf diesen Drag hinzufügen klicken. Und ich möchte die Transformation ändern. Transformieren. Sie können die Übersetzung ändern, was bedeutet, was immer wir gerade tun wollen. Ändern Sie also die Position des Textes, also Übersetzung. Und Sie können die Rotation, die Skala und dieses Jahr ändern . Fangen wir also mit der Übersetzung an. Lasst uns hier rein klicken. Für die Übersetzung möchte ich also von 0 gehen. Und es ist tatsächlich in der entgegengesetzten Weise. Es ist nach oben, so ist es. Es ist im Minus. Ich möchte jetzt von 0 gehen. Ich denke nach 1,5 Sekunden. Also möchte ich meine ganze Animation 1,5 Sekunden machen. Nach 1,5 Sekunden gehe ich also minus 150 im y. So können Sie Ihre Punkte erstellt sehen. Sie gehen also von hier nach hier, Sie können sehen, wie einfach es ist, UI-Animationen zu erstellen. Wir haben es so gemacht, als ob du es selbst machst, kannst du es in 15 Sekunden machen. So sehr einfach, von 0 auf minus 150 zu gehen. Okay, das sieht also interessant aus, aber ich wollte gerade ein bisschen mehr für die Rotation tun . Es ist in Ordnung. Es beginnt mit 0, aber nach einem 2.5th, also 0.5, möchte ich fünf in der Rotation machen. Und dann nach 1 Sekunde möchte ich wieder zu 0 gehen. hier auf 0 klicken, können Sie sehen, dass es einen neuen Punkt hinzufügt. Und wenn Sie diese Punkte jemals verschieben müssen, können Sie immer auf den Punkt klicken und ihn an einen anderen Ort ziehen. Wenn Sie möchten, dass es länger oder kleiner ist, können Sie das immer tun. Also einfach so kannst du sehen, ob ich das einfach entferne, wenn ich auch woanders klicke. Jetzt können Sie sehen, dass es hochfliegt, es dreht sich um fünf Grad auf diese Weise und dann dreht es sich um. Wenn Sie möchten, dass es mehr wird, können Sie immer zehn schreiben, wenn Sie möchten. Du siehst jetzt, dass es viel mehr herauskommt. Aber ich wollte es nur vorerst behalten und wir können immer ändern, wenn es sich um eine zu kleine Änderung handelt. Also denke ich auch, dass es interessanter sein wird, wie wenn der Text in unsere erste Phase kommt, scheint es. Nachdem ich 0,3 Sekunden auf die Waage geklickt habe, möchte ich sie zu einer Größe machen. Es fängt also mit einem hier an, und dann scheint es die Größe von zwei zu haben. Und dann nach 0.6 möchte ich tatsächlich, dass es hier wieder zu einem zurückgeht. Wenn es also Spawns ist, tut es das. Das kommt uns ins Gesicht, geht wieder zurück und steigt nach oben. Okay, das sieht also interessant aus. Aber als letzter Effekt denke ich, dass es auch interessanter sein wird , wenn es im Laufe der Zeit verschwindet. Hier um 1 Sekunde werde ich jetzt tatsächlich eine weitere Transformation sein, weil sie hier nicht wirklich eine Sichtbarkeitsfunktion hat. Klicken Sie also hier oben auf den Track. Und obwohl ich es in einer Sekunde hier habe, ist es nicht wirklich wichtig. Sie können es jederzeit ändern, wenn Sie dies noch nicht getan haben und Sie es in 1 Sekunde ändern müssen. Auch hier können Sie diese Punkte einfach anklicken und ziehen. Wenn ich also 1 Sekunde eine Träne habe, klicke ich auf die Strecke. Und dann derjenige namens „Render-Opazität“. Dafür fange ich mit einem an . Das ist also richtig. Dann gehe ich zu 1.5, schreibe ich 0, also wird es verschwinden. Jetzt können wir die Animation sehen. Wir gehen davon ab. Und dann wird es steigen, und dann wird es langsam verschwinden, so. Also sehr flüssige Animation. Und du kannst immer hier hochklicken, um es zu spielen. So wird es aussehen. So sehr interessante Animation, die du machen kannst. Und du kannst machen, was du willst. Sie können auf diese Spur klicken und Sie können tatsächlich sehen, was Sie auch für diese Transformation tun können Sie haben auch eine Scheranimation und versuchen, an jede Animation zu denken , die Sie versuchen. Und ich denke, das ist eine einfache und coole Animation , mit der wir arbeiten werden. Also das war es für diese Animation und wir können kompilieren und speichern, alles speichern. Und lass uns mit dem nächsten übergehen. 108. Schwebende Text: Jetzt, da wir mit der Benutzeroberfläche und der Animation fertig sind, beginnen wir mit der Funktionalität von hier und dem Widget-Blueprint. Gehen wir nun zur Grafik und löschen wir diese Standardereignisse. Anstatt hier klicke ich mit der rechten Maustaste und erstelle ein neues benutzerdefiniertes Ereignis. Nennen wir es Update. Text wird geladen. Schwebender Text wurde aktualisiert. Sehr, sehr einfach. Es wird unseren Text aktualisieren. also auf diesen Text klicken, ändern wir zuerst den Namen. Ändern wir es in TXT, der Text lädt. Und klicken wir hier ist variabel, sonst wird es hier nicht erscheinen. Und lassen Sie uns diesen Text jetzt nehmen und diesen Text so sagen . Und jetzt können wir diesen Text hier nehmen und ihn in diese Funktion oder Ereignisse ziehen, da wir dieses Ereignis anderswo aufrufen werden , um den Text zu aktualisieren. Anstatt hier nenne ich es einfach Floating-Text. Wir können auch die Farbe des Textes ändern. Wenn der Feind uns trifft, können wir eine rote Farbe haben. Wenn wir den Feind treffen, können wir eine blaue Farbe haben. So können wir die Farbe auch variabel machen. Wenn Sie diesen Text noch einmal nehmen , können wir, wenn Sie nur möchten, wenn Sie nicht wissen , wie die Funktion heißt und Sie wissen, was Sie tun möchten. Sie möchten die Farbe ändern, nur um Farbe hinzuzufügen und zu sehen, was passiert? Und so findet man es am besten. So können Sie hier sehen, dass wir etwas namens SetColor und Opazität haben. Also wähle das hier. Und jetzt können Sie in Farbe und Deckkraft davon ziehen und Schieferfarbe erstellen. Und jetzt können Sie sehen, dass Sie die Farbe des Textes ändern und Sie können es auch ändern passt ein Vordergrund wird Farbe angegeben. Dies ist der Standardwert. Du musst das nicht anfassen. Sie können die Farbe hier tatsächlich ändern. Damit können wir die angegebene Farbe einfach wieder aufnehmen in unsere Veranstaltung einstecken. Wir werden es woanders ändern. Und nennen wir es einfach Floating-Textfarbe. Und das Letzte, was wir tun wollen, ist, dass wir dieses Symbol ebenfalls ändern möchten. Es ist also Blut, wenn wir getroffen werden und es ist dieses Sortiersymbol, wenn wir den Feind treffen. Das wollen wir auch dynamisch ändern. Lassen Sie uns zuerst den Namen erneut ändern und es Bild nennen, Text laden und vielleicht Symbol für schwebendes Textsymbol. Lassen Sie uns kompilieren und speichern und gehen wir zur Grafik. Und statt hier, ziehen wir es jetzt und sagen, dass dieser Satz Pinsel heißt. Wenn Sie nur nach dem Pinsel aus der Textur suchen , und dies ist eine Textur, und deshalb sagen wir Pinsel aus der Textur einstellen. Also lass es uns anschließen und du kannst sehen, dass du alle deine Texturen hier findest. Aber wir wollen uns dynamisch ändern. Ziehen wir diese Textur also und machen es hier. Und nennen wir es Floating-Text-Icon. Und lassen Sie mich hier einfach etwas besser organisieren , damit Sie doppelklicken können. Eigentlich kannst du diesen hier auch einfach nach oben ziehen . Ich denke, dass es besser ist. Und zieh es her. Drücken Sie auf Cue, um alles auszurichten. Und ich denke, das sieht gut aus. Das ist es, was wir bisher haben. Das ist die Funktionalität. Und denk dran, wir wollen unsere Animation spielen. Hier oben im Event Construct können Sie also Event-Konstrukt schreiben und das wird wahrscheinlich nur mit dem Spiel beginnen. Denken Sie daran, dass wir Begin Play und unsere anderen Blueprints verwenden. Es heißt jedoch Event Construct, wenn Sie es mit UI zu tun haben, dies ist dasselbe. Das ist genau wie immer, wenn du das Spiel spielst und die Benutzeroberfläche konstruierst. Was wir also tun wollen, ist, dass Sie unsere Animation, schwebende Texte Animation sehen können . Das haben wir geschaffen. Hol dir diese Variable hier. Und das Einfachste, was wir einfach ziehen können und Animation abspielen sagen. Jetzt spielen wir die Animation ab. Wir müssen nicht wirklich mehr tun. Das war's also. Versuchen wir es ein bisschen nach unten. Jetzt haben wir die Funktionalität dieser Benutzeroberfläche hier. Mit dieser Funktionalität können wir dies tatsächlich anderswo aufrufen und die Benutzeroberfläche aktualisieren. 109. Erstellen des schwimmenden Text: Okay, also müssen wir jetzt einen Floating-Text-Akteur erstellen. Wenn Sie also Schaden nehmen und Feind oder Feind Sie beschädigen und Sie diese Benutzeroberfläche hier spawnen möchten. Wenn du es auf die Welt spawnen willst, denk daran, dass du etwas brauchst, um es zu spawnen. Du kannst hier nicht einfach Text ohne irgendetwas spawnen. Also brauchen wir tatsächlich einen Schauspieler und wir müssen diesen Schauspieler spawnen, wenn der Feind getroffen wird. Und dann entfernen wir diesen Schauspieler, wenn der Text fertig ist. also zu den Blueprints gehen und hier drinnen klicken, können wir mit der rechten Maustaste klicken und auf Blueprint-Klasse klicken. Und dann können wir einfach einen einfachen oder keinen Papierakt erstellen . Wir wollen hier eigentlich ein normales schaffen. Ich habe es mit dem Papier versucht und es hat eigentlich nicht funktioniert. Also müssen wir ein normales benutzen. Und damit nennen wir es PP Floating Text. Und klicken wir hier drauf. Und was wir hier machen wollen, möchten wir dem Ansichtsfenster nichts hinzufügen, aber hier oben in den Komponenten klicken wir hier und lassen Sie uns nach Widgets suchen. Und Sie können sehen, dass Sie hier etwas namens Widget haben. Und das ist ein 3D-Widget. Es ist also nicht wie die Benutzeroberfläche hier drüben, die wir gemacht haben. Wenn Sie hier eine Komponente hinzufügen, können Sie sehen dass sie tatsächlich auch im Ansichtsfenster angebracht ist. Es ist ein 3D-Widget und so machst du Dinge wie ich in der Welt zu zeigen . Also habe ich vorhin über das Namensschild gesprochen. Wir werden diese in den zusätzlichen Lektionen machen, aber die Namensschilder machen, wird das Gleiche sein. Machen Sie diese 3D-Widgets, weil wir sie in der Welt anzeigen wollen und vielleicht dem Charakter folgen sollten. Also hier haben wir ein Widget erstellt. Und Sie können rechts im Widget sehen, im Detailbedienfeld können Sie einige Einstellungen ändern. Zuerst müssen Sie also die Widget-Klasse auswählen. hier schauen, müssen Sie diejenige auswählen, die Sie gerade erstellt haben. Also der schwebende Text des Widget Blueprint. Und ich kann sehen, dass es hier erscheint, das Darstellungsfenster. Also lasst uns kompilieren und speichern. Und anstatt Welt zu machen, also wenn Sie sich für die Weltraumwelt entscheiden, wird es auf der Welt so aussehen. Wie ein Charakter tatsächlich um diesen Text drehen und ihn in 3D sehen kann . Ich möchte jedoch nur, dass es überprüft wird. Und was Bildschirm bedeutet ist, dass er uns immer auf dem Bildschirm gegenübersteht. Ich möchte nicht, dass es wie 3D-Text aussieht. Bildschirm wird der richtige sein. Und ich werde sagen, zeichne eine gewünschte Größe. Also haben wir es jedoch in unserem Widget-Blueprint geschafft, und das war's für diesen. Das war also eigentlich einfach. Gehen wir also zum Ereignisdiagramm und fügen die Funktionalität hinzu. Löschen wir diese Standardeinstellungen. Und dafür klicke ich rechten Maustaste und erstelle dein individuelles Ereignis. Ich möchte keine Blueprint-Interface-Funktion nur für diese schwebenden Texte erstellen Blueprint-Interface-Funktion nur für , weil ich nicht glaube, dass ich hier mehr Sachen brauche. Lassen Sie uns dieses hier zu einem benutzerdefinierten Ereignis machen und nennen wir es schwebenden Text anzeigen. Und dafür nehme ich dieses Widget. Benennen wir es tatsächlich um. Benennen wir es in schwebende Text-Widgets um. Also nehme ich es hier hin. Und dann müssen wir „Benutzer abrufen“ sagen, Widget-Objekt. Und jetzt müssen wir es in die Vergangenheit umsetzen, was Sie hier gewählt haben. Also der schwebende WB Text, kostet WB, Text zu laden und ihn dann hier zu verbinden. Und jetzt haben wir Zugriff auf diesen Widget Blueprint, sodass Sie von hier aus alles anrufen können. Und denken Sie daran, was wir von diesem Widget-Blueprint aus anrufen möchten , lassen Sie es mich hier tatsächlich vergrößern. Das, was wir von dort aus anrufen möchten, ist dieser schwebende Text zu aktualisieren. Hier können wir also nach Updates suchen , die Texte laden, und Sie können diese Funktion von dort aus aufrufen. Und stellen Sie einfach sicher, dass Ziel dieser schwebende WP Text ist. Und das sind alles, was Sie aktualisieren müssen. Und jetzt ziehe ich es einfach wieder hierher in dieses Ereignis weil wir es woanders anrufen werden. Genau so. Und das hier werde ich tatsächlich als Multicast ausführen. Also das ist, denk daran, was ich vorher gesagt habe. Ein Multicast kann nur durch ein Serverereignis laufen. Sie können sich also vorstellen, dass Sie irgendwo ein Serverereignis haben werden . Also werden wir später ein Serverereignis erstellen. Dies läuft jetzt durch den Multicast und es wird diese Informationen allen Spielern anzeigen. Und der Grund, warum ich das im Multicast nenne und nicht in einer Wiederholungsbenachrichtigung. Auch hier wird dieser Kampftext erscheinen und verschwinden. Und für Spieler, die sich noch nicht verbunden haben oder weit weg stehen, diese Informationen irrelevant, da sie nach 1,5 Sekunden verschwinden. Es macht also keinen Sinn für einen Vertreter zu benachrichtigen, denn denken Sie daran, Eric Notify ist etwas , das alle Clients auch benachrichtigt , wenn sie zehn Minuten später eine Verbindung herstellen. Wenn Sie es also zehn Minuten später in einer Wiederholungsbenachrichtigung tun , wenn sie eine Verbindung herstellen, sehen sie all diesen Spam-Kampftext, der diesen Spam-Kampftext, nach 1,5 Sekunden erscheint und verschwindet, obwohl er ist vor zehn Minuten passiert. Das wollen wir also nicht. Wir haben gesehen, dass ein Multicast es nur hier zeigt und nun auf die anderen vernetzten Spieler hereingefallen , die dir nahe stehen. Wenn Sie diesen Multicast spielen , werden diese schwebenden Texte angezeigt. Und denk dran, das ist ein Schauspieler. Ein Schauspieler, wenn Sie es in die Welt spawnen, müssen Sie es irgendwann entfernen , denn obwohl Sie diesen Text hier abspielen und diese Animation so verschwindet. Denken Sie daran, dass Sie einen Schauspieler hervorgebracht haben und dieser Akt, dieser Punkt Schauspieler wird nicht von selbst verschwinden. Also müssen wir diesen Schauspieler irgendwann zerstören. Also nehme ich das hier und nehme meine schwebende Animation. Also nenne ich das hier. Sie haben etwas namens get and time, weil ich diesen Schauspieler löschen möchte diesen Schauspieler löschen möchte nachdem diese Animation gespielt wurde. Also kann ich dieses Mal kriegen. Also 1,5 Sekunden. Ich kann es tatsächlich so bekommen, indem ich die Animation nehme und das Enzym bekomme, das 1,5 Sekunden ist. Und ich kann jetzt eine Verzögerung setzen und mich hier verbinden. Jetzt kann ich dann den Schauspieler zerstören. Was das tut, ist, dass ich meinen Text aktualisieren werde und ich sage ihm, dass er warten soll wie lange diese Animation ist. Wenn Sie diese Animation irgendwann auf fünf Sekunden ändern möchten , ist dies sehr cool, da sie sich jetzt einfach automatisch auf fünf Sekunden ändert , weil sie nur die Endzeit erhält deiner Animation. Und wir verzögern es. Und dann zerstören wir diesen Schauspieler hier, weil wir ihn nicht mehr brauchen. Das war's also für diesen schwebenden Text-Schauspieler. Und jetzt lasst uns tatsächlich weitermachen und die größere Floating-Text-Logik machen. 110. Schwebende Text: Arbeiten wir nun an der größeren Textlogik zum Hochladen. Was wir also tun wollen, ist wieder einen schwebenden Text anzuzeigen , wenn der Feind, der Feind dich trifft und wenn du den Feind triffst. Je nachdem, wer schlägt, wer zum Beispiel den Feind getroffen hat, möchte ich, dass der Text über dem Feind liegt. Wenn der Feind dich jedoch trifft, möchte ich, dass der Text über dir liegt. Also müssen wir es für beide Spielerbasis hier tun. Und wir müssen es auch für die feindliche Basis tun. Und denk dran, wir haben ein Elternteil für beide gemacht. Denken Sie also daran, dass die Charakterbasis sowohl für die Spielerbasis als auch für die gegnerische Basis sichtbar ist . Also haben wir das zu Beginn dieses Kurses gemacht. Also lasst uns das tatsächlich innerhalb der Charakterbasis codieren , denn dann können wir es sowohl in der gegnerischen Basis als auch in der Spielerbasis verwenden . Und jetzt können Sie sehen, wie nützlich es ist, für all diese Gegenstände einen Elternteil zu erstellen . also zu einem späteren Zeitpunkt Wenn Sie also zu einem späteren Zeitpunkt die Feinde dazu bringen wollen, Gegenstände fallen zu lassen, denke ich auch, dass wir das in den zusätzlichen Lektionen tun werden . Werfen Sie einen Blick auf meinen Kurs. Vielleicht habe ich bereits viele zusätzliche Lektionen gemacht , als du diesen Kurs ansiehst. Aber für die Elemente möchten wir erneut erstellen, mit der rechten Maustaste klicken und einen Akteur erstellen. Und dann möchten wir eine Artikelbasis erstellen. Und aus der elementbasierten möchten wir zum Beispiel eine Quest-Item-Basis erstellen. Und von Quest-Item-basiert möchte ich Quest-Items erstellen. Also sehr, sehr gute Vorgehensweise, um Basis-Blueprints zu erstellen , da Sie sie später zu Ihrem Vorteil nutzen können. Gehen wir also zum charakterbasierten und machen den schwebenden Text. Öffnen wir also den vollständigen Blueprint-Editor. Ich lösche alle diese Standardereignisse. Und hier fangen wir an, unser benutzerdefiniertes Ereignis für Displayschrifttext zu erstellen. Wenn Sie es nennen, zeigen Sie schwebenden Text an. Und wir können es zu einer Blueprint-Interface-Funktion erstellen. Aber im Moment weiß ich eigentlich nicht , welche Variablen wir brauchen. Fangen wir einfach an, einen Kunden zu machen. Du kannst es immer ausschalten. Und lasst uns hier runter gehen, neue benutzerdefinierte Ereignisse erstellen und über den Server ausführen. Denn denken Sie daran, dass Sie im schwebenden Text hier einen Multicast erstellt haben. Also müssen wir es durch den Server laufen und wir müssen es hier machen. Also führe es hier auf dem Server aus. Und lass mich ihm tatsächlich einen Namen geben. So wird der Server den Text geladen. Dafür rufen wir es wieder hier auf. Wir sind also inzwischen daran gewöhnt und ich habe es nicht richtig genannt. Zeigen Sie also an, und versuchen wir es noch einmal, Server zeigt schwebenden Text an. Okay, also hier, was ich als Variable machen möchte , will die Schauspieler tatsächlich. Wenn es also der Feind ist oder der Spieler ist, denn denken Sie daran, dass dies eine Charakterbasis ist. Also habe ich momentan keine Ahnung, ob es der Spieler oder der Feind ist, der beschädigt wird. Lassen Sie mich also hier nach Schauspieler in der Variablen suchen. Wähle diesen einen Schauspieler. Und lassen Sie uns den Namen in beschädigten Schauspieler ändern. Also müssen wir herausfinden , wer beschädigt ist, ist der Spieler oder ist es der Feind? Jetzt können wir mit der rechten Maustaste auf diesen Schaden klicken und ihn zu einer Variablen befördern. Und nennen wir es einfach „beschädigter Schauspieler“. Jetzt können wir die Replikation so einstellen, dass sie repliziert wird. So kann der Kunde diesen Wert auch sehen. Und das müssen wir offensichtlich auch in dieses Ereignis hineinziehen , denn dieses wird irgendwann woanders anrufen. Jetzt haben wir dieses und ich möchte meinen schwebenden Text-Schauspieler an dem Ort spawnen meinen schwebenden Text-Schauspieler , an dem der Schauspieler beschädigt wurde. Also lasst uns diesen Schaden dem Schauspieler nehmen. Und eigentlich das, was wir tun wollen, lassen Sie es uns einfach erstellen, damit Sie es sehen können. Ich denke, es wird verwirrend sein, wenn ich hier anfange. Das, was wir tun wollen, ist diesen Schauspieler hervorgebracht, also hat der BP-schwebende Text hervorgebracht. Schwebende Texte. Also versuchen wir diesen schwebenden Text zu spawnen. Und hier unten müssen Sie auswählen, versuchen, den Standort anzupassen, aber immer spawnen, nur um sicherzustellen, dass er immer spawnt. Und für diese Spawn-Transformation müssen wir von hier aus fahren und sagen, dass wir transformieren. Jetzt brechen wir es auf, um sowohl den Standort als auch die Drehung und den Maßstab zu sehen . Und das ist es, was du versuchst zu tun. Wir versuchen jetzt, diesen schwebenden Text über dem beschädigten Schauspieler zu spawnen . Also versuchen wir, diesen beschädigten Schauspieler zu nehmen und sagen, dass wir den Standort der Schauspieler holen. Weil denken Sie daran, dass dies ein Schauspieler ist. also den Standort der Schauspieler bekommen, können wir es einfach so anschließen. Ich möchte es jedoch ein bisschen über den Schauspieler spawnen. Ich möchte es nicht mitten im Schauspieler spawnen. Also werde ich tatsächlich sagen, brechen und diesen Vektor brechen. Also kann ich das X, Y und Z. sehen Ich mache das Gleiche hier. Ich nehme das und sage make vector. Und jetzt ist das x dasselbe, das y ist dasselbe. Es ist nur das z. Also hier oben, wenn Sie möchten, dass der Text ein bisschen nach oben ist, ist es die Z-Achse. Also nehme ich diese Z-Achse und sage plus vielleicht 30 oder so ähnlich. Du musst das testen und dann steckst du es so ein. Das X ist also das gleiche, das y ist das gleiche. Und ich passe nur den Z-Wert so an, dass er etwas über dem Schauspieler liegt. Ziehen wir das hoch und organisieren wir das ein bisschen besser. Beantworten Sie jetzt diesen schwebenden Text an dieser Stelle, also ist die Drehung dieselbe, also sind Nullen 0 und der Maßstab ist hier gleich, wir müssen das nicht berühren. Jetzt können wir dies auf eine Variable bewerben und wir können es als schwebenden Text bezeichnen. Jetzt ist dies der Schauspieler, den wir spawnen, wenn wir den Feind treffen. Okay, also denken Sie von diesem Schauspieler daran, dass Sie diesen Multicast gemacht haben und jetzt haben Sie tatsächlich einen Hinweis auf diesen Schauspieler. Sie können von hier ziehen und schwebenden Text anzeigen und Text zum Laden anzeigen. Und es ist nicht von der Charakterbasis, es heißt hier oben nur Funktion. Und stellen Sie sicher, dass das Ziel Floating-Texte von BP sind, um sicherzustellen, dass es von hier kommt. Jetzt können Sie diesen Text tatsächlich aktualisieren. So sehr cool. Sie können dieses Ereignis aufrufen, es geht hier durch und dann können Sie diese schwebenden Texte tatsächlich aktualisieren. jedoch daran, dass ich Ihnen vorher gesagt habe , dass wir die Farben ändern werden. Wenn der Spieler uns zum Beispiel trifft oder der Spieler den Feind trifft, den Feind, oder er zeigt hier eine blaue Farbe an. Wenn der Feind uns jedoch trifft, zeigt er eine rote Farbe an. Wir können es also nicht vollständig so machen, weil wir eigentlich nicht wissen, ob dieser beschädigte Schauspieler ein Spieler ist oder nicht. Was Sie also tun können, können Sie entweder diesen beschädigten Schauspieler nehmen und sagen, dass Schauspieler Spieler markiert hat oder Schauspieler Feind markiert hat. Weil wir alle wissen, was Schauspieler ein Tag hat. Wir haben es schon mal benutzt. Ich denke jedoch später, wenn es ein echtes Spiel war, einen anderen Kurs vielleicht haben Sie jede Menge Karten, Tonnen von Schadenszeichen, und Sie brauchen tatsächlich mehr Variablen als nur Spieler und Feind. Sie können hier tatsächlich eine Aufzählung erstellen , die viel besser, viel dynamischer und dann viel einfacher für Sie ist. Also lasst uns das in der nächsten Lektion machen. 111. Schwebende Text: Für diese Aufzählung wir mit der rechten Maustaste und lassen Sie uns eine Blueprint-Aufzählung erstellen. Nennen wir es einen schwebenden Texttyp. Innerhalb dieser schwebenden Texttyp-Aufzählung, fügen wir zwei Dinge hinzu. Lassen Sie uns hier hinzufügen, nennen Sie es Ebenenschaden. Und nennen wir es hier unten, Feindschaden. Es kann also entweder Schichtschaden sein oder es kann feindliche Schäden sein. Jetzt können wir diese Aufzählung nehmen und hier zur Spielerbasis oder Charakterbasis zurückkehren . Und jetzt lass mich diese schwebenden Texte vorerst löschen. Bevor ich das jetzt aufrufe fügen wir es tatsächlich zu diesem Ereignis hinzu. Fügen wir diese Aufzählung hinzu. Und es hieß E schwebender Texttyp, der hier ausgewählt wurde. Und nenne es wieder den schwebenden Texttyp. Lassen Sie uns für diese Aufzählung ziehen und sagen wechseln. Denken Sie daran , dass wir das schon ein paar Mal benutzt haben. Schalten Sie nun die Aufzählung ein, damit wir überprüfen können, ob es sich um gegnerischen Schaden oder Spielerschaden handelt. Wenn es sich also um Spielerschaden handelt, denken Sie daran, dass er über den Feind spawnt wird , weil der Spieler Schaden hat, Sie haben den Feind beschädigt. Der Schaden wird über den Feind spawnen. Also nehme ich diesen beschädigten Schauspieler und wir können sagen bekomme feindliche Referenz, weil wir diesen Schauspieler jetzt bekommen wollen. Wir wollen es über den Feind spawnen. Jetzt. Du kannst es so machen. Und für die, für den feindlichen Schaden, kannst du versuchen zu überlegen, was wir tun können , und vielleicht hast du es schon erraten. Nehmen wir diesen beschädigten Schauspieler. Und jetzt sagen wir „Spielerreferenz abrufen weil wir sie dort spawnen wollen, wo der Spieler ist. Wenn der Feind dem Spieler also Schaden zufügt, wollen wir den Schaden über dem Spieler spawnen. Die Spieler referenzieren. Und von hier aus können wir diesen schwebenden Text jetzt nehmen und wieder ziehen und sagen, Text zum Laden anzeigen und diese Funktion aufrufen. Jetzt können wir es hier zusammenfassen. Kopieren wir es hier unten ein. Und du kannst es wieder zu den Zielen ziehen. Und ziehen wir es etwas nach unten, damit wir mehr Platz haben, mit dem wir arbeiten können . Einfach so. Und wenn Sie möchten, können Sie doppelklicken, um Knoten umzuleiten und ihn etwas schlanker aussehen zu lassen . So etwas. Okay, jetzt können wir diesen Text aktualisieren je nachdem, ob es sich um einen Spieler handelt oder nicht. Und lass mich das ziehen, damit ich tatsächlich sehen kann , was los ist. Und jetzt können wir das ziehen und die ganze Logik, die diese beiden aktualisieren wird , wird dazwischen liegen. Zunächst einmal wird es für den schwebenden Text die Höhe des Schadens sein. Das ist also der Schaden des Spielers. Wir müssen zeigen, wie viel Schaden der Spieler angerichtet hat. also daran, dass wir dies bereits haben, alle Schadensereignisse. Gehen wir also zum Feind, zur feindlichen Basis. Und innerhalb der feindlichen Basis haben wir dieses Schadensereignis bereits. Von diesem Schadensereignis wissen wir bereits, wie viel Schaden der Spieler angerichtet hat. Lasst uns also mit der rechten Maustaste auf diese klicken und zu einer Variablen aufsteigen, damit wir sie verwenden können. Und nennen wir es einfach Spielerschadenbeträge. Lassen Sie uns verbinden und denken Sie daran, es zu replizieren. So kann der Kunde diesen Wert auch sehen. Wir müssen das Gleiche später tun. Also lasst uns das Gleiche für den Spieler hier machen. Wenn der Feind dem Spieler also Schaden zufügt, müssen wir hier auch mit der rechten Maustaste klicken, um zu einer Variablen aufgestiegen zu werden, und nennen wir ihn feindliche Schadensbeträge. Okay, also fördern wir diejenigen, die variabel sind, weil wir sie tatsächlich verwenden wollen. Also repliziere diesen auch. Denken Sie daran, das zu tun. Gehen wir nun zurück zur Spielerbasis. Wie sehr hat der Spieler diesen Feind beschädigt? Dann können wir das dem Feind nehmen und Spielerschadenbeträge sagen. Und jetzt können wir es einfach hier verbinden und es wird deinen Float in einen Text umwandeln. Wir können das Gleiche hier unten tun. Wir können sagen, dass Feinde sie beschädigen. Und wir können es wieder einstecken. Und jetzt wird angezeigt wie viel Schaden der Feind dem Spieler zugefügt hat. Nun, was die Farbe der schwebenden Texte angeht, können Sie hier anklicken. Also mache ich es blau, wenn der Spieler den Feind trifft. Dies ist also der Blair-Schaden und er wird blau angezeigt. Also schiebe das da hoch und wähle einfach etwas Zufälliges. Und für die Sättigung schreibe ich tatsächlich 0,5. Ich will nicht, dass es zu blau ist. Klicken Sie also auf OK. Und dafür kannst du versuchen, das Gleiche zu tun. Also nur um eine rote Farbe zu wählen, vielleicht rosafarbener wie diese. Stellen Sie dann die Sättigung so auf 0,5 ein und klicken Sie auf OK. Also jetzt für das schwebende Symbol, also wenn der Spieler den Feind beschädigt, möchte ich das Schwert hier zeigen. Auf der Suche nach Wund können Sie dies jedoch für die Feinde wählen. Wenn der Feind den Spieler beschädigt, möchte ich nach diesem Los-Symbol suchen. Jetzt haben wir es also, es ist dynamisch hier. Okay, jetzt sind wir hier mit dieser Logik fertig. Das war eigentlich das schwerste. Jetzt haben wir diese volle Logik. Also müssen wir dieses Ereignis irgendwo anrufen. Und wir werden tatsächlich eine schwebende Textbibliotheksfunktion ausführen eine schwebende Textbibliotheksfunktion , da diese einfacher aufzurufen ist. Denken Sie daran, dass wir bereits etwas in dieser Bibliothek gemacht haben und diese Veranstaltung aufrufen müssen. Und es wird durch den Server gehen. Es wird diesen beschädigten Schauspieler brauchen. Diesmal ist der Schauspieler, den wir später einstecken werden. Und es wird diesen Schauspieler brauchen, den Ort nehmen, den schwebenden Textakteur über dem Feind oder dem Spieler spawnen , je nachdem, wer beschädigt wurde. Und wenn es ein verschwommenes Bild ist, müssen wir das auch später einstellen. Wenn es sich um einen Spielerschaden handelt, nimmt er den Feind und zeigt den Schadensbetrag des Spielers an. Und zeige diesen schwebenden Text auch durch den Multicast an. Und wenn der Schaden ein feindlicher Schaden ist, wird er die TSP-Ebene nehmen , weil dies der beschädigte Schauspieler ist, es sind die Feinde, die den Spieler beschädigen. Und es wird diesen feindlichen Schaden nehmen und es wird ihn in diesen Multicast werfen. Multicast wird hier laufen. Es wird diesen Widget-Blueprint benötigen und es wird aktualisiert. Gehen wir also zurück zu unseren Widget-Blueprints. Es wird hier zu diesem Ereignis gehen den Text, die Farbe und auch das Symbol des Textes aktualisieren . Und nachdem Sie diese Dinge aktualisiert haben, wird es warten, bis diese Animation beendet ist. Und dann wird es diesen Schauspieler zerstören weil wir ihn nicht weiter laichen wollen. Also wird das Spiel irgendwann verzögern weil Sie Ihre Schauspieler nicht entfernen. Jetzt ist all das fertig. Lass uns tatsächlich weitermachen und lass uns weitermachen und es tatsächlich beenden. Also hier ist die Veranstaltung, die wir nennen wollen. 112. Funktion der Textbibliothek: Okay, also sind wir fast fertig mit den schwebenden Texten. Also lass uns jetzt in die Bibliotheken gehen. Wir haben bereits einen gemacht und gehen zur Funktionsbibliothek. Und drinnen von hier, fügen wir eine neue Funktion und nennen wir sie jetzt schwebenden Text anzeigen. Und der Grund, warum ich es hier tatsächlich erstelle , ist, dass dieser schwebende Text, vielleicht brauchen wir ihn in vielen, vielen Schauspielern und ich möchte es nicht in jedem einzelnen Schauspieler schaffen. Auch hier ist es gut, eine Bibliothek zu verwenden, wenn Sie eine Funktion in vielen Akteuren, Blueprint-Akteuren, aufrufen möchten . Zeigen Sie also schwebende Texte an. Ich kann mir vorstellen, obwohl ich meinen Erwerb nicht erstellt habe, kann ich mir vorstellen, dass ich das in vielen Schauspielern verwenden werde und deshalb lese ich es hier drinnen. Der schwebende Text benötigt wiederum die Eingabe eines Akteurs, benötigt wiederum die Eingabe eines Akteurs da wir den beschädigten Akteur brauchen, den wir zuvor erstellt haben. Und wir brauchen den schwebenden Texttyp. Und das ist die Aufzählung. Wählen wir also zuerst die Akteurvariable aus. Und dann wählen wir die schwebenden Texte aus. Dieser ist der Typ des schwebenden Textes der Aufzählung. Von diesem beschädigten Schauspieler müssen wir das Event vom Spieler oder der Charakterbasis aus aufrufen . Wir müssen das nennen. Lassen Sie mich es tatsächlich in eine Blueprint-Interface-Funktion verwandeln . Gehen wir also zu den Schnittstellen und wir haben momentan keine. Also klicken wir mit der rechten Maustaste und Blueprint Interface. Nennen wir es jetzt Character Base. Und drinnen von hier nehmen wir an, wir müssen diesen namens „Gets Character Reference“ haben . Und hier wird hier eine Ausgabe der Zeichenbasis ausgewählt. Und nennen wir es Charakter, Kompilieren und Speichern. Und jetzt gehen wir zurück zur Charakterbasis, gehen Sie zu den Klasseneinstellungen und fügen Sie hier Ihr Blueprint-Interface hinzu, Zeichenbasis, Kompilieren und Speichern. Denken Sie daran, auch hier zu kompilieren , damit dies sonst nicht für Sie angezeigt wird. Also klicke hier drauf. Und dafür werden wir uns einfach selbst sagen. Also haben wir das jetzt ein paar Mal gemacht. Damit können wir jetzt eine Referenz bekommen. In der Bibliothek können wir dies also tatsächlich ziehen und dann verweisen statt Casting, wir können jetzt sagen, dass er Charakterreferenz erhält. Und von hier aus können wir diese Veranstaltung nennen. Gehen wir zurück und zeigen schwebenden Text an. Eigentlich brauchen wir dieses auch drin, und ich werde das löschen. Wir können es jetzt in diesem Blueprint-Interface tun , ich lösche es und nenne es Anzeigetext. So sparen Verbindungen hier und hier können wir nach Suche suchen. Wir können einen neuen namens Display, schwebender Text erstellen. Und bevor ich es fertig mache, sticht es manchmal raus. Lassen Sie mich also zuerst meine Eingaben hier erstellen. Schauspieler oder beschädigter Schauspieler, eher so beschädigter Schauspieler. Und der zweite war der schwebende Texttyp. Und lasst uns die Aufzählung finden. Und dann finde den beschädigten Schauspieler , der nur ein Schauspieler ist. Einfach so oben. Spielen Sie einfach schwebenden Text, genau so, Kompilieren und Speichern. Jetzt können Sie auf Zeichenbasis mit der rechten Maustaste klicken und schwebenden Text anzeigen, und Sie können ihn hier auswählen. Und jetzt ist es eine Blueprint Interface-Funktion. Du kannst sie verbinden. Dies jetzt in der Bibliothek können Sie diese Anzeige als schwebende Texte aufrufen. Okay? Alles klar, gut Von hier aus und sagen Sie schwebenden Text anzeigen. Und es ist eine Nachricht, weil es sich hier um ein Blueprint Interface Event handelt. So beschädigter Schauspieler, es ist nur dieser. Also klicke ich hier und mache einen Umleitungsknoten. Eigentlich keine Umleitung machen. Beachten Sie, dass es ein bisschen komisch aussieht. Also mach das einfach. Und für den schwebenden Text mache ich das einfach. Das ist einfach das , was es tun wird. Jetzt das Letzte, was wir jetzt nutzen können, wir sind tatsächlich fertig. Wir können diese Bibliotheksfunktion verwenden, um sie woanders aufzurufen. Also lass uns jetzt zum Feind gehen. Der Feind. Hier. Wenn der Feind beschädigt wird, wollen wir den Schauspieler über die Feinde spawnen. Wenn die Feinde beschädigt werden, können Sie jetzt sagen, dass Sie mit der rechten Maustaste klicken und sagen , wie Sie es in der Bibliothek genannt haben. Gehen Sie also in die Bibliothek und Sie nannten es schwebenden Text anzeigen. Sie können also mit der rechten Maustaste hier klicken und sagen, schwebenden Text anzeigen. Und Sie können sehen, dass es hier aus der Funktionsbibliothek ist, die schwebenden Text anzeigt. Jetzt musst du es hier verbinden und du musst angeben, was der beschädigte Akteur ist. Es ist Selbst, es ist der Feind. Und was ist der schwebende Text? Es ist, es ist tatsächlich Spielerschaden. Das ist also gerade richtig . Kopieren wir das hier. Gehen wir jetzt zurück zur Spielerbasis. Und für den Spieler, wenn der Spieler hier beschädigt wird , fügen wir ihn ein. Und wer ist der beschädigte Schauspieler? Es ist das Spieler-Selbst. Was ist die Art von Schaden, es ist NME-Schaden. Also jetzt wird es es tatsächlich spielen und ich zeige es dir. Klicken wir also vorerst auf Spielen und sehen, was passiert. Also werde ich hier tatsächlich als Server spielen, als Listenserver. Wie der Server. Jetzt können Sie sehen, wann ich beschädigt werde wird tatsächlich angezeigt, wenn ich den Feind treffe. Es wird diesen Schaden hier zeigen. So sehr cool. Wenn ich jedoch als Kunde spiele und hier getroffen werde, können Sie sehen, dass nichts angezeigt wird und darüber werden wir in der nächsten Lektion sprechen. Für diesen Kunden werde ich mir vorerst keine Sorgen machen. Aber für diesen Spieler sehen Sie hier die Clientschäden, die auf dem Server angezeigt werden. Aber wenn Sie zum Client gehen, zeigt es tatsächlich nichts auf dem Server an. Sie können sehen, dass es jetzt korrekt angezeigt wird. Und lass mich dir tatsächlich zeigen , was gerade passiert. Also Wendy, jetzt sind wir in den Spielern. Wenn der Spieler also beschädigt wird, rufen wir diese Funktion hier aus der Bibliothek auf. Wir geben also an, wer der beschädigte Schauspieler ist, es ist der Spieler selbst. Und das ist feindlicher Schaden , der passiert. Jetzt geht es in die Funktionsbibliothek, und es wird diese Anzeige fließende Texte aus der Zeichenbasis aufrufen . Charakter-Basis. Wenn Sie dieses Ereignis jetzt hier aufrufen den Server durchlaufen, wird der Server diese Variable festlegen und wir versuchen, diesen beschädigten Speicherort für Schauspieler zu finden, diesen Text am Standort der Schauspielerin antworten. Und wenn wir auf Text antworten, prüfen wir, ob es ein klarer Schaden ist oder ist es feindlicher Schaden? Wenn es ein Genussschaden ist? Wir werden das hier machen. Nennen Sie diesen Multicast aus dem Floating-Text des BP. Und wir setzen es je nachdem ob es sich um gegnerischen Schaden oder Spielerschaden handelt, die Farben und die Symbole. Dieses Ereignis stammt also aus dem schwebenden BP-Text, der hier ist. Jetzt wird es mit diesem Multicast fortgesetzt. Weitergabe an alle Spieler nimmt diesen Widget-Blueprint. Und dann wird es den schwebenden Text in diesem Widget durchgehen und aktualisieren, das hier drüben ist. Und jetzt zeigt dieses Widget an, Es wird für dieses Ereignis hier eingestellt. Es wird den Text und die Farbe des Textes festlegen und den Pinsel einstellen. Und danach wird es bis dahin warten, diese Animation hier, die wir gemacht haben. Es wird also warten, bis diese Animation fertig ist , bevor sie den Schauspieler zerstört. Denn wenn Sie das vorher tun, werden die Texte niemals angezeigt weil es sie schnell zerstört. Das passiert also. Sie können sehen, dass es viele Schritte sind, aber sobald Sie wirklich gut darin sind, ist dies eigentlich sehr einfach. Gehen Sie also durch die Funktionsbibliothek, gehen Sie durch die zeichenbasierte, zeichenbasierte, die den Server durchlaufen und den Multicast hier ausführen. Und nach dem Multicast aktualisierst du diesen Text hier. Okay, also sind wir mit dem Kampftext fertig. Und der Grund, warum der Kunde all dies nicht erhält , ist sehr einfach und es wird wahrscheinlich eine Minute dauern, um es zu erklären. Also lasst uns das in der nächsten Lektion machen. 113. Actor: Okay, warum ist das also? Der Kunde kann diesen Schaden hier nicht sehen. Wenn ich also beschädigt werde, sehe ich es als Server und beschädige den Feind. Ich kann es aber auch sehen, wenn ich der Kunde bin, also wenn ich den Kunden hier eröffne, also als Kunde, kann ich diesen Schaden hier tatsächlich nicht sehen. Warum ist das so? Und das liegt an der Replikation von Akteuren. Bisher haben wir diese Variablen repliziert und Ereignisse repliziert, aber wir haben keine Blueprint-Akteure repliziert. Gehen wir also zum schwebenden Text hier, Vp schwebender Text. Lassen Sie mich auf die Klassenvorgaben für diesen Floating-Text-Akteur klicken. Und Sie können auf diese namens Replikate klicken. Das ist es, was dir fehlt. Klicken Sie also hier und gehen Sie auch zu den schwebenden Texten, das Widget Während nach unten. Und Sie müssen auf diese Komponente klicken , die als Komponenten-Replikate bezeichnet wird. Denken Sie daran, dass wir im Multiplayer sind. Also klicke auf Play. Wenn Sie jetzt auf „Play als Client“ klicken, können Sie jetzt sehen, dass der Client es auch sehen kann. Und das war die einzige Änderung, die falsch war. Also nur diese beiden Häkchen. Und vielleicht fragst du gerade, warum haben wir das vorher nicht gemacht? Warum? Warum müssen wir es jetzt machen? Wie warum hat das alles funktioniert? Ohne dass wir hier klicken? Und das liegt daran, dass der Charakter, mit dem wir gearbeitet haben in Unreal Engine Five standardmäßig repliziert wird. Wenn Sie also auf diesen Player klicken, können Sie sehen, dass sie tatsächlich charakterbasiert sind. also auf die Zeichenbasis klicken, sehen Sie hier im Klassenstandard für die Zeichenbasis, diese Replikate ist bereits für Sie überprüft. Die Zeichen in Unreal Engine werden also standardmäßig repliziert. Und deshalb musstest du es nicht tun. Wenn du es entfernst, wirst du viele Bugs in deinem Spiel sehen. Dies wird jedoch standardmäßig geprüft. Und die Akteure werden standardmäßig nicht repliziert. Wenn Sie danach eine App erstellen, sollte jeder sehen, dass Sie sich daran erinnern müssen, sich zu replizieren. Zum Beispiel, wenn du Waffen erstellst. Wenn Sie zum Beispiel in einem 3D-Spiel oder in einem 2D-Spiel, wenn Ihre Feinde Waffen fallen lassen oder der Spieler Waffen an den anderen Spieler wickelt, muss dieser Waffenakteur sonst der Kunde repliziert werden sonst der Kunde repliziert kann diese heruntergelassene Waffe nicht sehen. also nach der Replikation, genau wie beim Replizieren, alle diese Variablen, die wir in den anderen Blueprints gemacht haben, daran, auch den Akteur zu replizieren. Wenn du ein Ganzes brauchst, werden die Spieler es sehen. 114. Bereinigen des Projekts: Jetzt, da wir mit dem Spiel fertig sind, lasst uns das Projekt bereinigen. Denken Sie also daran, meinen Abschnitt für zusätzliche Lektionen zu überprüfen. Ich werde diesen Kurs immer noch aktualisieren. Zum Beispiel füge ich ein Typenschild hinzu, um die Gegenstände fallen zu lassen, die Sie verlieren können, zum Beispiel Gesundheitstränke, Gesundheitsbalken über diesen Feinden. Wir werden auch Statistiken hinzufügen, damit wir mehr Kraft oder mehr Gesundheit und Updates erhalten und vielleicht das anfragende System suchen können. Also noch viel mehr Dinge, vielleicht sogar 200 Videos, die wir machen können, wenn wir nicht von hier aus angefangen haben. Dies sollte Ihnen jedoch eine gute Grundlage geben, wie einen 2D-Plattformer für mehrere Spieler erstellen können. Also haben wir gelernt, all dies zu erstellen, wie das Importieren der Assets und Anwenden von Papier auf diese Einstellungen. Erstellen von Papier-Flip-Büchern, Sprites, Akteuren und Importieren Sie sie auf die Ebene der Erstellung von Kachelkarten. Und wir haben ein Briefsystem und ein Angriffssystem und viele Dinge hinzugefügt , die wir in diesem Kurs lesen konnten. Und in der zusätzlichen Lektionen werde ich noch mehr Sachen hinzufügen. Auch hier, wie die Gesundheitsbars, das RPG-Statistiksystem, vielleicht ein Questingsystem. Also viele Dinge, die wir diesem Projekt noch hinzufügen können. Aber bevor wir zu Ende gegangen sind, lassen Sie mich das Projekt aufräumen weil ich es nicht gerne so belassen möchte. Also lasst uns zur Spielerbasis gehen, zum Beispiel können wir mit der Spielerbasis beginnen , lasst uns von hier anfangen. Für die Vermögenswerte müssen wir also nicht wirklich alles reinigen. Alles ist tatsächlich schon aufgeräumt. Und lasst uns zu dem Ton gehen , das auch gut ist. Gehen wir jetzt zu Blueprints, hier handelt es sich bei der Bereinigung hauptsächlich um Anzeigen. Fangen wir also mit dieser BP-Kamera an. Und dafür haben wir eigentlich nichts. Also lasst es uns schließen. Und die Charakterbasis, wir haben hier auch nicht viel. Schau einfach hier nach. Wenn, wenn alles geklärt ist und Ihnen gefällt, wie Sie Dinge gemacht haben oder hinzufügen müssen, haben Sie Knoten umgeschrieben. So bin ich zum Beispiel einfach nur Strukturen. Manchmal nehme ich einfach diese Umleitungsknoten und verschiebe sie. Denken Sie auch daran, alles auszuwählen und klicken Sie auf C, um Kommentare hinzuzufügen. Und du kannst diese schwebenden Texte zum Beispiel nennen , du kannst das viel besser machen als ich. Ich mache es einfach schnell für diesen Kurs, also dauert es einfach nicht ewig. Aber versuche hier einen langen Text zu schreiben , der erklärt, was du getan hast. Denn wenn Sie sechs Monate später zu diesem Projekt zurückkehren, können Sie sich nicht erinnern, was das ist. Also versuche zu schreiben, vielleicht schwebende Texte für den beschädigten Schauspieler und bla, bla, bla, was auch immer. Sie können sehen, dass Sie hier viel Platz haben. Wenn Sie möchten, können Sie die Kommentarfarbe erneut ändern. Sie können die Größe dieses Textes ändern damit Sie ihn vergrößern können, wenn Sie kompilieren und speichern möchten . Und jetzt kannst du zum schwebenden Text gehen. Hier. Ich glaube, alles sieht gut aus. Und ich lasse es einfach so sein wie dieses Jahr. Sie werden gemäht werden Region hier wirklich viel tun. Und im Player-Controller kann man das tatsächlich ein wenig bereinigen , weil wir nichts hatten oder wir nichts kommentiert haben. Hier können wir dies zum Beispiel auswählen und Widgets initialisieren. Normalerweise mache ich auch hier weiter und sage start play, denn dann weiß ich wo mein Anfangsspiel ist. Wenn ich viel Code habe, initialisiert Xia Lai Widgets. Okay, also haben wir die jetzt unten. Jetzt. Nehmen wir das an. Jetzt wählen wir hier den Charakter aus, und diese sind zusammen. Nehmen wir also all das und ich nenne eine Auswahl und Laichen des geschichteten Charakters. Einfach so. Und wir können hier runter gehen, das aktualisiert die Health Bar und die Erfahrung. Und lassen Sie mich das einfach auswählen und sagen, dass Sie die Gesundheit und die erfahrenen Bars aktualisieren . Wenn du willst, sieht das eigentlich gut aus, aber wenn du willst, kannst du das manchmal immer ziehen und stattdessen hier auf die Seite legen. Wir haben es also kompakter zusammen, aber ich glaube nicht, dass das zusammenpasst. ein Laichen auswähle, möchte ich einfach Dinge zusammenfügen, die hier an den Seiten zusammenpassen. Also ziehe ich es einfach wieder hier runter. Wenn Sie es jetzt noch einmal möchten, können Sie auf die Variablen klicken und ihnen eine Kategorie geben , wenn ich sie hier finde. Dieses können Sie also Widget aufrufen, zum Beispiel Widget, Blueprint oder ähnliches. Also nur eine Kategorie und das Gleiche hier machen, Widget Blueprint und sie werden hier drüben in sich allein gestellt sein. Versuchen Sie das also mit all Ihren Projekten zu tun. Zum Beispiel ist die größte wahrscheinlich die Spielerbasis. Ich werde das alleine aufräumen. Also werde ich wirklich nichts hinzufügen. Ich werde einfach Dinge schleppen. zum Beispiel hier klicke, auf Nicht verbundene Pins ausblenden klicke und dann einen Blick hier werfe, und vielleicht bin ich damit unzufrieden, ziehe ich das nach unten. Versuchen Sie also, Ihr Projekt so gut wie möglich aufzuräumen. Versuche alles zu kommentieren und setze sie dort zusammen, wo sie passen. Denn im Moment sieht man, dass es ein bisschen durcheinander ist. Also musst du alles kommentieren. Und in der nächsten Lektion zeige ich Ihnen wirklich sehr nützliche Ressourcen, die ich für mein eigenes persönliches Projekt verwende. 115. Nützliche Ressourcen: In dieser Lektion zeige ich Ihnen einige der nützlichen Ressourcen, die ich für meine persönlichen Projekte verwende. Ich habe das gerade zum Spaß erstellt. Dieses Projekt hat hier erstellt. Oder du kannst Gegenstände plündern und du kannst ein Inventarsystem haben. Viele Dinge , die Sie tun können, haben Sie ein Nivelliersystem wie wir. Und du hast Münzen und du kannst hier zum Shop gehen. Und innerhalb der Scharfe kann man tatsächlich Sachen kaufen. Für dieses Projekt können Sie also für diesen Code sehen, dass ich die gleichen Methoden verwende. Wenn ich also zum Spieler, der Spielerbasis gehe, zeige ich dir tatsächlich meine Spielerbasis. Dies ist also die bisherige Spielerbasis für dieses Spiel. Und ich zeige Ihnen nur Ressourcen, die Ihnen beim Programmieren tatsächlich helfen werden. Wir können also sehen, dass die Zeilen so sind. Ich mochte diese Zeilen tatsächlich viel besser als hier in unserem Projekt, wo wir diese kurvigen Linien haben. Ich benutze dieses Plug-In tatsächlich gerne, wo die Leitungen robotisch werden oder wo auch immer es heißt, so. Sie können es auf dem Marktplatz finden. also auf den Marktplatz gehen und hier drinnen sind, können Sie nach elektronischen Notizen suchen. Ich glaube, es nennt sich elektronische Notizen. Und mal sehen, ob wir es hier finden können. Vielleicht habe ich gerade nach elektronischen Notizen gesucht. Und das ist eigentlich der Richtige. Wenn Sie also auf diese elektronischen Notizen klicken, verwende ich tatsächlich und Sie können sehen, dass viele Schüler tatsächlich eine Zwei benutzen. Dies ist der eine und Sie können sehen, dass Sie verschiedene Stile für Ihre Blueprints auswählen können . Sie haben also verschiedene Stile. Sie können tatsächlich dunklere Noten haben, wenn Sie möchten. Aber das ist die, die ich verwende und es macht meine Leitungen hier elektronisch. Und ich denke, das ist viel einfacher zu sortieren. Also denke ich, dass dies alles ein bisschen besser aussehen lässt, eigentlich einfacher anzusehen ist. Und Sie können hier sehen, dass ich nicht einmal Umleitungsknoten erstellen muss . Dies wird es automatisch für mich in unserem Projekt tun, aber die normalen kurvigen Linien, ich muss dafür Umleitungsnotizen erstellen. Aber ich muss dafür keine Umleitungsnotizen erstellen , da Sie sehen können, wenn ich ziehe, dass es das automatisch für mich erledigt. So sehr coole Assets, die Sie auf dem Marktplatz verwenden können. Sehr coole Sachen, die sie gemacht haben. Also benutze ich das. Die zweite Sache ist die, die ich verwende, ist diese namens, Mal sehen, oder es sind Kommentare zur automatischen Größe. Diese Kommentare zur automatischen Größe sind also auch sehr cool zu verwenden. Es wird automatisch die Kommentare zu den Notizen formatiert, die Sie haben. So kannst du hier sehen, dass ich diese Knoten hier habe, und wenn ich etwas ziehe, kannst du es alle Größen sehen. Mein Kommentar hängt davon ab , wohin ich das ziehe. Und wenn ich zum Beispiel etwas mache , kann ich hier eine Zeichenfolge ausdrucken. Sie können sehen, dass es es automatisch in den Kommentar einschließt. Also sehr cooles Zeug. Und das ist auch so, als könntest du die Kommentare anpassen. Wenn ich hier etwas schreibe, schreiben wir ein paar Prints Strings in dieses Projekt. Und wenn ich auf „Sehen“ klicke, habe ich es jetzt angepasst. Wenn ich also klicke und sehe, sieht man, dass es oben und unten und an den Seiten viel mehr Platz hat . Das habe ich tatsächlich manuell gemacht. Und der Kommentar ist in der Mitte geschrieben. Und auch ich passe die Größe automatisch auf 28 an, so. Du siehst also sehr cool. Und auch für die übliche Farbe können Sie automatisch auswählen, welche Farben. Also verwende ich zum Beispiel für dieses Projekt Blau, wenn es clientseitig ist, ich verwende Rot, wenn es durch den Server läuft und bezahlt, wenn es sowohl den Server als auch die Clients läuft , für Beispiel ein Multicast. So können Sie hier beispielsweise sehen, auch ein durch den Client läuft und durch den Server läuft. Es wird rot sein und wieder durch den Kunden werfen, es wird durch den blauen hier sein. Also alle Seiten Kommentare, sehr cool auch für Ihr Projekt zu verwenden, nur um es organisierter zu gestalten. Und ja, ich benutze nicht wirklich viel mehr. Normalerweise benutze ich einfach diese beiden. Sie können auch den automatischen Note-Arranger verwenden. Ich denke, es war ein bisschen so, als hätte es mir nicht gefallen, also benutze ich es eigentlich nicht. Aber viele Leute, die ich denke , benutzen es auch, eigentlich nicht viel, eigentlich ein paar von ihnen. Aber ich denke, es hat meine Notizen und Nüsse so arrangiert , wie ich wollte, das benutze ich eigentlich nicht. Und das Letzte, obwohl dies ein 2D-Kurs ist, das Letzte, was ich dir hier zeigen möchte , ultradynamischer Himmel. Wenn Sie also vorhaben, ein 3D-Spiel zu erstellen, ist dieses ein Lebensretter und Sie können sehen, dass viele Leute es tatsächlich verwenden und es wird dynamische Jungs für Ihr Projekt schaffen . Auch hier können Sie meine Seite, meine Kurse, ich mache auch 3D-Projekte, 3D-Kurse und die Blaupausen, die Sie hier in 2D verwendet haben, überprüfen. Das Gute daran, 2D-Spiele in Unreal Engine zu erstellen , ist, dass Sie jetzt viel besser in der Verwendung von Blueprints sind als zuvor. Nun, diese Methoden die Sie hier in einem 2D-Spiel gelernt haben, können Sie sie auch innerhalb eines 3D-Spiels verwenden . Obwohl all diese Blaupausen jetzt in einem 2D-Spiel gemacht werden, ist es in einem 3D-Spiel nicht wirklich anders. Jetzt, da Sie Ihre Übung in diesem 2D-Kurs hatten, können Sie das Gelernte auch in unseren 3D-Kursen verwenden . Das ist also das Gute an Verwendung von Unreal Engine und Blueprints. Der gesamte Code wird natürlich verschwenden, wenn Sie plötzlich zu 3D-Spielen wechseln möchten, da eine Zeitleiste eine Zeitleiste ist und für dasselbe in 3D sowie für benutzerdefinierte Ereignisse verwendet wird sowie für benutzerdefinierte Ereignisse und bekomme den Standort der Schauspielerin. müssen wir auch in 3D machen. Das alles ist also in einem 3D-Spiel gleich. 116. Zukünftige Course: Jetzt sind wir mit dem Kurs fertig. Ich hoffe, du hattest viel Spaß. Ich hatte viel Spaß beim Erstellen dieses zu erstellen. Wenn Sie diesen Kurs selbst verlängern möchten weitere Feinde hinzufügen möchten, können Sie diese Website besuchen. Hier habe ich es hergeholt. Maple stand IN und du kannst hier einfach mehr Monster erschaffen. Du kannst Mobs erstellen, Pfade und Charaktere erstellen und es kann tatsächlich mehr Monster erschaffen. Sie können also sehen, dass wir diese Tiere hinzugefügt haben und jetzt haben wir es so dynamisch gemacht , dass Sie tatsächlich einfach zum Feind gehen und mit der rechten Maustaste klicken und einen neuen Feind erschaffen können. Und es wird automatisch hinzugefügt. Denken Sie daran, hier auf den Feind und auch das Tierintervall zu klicken , alle Animationen, die Gesundheit den Namen und die Erfahrung und so weiter. Und denken Sie auch daran, natürlich einen Drag hinzuzufügen und den Feind zu diesem Level hinzuzufügen. Obwohl wir mit diesem Kurs fertig sind, werde ich zukünftige Updates für diesen Kurs vornehmen. Ich werde noch viel mehr Dinge hinzufügen, viele RPGs Dinge. Zum Beispiel werden wir hinzufügen Health Bar besagt, dass das System, vielleicht auch ein Skill-System. Wir werden ein Questsystem hinzufügen. Also viele andere Systeme , die wir diesem Spiel noch hinzufügen können. Also werde ich diesen Kurs weiter aktualisieren. Und wenn Sie sich erinnern möchten, können Sie hier auf meine Seite gehen und einen Blick auf meine anderen Kurse werfen. Ich versuche jeden Monat oder alle anderthalb Monate einen zu veröffentlichen . Werfen Sie einen Blick auf meine anderen Kurse. Und denken Sie daran, Sie können immer zu meinem Discord gehen und mir schreiben, wenn Sie einen Kurs wünschen , den Sie sehen möchten, oder wenn Sie Hilfe bei diesem Kurs oder anderen Kursen benötigen , können Sie zu meinem Diskurs und wir können uns unterhalten oder Sie können mit all den anderen Leuten schreiben mit all den anderen Leuten , die tatsächlich an diesem Kurs teilnehmen. Sie können mit ihnen auf den Discord-Servern schreiben. Also eine sehr nette Community, die wir da drin haben. Denken Sie auch daran, dass ich einen YouTube-Kanal habe, sodass Sie auch zu meinem YouTube-Kanal gehen können, wenn Sie drei Videos zu diesem Thema ansehen möchten . Also bin ich auch sehr aktiv. Sie fügen häufig Videos hinzu, gehen Sie also auch zu meinem YouTube und sehen Sie, ob es etwas gibt, das Ihre Interessen wecken wird. Also mit dem Gesagten, danke für alles. Danke, dass du mich unterstützt hast und ich hoffe, du hattest viel Spaß und wir sehen uns im nächsten Kurs.