Для движения, похожего на змею, вы, вероятно, получите много странного поведения, если будете рассматривать сферы как отдельные объекты.Хотя я могу представить, что можно заставить его работать, я думаю, что это не самый лучший подход.
Первое, что приходит на ум, - это создать список, к которому вы добавляете индекс 0 на каждомкадр, положение головы змеи.Список будет расти, и все остальные сегменты будут ждать своей очереди, поэтому отстает от x кадров, и на каждом сегменте обновления у будет позиция списка [x * y]
Если Count () спискабольше, чем number_of_segments * lag, вы RemoveAt (Count () - 1)
Это можно оптимизировать, так как изменение списка несколько дорого (кольцевой буфер лучше подходит, но очередь также может работать. Для начала).я нахожу списки намного проще, и вы всегда можете оптимизировать позже).Это может вести себя немного неловко, если ваша частота кадров сильно варьируется, но в целом должна быть очень стабильной (например, при отсутствии непредсказуемого движения, мы снова и снова используем одни и те же значения)
Второй метод: вы упомянулииспользование сплайна Безье для генерации пути.Безье параметризуется с помощью числа с плавающей запятой t, поэтому у вас есть что-то вроде
SplineAt(t).
, если вы берете ваши bezier_path_length и distance_between_segments, тогда сегмент n должен иметь позицию
SplineAt(t-n*distance_between_segments/bezier_path_length)