最开始跟着某本书做了个demo,动画直接用的画好的一堆png导入sprite然后直接拖到animation的关键帧上,然后getkeydown给人物直接改速度。一切正常
第二天突然看到骨骼动画IK blabla,看到都在说减轻绘画开销,脑子一抽就重做了一遍动画,而且是直接在scene上做的录制,做完一运行傻眼了:按键只有动画没有位移。搜了一波都在说勾选ApplyRootMotion,回头钩上发现确实可以动了
结果第二天再运行更离谱的事出现:运行起来不碰任何按键时候人居然能自己向上飘,各种尝试加初始向下速度/加重力都不行(要么落地之后重新升天要么重力太大直接弹射起步),去掉animator就不飘,搜了一圈估计是做骨骼动画时候哪里搞出位移了,试着把静止状态的animation删成1帧,没效果,把静止状态animation直接设成none,还是没效果(出问题时候人物初始刷新是在空中,居然不受重力一样上下抖动,不知道到底哪里出了问题)
找到的所有Y轴xjb飘相关的都是在说3D的,而且都是改动画文件的bake into pose,无视重力这个bug也有一篇写的是往动画文件里面加一个1.1倍重力curve,然而不知道是因为2d的原因还是动画不是从别的地方导入而是直接在scene上面录制的————动画面板里面根本没有bake into pose,也没有添加重力curve的地方(animation的curve页面倒是能添加人物本身rigidbody的gravity,但是并没有什么卵用)。于是现在变成了不勾applyRootMotion就只能原地动画/钩上applyrootmotion就魔法漂移的要命怪圈。
?
(顺便一提,这个面板换成debug的情况下有两个好像和bakeintopose相关的选项(keep original positionY 和LoopBlendPositionY),不过试了其中一个并没有效果,不知道是不是2d下这个功能还没做好)
最后还是在官方手册上面找到了个解决方案:还是弃用ApplyRootMotion,直接交给代码控制移动。 教程:为“原地就位”的人形动画编写根运动脚本 - Unity 手册
核心是把原本的移动脚本全部挪到OnAnimationMove(),然后取消勾选ApplyRootMotion,重新编译之后这里就变成:
?Y轴魔幻飘移的问题解决
以上
至于应用了RootMotion之后怎么出现的Y轴原地升天,以及初始化之后不按一次跳跃就仿佛不受重力的问题,需要再研究下是因为骨骼相关动画录制操作不规范(导入psb文件分图层区分开四肢——进spriteEditor加骨骼——拖进场景——加IK——录制动画),还是纯粹因为不是导入的动画文件丢了设置导致没办法固定。
?
|