Pendelaxt: präziser Damage

  • Hallo zusammen,


    ich mach ein Dungeon Spiel und möchte eine Pendelaxt erstellen.

    Jetzt ist die Frage, was ich verwenden sollte, um den Damage an den Spieler zu übertragen.


    Sollte ich mit Line Trace, mit mehreren Kollision(Mehrere für genauere Kontaktmöglichkeit) oder was ich noch gesehen habe wäre Overlapping.


    Was würden die Profis hier verwenden und warum?



    Grüße

    Ognorant

  • Hey, ich würde es ganz simpel machen. Einfach eine Box Collision um die Axt herum legen und entweder die Axt mit einer Timeline bewegen oder natürlich als SkeletalMesh importieren mit entsprechender Animation. Ich bin zwar kein Profi, aber ich würde StaticMesh->BoxCollision->Timeline machen, warum -> geht am schnellsten. Den Schaden einfach mit ComponentOverlap und Interface übertragen (die ApplyDamage Node geht natürlich auch).

    • Offizieller Beitrag

    Geht es darum Ob der Player überhaupt getroffen wurde oder wo der Player getroffen wurde ?


    Eine Kollision sollte ja kein Problem sein aber wenn du prüfen willst ob der Player am Kopf, Arm oder am Fuss getroffen wurde, dann wird die Sache natürlich komplizierter.

    Auch stelle mir die Frage. Ein Pendel würde in der Mitte am meisten Schaden machen da hier das Pendel am meisten Schwung hat. Außen ist der Schaden hingegen geringer. Man könnte diese die Rotations <>= bestimmen. Die Frage ist, ob das überhaupt relevant ist.


    Vielleicht erklärst du nochmal genauer wie du dir das vorgestellt hast.


    Ein Ansatz wäre auch: An der Stelle wo sich Axt und Player berühren werden eine kleine Triggerbox hinzumachen. (Je nach Schwierigkeit)

    Befinden Player und Pendel in dieser Triggerbox, gibt es Damage. Dadurch, dass du die Triggerbox größer oder kleiner machst kannst, kannst du die Schwierigkeit steuern.

  • Das ist von mir eingezeichnet. So würde ich versuchen die Line Traces zu erstellen.

    Weiß aber nicht, ob ich das so hinbekomme bzw. ob das eine gute Idee ist.

    Wegen Performance hätte ich gesagt, ich mach eine Triggerbox in die Nähe und erst wenn der Spieler in der nähe ist, geht Line Trace an.




    Wenn ich es machen würde wie du es meinst Arim ,

    würde der Damage übertragen werden, obwohl der Player nicht an der schneide ist.

    Wäre einfach und schnell, wie es mir lieber wäre, aber möchte es eine genaue Kontaktaufnahme.





    Diese Möglichkeit hatte ich schon mal gemacht.

    6 Capsule Collision die mit einer For-Schleife abgefragt werden und geprüft wird, ob Kontakt ist oder nicht.



    Das hatte ich schon mal getestet, hat aber nicht so funktioniert.

    Einfach ein weiteres Mesh was in etwa die Größe der Axt hat.

    Im Spiel nicht rendern lassen und als Collision verwenden.



    Ich hoffe ich konnte es gut beschreiben auf was ich hinaus möchte. =)

    Möchte ungern Damage verursachen, wenn der Spieler nicht wirklich getroffen wurde. ^^


    Sleepy Dein Ansatz wüsste ich gerade nicht, wie ich das machen soll. 🙈


    Grüße

    Ognorant

    • Offizieller Beitrag

    Achso verstehe, du willst den Schade exakt an Klinge haben. Also nicht bei Kollision der Akt sondern bei Kollision der Klinge.

    Dann mach das doch genau so ?


    Mache die Klinge separat, mach einen Collider nur auf die Klinge dann hast dus ja schon. Wenn du es performanter haben willst und es ausreichend ist. dann verwende KEINEN MeshCollider sondern zwei Box Collider.


    Im Prinzip genau so:


    Dann müsstest die Klinge nicht mal abtrennen.


    Du kannst auch ein mesh als Collider verwenden.


    So könnte das Mesh aussehen:

    Mit Rückseite wären das 10 Tris als Collider (Ohne Seiten) die brauchst du ja nicht.


    Beide Varianten kosten nicht die Welt an Performance ich denke die untere Variante wäre besser weil du weniger Collider brauchst.

    Mesh Collider sind natürlich auch nicht so toll was die Performance angeht aber bei 10Tris pffff

  • Also Mesh Collider so wie den wo ich gemacht hatte?


    Wenn du sagst ohne Seiten. Meinst du dann es soll nur eine Plane von z.b. Blender sein?

    Was mir noch durch den Kopf geht. Man könnte auch eine Leiste entlang der Schneidfläche machen.

    Also kann man sich vorstellen wie eine Regenrinne auf der Klinge. ^^


    Wie einen Meshcollider wird auch ein StaticMesh genommen, oder? 🤔

    Ich denke mal, für eine Kollision kann es auch einfach ein Strich sein und muss kein geschlossenes Objekt sein, oder?


    Ach wäre das schön, wenn ich neben mir jemanden hätte, der mit mir ein Spiel programmiert und Ahnung hat, sodass ich mehr lernen kann. xD

    • Offizieller Beitrag
    • Hilfreich

    Wenn du sagst ohne Seiten. Meinst du dann es soll nur eine Plane von z.b. Blender sein?

    Ja genau zwei Planes eine Verbindung brauchst du nicht. (Die Tris kannst du dir sparen)

    Was mir noch durch den Kopf geht. Man könnte auch eine Leiste entlang der Schneidfläche machen.

    Also kann man sich vorstellen wie eine Regenrinne auf der Klinge. ^^

    Ja kannst du machen, dann wäre deine Klinge noch mehr der realen Klinge nachempfunden. Die Frage ist ob es wirklich so exakt sein muss?


    Wie einen Meshcollider wird auch ein StaticMesh genommen, oder? 🤔

    Ein MeshCollider ist einfach nur ein Lowpoly Objekt von einem ursprünglichen Objekt. So grob wie möglich und so komplex wie nötig.

    Ich denke mal, für eine Kollision kann es auch einfach ein Strich sein und muss kein geschlossenes Objekt sein, oder?

    Ein Strich wäre eine Edge du braucht schon eine Fläche. Auch ist die Kollision nicht so exakt. Bisschen Aufprallfläche schadet nicht.



    Ach wäre das schön, wenn ich neben mir jemanden hätte, der mit mir ein Spiel programmiert und Ahnung hat, sodass ich mehr lernen kann. xD


    Früher also ich noch mein Portfolio aufgebaut habe, hab ich noch richtig Spaß an solchen dingen gehabt. Seit ich beruflich solchen Shit mache, nutze mein Wochenende anderst.

    Die Lernphase ist die Phase die am meisten Spaß macht. Alles andere ist Arbeit.

    • Offizieller Beitrag

    Möglich ist es, eine Collosion als Mesh im Blender oder andere programme zu bauen. Siehe hier https://docs.unrealengine.com/…porting/FBX/StaticMeshes/


    Dann ist es möglich die collisionen per UE zu bauen. Siehe hier: https://docs.unrealengine.com/…s/HowTo/SettingCollision/

    da kannst du viele boxen hinzufügen und an der Klinge platzieren. Ohne eine loopschleife zu nutzen. Sie gehören dann alle zu einer collosion.


    Dann, wenn du meshes als collisionen verwenden willst, dann werden es complexe collisionen statt simple collision. Siehe hier: https://docs.unrealengine.com/…/Physics/SimpleVsComplex/


    Ich konnte jetzt nicht erkennen, wie weit du jetzt gegangen bist, aber wenn du complexe nutzt, dann musst du auch das dem entsprechend einstellen.

  • Dj EKI Danke dir für die Informationen. Leider besteht das Problem weiterhin.


    Wenn ich durch die Rinne die ich erstellt hatte durch laufe, bekomme ich keine Nachricht in der Console ausgegeben. :(

    Collision Presets habe ich auf OverlapAllDynamic gestellt


    Wie man bei dem letzten Bild sieht, habe ich diese Rinne etwas weiter weg vom Objekt, um zu prüfen, ob ich durchlaufen kann.

    Trotzdem bekomme ich keine Rückmeldung. :(

    Einmal editiert, zuletzt von OgnorantGaming () aus folgendem Grund: Muss mich korrigieren. xD Hab den Fehler gefunden. Ich hatte bei der Funktion fürs Overlapping vergessen UFUNCTION() drüber zu machen. xDD

    • Offizieller Beitrag

    Dann schauts aus, dass du es nicht aktiviert hast.

    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.


    PS: Gute Besserung.

  • Doch doch, ist schon aktiviert. Hier gibt es nur noch kein Bild was ich davon gemacht habe,

    Ich hab jetzt zuletzt nur keine Rückmeldung beim Überlappen erhalten und dann zuletzt gesehen, ich hatte UFUNCTION() über der Funktion vom Überlappen vergessen. 😅 Dann ist klar das die Funktion nicht funktioniert. 😁


    Aber herzlichen Dank für die Informationen. 😊