Interaktion einer Hand mit einem Hebel

  • Liebe Community,
    ich habe ein Problem. Und zwar bastle ich zurzeit an der Mechanik eines FPS Spiels. Auf einen bestimmten Tastendruck hin soll mein Charakter seine Hand zu einem Hebel ausstrecken und mit diesem interagieren.
    Es ist eine Verständnisfrage, da ich keine Ahnung habe wie ich das Problem angehen soll.
    Mein Gedanke war die Animation dazu aus meinem 3D Programm in die Unreal Engine zu importieren und per Blueprint meinem Charakter sagen, dass wenn ich die Taste an dem Hebel drücke er die Animation ausführen soll.
    Wie schaffe ich es aber, dass die Hand genau den Hebel trifft und diesen bewegt ohne in die Luft zu greifen?
    Das Forum und das Internet sowohl im englischen als auch im deutschen lieferten mir leider keine Ergebnisse mit denen ich etwas hätte anfangen können.
    Über jede Hilfe bin ich dankbar :)

    A journey of a thousand miles begins with a single step. - Lao Tzu

  • Vielleicht wenn der Spieler in dem Bereich zum Greifen ist und dieser die Taste drückt, wird erst die Position des Spielers verändert und dann erst die Animation abgespielt? < 3

  • So würde ich es auch machen, Animation mit Hebeldummy erstellen und dann im Spiel bei der Betätigung des Hebels die Position des Spielers so korrigieren das es passt, die Positionskorrektur würde ich vielleicht durch eine Überblende (also einen Kamerawechsel während der Betätigung) verschleiern.


    Ich weiß nicht in wieweit man mit Splines bzw. Constraints innerhalb von UE4 zur Laufzeit arbeiten kann, jedoch denke ich das ein Constraint auch nicht hilft wenn der Spieler zu weit weg steht, man kann ja schlecht den Arm verlängern.

  • Zuallererst musst du natürlich testen ob du in Reichweite stehst. Am besten misst du dazu die Distanz vom Schulterknochen zum Hebel.
    Danach greift ein Verfahren, dass sich "Inverse Kinematik" nennt. Üblicherweise werden bei Animationen zu jedem Gelenk die Drehwinkel gespeichert um das Skelett zu verformen ("direkte Kinematik"). Bei der inversen Kinematik werden diese Drehwinkel aus der gewünschten Zielposition eines Knochens bestimmt (der Hand in deinem Fall). Das ganze Verfahren kommt ursprünglich aus der Robotik. Unterstützung von der Unreal Engine ist vorhanden.


    Ein ähnliches Beispiel findest du in den "Content Examples". Dort schlägt ein Charakter in die Luft und wenn ein Hindernis getroffen wird führt er den Schlag nur bis zum Hindernis aus (siehe UE Dokumentation unten).


    Siehe hier:
    https://de.wikipedia.org/wiki/Inverse_Kinematik
    https://docs.unrealengine.com/…ation/IKSetups/index.html

  • Erst mal vielen Dank für die schnellen Antworten :)


    Ich hab eure Ratschläge berücksichtigt und hin und her probiert und habe eine Methode gefunden, mit der es zwar noch nicht super sexy aussieht, aber trotzdem funktioniert.


    Ich habe in Blender ein kleines Pult mit einem Hebel gebastelt und das in greifbarer Nähe zu meinem Charakter gestellt. Anschließend hab ich die Hand so animiert, dass sie den Hebel greift und umlegt. (Die Hebelanimation selber hab ich später in der UE gemacht)
    Die FBX Animation von meinem Arm, sowie das Pult und den Hebel separat, importierte ich in meinen Projekt. Ich platzierte das Pult als Static Mesh Actor, den Hebel als Movable Mesh Actor und den Arm als Skeletal Mesh Actor in mein Level.
    Anschließend erstellte ich ein Matinee und erstellte daraus eine Kamera, die ich auf den Hebel richtete und importierte außerdem meinen Arm inklusive der vorgefertigten Animation und den Hebel. Mithilfe des "Add new Movement Track" passte ich die Position des Armes während der Animation so an, dass er perfekt den Hebel umgreifen und in umlegen würde ohne sichtbar durchs Mesh zu gleiten. Den Hebel selber rotierte ich passend zur Animation der Hand.


    Das fertige Matinee fügte ich in das Level Blueprint ein. Ich erstellte einen BoxTrigger, der ein Overlap Event generieren sollte. Um eine Veränderung zu simulieren platzierte ich über dem Hebel ein Licht, dessen Farbe ich im Level Blueprint zum Umlegen des Schalters animieren wollte.


    Zusammenfassung des Level Blueprints:


    Sobald mein Charakter den BoxTrigger berührt soll er folgendes einmal (DoOnce) ausführen:


    Zuerst werden Bewegung und Rotation des Spielers gesperrt, dann wird die FPS Kamera durch die Matinee Kamera mit einer Blende ersetzt (Set View Target with Blend). Damit der Arm nicht einfach aus dem Nichts erscheint gibt es ein Delay von 0.5 um kurz darauf den Arm sichtbar zu machen.
    Dann folgt die Matinee Animation über die "Play" Funktion, die die Farbe des Lichtes ändert. Sobald die Matinee Animation vorbei ist, blendet die Kamera wieder zurück zur FPS Kamera und gibt nach einem kurzen Delay die Steuerung für den Spieler wieder frei.


    Das ganze ist mit Sicherheit nicht die eleganteste Lösung eine Interaktion des Charakters mit einem Objekt zu gestalten, aber die einfachste, die ich mit meinen Kenntnissen gefunden habe.


    Hier ist noch das fertige Ergebnis (Es geht nur um die Mechanik, also die Farben und Formen bitte nicht bewerten^^):

    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.

    A journey of a thousand miles begins with a single step. - Lao Tzu

    2 Mal editiert, zuletzt von VeinCore ()