Unity - Как сделать время одних объектов независимо от других?

Я имею ряд проблем и прошу помочь мне их решить.

1) Дело в том, что мне нужно сделать slow motion в игре. Но интерфейс и камера (спектатор) должны работать по стандартному времени (Time.timScale = 1)

Но используя Time.timeScale вся игра погружается в slow motinon, в том числе камера, анимация кнопок т.д.

В камере использую Input.GetAxis, который тоже работает от времени в игре и из-за этого при остановке времени (Time.timeScale = 0) и камера прекращает двигаться.

2) Думаю использовать отдельный скрипт, который будет иметь переменную типа float, к которой присваивается значение Time.deltaTime * n (где n - во сколько раз ускорено). Но это будет очень муторно, ведь тогда ко всему нужно будет привязывать эту переменную (к анимациям, движению персонажей, rigidBody и т.д.).

Можно ли как то иначе это использовать? Чтобы к примеру в одном скрипте использовалось только время с запуска игры, а не игровое время.

3)

 Time.timeScale = speedTime;
        timeText();

Камера (управление её)

float Ver = Input.GetAxis("Vertical") * speedcam;
        float Hor = Input.GetAxis("Horizontal") * speedcam;

        cameraStatus.position += (cameraStatus.forward + cameraStatus.right) * Hor
        + (cameraStatus.up) * Ver;

(Камера - ортографическая, поэтому к ней такое управление)

Заранее спасибо тем, кто помог мне


Ответы (2 шт):

Автор решения: Yaroslav

Создай UnityEvent<float> для LevelUpdate, в скрипте уровня, а все элементы уровня цепляй слушателями к этому эвенту, который обновляется в скрипте уровня с нужной Time.deltaTime*GameSpeed и в элементпх уровня используй вместо Update().

→ Ссылка
Автор решения: nipercop

Есть вариант гораздо легче, просто те объекты которые не должны менять свою динамику при изменении timeScale, используйте Time.unscaledDeltaTime вместо Time.deltaTime

→ Ссылка