Правильно ли я сделал небольшую задержку ввода?

Общие вопросы о Unity3D

Правильно ли я сделал небольшую задержку ввода?

Сообщение EIvanov 17 апр 2023, 17:39

В чем была проблема - в смене анимаций. Правильно ли я сделал задержку?
В редакторе - время переходов настроено минимально, нет has exit time т.е. нечего править.

При беге проигрывалась анимация Run, при остановке Idle.
Если игрок бежал в одну сторону (жал стрелку ->) и потом останавливался - всё выглядело нормально.
А если игрок бежал в одну сторону, а потом в другую, т.е. резко менял направление (жал стрелку ->, а потом сразу <-), то возникал "глюк".
Между сменой стрелок есть время. Пусть 0.3 секунды. И в это время horizontalInput==0, а значит играет анимация Idle.
Итого это выглядело как бег, резкая остановка и 0.3 секунды скольжение т.к. играет анимация Idle, а объект "бежит" и через 0.3 ,бег в другую сторону.

Я решил сделать задержку вот так. Это нормально или есть ещё варианты?

Синтаксис:
Используется csharp
// Задержка нужна для отключения срабатывания анимации Idle при резкой смене направления бега.
public float horizontalInputDelay=0.04f;
public float horizontalInputCurrentDelay=0f;

void FixedUpdate()
{      
//Расчет задержки для отпускания кнопки horizontalInput (горизонтальный ввод).
Debug.Log("horizontalInputCurrentDelay="+horizontalInputCurrentDelay);
if (horizontalInputCurrentDelay>0)horizontalInputCurrentDelay-=Time.fixedDeltaTime;    
}

void Update()
{
//if (horizontalInput == 0) playerAnimations = PlayerAnimations.Idle;  //Как было
if (horizontalInput == 0 && horizontalInputCurrentDelay<=0) playerAnimations = PlayerAnimations.Idle; // Как стало


// Мы можем менять направление на бегу. При смене, мы на секунду отпускаем клавишу и это приводит к мгновенному переходу к анимации Idle.
// Это создает некрасивый эффект при резкой смене направления. Поэтому мы должны сделать задержку отпускания кнопки.
if (horizontalInput != 0) {playerAnimations = PlayerAnimations.Run; horizontalInputCurrentDelay=horizontalInputDelay;}
}


PS
По идее можно было сделать промежуточные анимации - если horizontalInput==0, то на 0.4 сек игрок тормозит (нова анимация) и только потом Idle.
Но это долго, да и таких переходных анимаций будет куча - из бега в хотьбу и т.д.
EIvanov
UNIт
 
Сообщения: 103
Зарегистрирован: 05 июл 2021, 17:23

Вернуться в Общие вопросы

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

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