2d轨迹线预测不准确

时间:2019-05-07 08:57:41

标签: c# unity3d prediction game-development

我当前遇到的问题是我的轨迹线非常不准确

请参见下面的图片

enter image description here

它在哪里

enter image description here

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

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;
        }
    }

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

2 个答案:

答案 0 :(得分:0)

使用相同的函数计算两者。 这样就不会有问题,轨迹计算结果的任何更改也只有一个更改而不是两个更改。

答案 1 :(得分:0)

解决了

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)