项目场景:
unity 控制玩家移动
问题描述
idle和run动画频繁切换
void Movement(){
xVelocity = Input.GetAxisRaw("Horizontal");
anim.SetFloat("speed",Mathf.Abs(rb.velocity.x));//跑动动画
if(xVelocity !=0){
transform.localScale = new Vector3(-xVelocity,1,1);
rb.velocity = new Vector2(xVelocity *speed*Time.deltaTime,rb.velocity.y);
}
原因分析:
Mathf.Abs(rb.velocity.x)有时会小于0.1
状态机在speed小于0.1时run->idle,大于0.1时idle->run,Mathf.Abs(rb.velocity.x)有时会小于0.1
解决方案:
anim.SetFloat("speed",Mathf.Abs(xVelocity));//动画
void Movement(){
xVelocity = Input.GetAxisRaw("Horizontal");
anim.SetFloat("speed",Mathf.Abs(xVelocity));//动画speed取值0、1
if(xVelocity !=0){
transform.localScale = new Vector3(-xVelocity,1,1);
rb.velocity = new Vector2(xVelocity *speed*Time.deltaTime,rb.velocity.y);
}
设置状态机,speed小于0.5时run->idle,大于0.5时idle->run,speed取值是0、1