Unity Mecanim动画系统
Unity Mecanim动画系统
Model Import Settings window中的Rig
· Animation Type 动画类型
None 没有动画
Legacy 老式的,旧版动画
Generic 通用的,需要确定根节点(Root node)
Humanoid 类人的,
Avatar Defintion 选择获取Avatar
Create from this model 从自身创建
Copy from Other Avatar 复制其他的Avatar
Configure 配置:对Avatar进行配置
Skin Weights 蒙皮权重:设置可以影响单个顶点的最大骨骼数。
Max Bones/Vertex 最大骨骼/顶点:设置每个顶点的最大骨骼数以影响给定的顶点。您可以为每个顶点设置 1 到 32 个骨骼,但用于影响顶点的骨骼数量越多,性能成本就越大。
Max Bone Weight 最大骨骼重量:设置考虑骨骼权重的底部阈值。权重计算会忽略小于此值的任何内容,并且 Unity 会将高于此值的骨骼权重按比例放大至总计 1.0。
Model Import Settings window中的Animation
Asset-specific properties(特定的资产属性)
这些设置定义了整个资产的导入选项。
· import Constraints 导入约束,约束组件链接游戏对象的位置、旋转或缩放到另一个游戏对象。受约束的 GameObject 像它所链接的 GameObject 一样移动、旋转或缩放。
· import Animation 导入动画,如果为disabled,其他选项都会隐藏
· Bake Animations 烘焙使用 IK 或模拟创建的动画以转发运动学关键帧。仅适用于 Autodesk® Maya®、Autodesk® 3ds Max® 和 Cinema 4D 文件。
· Anim.Compression 动画压缩类型
-off 不压缩,会产生高质量动画,但会降低性能
-Keyframe Reduction 减少关键帧,减少导入时的冗余关键帧。仅适用于通用动画类型。
-Keyframe Reduction and Compression 减少关键帧压缩,在文件中存储动画时,减少导入时的关键帧并压缩关键帧。仅适用于传统动画类型。
-Optimal 最佳,让 Unity 决定如何压缩,通过减少关键帧或使用密集格式。仅适用于通用和人形动画类型。
·Animation Compression Errors 动画压缩错误
- Rotation/Position/Scale Error 旋转/位置/缩放错误,设置旋转/位置/缩放曲线压缩的误差容限(以百分比形式)。 Unity 使用它来确定它是否可以删除旋转/位置/缩放曲线上的关键点。
·Animated Custom Properties 动画自定义属性,导入指定为自定义用户属性的任何 FBX 属性。Unity 在导入 FBX 文件时仅支持一小部分属性(例如平移、旋转、缩放和可见性)。
但是,可以通过extraUserProperties 成员在导入程序脚本中命名标准 FBX 属性,例如用户属性。
Clip-specific properties(特定于剪辑的属性)
· Loop Time 循环时间 循环播放动画
- Loop Pose 使循环动画更加自然,无缝循环。
- Cycle Offset 周期偏移 如果在不同的时间开始。
· Root Transform Rotation/Position(Y)/Position(XZ)
- Bake Into Pose 将运动烘焙到骨骼的运动中。禁止存储为根运动
- Baked Upon 根运动的参照点
· Additive Reference Pose 附加参考姿势,启用以设置用作附加动画层基础的参考姿势的帧。时间线编辑器中会出现一个蓝色标记:
- Pose Frame 输入要用作参考姿势的帧编号。您还可以拖动时间线中的蓝色标记来更新此值。
- 在允许根运动的前提下以Root Transform Position (XZ)(根的水平移动)为例,Bake Into Pose勾选左图与不勾选右图的对比:
勾选:根(图中蓝点)不会随动画的运动而变化,始终位于同一位置。 不勾选:根(图中蓝点)会随动画的运动而变化。
-
Curves 动画曲线 ?
-
Event 动画事件 通过使用动画事件,可以在时间轴中的指定点调用对象脚本中的函数,函数名称与动画事件中的函数名称应当相同。
· 访问修饰符必须为 Public
· 函数返回值为 void
· 只有 一个输入参数
· 输入参数类型包括: int float string Object
- Mask 动画遮罩
使用Avatar Mask,被遮罩部分不会播放动画
· Definition 定义:如何创建Avatar Mask
从自身模型创建
从其他Avatar Mask中拷贝
不创建
· Humanoid:通过从人形身体地图中选择
· Transform:通过在变换层次结构中选择哪些骨骼被包含或排除
- Motion 改变根运动结点
- Import Messages 动画导入信息,有关动画导入的相关信息。
Animator
此图显示了各种资产(Animation Clips, an Animator Controller和Avatar)是如何在游戏对象上的Animator组件中组合在一起的:
Animator 组件
· Controller 控制器: Animator Controller动画控制器组件
· Avatar :此角色的Avatar(如果Animator用于为人形角色制作动画)
· Apply Root Motion :允许根运动,使该物体以自身坐标为中心进行运动,使动画可以发生实际的位移;
也可以使用脚本中MonoBehaviour.OnAnimatorMove()方法进行控制,如果脚本中包含此方法选框就会变成Handled by Script
官方:选择使用动画自身还是通过脚本MonoBehaviour.OnAnimatorMove()控制角色的位置和旋转
· Update Mode 更新模式
Normal 普通的:Animator 与 Update 调用同步更新,并且 Animator 的速度与当前时间相匹配。如果时间变慢,动画将变慢以匹配。
Animate Physics 物理动画:Animator与 FixedUpdate 调用同步更新(即与物理系统同步更新)。如果使用物理交互为对象的运动设置动画,则应使用此模式,例如可以推动刚体的角色。
UnScaled Time 未缩放时间:Animator与 Update 调用同步更新,但Animator的速度会忽略当前的时间,无论如何都以 100% 的速度进行动画播放。这对于以正常速度为 UI 系统设置动画时很有用,同时使用修改的时间刻度来获得特殊效果或暂停游戏
·Culling Mode 动画的剔除模式
Always Animate 总是播放:始终动画,即使在屏幕外也不要进行剔除。
Cull Update Transforms 根据位置更新剔除:当渲染器不可见时禁用重定向、IK 和位置的改变
Cull Completely 完全剔除:当渲染器不可见时,动画被完全禁用。
Animator Controller动画控制器
不可以使用Ctrl+Z进行撤销操作,因为在Animator Controller动画控制器面板中是直接对文件进行的操作。
Animator Controller 允许安排和维护一组动画剪辑Animation Clips和相关的动画过渡Animation Transitions用于角色或对象。
- 是一个将动画(animation)整合起来的控制器
- 利用了状态机的原理控制动画的播放
- 可以实现动画的播放,转移,融合以及分层播放等等
- 可以使用脚本去控制,获得Animator内的状态
Animation Layers动画层级
Unity 使用动画层来管理复杂的状态机针对不同的身体部位。
层级设置:
·Weight 权重:值越大,权重越高,该层级的动画片段播放顺序越靠前
·Mask 层级遮罩:AvatarMask组件;指定要应用动画的身体部位。
·Blending 混合类型:指定动画的应用方式。
Override 覆盖:使用此图层上的动画,替换之前图层上的动画。
Additive 添加:将此层上的动画添加到前一层的动画之上。此层必须包含与前一层相同的属性。
·Sync 同步:在不同层中重用相同的状态机,复制出一个相同的层;该层为所复制出的层的实例;也可以为该层指定新的动画片段。
Timing:允许调整同步图层中每个动画所需的时间,由权重决定。若进行了时间长度的调整,或该层与复制层的动画片段时间长度不同,该层的动画播放速度会减慢或加快以匹配复制层的动画长度。
·IK Pass:勾选可以调用OnAnimatorIK方法;
Animation Parameters动画参数
参数列表: 1.Float--一个浮点数
2.Int--一个整数
3.Bool--true 或 false 值(由复选框表示)
4.Trigger--一个布尔参数,当被转换消耗时由控制器重置(由圆形按钮表示)
Animation States动画状态
- 是动画状态机的基本构建块
每个状态都包含一个单独的动画序列(或混合树),该序列将在角色处于该状态时播放。当游戏中的事件触发状态转换时,角色将处于新状态,将播放新状态下的动画序列
· Motion 运动:这个状态的动画片段
· Speed 速度:动画的默认播放速度;启用参数以使用脚本中的自定义值修改速度。例如,您可以将速度乘以自定义值来减速或加速播放速度。
· Motion Time 运动时间:用于播放此状态的动作的时间。启用参数以使用脚本中的自定义值控制运动时间。
· Mirror 镜像:此属性仅适用于具有人形动画的状态。启用以镜像此状态的动画。启用参数可以利用脚本启用或禁用镜像
· Cycle Offset 周期偏移:添加到运动状态时间的偏移量。此偏移不会影响运动时间。启用参数以从脚本指定循环偏移。
· Foot IK 足部IK:此属性仅适用于具有人形动画的状态。启用以实现该状态的反向动力学。例实现人物上楼梯时双脚一直与地面接触。
· Write Defaults 写入默认值:AnimatorStates 是否为不是由其运动生成动画的属性写入默认值。 ??
· Transitions 过渡:此状态的转换列表。
Animation transitions动画转换
动画转换允许状态机从一种动画状态切换或混合到另一种动画状态。转换不仅定义了状态之间的混合需要多长时间,还定义了它们应该在什么条件下激活。
· Has Exit Time 有无退出时间:退出时间是一种不依赖于参数的特殊转换。相反,它依赖于状态的标准化时间。检查以在退出时间(Exit Time)中指定的特定时间进行转换。
· Setting 设置:包含详细过渡设置的折叠菜单。
· Exit Time 退出时间:如果选中了 Has Exit Time,则该值表示转换可以生效的确切时间。以标准化时间表示(例如,退出时间为 0.75 意味着在播放了 75% 动画的第一帧上,退出时间条件为真)。在下一帧,条件为假。
· Fixed Duration 固定期限:如果选中“固定持续时间”框,则转换时间(Transition Duration)解释为以秒为单位。如果未选中“固定持续时间”框,则将转换时间(Transition Duration)解释为源状态归一化时间的一小部分(%)。
· Transition Duration 转换持续时间:转换的持续时间,以标准化时间或秒为单位,取决于固定持续时间模式,相对于当前状态的持续时间。
· Transition Offset 转换偏移:在转换到的目标状态下开始播放的动画序列的时间偏移量。
· Interruption Source 中断源:使用它来控制此转换可能被中断的情况
· Ordered Interruption 有序中断:确定当前转换是否可以被独立于其顺序的其他转换中断
· Conditions 转换条件:转换可以具有单个条件、多个条件或根本没有条件。如果没有转换条件Unity编译器会利用退出时间,如果有多个则必须满足所有条件,并且满足退出时间。
Transition interruption中断转换
使用Interruption Source(中断源)和Ordered Interruption(有序中断)属性去控制如何中断转换。
中断的工作原理:转换被排队,然后解析从插入的第一个转换到插入的最后一个转换的有效转换。The interruption order works, conceptually, as if transitions are queued and then parsed for a valid transition from the first transition inserted to the last. Interruption Source(中断源)和Ordered Interruption(有序中断)
Transitions between Blend Tree states混合树之间的状态转换
Animator Controller窗口中组件
- State单一动画
- Sub State Machine动画组
- Blend Tree动画融合组混合树
Humanoid Avatars 人形Avatars
State Machine Behaviours 状态机行为脚本
状态机行为是个可以添加状态机状态的组件。 状态机行为脚本
应用于Animator整个控制器;对所有的状态都有效,若应用于其中一种状态则只对当前状态有效。
反向动力学
例:手带动手臂运动,当拿水杯时