Wie kann man sicherstellen, dass sich drehende Objekte mit dem richtigen Ende auf ein Ziel treffen?


25

Ich arbeite an einer Waffe vom Typ Wurfmesser, bei der ein Spieler frei zielt und dann ein Messer wirft. Das Messer dreht sich durch die Luft und bei einer Kollision dreht es sich nicht mehr, und die Eltern bewegen sich zu dem Objekt, mit dem es kollidiert. Das Drehen wird über eine Animation abgewickelt, während der Weg des Messers von der Physik abgewickelt wird.

Ein Problem, dem ich gegenüberstehe, ist, wie ich sicherstellen kann, dass das Messer auf sie gerichtet ist, wenn das Messer mit einem Feind kollidiert. Im Moment passiert es manchmal, dass das Messer zuerst in einen feindlichen Griff eintaucht. Welches ist offensichtlich unrealistisch. Gleichzeitig halte ich es für ziemlich unvernünftig, wenn das Messer den Gegner nur "trifft", wenn es zuerst mit der Klinge kollidiert, da die Geschwindigkeit, mit der sich das Messer dreht, außerhalb der Kontrolle des Spielers liegt.

Ich habe mir viele langsame Killcam-Aufnahmen ähnlicher Waffen angesehen, und jedes Mal, wenn die Waffe geworfen wird, dreht sie sich durch die Luft und landet auf magische Weise immer mit der Klinge auf das Ziel gerichtet. Für ein Spiel, bei dem die Wurfweite konstant ist, ist dies recht einfach. Ich bin mir jedoch nicht ganz sicher, wie ich das vorhersagen soll, da es sich um viele unvorhersehbare Faktoren handelt, z. Messerrichtung, Messerdrehung, Position des Feindes, Entfernung zum Feind usw. Wenn möglich, würde ich es vorziehen, keine komplexe Vorhersagelogik zu verwenden, da das Spiel für relativ niedrige Endgeräte gedacht ist. Gibt es einen "Rauch und Spiegel" Weg, um dies zu lösen?

Beispiel: https://youtu.be/0fav8lFpBko?t=42s


15
Das Messer, das immer zuerst auf eine Zielklinge trifft, ist auch nicht realistisch, insbesondere wenn es sich um ein sich bewegendes Ziel handelt.
Theraot

1
Abhängig vom Geschmack des Spiels gibt es eine Reihe von Messerwurfstilen, die die Klinge nicht drehen. Normalerweise verwenden sie jedoch Messer, die speziell für ein stabiles Fliegen entwickelt wurden.
Perkins

Wenn der Schwerpunkt des Messers deutlich näher am Griffende als am Klingenende liegt und die Messerdrehzahl viel höher als die Verfahrgeschwindigkeit ist, trifft das Messer möglicherweise immer mit der Klinge auf das Ziel. Das wäre allerdings ein sehr seltsames Messer und eine sehr seltsame Kreatur, die es so werfen könnte
Sarge Borsch

2
Diese Ausgabe ist prominent genug, dass es einen TVTropes-Artikel darüber gibt: Die Klinge
Mason Wheeler

Mir gefällt auch die Unterscheidung in der Frage. Wenn Sie die Drehung so eingestellt haben, dass sie auch von der Physik-Engine verarbeitet wird, verfügen Sie möglicherweise über genügend Informationen, um zum Zeitpunkt der Kollision eine Berechnung durchzuführen, um festzustellen, ob das Messerende gut genug auf das Ziel ausgerichtet war oder nicht. Entweder das, oder die Animation wird beibehalten, und die Werte, bei denen die Animationen des Messers nach vorne zeigen, werden vorgebacken, und der aktuelle Animationsrahmen wird verglichen, um festzustellen, ob er in diesem Bereich liegt oder nicht.
Pysis

Antworten:


35

Fälsche es

Sieh dir das Video an, das du verlinkt hast, und sieh es dir in Zeitlupe an ... was ist das? Die Kamera springt am Ende und das Messer befindet sich bereits im Helm des Ziels.

Fälsche es einfach Sobald der Abstand zwischen Messer und Ziel gering ist, springen Sie magisch zum Messer im Ziel.

Bearbeiten: Sie können anhand der gewundenen Vorhersage prüfen, ob das Ziel getroffen wird, und dann so tun, als hätte es zuerst die Klinge getroffen. Anschließend können Sie eine Animation anzeigen, in der sich das Ziel nicht bewegt und das Messer es tötet.


