在Unity3D中击中入射导弹(简单射弹导弹)

时间:2013-05-19 12:27:57

标签: c# unity3d physics game-engine game-physics

我想在unity3D中建立地对空导弹系统,可以预测导弹位置在一段时间之后的状态'并将其拦截导弹的角度和位置设置在3D坐标中,以便它可以击中入射导弹。我正在使用以下功能来预测入射导弹。

    void UpdateTrajectory(Vector3 initialPosition, Vector3 initialVelocity, Vector3 gravity)
{
    int numSteps = 500; 
    float timeDelta = 1.0f / initialVelocity.magnitude; 

    LineRenderer lineRenderer = GetComponent<LineRenderer>();
    lineRenderer.SetVertexCount(numSteps);

    Vector3 position = initialPosition;
    Vector3 velocity = initialVelocity;
    for (int i = 0; i < numSteps; ++i)
    {
        lineRenderer.SetPosition(i, position);


        position += velocity * timeDelta + 0.5f * gravity * timeDelta * timeDelta;
        velocity += gravity * timeDelta;
    }
}

我正在使用线条渲染器来获取视觉轨迹显示。 现在我只能在少数位置击中导弹意味着我:P必须手动调整。我的SAM导弹系统正确地设置了它的角度,但它无法设置准确的时间和速度,因此可以击中导弹。

1 个答案:

答案 0 :(得分:2)

你需要专业的东西:指数曲线拟合。

http://mathworld.wolfram.com/LeastSquaresFittingExponential.html http://mste.illinois.edu/malcz/ExpFit/FIRST.html

http://www.ni.com/cms/images/devzone/tut/image7_20080714213910.JPG

将所有点作为曲线得到并找到曲线系数然后推断下一个点。 您的算法在整个曲线上看起来有点线性,但对于最新的点而言才是正确的,这还不够。

Alos称为非线性回归。

这里,另一个stackexchange回答:https://stats.stackexchange.com/questions/20271/exponential-curve-fitting-with-a-constant