Unity跑步动画启动后反复重启问题求助
问题解决:跑步动画频繁重启的修复方案
问题根源
你当前的代码使用Input.GetAxis("Vertical")获取输入,这个API会对输入做平滑插值处理,导致verticalInput的值在0和1之间缓慢波动,传递给动画的Running参数会出现持续的小幅度变化。再加上同时用Idle Bool参数控制状态切换,很容易让动画状态机在Idle和Running之间反复触发过渡,表现为跑步动画频繁重启。另外,动画状态机的过渡条件如果设置过于敏感,也会加剧这个问题。
修复步骤
1. 修改PlayerMovement脚本,优化输入与动画参数控制
替换输入获取方式,统一用单个参数控制动画状态,避免参数冲突与波动:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 4.5f; public float jumpForce = 5f; public Rigidbody rb; public Animator animator; private bool isMoving = false; void Update() { // 同步玩家旋转到相机Y轴方向 transform.rotation = Quaternion.Euler(0, Camera.main.transform.rotation.eulerAngles.y, 0); // 使用GetAxisRaw直接获取无平滑的输入值(-1/0/1),避免参数波动 float verticalInput = Input.GetAxisRaw("Vertical"); Vector3 movement = transform.forward * verticalInput * speed * Time.deltaTime; rb.MovePosition(rb.position + movement); isMoving = Mathf.Abs(verticalInput) > 0; // 仅用Running参数控制动画,Idle状态由Running<=0触发 animator.SetFloat("Running", isMoving ? speed : 0f); } }
2. 调整动画状态机设置
打开Animator窗口,按以下步骤修改:
- 删除
IdleBool参数,仅保留RunningFloat参数。 - 设置Idle→Running的过渡条件为
Running > 0.1,Running→Idle的过渡条件为Running <= 0.1。 - 关闭过渡的
Has Exit Time选项,避免动画未播放完成就触发切换;可适当调整过渡Duration值,让状态切换更自然。
3. 额外排查点
如果修复后仍有问题,检查以下内容:
- 确认Rigidbody组件未勾选
Is Kinematic,且碰撞体设置合理,避免玩家移动时出现卡顿。 - 检查跑步动画片段的循环设置,确保
Loop Time已勾选,且动画本身没有帧跳变问题。
内容的提问来源于stack exchange,提问作者kai
相关产品推荐
相关产品推荐

