Du bist nicht angemeldet.

Werbeanzeige

1

23.06.2018, 17:29

UE4 UI Cast To Blueprint

Hey Community,

momentan versuche ich mir Visual Scripting mit der Unreal Engine und Blueprint beizubringen. Das klappt soweit auch ganz gut, aber bei einer Sache hängt es gerade ein bisschen. Seit ein paar Tagen beschäftigte ich mit mit dem User Interface und habe auch einiges herausgefunden. Nur eine Sache mag mir einfach nicht gelingen. Wie im Anhang zu sehen, möchte ich bei Änderung des Schiebereglers den ausgegebenen Wert als Variable in einem anderen Blueprint übernehmen. Der CastTo...Blueprint benötigt aber ein Object Wildcard und ich habe keine Ahnung was ich dort einfügen muss.

Ich möchte aber nicht nur wissen was ich genau eingeben muss, sondern viel mehr, wie dieser Eingang in CastTo... funktioniert.

Es würde mich freuen, wenn ihr mir da weiterhelfen könntet.
»Half« hat folgendes Bild angehängt:
  • Unbenannt.png

KeksX

Community-Fossil

Beiträge: 2 153

Beruf: Game Designer

  • Private Nachricht senden

2

23.06.2018, 17:53

Das Prinzip nennt sich Typecasting: http://www.cplusplus.com/doc/tutorial/typecasting/


Denk dran, dass du beim Visual Scripting im Prinzip nur auf C++ Code der Unreal Engine zugreifst. tl;dr für oben: Du hast ein Objekt(irgendeines), und du sagst der Engine "Ich weiß, welche Art Objekt das ist, bitte gib mir also alle Variablen/Funktionen für diesen Typ Objekt".

Ich würde die unpure Version benutzen, wenn du dir nicht sicher bist, dann kannst du dir 2 Pfade ausgeben, einmal wenns funktioniert hat und einmal wenns nicht geklappt hat.
WIP Website: kevinheese.de

3

23.06.2018, 21:36

Das mit dem C++ weiß ich bereits, allerdings hilft mir das nur mäßig weiter - mit der Programmiersprache habe ich mich nie beschäftigt. :( Allerdings verstehe ich jetzt durch den Link, was das Casting konkret darstellt, danke dafür. Was ich allerdings noch nicht verstehe, woher weiß ich welches Objekt meine Variablen beinhaltet? Ich meine, ich weiß in welchem Blueprint sie steht, aber das wars dann auch. Wahrscheinlich fehlt mir hier noch irgendein Hintergrundwissen, weshalb ich nicht von selbst drauf komme.

Ist das nicht egal welche Cast-Version ich nutze, wenn ich mir unsicher bin? Die pure Version gibt mir ja ein "hat geklappt" oder "hat nicht geklappt" Boolean aus. Die Impure Variante macht ja eher Sinn (soweit ich das verstehe), wenn z.B. der Zielblueprint nicht immer existiert bei z.B. spawn- und despawnbaren Meshkomponenten oder das Objekt nicht immer existiert und es stattdessen etwas anderes tun soll (etwa die Meshkomponenten spawnen). Korrigier mich, wenn ich das falsch sehe.

KeksX

Community-Fossil

Beiträge: 2 153

Beruf: Game Designer

  • Private Nachricht senden

4

23.06.2018, 21:59

Letztendlich ist es nicht ganz so wichtig ob pure oder impure, ich find impure nur etwas handlicher. Kannst dann halt vom Cast Failed-Exec direkt handlen was passiert wenn es nicht funktioniert (zum Beispiel eine Debug-Ausgabe, die dir sagt was für ein Objekt das eigentlich ist)

Und die Frage hast du dir letztendlich selbst beantwortet. Du kannst entweder zu einer C++ Klasse casten oder eben zu einer Blueprint-Klasse (die unter der Haube auch nur eine C++-Klasse ist). D.h. du guckst einfach in der jeweiligen Definition nach und weißt bescheid.

Dein Objekt kommt ja irgendwoher, du kannst in deinem Beispiel irgendwo die Referenz zum Cube-Actor speichern und diesen dann zu deinem Cube casten und dann damit arbeiten. Ich glaube das ist eher das, was dir fehlt. In deinen cast geht aktuell nichts rein, da muss aber eine Referenz zu dem Objekt rein, das du letztendlich ändern möchtest. D.h. du sagst dem Script "Caste mir nichts in einen Cube", und natürlich kann es das nicht :)
WIP Website: kevinheese.de

5

23.06.2018, 22:54

So ich habs, vielen Dank! Die Lösung war sogar wesentlich einfacher als gedacht. Statt einen Cast mit einem Actor zu füttern rufe ich den Actor mit Get All Actors Of Class direkt auf und verbinde ihn direkt mit der Variabel. Darauf bin ich aber nur mit deiner Erklärung gekommen. Jetzt kann ich das Spiel mit UIs vollkleistern. :thumbup:

Werbeanzeige