Здравствуйте дорогие друзья. Вопрос следующий: Дергается объект сильно при движении. Если убрать 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 оно возвращает время от начала кадра. По сути при каждом таче оно будет разным. Думаю стоит копать в эту сторону. Ведь если нету задержки в виде тача то всё идёт нормально. Мне так кажется. Попробуйте указать какое то стабильное время. Типа секунды. Если будет норм то точно проблема со временем. И ещё как вариант что ему просто не хватает времени на действие. Из-за условия. Ведь как только тач перейдет в другую фазу то условие не будет срабатывать
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Собственно, отправляю пост запрос по ссылке https://mysitecom/login?preferredLanguageCode=EN но ссылка обрезается и получается запрос идет на https://mysite
Цикл принимает пользовательский ввод в строку и парсит его, в случае неудачного парсинга или запроса на сервер по ScreenName - возвращает ЭксепшнКакое...
Есть несколько перегрузок AutoResetEventWaitOne() Когда срабатывает сигнал signal
Пишу класс для бесконечных чисел с плавающей точкойОднако, конвертация в строку происходит неправильно