关于Unity中动画系统的学习文档
动画系统学习文档
Animation:
一、 //动画面板
Animation:默认动画
Animations:待播放的全部动画
Play Automatically:是否自动播放
Animate Physics:动画是否在物理循环中执行(带刚体动画都打勾)
Culling Type:剔除类型
Based On Renderers:渲染外的动画禁用(此时由动画触发的事件也被禁用了,慎用)
Always Animate:始终播放动画,无禁用(动画量大的时候消耗性能)
二、 //Animation自定义面板
打开快捷键:选中有animation动画的物体Ctrl+6
常用按键左上角开始:
(1) 锁定Transform组件(禁止移动旋转缩放)
(2) 动画开始播放与暂停按键
(3) 分帧执行---上一帧
(4) 分帧执行---下一帧
(5) 输入框:填入指定帧
(6) Add KeyFrame:添加关键帧
(7) Add Event:添加触发事件
(8) DopeSheet/Curves:点与曲线切换
三、 常用动画方法:
//播放默认动画
animation.Play();
//播放walk动画,停止同一层的其他动画
animation.Play(“walk”);
animation.Play(“walk”, PlayMode.StopSameLayer);
//播放walk动画,停止其他动画
animation.Play(“walk”,PlayMode.StopAll);
//在一定时间内淡入淡出播放walk动画
animation.CrossFade(“walk”,0.2f);
//停止所有动画播放
animation.Stop();
//设置动画属性状态
animation[“walk”].speed=2.0f;//速度
animation[“walk”].weight=0.5f;//权重
//设置动画的播放模式
animation.wrapMode=WrapMode.Default;//从动画剪辑中读取(默认为Once)
animation.wrapMode=WrapMode.ClampForever;//播放动画到结尾时总是处于最后一帧的采样状态
animation.wrapMode=WrapMode.Once;//当时间播放到末尾时停止动画播放(单次播放)
animation.wrapMode=WrapMode.Loop;//循环播放
animation.wrapMode=WrapMode.PingPong;//往复播放
//判断当前是否在播放walk(某段)动画
animation.IsPlaying(“walk”);
Animator:
一、 动画面板
Controller:动画控制器(动画机)
Avatar:阿凡达(人物骨骼)仅在动画为Human类型时作用
Apply Root Motion:是否将动画的Transform变换应用到模型上(动画结束后显示)
与Apply Root Motion功能类似但有所区别的是Bake into Pose(在动画面板中的属性)勾选后动画的Transform变化会实时影响到模型本身,也就是说动画播放的同时场景中的模型会随着动画进行位移旋转缩放等
Update Mode:更新模式分为
1) Normal:标准
2) Amimate Physics:物理交互模式
3) UnScaledTime:不缩放时间
Culling Mode:剔除模式分为:
1) Always Animate:总是使用动画
2) Cull Update Transforms:剔除一部分(事件仍会触发)默认使用
3) Cull Completely:不可见完全禁用
二、 动画机面板
//右键Creat Animator Controller(创建动画机)双击进行编辑
Layers:动画层(越下层级别越高)(常用于组合复杂动画使用)
Weight:权重
Mask:遮罩
Blending:动画混合模式
1) Override:覆盖
2) Additive:混合
Sync:同步层(当有多层时,当前编辑的层与之前层逻辑结构相同仅动画不同时应用)
Timing:控制动画时间(勾选当前层动画按照此动画层时间播放,同步的层可能变快变慢,不勾选则按照同步层时间走,此动画层可能变快变慢)
IK Pass:反向运动学IK(开启后脚本才可以控制IK)
其中Mask部分实例:
工程中右键创建一个Avatar Mask(阿凡达遮罩)双击后显示如上图
当动画为人物骨骼时直接点击人身上的区域即可绿色为动画部分,红色为禁用动画部分,其中IK为反向运动学。
Parameters:控制因素
1) Float:数值型
2) Int:整数型
3) Bool:bool型
4) Trigger:触发器型
动画转换:(右键动画Make Transition 指定到过度动画,点击中间链条进行条件设置面板)
//条件设置面板:
Has Exit Time:是否自动触发(在没设定条件时自定过度到下一动画)
Settings:设置参数
Conditions:设置触发条件(点击加号添加,即条件因素中的参数)
//动画混合树面板:
Blend Type:动画树类型
1) 1D:一维
2) 2D Simple Directional:具有方向性的动画片段,同一方向上最好不要有多个动画片段
3) 2D Freeform Directional :主要用于控制具有方向性的动画片段,同一方向上允许有多个动画片段,(0,0)位置上必须有一个动画片段
4) 2D Freeform Cartesian : 不一定具有方向性的动画片段.(一般用这个)
//TODO
//动画拆分截取面板
点击“+”号添加新的动画片段,设置起始帧与结束帧,并重新命名,设定一系列参数(如:遮罩,事件等)后,Apply应用即可在原有模型的下面多出来新建动画片段。
//更改模型动画类型面板:
只有在人物模型的情况下才会有人的骨骼动画(其他一般为一般动画Legacy/Generic类型)
Human类型动画设置时系统内部会自动绑定人物骨骼,Configure前的“√”代表绑定正确,若不正确则点击Configure进行自定义骨骼编辑。
//骨骼绑定面板:
当图中右侧面板上无红色区域即表示绑定完毕,可自主拖动骨骼。
一般点击左下角选中Mapping –Automap//自动绑定
Pose-Enforce T-Pose//T字形绑定
常用的设置条件方法:
//设置参数值
1) animatior.SetFloat(“name”,1.2f);
2) animatior.SetInteger(“name”,10);
3) animator.SetBool(“name”,true);
//单次触发器
4) animator.SetTrigger(“name”);
//获取制定层的动画进行操作(此处为0层动画)
AnimatorStateInfo animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);