二维轨迹线预测不准确

2d Trajectory Line Prediction not acurate

我目前面临一个问题,我的轨迹线非常不准确

请看下面的附件

这是它要去的地方

到目前为止,这是我的代码

private void Start()
    {
        line = new GameObject[maxDots];
        for (int i = 0; i < line.Length; i++)
        {
            var go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            go.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
            line[i] = go;
        }

        startPos = transform.position;
    }

我的OnMouseUp是用来投篮的

    //TEMPORARY
    private void OnMouseUp()
    {
        // Disable IsKenematic
        GetComponent<Rigidbody2D>().isKinematic = false;

        // Add the Force
        Vector2 dir = startPos - (Vector2)transform.position;
        GetComponent<Rigidbody2D>().AddForce(dir * force);
        //Remove the script (not the gameobject)
        Destroy(this);
    }

我的 OnMouseDrag 是为了让球保持在半径范围内,因为我为球的拖动设置了一个限制

    private void OnMouseDrag()
    {
        DisplayLine();
        //Convert mouse potision to world position
        Vector2 p = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        //Keep it in a certain radius
        float radius = 1.8f;
        Vector2 dir = p - startPos;

        if (dir.sqrMagnitude > radius)
        {
            dir = dir.normalized * radius;

            //Set position
            transform.position = startPos + dir;
        }
    }

这是我显示线条的方法

    void DisplayLine()
    {
        line[0].transform.position = transform.position;
        Vector3 v3 = transform.position;
        float y = (forces * (home - transform.position)).y;
        float t = 0.0f;
        v3.y = 0.0f;

        for(int i = 1; i < line.Length; i++)
        {
            v3 += forces * (home - transform.position) * spacing;
            t += spacing;
            v3.y = y * t + 0.5f * Physics2D.gravity.y * t * t + transform.position.y;
            line[i].transform.position = v3;
        }
    }

我想做的是为我的游戏创建轨迹预测线我知道我快到了,但仍然无法获得我想要的确切输出。有人可以帮助我吗?谢谢。

使用相同的函数计算两者。 那么你就不会有问题了,轨迹计算的任何变化只会导致一个变化而不是两个。

解决了

line[0].transform.position = transform.position;
        Vector2 v2 = transform.position;
        float y = (force *( startPos - (Vector2)transform.position)).y;
        float t = 0.0f;
        v2.y = 0.0f;

        for(int i = 1; i < line.Length; i++)
        {
            v2 += force * (startPos - (Vector2)transform.position) * spacing;
            t += spacing;
            v2.y = y * t + 0.5f * Physics2D.gravity.y * t * t + transform.position.y;
            line[i].transform.position = v2;
        }

我需要从 vector3 更改为 vector2,所以我需要在这些 transform.positions.y

之间转换 (vector2)