Показать сообщение отдельно
Старый 22.07.2012, 21:25   #4
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: следование объекта за мышью

Посмотрите пожалуйста в чём дело?
Давай промотаем твой код в голове:
Шаг 1. Юнити выполняет свою внутреннюю логику.
Шаг 2. Юнити пробегает по событиям и обнаруживает, что игрок держит кнопку мыши над объектом.
Шаг 3. Юнити передаёт бразды правления твоему скрипту.
Шаг 4. Твой скрипт 50 раз сферически интерполирует позицию объекта.
Шаг 5. Юнити отрисовывает сцену.

Собственно, "почему так" ты сейчас должен понять. Подскажу как исправить:
Когда игрок кликает по объекту, тебе стоит устанавливать некоторую переменную-таймер, а потом в Update() (или FixedUpdate()) проверять, включен ли этот таймер или нет (сравнивая с текущим временем, например), и если таки да - чуть-чуть двигать объект. Один шажочек за один такт.

А также предложите команды по плавному перемещению.
Vector3.Lerp
Vector3.MoveTowards
Vector3.SmoothDamp
Любая из них. Проще всего работать будет со второй. Выглядеть будет так (JS):
transform.position = Vector3.MoveTowards(transform.position, destination_vector3, max_speed*Time.deltaTime);
Зачем использовать Time.deltaTime:
Потому что так мы можем задавать переменную max_speed в еденицах в секунду. Это очень удобно, на мой взгляд, очень человекоориентированно.
Нюанс: если мы эти действия совершаем в FixedUpdate, то использовать нужно Time.fixedDeltaTime.
(Offline)
 
Ответить с цитированием