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

Unity开发中Animator的Jump布尔参数应在何处重置为false?

Unity跳跃动画状态切换解决方案

你可以选择以下任意一种方案实现需求:

方案1:使用Animator状态机行为(推荐)

该方案无需修改原有角色控制脚本,由动画状态机自动触发状态切换:

  1. 打开你的Animator Controller面板,选中已创建的Jump状态
  2. 在Inspector面板点击Add Behavior,新建名为JumpStateBehavior的状态机脚本
  3. 编写脚本逻辑如下:
using UnityEngine;

public class JumpStateBehavior : StateMachineBehaviour
{
    // 当退出Jump状态时自动执行
    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        animator.SetBool("Jump", false);
    }
}

配置完成后,Jump动画播放完成自动退出状态时,会自动把Jump参数设为false,触发回Locomotion状态的过渡。

方案2:使用动画事件

该方案适合需要和跳跃逻辑同步触发其他操作的场景:

  1. 打开你的跳跃动画剪辑文件,在Animation编辑窗口将时间轴拖拽到动画最后一帧
  2. 点击时间轴上方的Add Event按钮,给最后一帧添加动画事件
  3. 在你的原有角色控制脚本中新增如下公共方法:
public void OnJumpAnimationEnd()
{
    anim.SetBool("Jump", false);
}
  1. 选中刚才添加的动画事件,在Inspector面板的Function下拉栏选中刚才新增的OnJumpAnimationEnd方法即可。

方案3:代码主动检测动画播放状态

如果需要在逻辑层主动判断跳跃动画是否播放完成,可以在原有脚本的Update方法中添加如下检测逻辑:

private void Update()
{
    // 原有跳跃逻辑保持不变
    if (Input.GetKeyDown(KeyCode.J) && isGrounded && useJump)
    {
        anim.SetBool("Jump", true);
        rb.AddForce(jump * jumpImpulse, ForceMode.Impulse);
        isGrounded = false;
    }

    // 新增跳跃动画播放完成检测
    AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0); // 参数为动画所在层的索引,默认基础层为0
    if (stateInfo.IsName("Jump") && stateInfo.normalizedTime >= 1f)
    {
        anim.SetBool("Jump", false);
    }
}

注意:stateInfo.IsName的参数需要和你Animator中Jump状态的命名完全一致,区分大小写。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:30:04