Прежде всего, как вы представляете дорогу?
Я недавно сделал именно эту вещь, и я использовал Catmull-Rom сплайны для дороги. Чтобы сориентировать объект и заставить его следовать траектории сплайна, вам необходимо интерполировать текущую x, y, z позицию из t , которая идет вдоль сплайна, а затем сориентировать его вдоль Френета Система координат или Frenet Frame для этой конкретной позиции.
В основном для каждой точки вам нужно 3 вектора: касательный, нормальный и бинормальный. Тангенс будет фактическим направлением, на которое вы хотите, чтобы ваш объект (машина) указывал.
Я выбираю Catmull-Rom, потому что они легко вычитают касательные в любой точке - просто делайте (векторную) разницу между двумя другими близкими точками к текущей. (Допустим, вы находитесь на t , выберите t-эпсилон и t + эпсилон - при этом эпсилон является достаточно маленькой константой).
Для других двух векторов вы можете использовать этот итерационный метод - то есть вы начинаете с известного набора векторов на одном конце и работаете с новым набором, основанным на предыдущем, каждый updateframe () ).