4

一段时间以来,我一直在这个问题上徘徊,但我一直没有弄清楚这一点。

问题:

目前试图做一个假的“摇摆”时刻。我让玩家对象成为您可以在按键期间锁定的对象的子对象。

考虑到这一点,我需要在 grappleobject 上获得正确的旋转,使玩家的速度成为 grappleobject 上的正确旋转。

这不是 2D,而是 3D。这导致了这种头痛。

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

我想如果我能得到位置向量和玩家前进方向的向量,比如角色马达的速度,得到一个唯一的向量,这个向量信息应该能够旋转 grappleobject正确。

然而,这就是我认为很容易的事情,但我已经研究了好几个小时,以获得向量差来进行旋转,因为它被认为是。

tl:博士

2 个向量,这两个向量的差为一个向量,这个向量控制 grappleobject 的旋转以“假”一个具有适当速度的摆动运动。

如果有答案,请提前感谢您。

添加信息:

目前的测试是这些。

///

Parent Orb 是根据触发事件更新其变换的抓斗对象。
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 和玩家应该连接到的轴的角速度 ω (=omega) 有向量方程:

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 回答