0

我目前正在实现玩家在 Unity3D 中控制的可移动重力井。玩家还可以在重力上添加一个偏移矢量,这将影响其运动,因此它并不总是很好地朝向重心。使用这些力,我可以确定受重力井影响的每个实体的速度及其轨迹;但是,attributes.trajectory它会不断累加,直到达到 +/- 无穷大并导致游戏崩溃。日志显示,gravityTrajectory并且gravityOffset在碰撞时处于正确的向量和速度约为 30 个单位。日志显示它attributes.trajectory没有被正确规范化并将保持其大小。我的问题是为什么没有attributes.trajectory.Normalize()正确规范化向量?

我会假设用无限浮点对向量进行归一化可能会导致问题,但在此之前它应该已经归一化。感谢您尝试调试此问题的任何帮助。

void FixedUpdate()
{
    float gravityForce;
    float offsetForce;

    // calculate forces to apply.
    Vector2 gravityTrajectory = FindGravityVector(out gravityForce);
    Vector2 gravityOffset = FindGravityOffset(out offsetForce);

    // get new velocity from forces.
    speed += (gravityForce + offsetForce) * Time.deltaTime;

    // add current trajectory to current force vectors.
    attributes.trajectory += (gravityTrajectory + gravityOffset);
    attributes.trajectory.Normalize();

    // scale the trajectory by the velocity
    attributes.trajectory *= speed;

    // update position based on velocity
    rigidbody2D.MovePosition((transform.position + (Vector3)(attributes.trajectory)) * Time.deltaTime);
}

编辑1:

这是找到重力的方法:

private Vector2 FindGravityVector(out float gravityForce)
{
    Vector2 gravityTrajectory = (Vector2)(orb.transform.position - transform.position);
    gravityForce = MinionManager.Instance.gravity * orb.GetComponent<Orb>().Mass / Mathf.Pow(gravityTrajectory.magnitude, 2);
    return gravityTrajectory;
}

以下是崩溃时的每个属性(根据 Debug.Log):

attributes.trajectory 之前:(3419851000000000000.0, 762847100000000000.0)

重力轨迹:(64.3,-28.1)

重力偏移:(0.0,0.0)

重力:0.02031127

偏移力:0

速度:261.1045

之后的属性.轨迹:(892938500000000000000.0,199182800000000000000.0)

4

0 回答 0