ИИ машины для дрифта Unity3D
Не получается научить ИИ машины дрифту. Менял сопротивление колес при заносе, пытался учитывать вектор инерции при повороте, в итоге пришел к тому, с чего начал. Машина просто уходит на скорости в занос и все.
Код расчета угла поворота
private void ApplySteer()
{
//нахождения вектора движения к точке
Vector3 relativeVector = transform.InverseTransformPoint(point[currectNode].transform.position);
//расчет угла поворота передних колес
float newSteer = (relativeVector.x / relativeVector.magnitude) * maxSteerAngle;
wheelFL.steerAngle = newSteer;
wheelFR.steerAngle = newSteer;
}
Код движения автомобиля
private void Drive()
{
//крутящий момент передних колес
wheelFL.motorTorque = maxMotorTorque;
wheelFR.motorTorque = maxMotorTorque;
if(driftAngle <= 7f)
{
//крутящий момент задних колес вне время дрифта
wheelBL.motorTorque = maxMotorTorque;
wheelBR.motorTorque = maxMotorTorque;
//боковое сопротивление задних колес вне время дрифта
WheelFrictionCurve myWfc;
myWfc = wheelBL.sidewaysFriction;
myWfc.extremumSlip = 0.2f;
wheelBL.sidewaysFriction = myWfc;
wheelBR.sidewaysFriction = myWfc;
}
else
{
//крутящий момент задних колес во время дрифта
wheelBL.motorTorque = maxMotorTorque * 2;
wheelBR.motorTorque = maxMotorTorque * 2;
//боковое сопротивление задних колес во время дрифта
WheelFrictionCurve myWfc;
myWfc = wheelBL.sidewaysFriction;
myWfc.extremumSlip = 0.9f;
wheelBL.sidewaysFriction = myWfc;
wheelBR.sidewaysFriction = myWfc;
}
}
Ответы (1 шт):
Вопрос удалось решить методом проб и ошибок. Поигрался со значением бокового трения задних колес, нашел значение, при котором машина делала движения немного напоминающие дрифт. Дальше написал условия поведения передних и задних колес при разных углах дрифта и ограничитель скорости, чтобы машина не влетала в поворот на полных оборотах. Получилось неплохо. Пишите в комментарии, если нужно будет более подробное объяснение.


