回転するオブジェクトが右端でターゲットにヒットすることを確認する方法は?


25

私は、プレイヤーが自由に狙いを定めてナイフを投げる投げナイフタイプの武器に取り組んでいます。ナイフは空中を回転し、衝突すると回転を停止し、衝突したオブジェクトの親になります。回転はアニメーションによって処理され、ナイフのパスは物理学によって処理されます。

私が直面している問題の1つは、ナイフが敵に衝突したときに、ナイフが敵に向かっていることを確認する方法です。現時点では、時々ナイフが敵のハンドルに最初に埋め込まれることがあります。これは明らかに非現実的です。同時に、ナイフが回転する速度はプレイヤーの制御を超えているため、ナイフが最初にブレードに衝突した場合にのみナイフを敵に「ヒット」させるのは非常に不合理だと思います。

私は同じような武器の多くの遅いキルカム映像を見てきました、そして武器が投げられるたびに空中を回転し、魔法のように常にそのターゲットを指しているブレードで終わります。投げる距離が一定になるゲームの場合、これは非常に簡単です。しかし、予測できない多くの要因が関係しているので、これをどのように予測するかはよくわかりません。ナイフの方向、ナイフの回転、敵の位置、敵からの距離など。可能であれば、ゲームはかなりローエンドのデバイス向けであるため、複雑な予測ロジックを使用する必要はありません。これを解決する「煙と鏡」の方法はありますか?

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


15
ナイフが常にターゲットブレードに最初に当たることも、特に動いているターゲットについて話す場合には現実的ではありません。
-Theraot

1
ゲームのフレーバーに応じて、ブレードを回転させないナイフ投げスタイルがいくつかあります。通常、彼らは安定した方法で飛ぶように特別に設計されたナイフを使用しています。
パーキンス

ナイフの重心がブレードの端ではなくハンドルの端にかなり近く、ナイフの回転速度が移動速度よりもはるかに大きい場合、実際には常にブレードでターゲットに当たる可能性があります。それはかかわらず、非常に奇妙なナイフこと、そしてそのようにそれをスローすることが非常に奇妙な生き物でしょう
Sargeのボルシチ

2
この問題は非常に顕著であり、TVTropesの記事があります:ブレードは常に先の
Mason Wheeler

また、質問で行われた区別が好きです。回転を物理エンジンでも処理するように切り替えた場合、コリジョン時に計算を行ってナイフエンドがターゲットに十分に向いているかどうかを確認するのに十分な情報があるかもしれません。または、アニメーションを保持し、ナイフのアニメーションが前方を向いている値をプリベークし、現在のアニメーションフレームを比較して、その範囲内にあるかどうかを確認します。
-Pysis

回答:


35

ごまかす

リンクしたビデオを見て、スローモーションで見てください...えー、それは何ですか?カメラは最後にジャンプし、ナイフはすでにターゲットのヘルメットの中にあります。

偽物です。ナイフからターゲットまでの距離が短くなったら、ターゲットで魔法のようにナイフにジャンプカットします。

編集:複雑な予測を使用してターゲットにヒットするかどうかを確認し、最初にブレードにヒットしたふりをしてから、ターゲットが移動せずにナイフが殺すアニメーションを表示できます。


複雑な予測

ナイフが回転する速度はプレイヤーの制御が及ばないためです。

そうです。それはプレイヤーの制御を超えています。しかし、あなたのコントロールを超えていません...

ナイフが移動しなければならない距離を計算できる場合、ナイフが最初に刃に当たるように回転速度を設定できます。

さて、障害物が邪魔になった場合、ナイフは調整する必要があるため、飛行中にこの予測を行うことは意味がありません。したがって、投げるときにそれを行います。

ヒットテストに放物線のパスに従う必要があるという事実により、単純なレイキャストよりも複雑になります。ナイフの投げに対応する放物線運動の方程式を取得することをお勧めし、与えられた間隔で評価します。

放物線の中で障害物の位置に最も近い点を見つけることにより、放物線に対する障害物の距離を見つけ、その点で衝突チェックを行うこともできます。

ナイフがどれだけ移動しなければならないかがわかったら、それを整数の回転数に分割して、最初に刃に当たるようにします。編集:またはあなたが投げる方法に応じて整数0.5。

もちろん、ナイフが届くまでに障害物は動いていたでしょう…


現実的になる

特に動いているターゲットの場合、ナイフが最初に100%刃に当たらないようにします。それを受け入れて、投げナイフは信頼できる武器ではありません。そのため、最初にハンドルを押すと跳ね返るという選択肢があります。最初にハンドルを押すかどうかを確認するには、方向を確認し、衝突点への方向と比較します。


