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
quelle
Antworten:
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
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.
quelle
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.
quelle
Berechnen Sie die geradlinige Entfernung zum Ziel.
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.
quelle
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 :
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.
quelle
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.
quelle
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.
quelle