Воспроизведение случайной анимации через некоторое время без ввода

1

Итак, вот что я хотел бы сделать: игрок простаивает на земле, а не двигается вообще. И через некоторое время следует сыграть случайную анимацию бездействия. Как определить, что игрок не двигался в течение определенного времени?

IEnumerator Idle()
{
    // check if player is idling on the ground
    if (grounded && (_controller.velocity.x == 0))
    {
        // Now what?
        //...
    }
    idleIndex = IdleRandom();
    _animator.SetInteger("IdleIndex", idleIndex);
    _animator.SetTrigger("Idle");
}

int IdleRandom()
{
    // choose random index of idle animations
    int i = Random.Range(0, numberOfIdleAnims);

    // if it the same as the previous one...
    if (i == idleIndex) {
        // try another one
        return IdleRandom ();
    }
    else
        return i;
}

Я уже настроил свой контроллер аниматора так, чтобы он играл одну из бездействующих анимаций (выбранных idleIndex), если простаивает триггер. Единственное, что я не могу понять, - это вещь не в движении!

Теги:
unity3d
animation

1 ответ

0

Вам нужно посчитать время, в течение которого ваш игрок простаивал, а не двигался. Вы можете сделать это в функции void FixedUpdate().

Я резко изменил свой код. Убедитесь, что вы включили код для воспроизведения анимаций.

public class IdleManager : MonoBehaviour
{
    private isIdle = false;
    private float previousTime;
    private const float IDLE_TIME = 5.0f;

    void Update()
    {
        if(!isIdle && grounded && (_controller.velocity.x == 0))
        {
            isIdle = true;
            previousTime = Time.timeSinceLevelLoad();
        }

        else if(isIdle && Time.timeSinceLevelLoad - previousTime > IDLE_TIME)
        {
            // Play animation here.

            // Reset previousTime.
            previousTime = Time.timeSinceLevelLoad;  
        }

        else if(grounded || _controller.velocity.x > 0)
            isIdle = false;
    }
}
  • 0
    Вы можете просто сделать то же самое в вашем сопрограмме.
  • 0
    @Marconius Это зависит от того, как он вызывает Idle() . Вот почему я хочу, чтобы он отправил этот звонок.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню