Unity 里的动画,为什么这么费 CPU?

📅 2026/8/18 13:28:09
Unity 里的动画,为什么这么费 CPU?
前段时间做一个小 FPS 项目,场景里敌人一多,帧率就往下掉。用 Profiler 一看,Animators.Update这一栏占了一大块 CPU 时间,我才意识到动画原来是这么重的一块开销。之前一直觉得动画不就是"播个片子"嘛,能有多费劲?后来查了不少资料、翻了 Unity 的文档,才慢慢搞明白这里面的门道。这篇就把我理解的东西梳理一下,尽量讲得通俗一点,适合刚接触 Unity 动画性能问题的人。动画不是"播放",而是"每帧重新算一遍"这是我一开始最大的误区。我们看视频的时候,每一帧的画面早就存好了,播放器只管往屏幕上贴就行,几乎不费什么力气。但游戏里的角色动画完全不是这样。角色是一副骨架撑起来的,动画数据存的其实是"每根骨头在某个时刻应该转到什么角度、移到什么位置"。所以游戏每渲染一帧,引擎都得干这么一串活:先看现在动画播到哪个时间点了,然后把这个时间点上每根骨头的位置、旋转算出来,接着根据骨头的变形去带动网格上的每一个顶点,最后才轮到显示。关键就在这——这套计算每一帧都要重来一遍。游戏跑 60 帧,就是一秒钟算 60 次。角色骨头几十根,顶点成千上万,你算算这工作量。骨骼越多、角色越多,账就翻倍假设一个角色有 60 根骨头,这不算多,人形角色带上手指经常就上百了。一个角色一帧算 60 根骨头,看着还行。可 FPS 战斗里场上经常十几二十个敌人一起活动:20 个敌人 × 60 根骨头 = 1200 次骨骼计算,每帧 一秒 6