Hilfe! Weiterleitung mit Cast to.... schlägt fehl

  • Dann ist dieser Satz falsch, sorry. (Wahrscheinlich eher schlecht ausgedrückt oder du hast es falsch verstanden. Der Autor ist hier im Forum und hat schon Ahnung würde ich behaupten)
    Unter casting versteht man in der Programmierung die Typenumwandlung.

  • Cast to ist ziemlich simpel wenn man es verstanden hat.


    Ich versuch es mal an einem kleinen Beispiel zu erklären:
    [Blockierte Grafik: https://dbs.cs.uni-duesseldorf.de/lehre/docs/java/javabuch/html/images/VererbTransp.gif]


    Hier haben wir ne simple Vererbungshierarchie.
    Zur kurzen Erläuterung:


    Strassenfahrzeug erbt von Transportmittel.
    Auto erbt von Strassenfahrzeug.


    Das bedeutet ein Auto ist auch ein Transportmittel.
    Allerdings muss nicht jedes Transportmittel ein Auto sein.


    Angenommen ich habe ein Auto Objekt und speichere das in einer "Transportmittel" Variable, dann ist dies ein Upcast.
    Da ein Auto IMMER ein Transportmittel ist, ist hier eine "Castto" Node nicht notwendig.


    Nun kommen wir zum Gegenteil. Ich möchte mein Straßenfahrzeug wieder zu einem Auto machen. Nun haben wir ein Problem. Ein Transportmittel könnte theoretisch auch ein Lastwagen oder ein Güterzug sein. Hier ist nun die CastTo Node notwendig um zurück zu einem Auto zu kommen. Der Cast wird fehlschlagen wenn man zb ein Lastwagen, der in einer Transportmittel Variable gespeichert ist, versucht zu einem Auto zu casten. (Macht wiederum Sinn, da ein Lastwagen kein Auto ist)


    Cast to kann also NUR verwendet werden solange sich ein Objekt in der selben Vererbungshierarchie befindet.
    Oben wären das zb:
    - Fahrrad > Zweirad > Strassenfahrzeug > Transportmittel


    Um auf das jetzige Beispiel zurück zu kommen.


    Lampe und Character befinden sich nicht in der selben Vererbungshierarchie. (Es sei denn du machst ein Spiel in dem du eine Lampe spielst)
    von Character zu einer Lampe zu casten ist also komplett falsch.


    Hoffe es wird damit etwas klarer.

  • Ich versuch es mal an einem kleinen Beispiel zu erklären:

    Evtl. noch erwähnenswert, dass es hier um Parents und Childs geht.


    Transportmittel ist der Parent von Straßenfahrzeug, Straßenfahrzeug ist Parent von Zweirad, Zweirad ist Parent von Fahrrad.
    bzw.
    Fahrrad ist Child von Zweirad, Zweirad ist Child von Straßenfahrzeug, Straßenfahrzeug ist Child von Transportmittel.


    Wenn du Childs erstellen willst, rechtsklicke im Contentbrowser auf ein beliebiges BP welches Parent sein soll, danach wähle "Create Child Blueprint Class"
    Wenn du einem BP nachträglich einen Parent zuweisen willst, öffnest du das BP welches Child des neuen Parents werden soll, gehst oben links auf "File" und klickst auf "Reparent Blueprint", in der nun erscheinenden Liste suchst dir den neuen Parent raus und fertig.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Wenn du nicht mit Childs arbeiten willst, gibts noch Interfaces, das ist aber nochmal was anderes, was selbst ich nicht wirklich blicke, hehe

  • Dann ist dieser Satz falsch, sorry. (Wahrscheinlich eher schlecht ausgedrückt oder du hast es falsch verstanden. Der Autor ist hier im Forum und hat schon Ahnung würde ich behaupten)
    Unter casting versteht man in der Programmierung die Typenumwandlung.

    Ich wollte diesem Mann auf keinen Fall unterstellen, dass er keine Ahnung hat! Ich verschlinge sein Buch seit Wochen mit Leidenschaft und bin durch ihn erst auf dieses Forum gestoßen :) Nur habe ich diesen Satz richtig zitiert. Wahrscheinlich deute ich ihn einfach falsch. Dass das Casting zur Typenumwandlung benutzt wird, werde ich mir merken.



    Cast to ist ziemlich simpel wenn man es verstanden hat.


    Ich versuch es mal an einem kleinen Beispiel zu erklären:


    Diese Grafik hilft mir sehr weiter, vielen Dank! :) Dadurch bekommen Anfänger wirklich nen guten Überblick über das Ganze.




    Wenn du nicht mit Childs arbeiten willst, gibts noch Interfaces, das ist aber nochmal was anderes, was selbst ich nicht wirklich blicke, hehe

    Also soweit ich das bisher mit Interfaces verstanden habe, sind Interfaces GROB GESAGT nicht anderes als CustomEvents. Nur mit dem Unterschied, dass darauf mehrere Blueprints zugreifen können. Also ne Kombination aus Cast to.. und CustomEvent irgendwie :D



    Kommunikation ist echt ne harte Nummer in der Programmierung/Unreal Engine^^

  • @Veelos Super post. Grafisch versteht man sowas gut, aber ich hab auf die schnelle nichts gefunden.


    Ich wollte diesem Mann auf keinen Fall unterstellen, dass er keine Ahnung hat! Ich verschlinge sein Buch seit Wochen mit Leidenschaft und bin durch ihn erst auf dieses Forum gestoßen :) Nur habe ich diesen Satz richtig zitiert. Wahrscheinlich deute ich ihn einfach falsch. Dass das Casting zur Typenumwandlung benutzt wird, werde ich mir merken.

    Mein Zusatz war auch eher so gemeint, dass ich ihm nichts unterstellen will noch dir.


    Interessanterweise haben viele auch ohne das Buch die selbe Deutung vom Cast, wie du. Es ist auch naheliegend zu diesem Schluss zu kommen, wenn man dieses Programmierkonzept nicht kennt.
    Der Satz ist wahrscheinlich auch nicht falsch im richtigen Kontext, da der Cast ein Werkzeug ist den du ja bei der Kommunikation zwischen zwei Objekten benötigst, weil z.B. ein Event (Collision, Trace Hit, Damage, etc) ja oft mit einer sehr allgemeinen Referenz zu einem anderen Objekt ankommt (Typ Object oder Actor) und man muss dann erst in einen spezifischeren Typ casten, damit man auf die nötigen Funktionen/Events/Variablen zugreifen kann.

  • Also soweit ich das bisher mit Interfaces verstanden habe, sind Interfaces GROB GESAGT nicht anderes als CustomEvents. Nur mit dem Unterschied, dass darauf mehrere Blueprints zugreifen können. Also ne Kombination aus Cast to.. und CustomEvent irgendwie

    Soweit hab ich es auch verstanden, bei mir hapert es dann aber wie man ein Interface richtig verwendet^^
    Ich arbeite gern mit "Cast to", geht viel schneller als ein Interface, welches man erstmal erstellen muss und dann noch die Funktionen...


    Der Satz ist wahrscheinlich auch nicht falsch im richtigen Kontext, da der Cast ein Werkzeug ist den du ja bei der Kommunikation zwischen zwei Objekten benötigst

    Könnte man wirklich falsch verstehen, wenn man nicht weiter liest:
    "Wie eingangs erwähnt, ist ein Cast to eine direkte Kommunikation zwischen zwei Blueprints, bei dem das Blueprint, das den Cast ausführt, genau wissen muss, zu welchem Blueprint dieser casten will."

  • Interessanterweise haben viele auch ohne das Buch die selbe Deutung vom Cast, wie du.

    Weil es (für mich zumindest) irgendwie nahe liegt^^

    "Wie eingangs erwähnt, ist ein Cast to eine direkte Kommunikation zwischen zwei Blueprints, bei dem das Blueprint, das den Cast ausführt, genau wissen muss, zu welchem Blueprint dieser casten will."

    Ups.. stimmt



    Mit den Parents und Childs habe ich es soweit verstanden, aber mal ne andere Frage. Nehemn wir mal an ihr würdet mit eurem Spieler über eine Waffe laufen und die Waffe soll mit einem Tastendruck despawnen (also zerstört werden), dann muss doch irgendwie eine Kommunikation zwischen Spieler und Waffe stattfinden. nur wie wird das Signal zur Waffe geleitet?

  • Mit den Parents und Childs habe ich es soweit verstanden, aber mal ne andere Frage. Nehemn wir mal an ihr würdet mit eurem Spieler über eine Waffe laufen und die Waffe soll mit einem Tastendruck despawnen (also zerstört werden), dann muss doch irgendwie eine Kommunikation zwischen Spieler und Waffe stattfinden. nur wie wird das Signal zur Waffe geleitet

    Du kannst bei der Waffe zb eine Trigger Box hinzufügen und dann im Actor mit dem "OnCollisionEnter" Event arbeiten. (Finde gerade kein Guide dazu aber wenn du bisl

    Also soweit ich das bisher mit Interfaces verstanden habe, sind Interfaces GROB GESAGT nicht anderes als CustomEvents. Nur mit dem Unterschied, dass darauf mehrere Blueprints zugreifen können. Also ne Kombination aus Cast to.. und CustomEvent irgendwie

    Uhm nein.
    1. Hört auf damit "Cast to" als "Kommunikation zwischen BPs" zu sehen. Das ist schlicht und einfach falsch. Mit Cast To sage ich einem Objekt "Transportmittel" das es eigentlich auch vom Typ "Auto" ist. Damit kann man dann auf Funktionen vom Typ Auto zugreifen. (zb Hupen) was ein Transportmittel nicht kann.
    Aber wir reden hier trotzdem immer noch vom selben Objekt. Mit Cast to kann man nicht mit einem anderen Objekt kommunizieren.


    Das was ihr wahrscheinlich missinterpretiert ist, wenn ihr bereits eine Referenz habt und diese Castet. Trotzdem braucht ihr dazu eine Referenz. Sonst weiss CastTo nicht welches Objekt es casten soll. Beispiel:


    GetPawn gibt euch eine Referenz zurück. Die Referenz ist aber gleichzeitig auch eine Referenz auf euren Character. (Sofern ihr einen character steuert). Nur weiss der Pawn das noch nicht und ihr könnt deswegen nicht auf die Funktionen von eurem Character zugreifen. Um das zu können müsst ihr die Pawn Referenz erstmal zu character casten. Trotzdem bleibt es die selbe Referenz.


    2. Fasst Interfaces erst dann an wenn Ihr Polymorphie verstanden habt. Ich habe dieses Thema schon Leuten im Voice Chat Stundenlange erklärt. Leider nur mit wenig Erfolg. Das in einem Post zu erklären wäre schon etwas zu viel des Guten.


    3. Programmieren lernt man nicht über Nacht. Es mag vielleicht etwas einfacher aussehen als bei Artisten aber lasst euch davon nicht täuschen. Auch Programmieren braucht Jahrelange Übung bevor man darin richtig gut ist. (Und nein, ich sehe mich selber nicht als "richtig gut" an^^). Trotzdem kann man durch rumprobieren in der Unreal Engine schon vieles hin bekommen ohne großartig Coden zu können.
    Du greifst hier schon Themen vor die Fortgeschrittener sind, obwohl du bei den Basics noch wacklig stehst.
    Deshalb, wenn du es wirklich lernen willst, dann nimm dir die Zeit.

  • 3. Programmieren lernt man nicht über Nacht. Es mag vielleicht etwas einfacher aussehen als bei Artisten aber lasst euch davon nicht täuschen. Auch Programmieren braucht Jahrelange Übung bevor man darin richtig gut ist. (Und nein, ich sehe mich selber nicht als "richtig gut" an^^). Trotzdem kann man durch rumprobieren in der Unreal Engine schon vieles hin bekommen ohne großartig Coden zu können.
    Du greifst hier schon Themen vor die Fortgeschrittener sind, obwohl du bei den Basics noch wacklig stehst.
    Deshalb, wenn du es wirklich lernen willst, dann nimm dir die Zeit.

    Kleiner Zusatz zu diesem Punkt. Es ist mMn falsch zu sagen, dass Blueprints keine Programmierkenntnisse benötigen.
    Sie reduzieren eher nur die Schwelle für den Einstieg, dennoch wendet man auch mit Blueprint Objekt-Orientierte-Programmierung (und auch Komponentenbasierte Programmierung) an und muss die Konzepte verstehen.
    Das ist finde ich ein riesiger Fehler im Marketing von UE4.


    Daher lege ich jedem ans Herz mindestens ein/zwei Monate lang sich mit reinem C++ zu beschäftigen , um die Konzepte kennenzulernen und zu verstehen, bevor man mit dem Biest arbeitet was UE4 ist. Das ermöglicht die ganze Sache in einer Umgebung zu verstehen, die nicht so komplex ist wie die Unreal Engine. Wenn du all diese Konzepte verstehst, dann kommst du viel schneller auf viel elegantere Lösungen für deine Probleme. Es wird BTW auch immer gesagt dass C++ schwer ist, dies ist jedoch eher eine Aussage die eher in den 90gern gültig war und auch eher für größere Projekte galt, da man einfach in C++ sehr sauber arbeiten musste, dafür viel Kontrolle über den Speicher hat.
    Das mag etwas trocken sein, aber auch Spieleprogrammierung ist kein Spiel, sondern wirkliche Programmierung.

  • Ich werde eure Tipps beherzigen und alls schön langsam und geduldig angehen. Wobei Letzteres des öfteren eine echte Herausforderung darstellt :D Aber es macht ja Spaß, sonst würde man es ja nicht machen


    Ich wollte noch an Alle hier ein großes Dankeschön da lassen! Ich hatte gehofft, dass man hier etwas Hilfe bekommt, dass die dann aber so zahlreich und üppig (ist sehr positiv gemeint) ausfällt, hätte ich nicht mit gerechnet :D