JoshWindsor 发表于 2022-6-10 07:51

Unity动画系统——学习笔记

动画文件

文件的保存

保存每个对象的名称,和它的属性值(通常是位移旋转缩放)。Unity通过读取对象名称确定它是否能应用于这个动画。如果名称相同,可以实现动画的复用。Avatar

Avatar相当于一个替身,A和B都用Avatar绑定骨骼,可以实现不同命名的骨骼,共用一个名称,从而共用一个动画。Humanoid类型将骨骼信息变为Unity的肌肉信息。Animation Type 动画类型
None无动画 静态物品Legancy旧版动画Generic通用动画 如四足动物等不规律的骨骼Humanoid人形动画 人形骨骼Avatar Definition 替身定义
No Avatar无替身Creat From This Model由当前模型的骨骼定义替身Copy From Other Avatar复制别的替身Skin Weights 蒙皮权重
可以被几根骨骼控制,默认四根,可Custom自定义Opitimize Game Objects 优化游戏对象
启用会删除原模型上的骨骼,仅用Avatar,优化空间Animator组件

Controller 状态机
Avatar 替身
只要一个对象有替身,就会从它和它所有子物体中检索对应骨骼信息,从而播放动画。Apply Root Motion 使用根运动
以Generic类型为例,绑定时会创建一个根骨骼,用来在K动画时描述动画整体的的位移和旋转等信息。Root Motion即将动画的根骨骼的位移旋转等信息当作对象的位移和旋转等信息,实时改变对象的Transform值。
Humanoid类型则是由Unity自己计算一个center of mass 重心位置,代替根骨骼。
关闭Root Motion时,一个动画记录的是世界空间下对象的位移旋转等信息,使用Root Motion时,动画记录的则是当前帧和下一帧之间相对的位移旋转等信息。而Root Motion是实时改变对象的Transform值的,所以可以使动画连贯播放。如一个0°旋转到90°的动画,循环播放,使用Root Motion后可以一直旋转下去。
OnAnimationMove()方法可用代码代替Apply Root Motion的使用。Update Mode 动画的刷新模式
Normal跟随update刷新。Animate Physics跟随fixedupdate刷新。Unscale Time不随TimeScale变化。Culling Mode 动画的剔除模式
Always Animate永远播放Cull Update Transforms不在镜头内时,播放但剔除IK等信息Cull Completely不在镜头内时,直接不播放,在镜头内重新播放状态机

分基本动画,混合树,另一个状态机三种。
基本动画

Tag 动画的标签
可以用来检索当前播放动画做判定
AnimatorStateInfo.IsTag();Speed 动画的播放速度
可以为负值(逆序播放)
不能直接再代码修改,需要乘以Multiplier中设置的属性值。Motion Time 动画播放的时间
如0.5则播放动画中间点Mirror 动画的镜像播放
Cycle Offset 动画开始播放的时间
如0.5则从动画中间开始播放,例如走路中初始左右脚的切换Foot IK 脚部位置基于脚部IK的修正
并不是脚部IK,而是当前脚部位置基于原始动画的脚部IK的修正,修正值仅和原始动画IK位置有关,和当前IK位置无关Write Defaults 记录动画默认值
开启后,在onEnable()发生时时,记录每个对象的初始属性。如果一个动画没有修改某个属性,则某个属性会恢复默认值,其它属性再开始动画。
状态机出问题的时候最好关了。Transitions 状态转换
可以调节转换的优先级
Solo > 上层 > 下层 > mute状态转换

Transitions 状态转换
可以调节转换的优先级
Solo > 上层 > 下层 > muteInterruption Source 打断来源
即该转换是否可以被某个状态的其它转换打断Ordered Interruption 打断排序
即某个状态的转换优先级高的可以打断优先级低的None不可打断Current State可被当前状态的其它转换打断Next State可被下一状态的所有转换打断,优先级高优先Current State Then Next State可被当前状态和下一状态其它转换打断,当前状态优先级大于下一状态Next State Then Current State可被当前状态和下一状态其它转换打断,下一状态优先级大于当前状态混合树

即把对多个动画的混合作为一个状态。BlendType 混合类型
Motion 动画Threshold 阈值播放速度即AnimationClip设置当达到某个值时,该动画的权重为1该动画的播放速度Compute Threshold 计算阈值
Speed计算出的Root Motion的速度Velocity X计算出的Root Motion的速度的X分量Velocity Y计算出的Root Motion的速度的Y分量Velocity Z计算出的Root Motion的速度的Z分量Angular Speed(Rad)计算出的Root Motion的旋转速度弧度值Angular Speed(Deg)计算出的Root Motion的旋转速度角度值Adjust Time Scale 调整时间缩放
即自动计算动画播放速度,使多个动画的移动旋转速度相等。
如前进和后退速度不同,可自动计算需要调整的动画播放速度,使速度相等。
页: [1]
查看完整版本: Unity动画系统——学习笔记