Die verschlungene Vorhersage

da die Geschwindigkeit, mit der sich das Messer dreht, außerhalb der Kontrolle des Spielers liegt.

Das ist richtig. Es liegt außerhalb der Kontrolle des Spielers. Allerdings nicht außerhalb Ihrer Kontrolle ...

Wenn Sie die Entfernung berechnen können, die das Messer zurücklegen muss, können Sie die Drehrate so einstellen, dass das Messer zuerst auf die Klinge trifft.

Jetzt ist es nicht sinnvoll, diese Vorhersage mitten im Flug zu treffen, da sich das Messer anpassen müsste, wenn ein Hindernis im Weg wäre. Deshalb würden Sie es tun, wenn Sie werfen.

Die Tatsache, dass Sie einem parabolischen Pfad folgen müssen, um den Test zu bestehen, macht ihn komplizierter als einen einfachen Strahlenwurf. Ich würde vorschlagen, die Gleichung für die parabolische Bewegung zu erhalten, die dem Messerwurf entspricht, und sie in vorgegebenen Intervallen auszuwerten.

Es ist auch möglich, den Abstand von Hindernissen zur Parabel zu ermitteln, indem der Punkt in der Parabel ermittelt wird, der der Position des Hindernisses am nächsten liegt, und dann eine Kollisionsprüfung mit diesem Punkt durchgeführt wird.

Wenn Sie wissen, wie viel das Messer zurücklegen muss, können Sie es in ganzzahlige Umdrehungen aufteilen, sodass es zuerst auf die Klinge trifft. Bearbeiten: oder eine ganze Zahl von 0,5, je nachdem, wie Sie werfen.

Natürlich hätten sich die Hindernisse in dem Moment bewegt, in dem das Messer dort ankommt…


Sei realistisch

Insbesondere bei sich bewegenden Zielen werden Sie das Messer nicht 100% der Zeit treffen lassen. Umarmen Sie das, ein Wurfmesser ist keine zuverlässige Waffe. Lassen Sie es also abprallen, wenn es zuerst auf den Griff trifft. Sie können überprüfen, ob es zuerst auf den Griff trifft, indem Sie seine Ausrichtung überprüfen und ihn mit der Richtung zum Kollisionspunkt vergleichen.


1
Ah, ich habe den Sprung nicht geschnitten sehen, wie schlau und doch so einfach. Es ist sehr offensichtlich, dass ich es Frame für Frame gesehen habe, wie Sie vorgeschlagen haben.
FrontEnd

14

Wenn Sie im Voraus wissen, wo das Messer landen wird - wie bei den Aufnahmen, die definitiv im Nachhinein erstellt werden -, berechnen Sie einfach die richtige Drehzahl basierend auf der Flugentfernung und der Anzahl der gewünschten Umdrehungen. Wurfmesser verlassen den Wurfgriff mit der Faust, sodass N + 0,5 volle Umdrehungen 1 gedreht werden müssen , wobei N in der Regel mindestens 1 beträgt, jedoch je nach Können des Werfers oder dem gewünschten Aussehen besser sein kann: Mehr Drehungen = viel cooler.

Wenn Sie dies nicht tun, können Sie betrügen, indem Sie die Rotation bei einem Treffer korrigieren und sie möglicherweise mit einem Blutspritzer verbergen. Wie ein Zauberer wird der Spieler es nicht bemerken, wenn Sie es schnell genug tun.

Natürlich ist nichts davon realistisch. Im wirklichen Leben ist das Messerwerfen sehr schwer und erfordert viel Übung, wenn das Messer mit der Klinge zuerst landen soll. Der Werfer muss den Abstand genau kennen und seinen Wurf entsprechend ändern, sonst schlägt das Messer mit dem Griff voran.

1 : Es gibt einige Stile, in denen das Messer auch mit der Klinge voran geht.


4
+1: Blutspritzer. Gute Zaubertricks. Edit: oder eine Staubwolke für die Non-Gore-Edition.
Theraot

2
@Theraot und / oder die Rotationsgeschwindigkeit so schnell einstellen, dass der Betrachter nicht genau verfolgen kann, in welche Richtung sie zeigt.
Perkins

14
  1. Berechnen Sie die geradlinige Entfernung zum Ziel.

  2. Für jeden Frame wurde der Winkel des Messers auf 2PI * (verbleibender Abstand zwischen Geraden und Linien) / (ursprünglicher Abstand zwischen Geraden und Linien) * DesiredNumRotations festgelegt.

