Rotation eines Turrets am bewegten Objekt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rotation eines Turrets am bewegten Objekt

    Hallo,

    ich habe ein kleines Problem vor dem ich gerade hänge.
    Es geht un die Rotation eines Turrets zum Mauszeiger.

    Ich komme gerade nicht an die BP´s dran daher habe ich aktuell keine Bilder zum Turret und dem Blueprint.
    Ich versuche mein Problem so gut es geht zu erklären, wenn das nicht klappt reiche ich heute Abend Bilder nach.

    Hier mal die Details.

    Der Turret ist an einem leeren Mesh (welches als Nullposition verwende) an dem Raumschiff angebracht
    Das Turret BP ist also auf den Turret_Sockel des Raumschiffes angebracht
    Der Turret selber ist ein Blueprint welches aus 4 Teilen besteht
    Die 4 Teile des Turrets Bestehen aus der Turret_Base welche sich links/rechts bewegen soll und der Turret_Waffe welche sich hoch/runter bewegen soll, beide Teile haben ebenfalls ein leeres Nullposition Mesh als Parent.


    So nun habe ich versucht von dem Turret_Sockel zum Mauszeiger (Per Convert Mouse Location to World Space) die LookAt Roatation zu bestimmen, was auch zu stimmen scheint.
    Die daraus entstehende Rotation Breche ich auf und gebe nur die Z Position (also links/rechts) weiter.
    Diese übergebe ich dann an die Turret_Base als WorldRotation.

    Wenn ich das nun so mache, dann bewegt sich der Turret wirklich nach links und rechts je nachdem wo mein Mauszeiger steht.
    Jedoch drehen sich die restlichen Achsen nicht mit wenn sich mein Raumschiff dreht.

    Daher dachte ich, das ich nun einfach die X und Y Rotation des Turret_Sockels nehmen kann denn der dreht sich ja mit dem Schiff mit.
    Also habe ich diese beim Make Rotator drauf gelegt.

    Zunächst sieht das Ergebnis gut aus, doch dann bemerkt man das der Turret ein wenig rumeiert und in schräglage kommt.
    Zudem flipt der Turret auch wenn man einem Looping macht.

    Habe gestern abend wirklich alle möglichen verschiedenen Kombinationen getestet denn eigentlich sollte es logisch sein wie sowas funktioniert.

    Ist es wohl nicht, oder ich stehe auf der Leitung.

    Kennt jemand das Problem und hat unter Umständen eine Lösung ?
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Mit dem Socket macht du das schon grundsätzlich richtig - dafür ist ein Socket ja gedacht.

    Meine Vermutung ist daß es an World/Space/Look At liegt.

    Wenn du mit einem Raumschiff einen Looping fliegst dann drehst du es ja de facto um. Sprich wenn es auf dem Kopf steht dann sind ja gegebenenfalls XYZ sozusagen "vertauscht" denn die beziehen sich nicht (!!!) auf deinen Raumgleiter sonder auf einen festen (!!!) Punkt im Raum der sich nie bewegt. Von daher - ja wenn das Raumschiff ganz gerade steht und sich nicht bewegt dann klappt dein "beweg dich auf der Z Achse" wunderbar. Jetzt kipp das Raumschiff nach links oder rechts und schon ist die "Z-Achse" gar nicht mehr was du dir vorstellst.


    Also ich denke du musst die absolute Position des Raumschiffs "Normalisieren" - sprich deine Turret Bewegungen umrechnen auf die "Neigung" des Raumschiffs. Ich habe jetzt keine Lösung in der Tache die ich hier so auf dem Tisch knallen könnte weil ich sowas selber noch nie gemacht habe. Müsste man ein wenig tüfteln, aber letztlich ist sowas ja immer nur mathematik.
  • Danke erst mal Kyodai.
    Irgendwie glaube ich nicht das es wirklich so ist wie du sagst.

    Ich nehme ja immer die aktuelle Position des Sockels und erzeuge immer wieder eine neue LookAt von diesem Sockel zur Maus.
    Somit müsste ich eigentlich auch immer die passende Ausrichtung zur aktuellen Position haben.

    Dachte ich bisher .....


    Ich wollte grad mal diese Funktion nachbauen und dabei habe ich noch mal jeden Wert mit Markierungen versehen um zu schauen ob auch alles passt.
    Dabei habe ich bemerkt das der Fehler schon sehr früh entsteht.

    Dies passiert schon bei dem Vorhaltewert.

    Also wenn ich die Mauspos auslese und 1000 Einheiten nach vorne setze.
    Dann habe ich aber gemerkt das es irgendwie auch die gleichen Probleme gibt wenn ich diesen Punkt vom Sockel aus nach vorne schiebe.

    Ich habe mir ein Arrow zur anzeige gesetzt. Dann diesesn auf die World Position des Sockels gelegt per Set World Location.
    Das funktioniert.

    Wenn ich jetzt den Forward Vector ermittel und denn diesen wert multipliziere .. dann hängt der Arrow unter dem Schiff und wenn ich fliege dann bleibt der Arrow sogar stehen.

    Spätestens jetzt zweifel ich an meinem Verstand
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Habe nun weitere Tests hinter mir.

    Habe jetzt Linetrace Tests gemacht.

    Wenn ich das Model bewege bleibt der LineTrace immer vorne egal wie der Parent ausgerichtet ist.
    Irgendwie habe ich das Gefühl das ich schon zu viel getestet habe und nun grundlegende Sachen übersehe.
    Bilder
    • Test_1.jpg

      265,83 kB, 1.046×1.076, 24 mal angesehen
    • Test_2.jpg

      241,14 kB, 929×1.080, 20 mal angesehen
    • Test_3.jpg

      438,71 kB, 1.452×1.080, 25 mal angesehen
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Dein Torret. so nehme ich an, ist das Objekt am roten Pfeil ?

    Darf sich das Turret drehen wie auf eine Kugel oder nur in der Y Achse ?
    Dann sollten diese Achsen gesperrt sein.. Es richtet sich sonst zur WorldPosition aus... und fängt beim Kopfflug das Flippen an....
    Ich habe das bei meinem Hellcat-Flieger gehabt als ich Wings of Fury nachbauen wollte...



    Da Video behandelt zwar einen Panzer,... aber der fährt auch Schräg am Hang lang usw und das Turret dreht sich nicht weg..
    evtl. findest du hier einen Lösungsansatz !

    Gruß Olli
    Genau so, nur anders....

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Aragom ()

  • Leider Nein leider gar nicht.

    Zunächst meinte ich schon Turret nicht Torret, das soll der Geschützturm sein.
    Der Turret ist nicht der Pfeil sondern die weiße Pyramide unten ist die Basis die sich links rechts dreht und oben das Geschützrohr das beim roten Pfeil endet. Der Pfeil selbst war nur dazu da mir Positionen der Funktionen anzuzeigen.

    Das Video (danke dafür) hilft mir leider überhaupt nicht, da dort die Richtung durch die Mausbewegung vorgegeben wird, bei mir soll der Turm auf die Mausposition auf dem Bildschirm zeigen.
    Sowas habe ich bereits gemacht in meinem Projekt AIHTO falls du dich daran erinnern kannst, jedoch war dort die Logik eine andere.

    Bei AIHTO habe ich die Position von Objekten durch ein LineTrace unter der Maus raus gesucht und der Mech konnte sich auch nicht 360° bewegen.
    Jetzt sind also die Rahmenbedingungen ganz anders und die Probleme die aktuell entstehen kann ich 0 nachvollziehen.

    Das reicht von Objekten die sich auf einmal aus der Hirachie ausklinken bei einer Positionsangabe, bishin zu Linetraces die einfach Stumpf gerade aus gehen egal was man vorgibt.

    Aktuell bin ich echt ratlos, besonders weil es nicht einmal zu klappen scheint einen Linetrace 1000 Einheiten nach vorne zu schießen aus der Sicht des Turrets.

    Schon komisch aktuell, so blind kann ich doch nicht sein .....denke ich




    EDIT:
    Naja der Trace funktioniert schon mal wieder..... mal sehen vielleicht gehts ja jetzt voran
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • mmhh das ist echt komisch....
    aber du bekommst das hin ! dafür kennt man dich ^^

    Kann das Problem an der Ausrichtung des Mauszeigers liegen ? Der geht ja screentechnisch nicht in die Tiefe ?
    Wenn du jetzt dein Objekt samt Turret drehts schnallt er es evtl. nicht ? Aber eigentlich alles für dich ja klar... du denkst ja immer
    schon in jede Richtung :)

    Gruß Olli
    Genau so, nur anders....
  • Servus.

    Mal eine blöde Frage zu Bild3 in Deinem Beitrag #4:

    Für mich sieht das so aus (ohne verstanden zu haben, was im Kommentierten Bereich "Turret Sockel" genau passiert), als würdest Du vom 0-Punkt des "Arrow Sockel" zum "Turret Sockel" einen Linetrace zeichnen wollen, allerdings holst Du Dir dann vom Turret Sockel die Rotation und davon dann den Vorward Vektor und addierst den warum auch immer mit 500. Mich würde an der Stelle interessieren, was mit der Addition bezweckt werden soll.

    Grundsätzlich kannst Du einen Linetrace zwischen 2 Punkten zeichnen lassen, das ist kein Problem.
    Du hast in Beitrag #6 geschrieben, dass Du einen Linetrace von 1000 Einheiten Länge nach vorne aus Deiner Kanone haben willst. Kriegen wir hin.

    Als erstes brauchen wir den Anfangspunkt für den Linetrace. Das ist z.B. der Nullpunkt des Koordinatensystems Deines Kanonenrohrs.
    Dann brauchen wir entweder den Endpunkt, den wir entweder direkt oder über einen Richtungsvektor (z.B. Forward Vektor) mit bestimmter Länge angeben. Da Du überall hinschießen willst nehmen wir letzteres.
    Das bedeutet wir definieren den Endpunkt des Linetrace über den Anfangspunkt (den wir kennen) und die Richtung samt Entfernung (die wir auch kennen bzw. festlegen).

    Das sieht dann so aus (Statt Capsule Component muss bei Dir dann das Kanonenrohr rein):






    Zu Deinen anderen Problemen kann ich Dir leider nichts sagen, ich habe sie nicht wirklich erstanden.
  • Erst einmal danke an alle für eure Antworten :)

    ja dieses Gebilde da oben , das vergesst mal lieber wieder ;) Das habe ich nur fix zusammen gestellt weil ich mein Original nicht zur Hand hatte, vielleicht eine dumme Idee von mir, da ich dort wohl noch mehr Fehler eingebaut hatte als sowieso schon drin waren.

    Ich würde sagen ich zeige noch einmal die aktuellen Bilder, diese funktionieren zwar ebenfalls nicht aber so haben wir wenigstens den richtigen aktuellen Stand.
    Jetzt wo ich auch die richtigen Bilder zeigen kann, kann ich vielleicht auch genauer auf die Problematik eingehen und erklären was wohin gehört.

    Ok kurz zur Info :

    Bild Spaceship
    Auf dem Bild seht ihr das Spaceship, die Hull ist sozusagen das Model
    Spacedust kann man vergessen das ist nur ein Partikeleffekt
    Die Hull und der Turret Socket liegen beide als Child auf der NullPosition.
    Die NullPosition ist nur für gerade Achsen da, da das Hull Objekt verdrehte Achsen hat.
    Der Turret_Socket ist auch einfach ein leeres Objekt für das Blueprint, auch hier sind die geraden Achsen der Grund. (Eigentlich könnte man das Objekt auch weglassen, es entstand beim Testen)

    Bild Turret_Vis
    Dort seht ihr das Turret Blueprint. auch hier liegen die Modelle auf leere Nullpositionsobjekte um Verdrehungen vorzubeugen


    Bild Turret_BP
    Das ist mein aktueller Teststand, ich habe schon extrem viele Versionen ausprobiert aber keine hat funktioniert, diese auch nicht.
    Der Gedanke bei diesem BP war folgender

    Ich hole mir oben die Location des Nullposition_Base Objektes, vergesst die Überschrift die stimmt nicht mehr.
    Das ist sozusagen mein Startpunkt der Lookat Funktion (der theoretischer LineTrace)
    Da drunter hole ich mir die Mausposition vom Bildschirm, die Direction nehme ich * 5000 damit der Endpunkt des LookAts im tiefen Raum liegt und nicht vorne am Bildschirm, immerhin möchte ich ja nach vorne schießen.

    Rechts daneben ist die Lookat Rotation also die Position wohin meine Waffe zeigen soll (zur Mausposition in 5000m Entfernung)
    Da ich erstmal nur den unteren Teil meines Turrets nach links und rechts drehen möchte (Oben und unten kommt später) übergebe ich nur den YAW Wert an die Nullposition der Base, in diesem Fall die Relative.





    Unten drunter ist eine Funktion die mir die Turret_Socket Daten gibt, die hatte ich mir geholt weil ich damit rum getestet habe, letzten Endes brachte es nichts.
    Ich habe auch schon Set World Rotation verwendet, doch dabei eiert der Turret rum und dreht sich auch um andere Achsen bzw. bewegt sich nicht mehr mit dem Schiff mit.

    Aktuell bewegt sich der Turret mit dem Schiff so wie es sein soll, jedoch dreht er sich nicht richtig, je nachdem wie das Schiff ausgerichtet hat dreht er sich in komplett falsche Richtungen sofern das Schiff nicht nach vorne zeigt.
    Wenn es gerade ausgerichtet hat scheint es zu funktionieren.

    Das lustige ist auch das der Turret nach hinten zeigt wenn ich zu weit mit der Camera hinten bin, dachte zunächst das es beim rauszoomen dazu führt das der Vorhaltepunkt von 5000 Meter nicht mehr stimmt aber lustiger Weise bewegt sich der Turm kaum noch wenn ich den Wert 5000 erhöhe...rätselhaftes Verhalten.


    Das ist also mein Stand, einen Linetrace habe ich schon als Prüfung mal gemacht und dort sieht alles gut aus, er zeigt dort hin wo er hinzeigen soll, nur die LookatÜbergabe an die Turmausrichtung scheint irgendwie nicht zu klappen.




    EDIT:
    Habe das Gefühl das ich die Raumschiffausrichtung von der Mausausrichtung abziehen muss, aber stehe grad auf den Schlauch, bzw. ka ob es die Lösung ist
    Bilder
    • Spaceship.jpg

      308,95 kB, 1.266×688, 24 mal angesehen
    • Turret_BP.jpg

      362,18 kB, 1.512×751, 22 mal angesehen
    • Turret_Vis.jpg

      281,98 kB, 1.261×729, 24 mal angesehen
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Kleiner Fortschritt :

    Das mit dem abziehen der Schiffsausrichtung war wohl nicht so verkehrt.
    So wie es jetzt auf dem Bild ist funktioniert es solange das Raumschiff nicht auf dem Kopf ist... jetzt muss ich wohl nur noch irgendwie die Achse normalisieren wie es Kyodai angesprochen hat.
    Mal sehen wie ich das nun am besten hinbekomme.

    Tipps sind immer gern gesehen, nicht das ich mich wieder verrenne :D
    Bilder
    • Turret_BP.jpg

      400,1 kB, 1.524×834, 30 mal angesehen
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Harlyk schrieb:


    Aktuell bewegt sich der Turret mit dem Schiff so wie es sein soll, jedoch dreht er sich nicht richtig, je nachdem wie das Schiff ausgerichtet hat dreht er sich in komplett falsche Richtungen sofern das Schiff nicht nach vorne zeigt.
    Wenn es gerade ausgerichtet hat scheint es zu funktionieren.

    Das lustige ist auch das der Turret nach hinten zeigt wenn ich zu weit mit der Camera hinten bin, dachte zunächst das es beim rauszoomen dazu führt das der Vorhaltepunkt von 5000 Meter nicht mehr stimmt aber lustiger Weise bewegt sich der Turm kaum noch wenn ich den Wert 5000 erhöhe...rätselhaftes Verhalten.
    Das erste hört sich an, als würde das Turret versuchen IMMER auf der XY-Ebene zu drehen, die das Schiff beim Spielstart hat. Wenn das Schiff auf dem Kopf steht, müsste sich das Turret in die entgegengesetzte Richtung drehen und wenn es genau auf der Seite liegt, gar nicht? Kann das sein?

    Beim 2. Problem vermute ich, dass das Turret nach hinten zeigt, weil der Punkt der Lookat Funktion komplett herausgezoomt hinter dem Turret liegt und dann erst in diese Richtung um 5000m verlängert wird.
  • Ich übergebe ja nur die XAchse die in der UE4 die ZAchse ist daher kann sich der Turm nicht über die YAchse drehen.

    Aber ja ich denke das die Beschreibung danach richtig ist, Ich muss also die Drehrichtung auf dem Zenit negativieren wurde ich sagen.

    Der zweite Punkt funktioniert mittlerweile wieso auch immer, habe erneut die Entfernung erhöht und jetzt geht es, warum es davor nicht ging...Keine Ahnung.

    Mal sehen ob ich es schaffe das heute Abend zu negieren
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Ich versuche auch gerade eine Logik dafür zu finden. Wir arbeiten zusammen an dem Projekt.
    Da wir die Flugsteuerung des Schiffes so wie in Freelancer bauen wollen - das Schiff folgt stur dem Mauszeiger - dachte ich mir, dass ich den gleichen Float Wert nehmen muss, den wir auch dazu verwenden das Schiff entsprechend der Mauszeigerposition zu rotieren.

    Jetzt habe ich das Problem, dass der Floatwert, je nachdem wo der Mauszeiger ist, zwischen -1 und 1 ist.
    Gibt es eine Node wo ich sagen kann 0 entspricht 0 und 1 entspricht 90? Natürlich auch im Minusbereich dann.
    Dann kann ich ganz bequem die relativeRotation des Turmsockels verändern und bin fertig.

    Vielen Dank!

    *UPDATE*
    Problem gelöst.
    "Gibt es eine Node wo ich sagen kann 0 entspricht 0 und 1 entspricht 90? Natürlich auch im Minusbereich dann."

    Einfach mit 90 multiplizieren.




    Hier noch ein Video von dem gesamten Turm. Ich habe jetzt auch die Bewegung der Kanone implementiert.
  • Ich wollte schon sagen es sähe so aus, als würde der Curser auf der Winkelhalbierenden zwischen Kanonenrohr und dem roten Pfeil liegen, aber das trifft nicht immer zu. Gerade beim Runterfliegen scheint es anders zu sein.

    Ihr habt doch per ConvertMousePosition-dingens Koordinaten zum darauf zufliegen geholt und den Punkt nach vorne verlegt. Versucht doch mal diese Linie und den Endpunkt sichtbar zu machen, vielleicht hilft Euch das weiter. Es kann ja sein, dass die Kanone tatsächlich auf diesen Punkt zeigt, der aber aus welchen Gründen auch immer weit vom Curser weg liegt.
    Ich weiss ja nicht, was diese ConvertMousePosition...-Funktion für Daten ausgibt und was passiert, wenn man die mit einem Skalar multipliziert. Es wird wohl ein Richtungsvektor sein, aber von wo aus und vor allem in welche Richtung wird der verlängert?
  • Genau das debugge ich gerade in dem ich mit nen Linetrace schieße. So 100% schlau werd ich da noch nicht drauß. Aber mit der Formel kann ich einen Winkel zwischen 2 Vektoren berechnen. Das sollte es doch hoffentlich sein.
    Ich versuche gerade dafür einen ForwardVector zu nehmen und von der ConverMouseLocationtoWorldSpace den World Location oder WorldDirection Vektor. Sor ichtig funktioniert es weder noch. ?(
  • Soweit ich das jetzt verstanden habe bekommt man von ConvertMouseLocationToWorldSpace eine Positionskoordinate, die auf dem Nullpunkt der FirstPersonCamera liegt und einen normalisierten Richtungsvektor, den Ihr sicherlich verlängert habt. Damit habt Ihr dann einen Endpunkt, auf den Ihr Euer Kanonenrohr ausrichten könntet.
    Kontrolliert am besten mal sämtliche Skalierungen diesen Bereich betreffend, nicht dass die Ausrichtung der Kanone eigentlich stimmt, aber durch die Skalierung verzerrt wird.

    Vielleicht kannst Du da noch ne brauchbare Info rausziehen:
  • Danke @TBn

    leider jedoch sind die Skalierungen ok, die Funktionsweise von Convert Mouse Location to World Space ist auch bekannt.
    Habe heute erfahren das anscheinend das LookAt der Fehler sein könnte.

    Denn LookAt hält anscheinend die Horizontale was dazu führt das die Achsen nicht so reagieren wie so sollen.
    So zumindest der Ansatz.

    Man muss nun also doch etwas tiefere Berechnungen anstellen um den Turm korrekt auszurichten.
    Meine Fresse, so ein einfaches Anliegen das sich als unglaublich verzwickt raus stellt .... sowas hasse ich ja
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
  • Schon geklärt, der Panzer dreht sich nicht auf dem Kopf daher kommt der Eulerflip nicht zum tragen, ausserdem wird das Panzerrohr nicht auf die Mausposition ausgerichtet sondern über den Input wert gesteuert.

    Das Thema ist komplizierter als es zunächst den Anschein macht, möchte man wirklich eine exakte Ausrichtung haben dann wird man eine eigene Berechnung vornehmen müssen die etwas umfangreicher ist.
    An dieser Stelle wird man sich fragen müssen ob es der Performance zuträglich ist eine exakte Ausrichtung zu erstellen oder ob es mehr Sinn macht einen kleinen Umweg zu gehen und dafür performant zu bleiben.

    Aktuell stehen die Weichen so das wir wohl eine nicht ganz so rechenintensive Lösung anstreben, es sei denn es findet sich noch ein Weg der diesen umgeht, wie z.B. einen 0 Positions LookAt zu verwenden und diesen vom anderen abzuziehen ... wir arbeiten dran, mal sehen was heute am Ende raus kommt.

    Für Tipps sind wir immer offen :)
    hier kann man meine Modelle kaufen: cgtrader.com/harlyk
    DAS GRÖSSTE KOMMUNIKATIONSPROBLEM IST,DASS WIR NICHT ZUHÖREN, UM ZU VERSTEHEN. WIR HÖREN ZU, UM ZU ANTWORTEN.
Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.