Unity游戏开发之游戏动画(Root Motion以及动画文件) | 您所在的位置:网站首页 › unity怎么设置动画循环 › Unity游戏开发之游戏动画(Root Motion以及动画文件) |
Root Motion
即自带根位移的动画,有效避免了角色动画和实际位移不同步的现象。 实现Root Motion功能 在Animator组件中勾选Apply Root Motion找到角色使用的动画,勾选循环功能(Loop Time),并Apply。【对动画的修改可以在FBX文件下完成,也可以找到FBX文件下的动画片段文件,Ctrl+D复制出来,再进行修改】 Root Motion的内部机制应用了Root Motion之后,Unity会通过动画文件里记录的绝对坐标和方向,以及当前游戏对象的缩放比例,计算出游戏对象在上一帧的相对位移和相对转角。 脚本控制Root Motion在脚本中控制Root Motion动画 private void OnAnimatorMove() { //使用Root Motion实际是使用如下 transform.position += animator.deltaPosition;//实现相对位移控制 transform.rotation += animator.deltaRotation;//实现相对转角控制 }动画文件会直接修改每一帧里游戏对象的坐标值和角度值。 Root Motion会通过相对位移和转角来移动对象。 Generic模型Root Motion动画的原理Generic一般控制非人形骨骼的动画。 在FBX文件中,点击Rig,新建一个替身(create from this model). 注意:Generic动画的替身系统只需要管理一只骨骼(人形动画需要管理15根骨骼)。 创建新替身后,会出现一个Root node选项。在这里要制定一根骨骼,Unity会对这根骨骼的操作当作对游戏对象的操作。 添加成功后,在动画文件中会自动添加一个Animator:Root Q 和Animator:Root T。 定义:Root Motion在generic动画中指的就是将根骨骼的运动用到游戏对象上 在实际制作中,3D美术会单独给模型制作一根骨骼,这个骨骼会被设置为整个结构的根骨骼 与Root Motion有关的设置点击FBX文件,或直接点击动画文件,都可以找到与Root Motion有关的设置。 Loop TimeRoot Transform Rotation:绕Y轴的旋转Root Transform Position(Y):沿Y轴的位移Root Transform Position(XZ):沿XZ轴的位移属性 Bake Into Pose:勾选则表示不要将骨骼根节点的位移旋转当作Root Motion的一部分来处理,而是当作普通动画来处理。【右边的红绿色代表Root Motion对角色的变化较小,可以勾选】 当勾选了Apply Root Motion后,如果没有勾选Bake Into Pose,则对于Hips(物体根节点)的旋转位移就会失效,取而代之会使用Root.Q和Root.T来操作对象;反之相反;Based Upon:游戏对象在动画开始时对准的方向 Original:动画本来的朝向/位置(3D美术在制作动画时设置好的)Root Node Rotation/…:对准根骨骼结点的指向方向/位置(算出来的,不准) offset 修改游戏对象在动画开始时对准的方向的偏移量 Humanoid模型Root Motion动画的原理 unity通过分析骨骼结构,计算出模型的重心center of mass(也称为Body Transform) 可以在脚本中使用animator.bodyPosition和bodyRotation来访问。unity会根据具体动画,计算重心在水平平面的投影。将这个投影当作root Motion的根骨骼结点来对待,这个点被称作Root Transform。 可以在脚本中使用animator.rootPosition和rootRotation来访问。可以简单的将Root Transform当作Root Motion的根骨骼结点。在 Humanoid动画中,Based Into Pose中 Root Node Rotation变为了Body Orientation(为计算出来的重心)Root Node Position变为了Center Of Mass(重心)、Feet(模型的脚) |
CopyRight 2018-2019 实验室设备网 版权所有 |