Das Schleuderverhältnis ändert sich geringfügig, wenn Sie das Messer nicht in einer geraden Linie bewegen, aber es wird niemand bemerken.

Wenn Sie das Ziel nicht vorab bestimmen (dh Sie werfen nur und verwenden Physik, um zu sehen, was es trifft), müssen Sie dies fudgen, aber Sie können das gleiche Prinzip anwenden, um zu sehen, welches Ziel es wahrscheinlich trifft und Anpassen der Drehung, um für dieses Ziel korrekt zu sein.


4

Echte Wurfmesser sind so konstruiert, dass sie eine sehr hohe Chance haben, die Klinge zuerst zu treffen. Entwerfen Sie Ihre Messer entsprechend.

Sammlung von Wurfmessern aus Wikipedia : Sammlung von Wurfmessern aus Wikipedia

Sie möchten den Schwerpunkt und damit den Drehpunkt so weit wie möglich von der Messerspitze entfernt haben . Dies erhöht die Wahrscheinlichkeit, dass sich die Klinge in die Schlagposition dreht, bevor das Ende des Griffs da ist.

Die Klinge ist in der Regel lang und dünn, um so weit wie möglich aus dem Schwerpunkt herauszuragen und gleichzeitig so wenig Eigenmasse wie möglich hinzuzufügen. Zusätzlich befindet sich am Ende des Griffs oft ein scheibenförmiges oder kugelförmiges Gegengewicht, das ich interessanterweise bei keinem der Messer aus dem Wikipedia-Bild sehe.

Das Messer wird geworfen, indem die Spitze der Klinge gehalten und der Griff in die Wurfrichtung gedreht wird.


2

Für eine Art "Rauch und Spiegel" können Sie den Drehmittelpunkt des Messers (dh den Massenmittelpunkt) in der Nähe des Griffs (dh des nicht spitzen Teils) haben. Wenn die Rotationsgeschwindigkeit im Vergleich zur Geschwindigkeit des Messers hoch genug ist, kann auf diese Weise garantiert werden, dass die Klingenspitze mit dem Ziel und keinem anderen Teil kollidiert.

Es gibt einige Berechnungen, um herauszufinden, welche die minimale Drehzahl ist, wenn der Schwerpunkt und die Abmessungen gegeben sind, die aber einfach sein sollten. Beachten Sie auch, dass dies nichts über den Winkel des Treffers aussagt.


1

Perfekter Messerwerfer?

Im Moment sagen Sie, Sie drehen das Messer durch Animation. Mit welchem ​​Parameter steuern Sie den Winkel? Rahmennummer? Spielzeit? Mit einer beliebigen Spinrate skaliert?

Wenn Sie stattdessen den Parameter (Entfernung bewegt) / (Gesamtentfernung zum Ziel) mit der entsprechenden Skalierung um pi und (Anzahl der Umdrehungen + 0,5) verwenden, würde das Messer in der Tat immer zuerst den magischen Punkt erreichen.


Der erste Teil dieser Frage scheint um Klärung zu bitten. Es sollte wahrscheinlich als Kommentar zu der Frage gemacht werden. Könnten Sie zuerst Ihre vorgeschlagene Methode für magisch ankommende Punkte erläutern? Zum Beispiel sagen Sie "mit der entsprechenden Skalierung von pi"; welche Skalierung? Es ist fair anzunehmen, dass der Benutzer, wenn er danach fragen muss, möglicherweise nicht versteht, wie die entsprechende Skalierung aussehen würde.
Gnemlock

@TimB hat es besser erklärt, aber die von Neil vorgeschlagene Lösung ist ein guter Ansatz. Ändern Sie die Geschwindigkeit der Animation Ihres sich drehenden Messers so, dass sich das Messer in der Position "Das spitze Ende geht in die Position des anderen Mannes" befindet, wenn es das Ziel erreicht. Dies ist viel einfacher (programmierbar UND rechnerisch) als das Berechnen von Parabelbahnen mit sich bewegenden Zielen usw. Was "die geeignete Skalierung durch PI" betrifft, die wahrscheinlich nur 2 ist, da die Anzahl der Umdrehungen eine weitere Variable in Neils Pseudoäquation ist. Wenn es sich um eine Keyframe-Animation handelt, skalieren Sie einfach Ihren Index und vergessen Sie Pi.
AC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.