Unity3D - превратиться в ожидании тугих углов - PullRequest
0 голосов
/ 27 октября 2019

У меня в настоящее время есть этот код, который является автомобильным ИИ WayPoint (с колесными коллайдерами), пытающимся предвидеть неконтролируемые скорости и крутые повороты. Вот код, приведенный ниже, это просто движущая часть, а не рулевое управление:

private void Drive()
    {
        float currDistFromWP = Vector3.Distance(transform.position, nodes[currentNode].position);

        float speed = rb.velocity.magnitude;
        float timeFloatLeft = currDistFromWP / speed;
        Vector3 relativeVector = transform.InverseTransformPoint(nodes[currentNode].position);
        float newSteer = (relativeVector.x / relativeVector.magnitude);
        Vector3 nextVector;
        if (currentNode == nodes.Count - 1)
            nextVector = transform.InverseTransformPoint(nodes[0].position - nodes[currentNode].position);
        else
            nextVector = transform.InverseTransformPoint(nodes[currentNode+1].position - nodes[currentNode].position);
        float diffSteer = (nextVector.x / nextVector.magnitude);
        Debug.Log("Steer to set: " + newSteer);
        Debug.Log("Current distance: " + currDistFromWP);
        if ((currDistFromWP < 50 && speed > 50) || (Mathf.Abs(newSteer) > .75f && speed > 10) || (currDistFromWP < 50 && speed > 30 && Mathf.Abs(diffSteer) > 55f))
        {
            Debug.Log("Braking... (speed is " + speed + " and degree to steer is " + newSteer + ")");
            im.throttle = 0;
            im.brake = true;
        }
        else if ((currDistFromWP < 30 && speed > 50) || (Mathf.Abs(newSteer) > .55f && speed > 20))
        {
            Debug.Log("Coasting... (speed is " + speed + " and degree to steer is " + newSteer + ")");
            im.throttle = 0;
            im.brake = false;
        }
        else
        {
            im.brake = false;
            im.throttle = 1;
        }
    }

«lativeVector »(из урока Eyemaginery) в основном преобразует следующую путевую точку в локальное пространство автомобиля, таким образом может дать ожидаемыйУправляй при помощи моего автомобильного контроллера.

Тем не менее, я также хочу взять сумму, необходимую для поворота от СЛЕДУЮЩЕЙ путевой точки к путевой точке после этого (большая устойчивость для узких поворотов):

enter image description here

Возможно, я неправильно понимаю, как получать векторы через InverseTransformPoint, но может ли кто-нибудь указать на функцию или строку кода, которые помогут мне достичь этого?

...