Странно работающий Time.deltaTime

Программирование на Юнити.

Странно работающий Time.deltaTime

Сообщение тёмная гречка 01 июл 2020, 14:49

Пишу скрипт для плавного движения панели выбора уровня(тип нажал на кнопку и она плавно уехала, как будто страницу перелистнул).
Скрипт отлично выполняет функцию перемещения объекта, к которому я прикрепил саму панель из кнопок для перемещения на уровни, но как только я добавляю Time.deltaTime при запуске сцены объект начинает трясти в пределах от -3 до 0 по осям X и Y, а функции движения сдвигают его вместо указаных 190 едениц примерно на 7-15. Без дельтатайма скрипт просто телепортирует объект в нужные координаты. Привожу сам код(без дельтатайма):
Синтаксис:
Используется csharp
public void next()
    {
        target = new Vector3(-190, 0, 0); // задаёт координаты за границей экрана, чтобы страница с уровнями плавно уплыла за экран
    }
    public void previous()
    {
        target = new Vector3(0, 0, 0); // задаёт координаты на экране, чтобы страница с уровнями вернулась на экран
    }
    public void Update()
    {
        Move();
    }
    public void Move()
    {
        levels.transform.position = Vector3.MoveTowards(transform.position, target, 10); // скрипт движения объекта
    }

С дельтатаймом всё то же самое кроме функции Move(). Она выглядит так:
Синтаксис:
Используется csharp
public void Move()
    {
        levels.transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * 10);
    }

Подскажите как избежать тряски объекта или другой способ двигать его плавно. Заранее спасибо.
тёмная гречка
UNец
 
Сообщения: 22
Зарегистрирован: 17 июн 2020, 21:09

Re: Странно работающий Time.deltaTime

Сообщение samana 01 июл 2020, 15:55

Мне кажется, вы просто не то двигаете, нужно
либо так
levels.transform.position = Vector3.MoveTowards(levels.transform.position, target, .. всё остальное
либо так
transform.position = Vector3.MoveTowards(transform.position, target, .. всё остальное

MoveTowards возвращает результат от А до Б на заданный интервал. Например А = 1, Б = 2, результат MoveTowards(А,Б, 0.5) будет постоянно равен 1.5, то-есть пол пути от 1 до 2.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Странно работающий Time.deltaTime

Сообщение тёмная гречка 01 июл 2020, 17:42

samana писал(а):Мне кажется, вы просто не то двигаете, нужно
либо так
levels.transform.position = Vector3.MoveTowards(levels.transform.position, target, .. всё остальное
либо так
transform.position = Vector3.MoveTowards(transform.position, target, .. всё остальное

MoveTowards возвращает результат от А до Б на заданный интервал. Например А = 1, Б = 2, результат MoveTowards(А,Б, 0.5) будет постоянно равен 1.5, то-есть пол пути от 1 до 2.

я переписал строчку движения
Синтаксис:
Используется csharp
levels.transform.position = Vector3.MoveTowards(levels.transform.position, target, Time.deltaTime * 10);

теперь объект движется плавно. Но при старте сцены улетает на -3240 по Z. Когда же воспроизводится функция next(), при достижении целевой координаты по X, он не останавливается, а продолжает плавно двигаться с той же скоростью и в том же направлении. Причём обратное движение останавливается ровно там, где нужно.(координата Z всё это время незначительно меняется около -3240)
тёмная гречка
UNец
 
Сообщения: 22
Зарегистрирован: 17 июн 2020, 21:09

Re: Странно работающий Time.deltaTime

Сообщение samana 01 июл 2020, 20:42

К сожалению, я не намеренно ввёл вас в заблуждение, так как забыл о логике метода moveTowards. Вам нужно заменить его на Vector3.Lerp.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Странно работающий Time.deltaTime

Сообщение тёмная гречка 02 июл 2020, 00:06

samana писал(а):К сожалению, я не намеренно ввёл вас в заблуждение, так как забыл о логике метода moveTowards. Вам нужно заменить его на Vector3.Lerp.

Lerp ничего не исправил. Теперь нет плавного движения вообще, объект просто телепортируется, причём не на -190 а на -600, и с большой скоростью удаляется. Обратный скрипт возвращает его на место, тоже телепортацией, но не на 0, а на -1.0000е25, и объект продолжает колебаться вокруг этого значения.
тёмная гречка
UNец
 
Сообщения: 22
Зарегистрирован: 17 июн 2020, 21:09

Re: Странно работающий Time.deltaTime

Сообщение тёмная гречка 02 июл 2020, 00:36

Ужас, какой же я тупой. Код работал с глобальными координатами, а я смотрел на локальные. Кароч всё работает просто прекрасно, если указать правильные глобальные координаты. Спасибо, за ваше потраченное на меня время.
тёмная гречка
UNец
 
Сообщения: 22
Зарегистрирован: 17 июн 2020, 21:09


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11