4

私はしばらくの間、この問題に頭を悩ませてきましたが、頭のてっぺんにいて、これを理解していません。

問題:

現在、偽の「スイング」の瞬間をやろうとしています。キープッシュ中にラッチできるオブジェクトの子になるプレーヤーオブジェクトを持っているところ。

これを念頭に置いて、グラップル オブジェクトの正しい回転を取得し、プレイヤーの速度がグラップル オブジェクトの正しい回転になるようにする必要があります。

これは 2D ではなく 3D です。それがこの頭痛の原因です。

http://img843.imageshack.us/img843/7434/rotations.jpg

位置のベクトルと、キャラクター モーターの速度のようにプレイヤーが向かっている方向のベクトルを取得できれば、一意のベクトルを取得でき、このベクトル情報でグラップル オブジェクトを回転できるはずだと考えました。正しく。

しかし、それは私が簡単だと思ったものですが、私はこれを何時間もハッキングして、考えられていたように回転を行うためのベクトル差を取得しました。

tl:dr

2 つのベクトル、これら 2 つのベクトルの 1 つのベクトルの違いです。このベクトルは、適切な速度でスイング モーションを「偽装」するために grappleobject の回転を制御します。

答えがある場合は、事前に感謝します。

追加情報:

現在のテストはこれらです。

///

親オーブは、トリガー イベントに応じて変換を更新するグラップル オブジェクトです。
CurDirection は、ワールド内のベクトル内でプレーヤーが向かっている場所です。
CurPos は、プレイヤーがその時点でワールド内にいる場所です。

 CurDirection = (transform.position-ParentOrb.position);
 CurDirection.Normalize();

 motor.movement.velocity = (CurDirection);
 CurPos = transform.position;   

////

また、グラップル オブジェクトからプレイヤーへの角度を取得しようとしました。

///

otherDirection = 空間における速度の方向。
OtherDirectionPre = 空間内の現在の位置。

 Vector3 targetDir = otherDirection;
 Vector3 forward = otherDirectionPre;

 angle = Vector3.Angle(targetDir, forward);

/// これらは役に立たないかもしれないと思いますが、これまでの到達点を示した方がよいでしょう。

4

1 に答える 1

1

ヒットポイントと中心の間の半径を知っていると思います.rとしましょう。プレーヤーの速度 v と、プレーヤーが接続されている軸の角速度 ω (=ω) を使用すると、次のベクトル方程式が得られます。

v = ω × r

3 つのベクトルすべてが互いに垂直であると仮定すると、ω = v / r となります。

編集:中心の位置と衝突の接触点から半径 r を取得します。

Vector3 r = collision.contacts[0].point - center;
float radius = r.magnitude;
float angularSpeed = rigidbody.veloctiy.magnitude / radius;
于 2012-11-28T19:07:26.367 に答える