20190917更新: 添加播放动画时,模型位置自动重置的可能原因
通过GIF我们可以发现,只有添加了TimeLine的物体,点击该物体,TimeLine窗口才出现该物体身上的TimeLine信息。
沒添加TimeLine的物体,窗口会出现创建TimeLine的对话框。
1、新建空物体GameObject,打开TimeLine窗口,选中空物体后会看到TimeLine窗口出现Create选项。现在为该空物体创建TimeLine。
2、将人物模型,从层级面板Hierarchy拖入TimeLine,这时会弹出创建哪几种选项。选择Add Animation Track。该选项是创建动画TimeLine。
3、点红色的录制按钮即可给该模型录制动画。
可给人形的动画添加简单的位移等动画,但实际骨骼运动无法添加,还是依靠自身动画导入到TimeLine的Track
但我们会发现,人物播放完第一个动画后,不是在当前位置播放下个动画,而是自动回到原点播放第二个动画
原因1:Apply Root Motion和Bake into Pose
原因2:TimeLine和Animator冲突
解决方案一:
解析Root Motion的理论:
比如说我们有一个人物行走的动画,我们来考虑一下几种情况(这里以“Root transform position(XZ)为例)
1、勾选”Bake into Pose",不勾选“Apply Root Motion",勾选”Bake into Pose"后,变换属于Body Transform,所以即使这里未勾选”Apply Root Motion“,但是动画依然会在场景中体现,人物会按照动画的路径行走(但是如果我们观察Inspector中模型的position参数,值一直不变)。但是因为没有勾选Apply Root Motion,所以动画结束后,变换不会应用到模型,所以如果这时候,如果开始一个新的动画的话,模型会瞬间回到起始位置(新的动画开始时候,模型处于行走动画开始时的位置)。
2、勾选”Bake into Pose",并勾选“Apply Root Motion",这里跟上面的情况唯一不同的就是,动画结束后,开始新的动画之前,变换会应用到模型。(模型的position在新的动画开始之前会发生变化,新的动画开始时候,模型处于动画结束时的位置)
3、不勾选”Bake into Pose",勾选“Apply Root Motion",这时候,变换是作为Root Transform,所以因为这里勾选了Apply Root Motion,变换会应用到模型(模型的position跟着动画不停的变化),自然,新的动画开始时候,模型处于动画结束时的位置。
4、不勾选”Bake into Pose",并且不勾选“Apply Root Motion",这里变化还是作为Root Transform,但是因为没有勾选Apply Root Motion,所以变换将不被应用,所以模型将一直在本地不动,自然,新的动画开始时候,模型处于行走动画开始时的位置
解析文字参考自博客xak
Add:模型Animator Controller最初为空,我们也可给模型添加Animator Controller,由状态机控制TimeLine对应模型空白处的动画(非空白处,即我们录制的动画处,由我们录制的动画控制,而非融合)
注:上述理论要加Animator Controller状态机,尤其是在控制下个动画开始,要从上个动画结束的位置开始,必须加上。无论它是否Bake into Pose
bake into pose的对应的属性(例如:root transform rotation),将会直接由角色或物件的自身transform的rotation来决定角色方向(如由script直接驱动角色transform rotation角度令角色转身,适合的动画是原地踏步),反之就是用animation 本身的信息来驱动角色transform rotation(适合动画是转身动画本身就带动角色转动,如转45度转身动画,90度转身动画等)
解决方案二:
任意选择是否勾选Apply Root Motion
点击TimeLine中需要控制的动画轨道,在其Inspector上勾选Apply Track Offsets,它可用来设置物体开始的偏移(位置、旋转),物体中的每个动画便从此处开始运动
但是每个动画都从此位置开始运动,而不是从上个动画末尾处开始运动,我们给他加一个Animator Controller便可解决此问题,亦或者设置每个动画Inspector的Clip Root Motion Offsets值,改变每个动画初始位置
结合Pre-Extrapolation应用会更有意思
这是我这次做项目时发现的。查找网上资料没找到解决办法,测试找到的原因,你也看看是不是因为这个。
原因:
模型自身带有Animator,并勾选了自动播放。
将改模型放到TimeLine后,预览TimelIne没问题,但运行时位置就出错了。这是因为运行时Animator和TimeLine都同时运行。导致位置出问题。
解决办法:
Animator Entry时播放空动画即可。
Activation Track:控制该物体是否被激活,通常用来设置照相机是否激活(时间)
Animation Track:控制动画,可对物体进行动画录制。
Audio Track:音频轨道
刚添加时,它是没有属性指定物体的
他指定的物体可用来控制此音频声音大小等内容。首先我们需要创建一个符合此类型的物体,即给物体添加Audio Souce组件