我很难绕过如何做到这一点。 我正在努力做的是,通过速度的方式将物理身体移向另一个身体,直到它到达并击中所述身体。 (想想AI跟随玩家)
以下是一个解决方案:
body.velocity.x = target.position.x-body.position.x;
body.velocity.z = target.position.z-body.position.z;
但这有问题。一个是速度更高,取决于两个物体之间的距离。我更喜欢固定的速度。另一种方法是使用以下示例:Position a body in cannon.js relative to local rotation
但在这种情况下,我需要一种旋转四元数的方法,因此它面向目标位置,这只知道物体的2个位置。
所以问题是,我如何计算身体的速度或方向,以便它可以通过使用固定的速度/速度跟随并与目标身体发生碰撞?
答案 0 :(得分:0)
要获得固定速度,.normalize()
您的速度矢量,然后按您想要的速度缩放(.mult()
)结果。结果将是一个始终具有所需长度的矢量。
要获得使您的身体朝向某个方向的四元数,您可以使用Quaternion.setFromVectors(u,v)
。此方法创建一个四元数,它将旋转u
,使其指向与v
相同的方向。如果您将u
设置为前向矢量并将v
设置为您希望身体看起来的方向,那么您将获得正确的"查看"行为。请注意"转发"矢量可能与你的游戏不同。
// Compute direction to target
var direction = new CANNON.Vec3();
target.position.vsub(body.position, direction);
direction.y = 0;
direction.normalize();
// Get the rotation between the forward vector and the direction vector
var forward = new CANNON.Vec3(0,0,1);
body.quaternion.setFromVectors(forward, direction);
// Multiply direction by 10 and store in body.velocity
var fixedSpeed = 10;
direction.mult(fixedSpeed,body.velocity);