сам хз как оно работает) когда-то была такая же проблема, просто нагуглил и сохранил себе)
% — это остаток от деления, key(numKeys).time — время последнего кифрейма. Получается, что у тебя время хуярит по-тихоньку, ты его делишь на чото, и берёшь остаток. Пускай для наглядности делишь на три, смотри как оно происходит.
время ебошит себе по-тихоньку, ближайший целый делитель по началу ноль — всё что больше нуля будет остатком. Потом время пересекает момент 3 секунды, и ближайшая целая залупа уже три, а остаток тем временем гхлядь — и обнулился; и попёр заново от нуля расти к трём, пока время растёт от трёх до шести. Затем на шести остаток также обнулится, и на девяти, и в итоге оно тебя переиграет.