Пока вы не объясните, почему вы используете ручные силы или как вы справляетесь с силами, генерируемыми Unity Engine, я бы хотел подчеркнуть одну проблему в вашем подходе.Вы рассчитываете направление на основе позиций, но позиции являются центром ваших автомобилей.Таким образом, вы не получаете правильное направление, как вы можете видеть на изображении ниже:

Таким образом, вы рассчитываете направление между двумя опорными или центральными точкамиВаша сила немного наклонена на левом изображении.Вместо этого вы можете использовать ContactPoint и затем рассчитать направление.
Как более подробную информацию, чтобы ОП мог понять, что я сказал!На изображении выше вы можете увидеть область с синим прямоугольником.Вы получите все контактные точки для соответствующего региона, используя Collision.contacts
, затем вычислите центральную точку или центроид, как это
Vector3 centroid = new Vector3(0, 0, 0);
foreach (ContactPoint contact in col.contacts)
{
centroid += contact.point;
}
centroid = centroid / col.contacts.Length;
Этоцентр прямоугольника, чтобы найти направление, которое вам нужно, чтобы найти его проекцию на вашем автомобиле следующим образом:
Vector3 projection = gameObject.transform.position;
projection.x = centroid.x;
gameObject.GetComponent<Rigidbody>().AddForce((projection - centroid )*100, ForceMode.Impulse);
Так как я не знаю ваши настройки, я только что получил значения y и z с позиции автомобиля, но xзначение от centroid
, поэтому вы получаете прямую синюю линию, а не стрелку, наклоненную влево, как на первом изображении, даже в случае двух второго изображения.Я надеюсь, что я проясняюсь.