Мяч, рассчитанный на первой скорости, не попадает в цель, а должен лететь

В приведенной ниже функции известно расстояние между мячом и целью (R). Также известен угол между результирующим вектором и осью x (LaunchAngle). Благодаря этим параметрам (R, LaunchAngle) я рассчитываю начальную скорость мяча. Я проверил все значения. По физике они все правильные. Хотя все расчеты верны, мяч не попадает в цель.

void LaunchFromTargetPositionWithoutFrictionForce()
        {
            Vector3 projectileXZPos = new Vector3(transform.position.x, 0.0f, transform.position.z);
            Vector3 targetXZPos = new Vector3(TargetObjectTF.position.x, 0.0f, TargetObjectTF.position.z);
            transform.LookAt(targetXZPos);

            float R = Vector3.Distance(projectileXZPos, targetXZPos);
            float G = -Physics.gravity.y;

            float Vz = Mathf.Sqrt(G * R / Mathf.Sin((2.0f * LaunchAngle) * Mathf.Deg2Rad));
            float Vy = Vz * Mathf.Sin(LaunchAngle * Mathf.Deg2Rad);
            float Vx = Vz * Mathf.Cos(LaunchAngle * Mathf.Deg2Rad);
            text2.text = "vz: " + Vz.ToString() + " vy: " + Vy.ToString() + " vx: " + Vx.ToString();

            Vector3 localVelocity = new Vector3(0f, Vy, Vx);
            Vector3 globalVelocity = transform.TransformDirection(localVelocity);


            rigid.velocity = globalVelocity;
            bTargetReady = true;

            if (isSlowMotion) timeManager.slowMotion();
        }

Первое местоположение шара первое местоположение шара

И после 2-мерного движения он попадает перед целью Двухмерное движение перед попаданием в цель


person Ayşe Betül Şimşek    schedule 14.02.2020    source источник
comment
может я неправильно понимаю, но вроде цель на курсе? он останавливается перед целью? есть коллайдер, который слишком большой?   -  person nka_Zz    schedule 14.02.2020
comment
по ракурсу иногда останавливается до цели, иногда после цели, а иногда останавливается точно по цели. Но он должен каждый раз останавливаться у цели. Есть коллайдер.   -  person Ayşe Betül Şimşek    schedule 14.02.2020
comment
делает твердое тело с использованием другой физики? По физическим расчетам он должен каждый раз попадать в цель. Но это попадает в другое место, что я вычислил??   -  person Ayşe Betül Şimşek    schedule 14.02.2020
comment
В чем разница между точками остановки на оси? Например, иногда он останавливается на 10.000134f, а иногда останавливается на 10.000256f? Цифры - это всего лишь пример, но то, что я испытал, - это сложно с точностью. Возможно, попробуйте исправить позиции и числа на .00f, это может помочь.   -  person Thalthanas    schedule 14.02.2020
comment
разница не маленькая. Это как 10f и - 13f.   -  person Ayşe Betül Şimşek    schedule 14.02.2020


Ответы (1)


Я изменил первые 3 строки с приведенными ниже кодами. И проблема решена.

    Vector3 projectileXZPos = transform.position;
    Vector3 targetXZPos = TargetObjectTF.position;
    float dist = Vector3.Distance(projectileXZPos, targetXZPos);
    transform.LookAt(targetXZPos);
person Ayşe Betül Şimşek    schedule 14.02.2020