Unity2D Vector2加起来无穷大

时间:2014-11-21 05:53:23

标签: c# unity3d game-physics unity3d-2dtools

我目前正在实施玩家在Unity3D中控制的可移动重力井。玩家还可以在重力上添加偏移矢量,这将影响其运动,因此它不会始终朝向重心的中心。利用这些力,我可以确定受重力井影响的每个实体的速度和轨迹;但是,attributes.trajectory会不断累加,直到达到+/-无穷大并使游戏崩溃。日志显示gravityTrajectorygravityOffset处于正确的向量,崩溃时的速度约为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)

     

gravityTrajectory:(64.3,-28.1)

     

gravityOffset:(0.0,0.0)

     

gravityForce:0.02031127

     

offsetForce:0

     速度:261.1045

     

attributes.trajectory after:(892938500000000000000.0,199182800000000000000.0)

0 个答案:

没有答案