Unreal Engine 5 Blueprints: Schritt-für-Schritt-Entwicklung von Space Shooter Spielen | 3D Tudor | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


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

Unreal Engine 5 Blueprints: Schritt-für-Schritt-Entwicklung von Space Shooter Spielen

teacher avatar 3D Tudor, The 3D Tutor

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.

      Unreal Engine 5 Blueprints Schritt für Schritt Entwicklung von Space Shooter Spielen

      4:02

    • 2.

      Einführung in die UE5-Entwicklung und das Ressourcen-Pack

      9:00

    • 3.

      Spielmodus und UI-Design

      16:05

    • 4.

      Hauptmenü-Funktionalität

      9:45

    • 5.

      Grundlagen des Player Blueprints

      15:05

    • 6.

      Kameramechanik und Steuerung

      10:08

    • 7.

      Übersicht über die Charakterbewegung

      11:17

    • 8.

      Entwicklung von Bewegungsfunktionen

      18:20

    • 9.

      Bewegung mit Partikelspuren visualisieren

      7:58

    • 10.

      Schiffsanimation und Steuerung

      13:53

    • 11.

      Einführung des Ausdauersystems

      14:11

    • 12.

      Sprint-Mechanik implementieren

      21:14

    • 13.

      Sprint-System und Ausdauermanagement

      14:42

    • 14.

      Sprint-System fertigstellen

      7:58

    • 15.

      Grundlagen des Zielens und des Schießsystems

      9:15

    • 16.

      Entwicklung des Schießmechanismus

      12:34

    • 17.

      Targeting und Fadenkreuz verbessern

      10:11

    • 18.

      Aufbau der Grundlage für das Shooting System

      12:57

    • 19.

      Das Aufnahmesystem abschließen

      17:04

    • 20.

      Gegnerkomponenten und Schadensystem

      14:51

    • 21.

      Schadfähige Komponenten und Spielergesundheit

      13:57

    • 22.

      Enemy Blueprint-Architektur

      14:00

    • 23.

      Design und Bewegung von First Enemy

      11:03

    • 24.

      Allgemeine Feindfunktionen

      11:16

    • 25.

      Shooter-Feind-Entwicklung

      17:52

    • 26.

      Feindliche Schießmechanik

      23:13

    • 27.

      Feindliche Spawning-Mechanik

      14:58

    • 28.

      Score und feindlichen Tod implementieren

      9:30

    • 29.

      Einführung des Raketensystems

      13:02

    • 30.

      Flugkörper-Mechanik Homing

      14:09

    • 31.

      Missile- und Spielerintegration abschließen

      10:06

    • 32.

      Missile-UI und Upgrade-System

      9:25

    • 33.

      Game Over UI und Animation

      12:48

    • 34.

      High Score System und Einsparungen

      17:21

    • 35.

      Feinschliff und Fehlerkorrektur

      10:00

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

117

Teilnehmer:innen

--

Projekt

Über diesen Kurs

Hier klicken für [Resource Pack]

Starte eine transformative Spielentwicklung mit 'Unreal Engine 5 Blueprints: Schritt-für-Schritt-Space-Shooter-Spielentwicklung'!

Tauche ein in die spannende Welt der Spieleentwicklung mit „Unreal Engine 5 Blueprints: Step-by-Step Space Shooter Game Development“, einem erstklassigen Skillshare-Kurs, der sowohl für aufstrebende Entwickler als auch für erfahrene Veteranen gedacht ist.

Dieser Kurs wird von Markos geleitet, einem Experten mit einer Fülle an Erfahrung in der Programmierung und dem Spieldesign, der dich nicht nur aufklären sondern auch stärken wird. Mit der leistungsstarken Unreal Engine 5 werden deine Träume in der Spieleentwicklung wahr werden.

Kurs-Übersicht

Dieser Kurs entmystifiziert den Prozess der Spielerstellung und bietet einen klaren, schrittweisen Weg von der ersten Idee bis zum vollständig realisierten Spiel. Es ist perfekt für alle, die neu in der Spieleentwicklung sind oder ihre Fähigkeiten mit Unreal Engine 5 verbessern möchten. Du erstellst ein fesselndes Weltraum-Shooter-Spiel, das dynamisches Gameplay mit überzeugendem Storytelling kombiniert.

