да, точно, видимо нужно испльзовать отдельный таймер, или таймлайн, или кривую, или иную логику, для каждого скила отдельно.
Алгоритм здесь может быть весьма разнообразным. Но суть по идее одна - хранить время отката и обрабатывать его, для каждого скила отдельно, тоесть понадобится массив для хранение данных, и массив(или select нода) с данными о максимальном времени для отката, можно еще добавить массив с булевыми переменными которые будут отвечать в кд скил или нет, но это не обязательно.
Сделай структу в которой будет, имя скила(enum), макс время для КД скила(флоат), время текущеее КД(флот), булевая переменная отвечающая что скил в КД, и попробуй поработать с ней.
Также это могут быть и отдельные массивы, если с структурами неудобно, или компонент, с нужными переменными. Массивы в структуре делать в данном случае не нужно, потом всю структуру проще сделать массивом.
Минимальный вариант, это массив с текущем временем(с ним и работать), и селект с параметрами в логике, ну и без основ примитивной математики здесь не обойтись.
p.s. Пяток таймлайнов, и почти ничего выдумывать не нужно, даже массив с макс временем для КД скилов не нужен. Это может быть сразу задано в свойствах таймлайна, также пусть таймлайн сразу возвращает от 0 до 100, где 100 это готовность скила. Это понадобится для анимации КД скила.
Перед выходом из игры получай текущие значения времени таймлайнов, и запускай таймлайн с нужного времени, при входе в игру, если требуется. Если таймлайн работает, значит скил в КД.