所以这就是我想要做的事情:玩家在地上空转,根本不动。一段时间后,应播放一个随机空闲动画。如何检测到玩家在一段时间内没有移动?
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选择)。我唯一无法弄清楚的是不动的确定时间!
答案 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;
}
}