Tür funktioniert zwar, aber mit Macken....

  • Hallo Leute,


    ich bastel schon eine gewisse Zeit lang an einer Tür für mein Spiel. Sie funktioniert zwar, allerdings spinnt sie extrem rum. Mein Ziel war es, die Tür durch den Character OHNE Tastendruck zu öffnen, sondern mit dem bloßen Berühren der Tür. Berührt der Character eine Seite der Tür, so geht sie zur Anderen auf und umgekehrt. Desweiteren möchte ich realisieren, wenn die Tür auf steht, dass man mit dem Character die Tür an der "richtigen" Stelle berührt (als ob man Sie schubst) und dass Sie darauf wieder korrekt zu geht.


    Das funktioniert zwar. Laufe ich allerdings zu schnell gegen die Tür, wackelt die komisch hin- und her, was ziemlich unschön aussieht.


    Ich komme leider auf keine Lösung. Könnt ihr mir helfen dieses Problem zu lösen?


    Liebe Grüße
    Lalilu



    Meine Schaltung: Die Variablen "Links" und "Rechts" sind von vornherein auf "1" geschaltet




    Meine Tür: Die vordere Hitbox ist "ÖffnerRechts" und die hintere Hitbox ist "ÖffnerLinks"


  • Ich frage mich wozu du die vielen Boolean brauchst.
    Der Zustand deiner Tür ist doch mit zwei abgedeckt. Einer ob die Tür offen/zu ist, und einer ob sie links oder rechts rum geöffnet ist.Falls du das wirklich brauchst.
    Was soll den passieren wenn der Spieler von links kommt und die Tür in diese Richtung geöffnet ist?


    Wenn du die Hitboxen nicht verschieben willst kannste die auch kurz ausschalten


    Gruss
    DarkFaces

  • Achso, Verzeihung, dass hatte ich vergessen zu erwähnen. Werde ich oben noch hinzufügen. Wenn die Tür auf ist, soll man mit dem Charakter die Tür wieder an der "richtigen" Seite berühren können (als ob man sie schubst) und wieder zu gehen. Daher kommen die vielen Boolean


    Liebe Grüße

  • Puhhh


    Also ich würde einfach überprüfen, ob der Playet Actor overlapped und dann die Tür um einen gewissen Wert nach vorne bewegen bis zu einem definierten maximum. Ist das maximum erreicht den Trigger deaktivieren. Die gleiche Logik von der anderen Triggerbox bis zu einem Minimum von 0 .


    Damit sparst du rein theoretisch ne Menge Code und booleans ... sollte aber auch genau das machen, was du mit deinen BPs erreichdn wolltest. Den maximalen Wert kannst du mit sqrt (glaube ich) erzielen.


    Durch aktivieren bzw. deaktivieren der Triggerboxen sorgst du dafür, das der Spieler nicht zwischen beiden Triggerboxen hängen bleibt ... die das zappeln erzeugen (die logik wird wegen überlappung beider Triggerboxen abwechselnd ausgeführt).


    lg

  • Vielen Dank für eure hilfreichen Tipps! Dadurch bin ich auf eine Lösung gekommen, die so ein Mischmasch von mir und euren Ideen ist :) Funktioniert super und so wie es soll.


    Nochmal eine kleine Frage am Rande: Was muss ich denn machen, wenn ich die Tür nicht immer um einen Winkel von 90 Grad öffnen möchte, sondern dass sich die Tür, je nachdem ich sehr ich dagegen drücke sich auch die Tür dementsprechend schneller, bzw. langsamer, oder weiter auf bzw. nicht so weit auf bewegt? Das ist dann nicht mehr mit der Timeline möglich oder? Wird die Tür dann ein Physikobjekt, die nur an einem Anglepunkt festhängt?


    Liebe Grüße

  • Bei Overlap fragst du am "other" Ausgang mit einem "Get Velocity" die Kollissionsgeschwindigkeit ab.
    Diese Werte bringst du ins Verhältnis zur Rotation der Tür - entweder mit einem "Map Range Clamped" oder über eine Float-Curve und get value.
    Mit einem FInterp kannst du die Werte nachträglich auch über einen definierten Zeitraum interpolieren, sodass eine Animation entsteht.


    Alternative setzt du die Tür bei Kollision auf Physik - der Rest würde automatisch gehen, wenn der Character dagegenstößt.
    Allerdings ist das estwas tricky, denn hierbei muss man ganz schön mit den Physikeinstellungen rumdoktern bis es gut wirkt.
    Vorallem der Damping-Wert hat hier besondere Bedeutung.
    Und ja, du musst die Tür eigentlich genauso erstellen wie in echt - also mit Angel usw.
    Es reichen 2 Zylinder am Rahmen und 2 aufgesteckte Röhren an der Tür.
    Dann dreht sich die Tür an der Angel.
    Der Durchmesser der Zylinder bedarf aber einiger Versuche.
    Wenn du ihn gleich der Röhreninnendruchmesser machst kann es zu Kollissionsbugs kommen.
    Machst du ihn zu klein wackelt die Tür doof rum.
    Deshalb ist die Pyhsikvariante recht schwierig zu lösen, obgleich sie - wenn sie funktioniert - am besten aussieht.


    Die prof. Lösung ist allerdings ein SkeletalMesh zu erstellen.
    Dazu kannst du dir ja mal anschauen wie das bei Autotüren gemacht ist.

    • Offizieller Beitrag

    Als Artist denkst man da wohl immer ein bisschen anderst :)


    Deine Tür Animation besteht ja im grunde im aus zwei zuständen einmal geschlossen und einmal offen.
    Die Tür Animation öffen/schließen wird interpoliert und somit von der Engine oder deinem 3D Programm berechnet.


    So: Nun hängt es davon ab wie viele Keyframes du für die Tür Animation verwendest hast. Hättest du nur 4 Keyframes gesetzt einer bei 0Grad, 45, 90 ,135 und 180 Grad so könntest du theoretisch nur 5 Zustände deiner Tür anzeigen.


    Wenn du mehr Keyframes verwendest dann könnte deine Tür beispielsweise auch nur um 5 Grad geöffnet sein. Du müsstest die Animation dann stopen wenn eine bestimmte grad anzahl erreicht ist.
    Wichtig dahei ist auch das der Pivot an der richtigen Stelle (Drehpunkt) sitzt und die Transformations resettet sonst machst du dir unnötig das leben schwer.

  • Vielen Dank nochmals für die Antworten.


    Franz99: Ich habe versucht, dass irgendwie zu verstehen und nachzubauen. Ich bin aber leider nicht auf eine Lösung gekommen (bin quasi noch ein fortgeschrittener Anfänger). Könntest du mir evtl. mit einer Schaltung unter die Arme greifen?


    Liebe grüße