【问题标题】:2d Trajectory Line Prediction not acurate2d 轨迹线预测不准确
【发布时间】:2019-05-07 18:49:56
【问题描述】:

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

请看下面的附图

这就是它的去向

这是我目前的代码

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

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

【问题讨论】:

  • 您没有考虑阻力。球是跑得比线更远还是落得更近?
  • 实际上@Arshia001 它根本没有连接。我的意思是轨迹非常低,而如果我将球向下拖动它会向右上方但轨迹线不跟随
  • 如果不是太多,试着发个有问题的gif。
  • @JoseAntonioNavarroMarco 无法做到这一点,因为目前我的计算机上没有互联网连接。
  • @JoseAntonioNavarroMarco 在拍摄地点添加了一张图片

标签: c# unity3d prediction game-development


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    解决了

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多