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 шт):
Создай UnityEvent<float> для LevelUpdate, в скрипте уровня, а все элементы уровня цепляй слушателями к этому эвенту, который обновляется в скрипте уровня с нужной Time.deltaTime*GameSpeed и в элементпх уровня используй вместо Update().
Есть вариант гораздо легче, просто те объекты которые не должны менять свою динамику при изменении timeScale, используйте Time.unscaledDeltaTime вместо Time.deltaTime