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

Unity中如何通过代码单独控制单个动画状态的播放速度?

单独控制Animator中Walking动画状态的播放速度实现冲刺效果

方法一:通过参数绑定(推荐)

这种方式无需直接操作动画状态机,通过Animator参数单独控制Walking状态的速度,不会影响其他动画:

  1. 配置Animator Controller

    • 打开你的Animator Controller,在Parameters面板添加一个Float类型参数,命名为WalkSpeedMultiplier,默认值设为1。
    • 选中Walking动画状态,在Inspector的Motion栏下,点击Speed属性旁的齿轮图标,选择Add Parameter并绑定到WalkSpeedMultiplier。
  2. 编写控制代码
    通过SetFloat方法修改参数值,即可调整Walking状态的播放速度:

public Animator animator;
// 冲刺时的速度倍数
public float sprintMultiplier = 2f;
private readonly float normalWalkMultiplier = 1f;

void Update()
{
    // 示例:按住左Shift触发冲刺,松开恢复正常
    if (Input.GetKey(KeyCode.LeftShift))
    {
        animator.SetFloat("WalkSpeedMultiplier", sprintMultiplier);
    }
    else if (animator.GetFloat("WalkSpeedMultiplier") != normalWalkMultiplier)
    {
        animator.SetFloat("WalkSpeedMultiplier", normalWalkMultiplier);
    }
}

方法二:直接操作动画Playable

如果不想通过参数绑定,也可以直接访问动画状态的Playable对象修改速度:

public Animator animator;
public float sprintSpeed = 2f;
private readonly float normalWalkSpeed = 1f;

void Update()
{
    // 获取Base Layer(索引0)的当前状态
    AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
    // 判断是否处于Walking状态
    if (stateInfo.IsName("Walking"))
    {
        var playable = animator.GetCurrentAnimatorPlayableState(0);
        if (playable.IsValid())
        {
            var clipPlayable = (AnimationClipPlayable)playable.GetChild(0);
            // 根据输入切换速度
            clipPlayable.SetSpeed(Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : normalWalkSpeed);
        }
    }
}

注意:这种方法需要确保状态名称准确,且仅在Walking状态激活时生效,状态切换后会自动恢复其他动画的默认速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:42:53