1
ああ、私はジャンプカットが表示されませんでした。あなたが提案したようにフレームごとに見たとき、それは非常に明白です。
フロントエンド

14

ナイフが着陸する場所を事前に知っている場合-事実上最も確実に生成されるキルカム映像のように-飛行距離と所望の回転数に基づいて正しい回転速度を計算してください。投げナイフは投げる人を最初に投げるので、N + 0.5の完全な回転1を回転する必要があります。ここで、Nは通常少なくとも1ですが、投げ手のスキルレベルや見た目がどれだけクールかによります。よりクール。

そうでない場合は、ヒット時に回転を修正してチートしてもかまいません。おそらく、血液スプラッタで非表示にすることもできます。マジシャンのように、あなたがそれを十分に速くするならば、プレーヤーは気付かないでしょう。

もちろん、これは現実的ではありません。現実には、ナイフを投げるのは本当に難しく、ナイフを最初に着地させるには多くの練習が必要です。スローアーは距離を完全に認識し、それに応じてスローを変更する必要があります。そうしないと、ナイフが先にヒットします。

1:ナイフが刃先になるスタイルもあります。


4
+1:血しぶき。良い、手品。編集:または非ゴア版のダストクラウド。
-Theraot

2
@Theraotおよび/またはスピンの速度を十分に速くして、視聴者が実際にどの方向を指しているかを追跡できないようにします。
パーキンス

14
  1. ターゲットまでの直線距離を計算します。

  2. 各フレームは、ナイフの角度を2PI *(remainingStraightLineDistance)/(originalStraightLineDistance)* DesiredNumRotationsに設定します。

ナイフをまっすぐに動かさないと、だれも気付かない場合、スピン率はわずかに異なります。

ターゲットを事前に決定しない場合(つまり、投げて物理学を使用してヒットするものを確認する場合)、これをかじる必要がありますが、ヒットする可能性があるターゲットを見るという同じ原則を使用できますそのターゲットに合わせてスピンを調整します。


4

本物のスローナイフは、ブレードを先に打つ可能性が非常に高くなるように設計されています。それに応じてナイフを設計します。

ウィキペディアから投げナイフのコレクション: ウィキペディアから投げナイフのコレクション

ブレードの先端からできるだけ遠くに、重心、したがって回転の中心が必要です。これにより、ハンドルの端がそこに到達する前に、ブレードが打撃位置に回る確率が高くなります。

ブレードは通常、長くて薄いため、質量の中心から可能な限り遠くに突き出しますが、ブレード自体の質量はできるだけ少なくしています。さらに、ハンドルの端にはしばしばディスク状または球形のカウンターウェイトがありますが、興味深いことに、ウィキペディアの画像のナイフには見られません。

ナイフは、刃先を持ち、ハンドルを投げる方向に弧を描くことで投げられます。


2

「煙と鏡」の方法の場合、ナイフの回転中心(つまり重心)をハンドル(尖っていない部分)の近くに置くことができます。このように、回転速度がナイフの速度に比べて十分に速い場合、ブレードの先端が他の部分ではなくターゲットに衝突することが保証されます。

重心と寸法が与えられた場合の最小回転速度を取得するための計算がありますが、簡単なはずです。また、これはヒットの角度について何も意味しないことに注意してください。


1

完璧なナイフ投げ?

現時点では、アニメーションでナイフを回転させていると言います。角度を制御するためにどのパラメーターを使用していますか?フレーム番号?ゲームの時間?任意のスピンレートでスケーリングしますか?

代わりに、パラメーター(移動距離)/(ターゲットまでの総距離)を使用し、piと(ターン数+0.5)で適切なスケーリングを行うと、ナイフは常に魔法のように常に最初にポイントに到達します。


この質問の最初の部分は、説明を求めているようです。おそらく質問に対するコメントとして作成する必要があります。最初に魔法のように到着するための提案された方法について詳しく説明してください。たとえば、「piによる適切なスケーリング」と言います。どのスケーリング?ユーザーが質問する必要がある場合、適切なスケーリングが何であるかを理解できない可能性があると想定するのは公平です。
ネムロック

@TimBはそれを説明するのにより良い仕事をしましたが、ニールの提案された解決策は良いアプローチです。回転するナイフのアニメーションの速度を変更して、ターゲットに到達したときにナイフが「先のとがった端が他の人に向かう」位置になるようにします。これは、移動するターゲットなどを含む放物線軌道を計算するよりもはるかに簡単です(プログラミングおよび計算)。キーフレームアニメーションの場合は、インデックスをスケーリングし、piを忘れます。
AC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.