直接测试
情况 | Bake into Pose | Apply Root Motion | 是否勾选LoopTime | 动画名称 | 状况 | 子物体(指joint_HipMaster) | 父物体 |
01 | 不勾选 | 勾选 | YES | Move_Forward | 位置、角度都变化(实时) | 位置、角度都变化(实时) | 位置、角度改变 |
02 | 不勾选 | 不勾选 | YES | Move_Forward | 原地播放前进动画 | 位置、角度都变化(实时) | 位置、角度不变 |
03 | 勾选 | 不勾选 | YES | Move_Forward | 原地播放前进动画(感觉步子迈得更大) | 位置、角度都变化(实时) | 位置、角度不变 |
04 | 勾选 | 勾选 | YES | Move_Forward | 原地播放前进动画(感觉步子迈得更大) | 位置、角度都变化(实时) | 位置、角度不变 |
Tips:
【子物体变动的位置和角度都是相对父物体的】
【在不断的Loop当中,位置和角度一直会重置】
可以发现,当勾选了全部Bake into Pose之后,无论你勾不勾选Apply Root Motion,动画始终重复播放,03和04的情况一模一样。
这显然不是我们期望的结果,
但像01的以跳帧的方式闪现到另一个位置,并且走路还慢慢往下陷,显然也不是我们想要的。
这里有个非常严重的问题,直到勾选Bake才发现。
02的情况,实际上“原地播放前进动画”指的是真的原地踏步,但原始Anim是有位移的,
换句话说,人物有跨出一条腿的动作,并实现了重心位移,
但是,02是没有重心位移的,重心一直固定在原地,只看到两条腿在动。
可以理解Bake into Pose实际上就是“烘焙成姿势”,姿势将是子物体的实时运动,不会影响父物体的位置和方向。
——这就意味着,在父物体上的碰撞体,会一直在原地不动。(灵魂出窍)
解决方案是不要勾选Bake into Pose,一个都不要勾选,
然后,碰撞体就能跟着走了。
由此可见这真的是一个Pose,它属于Body Transform,身体产生的动作,
红灯是提醒你不要勾选Bake into Pose。
这里的Bake into Pose 也就是将变换设置为Body Transform(pose)的一部分。我们可以这样去理解,如果是设置成Body Transform(pose)的话,就相当这些变换是属于动画本身的一部分,也就是说,不管设不设置Apply Root Motion,在场景中,我们都会看到模型位置或角度的变化。
(因为Body Transform不影响模型实际的位置和角度,所以这里只是纯粹的动画效果,模型的位置和角度参数值不变)
也就是和上面03和04一样的情况。
如果设置成Root Transform(即不勾选Bake into Pose),Root Transform将影响模型的实际位置和角度(前提是要设置“Apply Root Motion”,如果不设置Apply Root Motion的话,也就是说变换将不应用,场景中的模型位置或角度是不会有变化的(参数值自然也不变),就像一个行走动画,可能一直在原地行走)。
也就是02的情况。
整个变化模型相当于这样:
当你不勾选Bake烘焙的时候,你就进入了Root的选择项。
开始→动画1→动画2,当动画1和动画2都Bake了的话,
①Apply Root Motion,父物体完全不影响,第二个动画会返回从原点重新开始。
②No Apply Root Motion,父物体完全不影响,第二个动画会返回从原点重新开始。
当动画1Bake了,动画2不Bake的时候,
③Apply Root Motion,出现了【Apply Root Motion的第二个作用】,待会儿再解释,先给张图体会体会:
Apply Root Motion的第二个作用是在动画结束后,将Body Transform中的变化应用到模型(注意,这里是结束的时候才应用,也就是说动画的时候,模型的position、rorate等参数是不变的,当动画结束之后,开始新的动画之前才会改变,注意这里跟前面提到的Root Transform的区别)
④No Apply Root Motion,父物体完全不影响,第二个动画会返回从原点重新开始。
情况③把Bake的动画2拿走,那么你将不会看到父级Transform发生变化 :
【Apply Root Motion的第二个作用】发生的前提是,动画1Bake了,动画2不Bake,并且勾选Apply。
实际上,你要是动画1不Bake就和表格01的情况一样的(父级实时变化)。
典型应用:
不烘焙任何Pose,只使用Apply Root Motion。(这是用得最多的)
扩展阅读:
[1] [Unity]从零开始认识C#脚本——以第三人称控制器为例
参考文档:
Today's comments have reached the limit. If you want to comment, please wait until tomorrow (UTC-Time).
There is 18h41m52s left until you can comment.