Was 'Unreal Engine 5 Blueprints: Schritt-für-Schritt-Space-Shooter-Spieleentwicklung' auszeichnet:

  • Exklusives, umfassendes Ressourcenpaket: Starte deine Spieleentwicklung mit einem Ressourcenpaket, das alles enthält, vom spielbaren Raumlevel bis hin zu einzigartigen Schiffen, was ein immersives Spielerlebnis schafft.

  • Anfängerfreundlicher Ansatz: Beginne mit den Grundlagen des Blueprint-Systems der Unreal Engine 5 und erledige schrittweise komplexere Entwicklungstechniken, um eine solide Grundlage für deine Spieleentwicklung zu schaffen.

  • 3D-Player-Mechanik im Weltraum: Hier lernst du mehr über dynamische Kamerabewegungen, intuitive Steuerung, robuste Bewegungen, umfassende Aufnahmesysteme und die Integration von Partikeleffekten für ein fesselndes Gameplay.

  • UI-Design und Implementierung: Erstelle eine einzigartige Benutzeroberfläche, die die Spielerinteraktion durch Gesundheits- und Ausdaueranzeigen, Bewertungssysteme und Speicherfunktionen, einschließlich Startmenü und Game-Over-Sequenzen, verbessert.

  • Debugging und Optimierung: Über das grundlegende Programmieren hinaus gibt es Lektionen zum Debuggen, zur Leistungsoptimierung und zum letzten Schliff, um dein Spiel zu verfeinern, wichtige Fähigkeiten für jeden aufstrebenden Spieleentwickler.

  • Intelligentes Raumschiff KI für Feinde: Erstelle ein immersives Gameplay mit intelligenter KI für Feinde, einschließlich eines übergeordneten Blueprint-Systems für die Entwicklung eines einzigartigen Feindesverhaltens.

Was du erhältst:

  • Zugriff auf ein umfangreiches Ressourcenpaket, um dein Projekt zu starten.
  • Führung durch einen strukturierten Lernpfad von den Grundlagen der Unreal Engine 5 bis hin zu fortgeschrittenen Spielmechaniken.
  • Fähigkeiten in der Animation von Raumschiffen, der Entwicklung von Schießsystemen und der Integration eines Scoring-Systems für verbessertes Gameplay.
  • Fortgeschrittene Techniken für das Hinzufügen anspruchsvoller Funktionen und das Erstellen einer ausgefeilten Game-Over-Sequenz.

Dein Lernpfad:

  • Angefangen mit der Architektur der Unreal Engine 5 bis hin zum Einrichten deines Spielmodus und deines Player-Spawn-Systems.
  • Fortschritte in der Spielmechanik, die Spielerinteraktion verbessern und deinem Raumschiff und deinen Feinden Leben einhauchen.
  • Eintauchen in das Debugging, die Leistungsoptimierung und den letzten Schliff, um dein Spiel von der Masse abzuheben.

 Für wen ist dieser Kurs?

"Unreal Engine 5 Blueprints: Schritt-für-Schritt-Space-Shooter-Spielentwicklung" freut sich über jeden, der sich mit Spieleentwicklung beschäftigt. Egal, ob du ein Anfänger bist, der sich in die Spieleentwicklung eintauchen möchte oder ein erfahrener Entwickler, der deine Kenntnisse mit Unreal Engine 5 verfeinern möchte, dieser Kurs bietet dir wertvolle Einblicke und praktische Erfahrungen.

Beginne diese aufregende Reise und verwandle deine kreativen Ideen noch heute in ein vollständig realisiertes Weltraum-Shooter-Spiel!

 

Weiter Blueprinting, alle und wir sehen uns im Kurs!

Markos

 

Triff deine:n Kursleiter:in

Teacher Profile Image

3D Tudor

The 3D Tutor

Top Teacher

Hello, I'm Neil, the creator behind 3D Tudor. As a one-man tutoring enterprise, I pride myself on delivering courses with clear, step-by-step instructions that will take your 3D modeling and animation skills to the next level.

At 3D Tudor, our mission is to provide accessible, hands-on learning experiences for both professionals and hobbyists in 3D modeling and game development. Our courses focus on practical, industry-standard techniques, empowering creators to enhance their skills and build impressive portfolios. From crafting detailed environments to mastering essential tools, we aim to help you streamline your workflow and achieve professional-quality results.

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