У меня в настоящее время есть этот код, который является автомобильным ИИ 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) в основном преобразует следующую путевую точку в локальное пространство автомобиля, таким образом может дать ожидаемыйУправляй при помощи моего автомобильного контроллера.
Тем не менее, я также хочу взять сумму, необходимую для поворота от СЛЕДУЮЩЕЙ путевой точки к путевой точке после этого (большая устойчивость для узких поворотов):
Возможно, я неправильно понимаю, как получать векторы через InverseTransformPoint, но может ли кто-нибудь указать на функцию или строку кода, которые помогут мне достичь этого?