U3L13-1——代码控制动画(老动画系统)
U3L13-1——代码控制动画(老动画系统)
老动画系统
Unity中有两套动画系统
新:Mecanim动画系统——主要用Animator组件控制动画
老:Animation动画系统——主要用Animation组件控制动画 (Unity4之前的版本可能会用到)
目前我们为对象在Animation窗口创建的动画都会被新动画系统支配
有特殊需求或者针对一些简易动画,才会使用老动画系统
老动画系统主要用于处理老版本项目和简单的一些自制动画
新项目都不建议大家使用了
关键组件:Animation
本章代码关键字
1 | Animation //老动画系统类 |
老动画系统控制动画播放
注意:
在创建动画之前为对象添加Animation组件之后再制作动画
这时制作出的动画和之前的动画格式是有区别的
Animation参数
-
Animation:默认播放的动画
-
Animations:该动画组件可以控制的所有动画
-
Play AutoMatically:是否一开始就自动播放默认动画
-
Animate Physics:动画是否与物理交互
-
Culling Type:决定什么时候不播放动画
- Always Animate:始终播放
- Based On Renderers:基于默认动画姿势剔除
老动画文件参数(与新系统有区别)
-
Wrap Mode:播放模式
- Default:默认
- Once:只播放一次
- Loop:循环播放
- Ping Pong:从头到尾,从尾到头播放
- Clamp Forever:播放结束会停在最后一帧,
并且会一直播放最后一帧(相当于状态不停止)
表现效果和Once一样,但是逻辑处理上不同
代码控制播放
播放动画
参数填入要播放动画的名字
1 | void Update() |
淡入播放,自动产生过渡效果
当你要播放的动画的开始状态 和当前的状态 不一样时 就会产生过渡效果
注意!不一定是完全过渡到该动画的初始形态,而是过渡到一个Unity认为合适的状态再开始播放
1 | if (Input.GetKeyDown(KeyCode.Alpha3)) |
前一个播放完再播放下一个
即只有上一个动画完成播放后,才会播放该动画
1 | if (Input.GetKeyDown(KeyCode.Alpha4)) |
有过渡效果的前一个播放完再播放下一个
1 | if (Input.GetKeyDown(KeyCode.Alpha4)) |
停止播放所有动画
1 | animation.Stop(); |
是否在播放某个动画
注意,与isPlaying(是否在播放动画的属性)区别开来
1 | if (animation.IsPlaying("1")) |
播放模式设置
能设置的模式直接参考WrapMode内的选项即可
1 | animation.wrapMode = WrapMode.Loop |
其它
了解即可,之后的新动画系统会详细讲解
层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)
设置层级
1 | animation["1"].layer = 1; |
设置权重
1 | animation["1"].weight = 1; |
混合模式
叠加还是混合
1 | animation["1"].blendMode = AnimationBlendMode.Additive; |
设置混组相关骨骼信息
1 | animation[""].AddMixingTransform(); |
动画事件
动画事件主要用于处理 当动画播放到某一时刻想要触发某些逻辑
比如进行伤害检测、发射子弹、特效播放等等
先在动画中添加事件,再在Inspector面板上选择要执行的函数
这种参数可以设置参数,同样在Inspector面板输入参数,参数的类型可以用很多
1 | public void AnimationEvent(int i) |