当前位置: 首页 > news >正文

Unity动画控制器(Animator)动画片段空跑问题

博主在Unity中想要控制挖掘机挖斗做挖掘动作,由于该挖斗上方存在一个连杆区域与小臂连接,在Unity中不太好直接用代码控制,因此博主将挖斗挖掘动作在建模软件(Blender)中制作成了动画,并通过Animator的setfloat来控制动画的正序、停止、倒序播放,且由于挖斗的挖掘动画是不需要循环播放的,因此将loopTime取消了勾选。

image

通过下图可以看出博主是通过设置变量BuckControlSpeed控制动画的播放,-1倒序播放、0停止播放、1正序播放。

image

在实际的开发过程中,博主发现此时的动画片段会存在一个空跑的现象,完整的问题描述如下: 

我有一个动画片段(这个动画不是需要循环播放的,所以没设置LoopTime),在Unity中使用了animator.SetFloat(name, Value);来控制这个动画的正序播放、停止、倒序播放,但是我在实际的使用过程中发现,当Value的值持续的为-1、0、1时,如果动画片段的播放超过的边界帧,则动画播放会进入一个空跑状态;即:如果Value为-1控制动画片段倒序播放,当动画片段播放到第0帧时如果Value依旧为-1,则动画帧会变成负数,陷入空跑;此时如果想要让动画正序播放,则需要持续的输入Value等于1将空跑的那段时间抵消掉才能让动画正常正序播放。

 解决方案:即将整个动画播放过程进行归一化处理(0 -> 1),判断动画的归一化值有没有到达0或1(两个边界值),如果到达了边界值则将BuckControlSpeed设置为0,并且强制将动画帧停留在第一帧或最后一帧,这样就能有效解决动画播放出现空跑的问题;(提问回答)

以下是可以直接使用的代码:

 1     /// <summary>
 2     /// 解决动画播放问题,适用于所有带有速度参数的非循环动画
 3     /// </summary>
 4     /// <param name="animator"></param>
 5     /// <param name="name"></param>被设置的动画参数名
 6     /// <param name="value"></param>控制动画播放的值 -1、0、1
 7     /// <param name="playSpeed"></param>动画播放速度
 8     public void _AnimationControl_MuseChat(Animator animator, string name, float value, float playSpeed)
 9     {
10         // 获取当前动画状态(假设动画在第0层)
11         AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
12         // 获取当前动画片段信息
13         AnimatorClipInfo[] clipInfos = animator.GetCurrentAnimatorClipInfo(0);
14         if (clipInfos.Length == 0) return;
15 
16         // 获取当前播放速度(通过SetFloat设置的值)
17         float currentSpeed = animator.GetFloat(name);
18 
19         float normalizedProgress = GetNormalizedProgress(stateInfo, animator);
20         // 非循环动画且动画正在播放时才进行边界检查
21         if (!clipInfos[0].clip.isLooping && normalizedProgress >= 0)
22         {
23             // 正放时检查是否超过结束帧
24             if (currentSpeed > 0 && normalizedProgress >= 1.0f)
25             {
26                 animator.SetFloat(name, 0); // 停止播放
27                 // 可选:强制将动画定格在最后一帧
28                 animator.Play(stateInfo.fullPathHash, 0, 1.0f);
29             }
30             // 倒放时检查是否超过开始帧
31             else if (currentSpeed < 0 && normalizedProgress <= 0.01f)
32             {
33                 animator.SetFloat(name, 0); // 停止播放
34                 // 可选:强制将动画定格在第一帧
35                 animator.Play(stateInfo.fullPathHash, 0, 0.0f);
36             }
37             else
38             {
39                 // 循环动画或动画未播放时,直接应用速度
40                 animator.SetFloat(name, value * playSpeed);
41             }
42         }
43         else
44         {
45             // 循环动画或动画未播放时,直接应用速度
46             animator.SetFloat(name, value * playSpeed);
47         }
48     }
49 
50     /// <summary>
51     /// 计算归一化进度(0~1),仅处理反向播放,移除循环取模(避免帧数跳回)
52     /// </summary>
53     private float GetNormalizedProgress(AnimatorStateInfo stateInfo, Animator animator)
54     {
55         float normalizedTime = stateInfo.normalizedTime;
56 
57         // 处理反向播放(speed<0时,进度从1→0)
58         if (stateInfo.speed < 0f)
59         {
60             normalizedTime = 1f - Mathf.Abs(normalizedTime);
61         }
62 
63         // 强制限制在0~1,杜绝任何循环/超出的可能(核心:避免198→0或0→198)
64         return Mathf.Clamp01(normalizedTime);
65     }

 

http://www.jsqmd.com/news/81849/

相关文章:

  • 如何快速掌握Wabbajack自动化模组安装工具
  • 800个Unity材质球资源完全指南:提升游戏视觉效果的终极方案
  • Media Player Classic-HC终极指南:免费开源播放器的完整配置教程
  • 终极指南:如何在ComfyUI中实现FP8量化视频超分[特殊字符]
  • 2025年全套煤炭化验设备厂家实力排名,看哪家合作案例多? - mypinpai
  • 42、数学分析中的集合与函数性质研究
  • BrowserBee:用自然语言智能操控浏览器的AI助手
  • FlashAI多模态整合包深度解析:如何在3分钟内完成企业级AI部署
  • Switch21.1.0系统大气层1.10.1整合包系统稳定版
  • 2025年五大商用智能扫地机器人服务排行榜,新测评精选服务商 - myqiye
  • 全棉针织舒适厂家TOP5权威推荐:精细工艺供应商深度测评,甄 - myqiye
  • 如何用jynew剧情编辑工具实现可视化设计:零基础快速上手指南
  • 43、解析集与波莱尔集的深入探究
  • 2025年六安高性价比汽车贴膜店铺推荐,求推荐的汽车贴膜店全 - 工业品牌热点
  • 电磁超声测厚仪供应商TOP5权威推荐:甄选企业助力工业检测升 - 工业品牌热点
  • 19、搭建网络服务:DNS、Samba 与打印服务器
  • 2025年五大智慧景区优质供应商排行榜,智慧景区品牌制造商 - 工业推荐榜
  • 2025年十大高品质家纺面料品牌排行榜,奈特绵的好处解析 - 工业推荐榜
  • 3、安卓开发环境搭建及工具使用指南
  • LZ4极速压缩:揭秘汇编优化如何让性能飙升30%
  • 行业标杆大盘点:2025电线电缆品牌推荐 - 黑马榜单
  • 5分钟上手Positron:下一代数据科学开发环境全解析
  • GC5035 CSP:移动摄影的终极图像传感器解决方案
  • 2025年12月电动球阀,气动丝口球阀,气动PP球阀厂家推荐:行业权威盘点与品质红榜发布​ - 品牌鉴赏师
  • 3B参数掀起企业AI革命:IBM Granite-4.0-Micro-Base重新定义效率标杆
  • 2025治疗柜服务厂商TOP5权威推荐:甄选正规供应商守护医 - myqiye
  • 终极GUI自动化指南:UI-TARS如何彻底改变人机交互模式
  • 如何快速掌握ANTLR4 C++:5个实用技巧让语法解析变得简单
  • 28、系统安全防护全攻略:从登录到网络的深度剖析
  • 5个步骤快速上手spRAG开源项目:从安装到实战应用全解析