Кривая не накладна. В рантайме она вообще не обсчитывается, потому что все её точки рассчитаны в Редакторе. Её можно обновлять, принудительной командой RefreshCurve при необходимости. Так что, по-сути, кроме памяти на массив векторов, она ничего не стоит и можно содержать в программе хоть сотни таких кривых.
Но алгоритм так себе, если честно. Так что кривые третьего порядка были бы не лишними. Сейчас один уважаемый камрад работает над ними, но и ваш вариант, мог бы быть весьма интересен.
Касательно шага : расстояние между точками кривой приблизительно равное. Но не гарантировано равное. В видео выше, я перемещаю автомобили по кривой так (псевдокод) :
- Код: Выделить всё
if(Vector3.Distance(transform.position, targetVector) < 1f) targetVector = curve.curvePoints[index + 1];
LookAt на текущую цель движения (targetVector)
transform.Translate(0,0, Time.deltaTime * speed);
Таким образом, скорость перемещения по Кривой всегда равномерна на 100%.
Если сюда добавить сглаженную интерполяцию "взгляда", то движение объекта в повороте также будет гладким и плавным. К примеру использовать что-то вроде
SmoothFallow