一段时间后播放随机动画而无需输入

时间:2014-05-25 16:27:29

标签: c# animation unity3d

所以这就是我想要做的事情:玩家在地上空转,根本不动。一段时间后,应播放一个随机空闲动画。如何检测到玩家在一段时间内没有移动?

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's the same as the previous one...
    if (i == idleIndex) {
        // try another one
        return IdleRandom ();
    }
    else
        return i;
}

我已经设置了我的动画控制器,以便在按下空闲触发器时播放其中一个空闲动画(由idleIndex选择)。我唯一无法弄清楚的是不动的确定时间!

1 个答案:

答案 0 :(得分: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;
    }
}