You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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窗口,按以下步骤修改:

  • 删除Idle Bool参数,仅保留Running Float参数。
  • 设置Idle→Running的过渡条件为Running > 0.1,Running→Idle的过渡条件为Running <= 0.1。
  • 关闭过渡的Has Exit Time选项,避免动画未播放完成就触发切换;可适当调整过渡Duration值,让状态切换更自然。

3. 额外排查点

如果修复后仍有问题,检查以下内容:

  • 确认Rigidbody组件未勾选Is Kinematic,且碰撞体设置合理,避免玩家移动时出现卡顿。
  • 检查跑步动画片段的循环设置,确保Loop Time已勾选,且动画本身没有帧跳变问题。

内容的提问来源于stack exchange,提问作者kai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:02:30