Postion von einem Blueprint Class Actor mit einem Grap component

  • Hallo liebes Forum,

    Ich habe einen Blueprint-Actor aus verschiedenen statischen Meshes erstellt. Dann habe ich die Grap-Komponente in dem Blueprint erstellt. In der VR-Kamera Ansicht funktioniert alles einwandfrei. Das Problem ist jedoch, dass der Actor jedes Mal, wenn ich ihn greife, an eine bestimmte Stelle in der Szene springt und dann die Animation abgespielt wird.

    Viele Grüße

    Jochen

    [Blockierte Grafik: https://d3kjluh73b9h9o.cloudfront.net/original/4X/5/9/3/59380142dab8b22a03714770a8d29a7b10d20a62.jpeg]

    [Blockierte Grafik: https://d3kjluh73b9h9o.cloudfront.net/original/4X/9/e/1/9e12e67e18e2b7d389808b0426b31fe9c443aa18.jpeg]

    [Blockierte Grafik: https://d3kjluh73b9h9o.cloudfront.net/original/4X/e/4/c/e4c65d9ff63d9d8861c07e1aa3fa3030a3a75959.jpeg]

    • Offizieller Beitrag

    Das Springen kommt daher, weil du in Set Relative Location feste Werte in die Pins eingetragen hast. Beim Greifen wird die Schublade dadurch immer exakt auf diese Koordinate gesetzt – unabhängig davon, wo der Actor gerade steht .


    Erst danach läuft die Timeline.


    Was du tun musst:

    1. Beim Greifen Startposition merken

      • StartRelLoc (Vector) als Variable anlegen.

      • On GrabbedGetRelativeLocation der Schubladen-Komponente → StartRelLoc setzen → Timeline.Play.

    2. Timeline-Update: Offset addieren oder lerpen

      Variante A (Offset):

      • Timeline liefert Alpha (0..1) oder direkt einen Weg-Offset.

      • NewLoc = StartRelLoc + (Schublade.GetForwardVector() * (Alpha * SlideDistance))

      • SetRelativeLocation(Target = SchubladenKomponente, NewLocation = NewLoc, Sweep = true, Teleport = false)

      Variante B (Lerp):

      • In BeginPlay: ClosedRelLoc = Schublade.GetRelativeLocation()

      • OpenRelLoc = ClosedRelLoc + (Schublade.GetForwardVector() * SlideDistance)

      • Update: Lerp(ClosedRelLoc, OpenRelLoc, Alpha)SetRelativeLocation (Target = SchubladenKomponente)

    Wichtig:

    • Bewege die Schubladen-Komponente relativ, nicht den Actor-Root (sonst fährt der ganze Wagen mit).

    • Keine festen Zahlen mehr direkt in die Location-Pins schreiben.

    • Teleport auslassen (außer du willst Kollisionsprüfung umgehen), Sweep ggf. an, wenn Kollision gewünscht ist.

    • Falls du beim Greifen an die Hand „attachst“: darauf achten, dass kein „Snap to World Location“ aktiv ist.

    Damit bleibt der Actor dort, wo du ihn greifst, und nur die Schublade fährt sauber heraus/ein.

    • Offizieller Beitrag

    Fürs Grundverständnis: Wenn du im leeren Graph einen Rechtsklick machst und dort „Get Relative Location“ eintippst, zeigt dir die Suche nur alle Nodes, die so heißen oder diesen Namen enthalten. Was du damit nicht bekommst, ist eine konkrete Referenz auf deine Schubladen-Komponente.

    Damit der Node wirklich auf deine Tastaturschublade wirkt, musst du zuerst eine Komponenten-Referenz in den Graph ziehen:

    • Links im Komponentenbaum deine Tastaturschublade mit der Maus in den Graph ziehen.

    • „Get“ auswählen → du erhältst einen Referenz-Node.

    • Von diesem Node aus einen Pin ziehen und „Get Relative Location“ suchen → jetzt bekommst du den richtigen Node, der direkt an deine Schubladen-Komponente gebunden ist.

    Kurz gesagt:

    • Rechtsklick im leeren Graph = nur allgemeine Nodes, noch ohne Bezug.

    • Von der Komponente ziehen = spezifische Nodes, die genau deine Schublade ansprechen.

    Grundsätzlich: Die Rechtsklick-Suche passt sich immer dem aktuellen Kontext an.

    • GetRelativeLocation ist eine Funktion von SceneComponent (und damit auch von StaticMeshComponent).

    • Suchst du im leeren Graph, weiß Unreal nicht, auf welchen Typ du die Funktion anwenden soll (Actor, Widget, Audio usw.).

    • Unreal ist bewusst so gebaut, dass man nicht alles Mögliche miteinander verknüpfen kann, was gar nicht zusammenpasst. Deshalb muss immer zuerst ein Kontext vorhanden sein.

    • Außerdem blendet Unreal Nodes aus, die zwar technisch möglich wären, im aktuellen Kontext aber keinen Sinn ergeben.

    Kurz:

    • Im leeren Graph → kein Typ → keine gebundenen Nodes.

    • Vom Pin aus → Typ ist bekannt → richtige Node erscheint.