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

如何让动画播放结束后停留在最后一帧不重新播放?

解决方法

这是Unity Animator动画结束后姿态复位的常见问题,按以下步骤操作即可实现动画停留在最后一帧的效果,不需要开启循环:

基础设置修复(覆盖90%场景)

  • 选中项目中的指向动画剪辑资源,在Inspector导入设置中找到Wrap Mode,设置为Clamp Forever
    该模式下动画播放到末尾后会持续保持最后一帧的所有骨骼姿态,既不会循环重播,也不会复位到初始绑定姿势
  • 打开Animator窗口,选中播放指向动画的State,取消勾选Write Defaults选项

    绝大多数动画播放完成后复位的问题都由Write Defaults导致:该选项开启时,Animator会在当前状态退出/播放结束后,自动将所有骨骼属性重置为Avatar的默认绑定姿势,也就是你观察到的动画播完手部垂落复位的现象。

  • 不需要开启Loop Time、Loop Pose,也不需要额外修改Root Transform的Bake相关设置,这些配置只对循环动画、根运动动画生效,和保持最后一帧姿态无关,这也是你之前尝试的操作没有生效的核心原因。

代码控制方案(适配动态触发场景)

如果你的指向动画是运行时动态触发、需要和逻辑状态联动的,可以通过StateMachineBehaviour直接控制动画停在最后一帧,不需要修改资源导入设置,代码如下:

using UnityEngine;

public class KeepAnimationLastFrame : StateMachineBehaviour
{
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // 触发时动画从头开始播放
        animator.Play(stateInfo.fullPathHash, layerIndex, 0f);
    }

    public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // 动画播放完成后将进度固定在最后一帧位置
        if (stateInfo.normalizedTime >= 1f)
        {
            animator.Play(stateInfo.fullPathHash, layerIndex, 1f);
        }
    }
}
  • 将该脚本挂载到Animator中对应的指向动画State上即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:57:11