2d Прогнозирование линии траектории не является точным - PullRequest
0 голосов
/ 07 мая 2019

В настоящее время я сталкиваюсь с проблемой, когда в моей линии траектории очень неточно

Пожалуйста, смотрите прикрепленное изображение ниже

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 голосов
/ 07 мая 2019

Решено

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

Мне нужно перейти с вектора3 на вектор2, поэтому мне нужно привести (вектор2) между этими transform.positions.y

0 голосов
/ 07 мая 2019

Используйте одну и ту же функцию для расчета обоих. Тогда у вас не возникнет проблем, а также любое изменение результатов расчета траектории - только одно изменение, а не два.

...