我目前正在实现玩家在 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)