Unity 2019.4.18f1 Capsule Collider尺寸属性动画编辑异常咨询
问题根因排查
你新建的独立Capsule对象动画驱动正常,说明Capsule Collider的Center、Height属性本身完全支持Animator驱动,原角色上的功能失效完全是环境差异导致的,常见根因有三类:
- 原角色的Prefab覆盖联动问题
原角色基本都是带Prefab关联的场景实例,在Unity 2019.4.18f1版本下,如果没有在动画录制激活状态下,把对应属性的轨正式添加到当前动画片段的编辑列表里,直接在Inspector面板改碰撞体的Center、Height数值,会默认触发Prefab属性覆盖逻辑:相当于直接修改了场景实例甚至Prefab源文件上的碰撞体永久属性,而不是编辑动画关键帧。你测试用的新建Capsule是无任何Prefab关联的独立场景对象,不存在这层覆盖逻辑,所以编辑关键帧时不会误改永久属性。 - 挂载的控制脚本强制覆盖属性
角色类对象普遍会挂第三人称控制器、动态碰撞适配类脚本,这类脚本经常会在Update/LateUpdate逻辑里,每帧强制给Capsule Collider的Center、Height赋值,直接盖过Animator驱动的属性值。你测试用的新建Capsule上没挂任何自定义逻辑,所以动画值可以正常生效;同时这种脚本的覆盖逻辑在动画编辑预览态也会触发,就会出现“调一次数值后所有关键帧都被同步”的错觉。 - 当前Unity版本的序列化Bug触发
Unity 2019.4.18f1存在已知的动画序列化异常:如果编辑Capsule Collider类的属性关键帧时,曾经批量多选关键帧统一修改数值,会触发序列化错乱——同一个动画片段下,所有同属性的关键帧会被强制序列化为同一个值,同时把碰撞体的当前场景属性永久写死,没有自动回退路径。这个Bug的触发和对象的外部关联逻辑有关,所以在新建的测试裸对象上不会复现。
修复操作步骤
- 先解除碰撞体的Prefab覆盖:在Inspector中找到Capsule Collider组件,打开组件右上角的三点菜单,选择
Remove Override解除现有属性的Prefab绑定,再进入动画录制模式,重新在动画窗口添加Center、Height的属性轨,逐帧打关键帧,修改数值前确认动画窗口中对应关键帧处于选中高亮状态。 - 临时禁用角色上所有控制类脚本,再播放动画预览:如果这时候碰撞体可以随关键帧正常变化,就找到脚本中对Capsule Collider属性的每帧赋值逻辑,修改为仅在角色状态切换时单次赋值,不要逐帧写值覆盖Animator的驱动结果。
- 如果上述操作无效,直接删掉原动画片段中现有的两个碰撞体属性轨,从动画窗口的属性添加菜单里重新选择对应组件的center、height属性,重新打全部关键帧,不要复用之前已经存在的旧关键帧,避开序列化异常的影响。
补充:Animator直接驱动碰撞体属性的流畅度远高于动画事件逐帧调用脚本改值的方案,修复后完全可以替代你现在用动画事件的实现逻辑。
内容的提问来源于stack exchange,提问作者Rökkr
相关产品推荐
相关产品推荐

