Здравствуйте дорогие друзья. Вопрос следующий: Дергается объект сильно при движении. Если убрать if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) из кода то объект движется плавно как надо. Как реализовать движение плавным после касания по экрану?
public Transform target;
private Vector3 _startPos;
private Vector3 _endPos;
void Start()
{
_startPos = transform.position;
_endPos = target.position;
}
void Update()
{
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
transform.position = Vector3.Lerp(_startPos, _endPos, Time.time);
}
Для сглаживания движения между кадрами обычно используют Time.deltaTime - это время, за которое кадр был обработан. Ну и, судя по всему, вы не совсем верно поняли, как работает интерполяция.
Метод Vector3.Lerp возвращает вам позицию от начальной до конечной точки согласно t. Однако, t - должен находиться между 0 и 1, т.е. если вы передаёте Vector3.Lerp(_startPos, _endPos, 0.5f); то получите позицию ровно посередине.
Таким образом t - вам нужно рассчитывать и чаще всего оно является соотношением того времени, которое прошло от начала движения к тому времени, за которое ваш "персонаж" должен пройти путь.
Я бы предложил вам использовать Vector3.MoveTowards. Он принимает от вас две позиции и максимальное смещение, которое вы разрешаете ему сделать. В данном случае вам не придётся рассчитывать время и вы сможете управлять скорость движения персонажа. Например, вот так:
[SerializeField]
float _velocity = 10;
void Update()
{
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
transform.position = Vector3.MoveTowards(transform.position, _endPos, Time.deltaTime * _velocity);
}
В данной реализации ваш персонаж будет двигаться от своего текущего положения в сторону целевой точки, пока он не достигнет этой точки, либо пока вы не уберёте палец от экрана.
Скоростью движения можно управлять изменяя переменную _velocity.
Думаю что проблема в Time.time оно возвращает время от начала кадра. По сути при каждом таче оно будет разным. Думаю стоит копать в эту сторону. Ведь если нету задержки в виде тача то всё идёт нормально. Мне так кажется. Попробуйте указать какое то стабильное время. Типа секунды. Если будет норм то точно проблема со временем. И ещё как вариант что ему просто не хватает времени на действие. Из-за условия. Ведь как только тач перейдет в другую фазу то условие не будет срабатывать
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости