首页 > 代码库 > 4.6之前旧版动画系统(Animation),AI
4.6之前旧版动画系统(Animation),AI
一:4.6之前旧版动画系统(Animation)
二:4.6版本之后新版动画系统(Animator)
方法:
动画分割方法:(控制动画播放的动画)
1. Play
2. CrossFade
3. CrofdFadeQueued
IsPlaying()指定的动画是否正在播放
Stop()停止播放指定的动画
属性:
isPlaying:当前是否有动画正在播放
Rig标签中的Animation Type要是Legacy(旧版动画系统)
动画融合(通过指定关节来播放动画)
动画帧事件(当动画播放到某一帧时执行指定的方法,比如当攻击动作完成后才执行 掉血或其他方法)
第一步:把动画拷贝到另外一个文件中(Ctrl+d)
原因:因为通过动画分割得到的动画,属性为只读属性,不可添加帧事件
第二步:将拷贝出来的动画添加到Animation组件中
第三步:打开 Windows中的Animation
第四步:找到添加事件的帧(点击面板上的小条状物体)
第五步:添加方法
//更改帧动画的播放速度
ani["Walk"].normalizedTime
学习总结:
1.设置动画的层级-ani ["Idle"].layer = 1;设置动画的层级
2.设置动画的播放模式-ani ["Idle"].wrapMode = WrapMode.Loop;
3.(动画融合)通过指定的关节来播放动画
ani ["Walk"].AddMixingTransform (_mix_leftleg);
4.直接播放行走动画-ani.Play("Walk");
5.动画过度:但只能切换同一层级的动画,如果想播放不同层级的动画,则必
须先要停止所有的动画再执行本次动画(代码1和代码2)
代码一:ani.CrossFade("Walk");
代码二:ani.CrossFade("Walk",0.3f,PlayMode.StopAll);
6.播放动画队列:是物体模型动作更流畅。
有四个参数:动画名称 过度长度 队列模式 播放模式
ani.CrossFadeQueued("Attack",0.3f,QueueMode.PlayNow,PlayMode.StopSameLayer);
7.调用在target物体上有一个TakeDamage方法,参数Power传过去
target.SendMessage ("TakeDamage",Power);
( SendMessage发送信息
使目标物体执行一个方法
目标物体所挂载脚本中的方法
参数()
)
using UnityEngine; using System.Collections; public class TestAnimation : MonoBehaviour { public Animation ani; public Transform _mix_leftleg; public Transform _mix_rightleg; public Transform _mix_hand; public Transform _mix_body; public Transform _mix_head; void Start() { //动画播放模式 ani ["Idle"].wrapMode = WrapMode.Loop; ani ["Walk"].wrapMode = WrapMode.Loop; //指定动画层级 ani ["Idle"].layer = 1; ani ["Walk"].layer = 1; ani ["Attack"].layer = 2; ani ["Damage"].layer = 3; ani ["Death"].layer = 4; //动画融合,动画融合(通过指定关节来播放动画) ani ["Walk"].AddMixingTransform (_mix_leftleg); ani ["Walk"].AddMixingTransform (_mix_rightleg); ani ["Attack"].AddMixingTransform (_mix_hand); } void OnGUI() { //用OnGUI绘制一个按钮,返回的是一个bool值 if(GUI.Button(new Rect(10,10,100,80),"Walk")) { //直接行走 //ani.Play("Walk"); //动画过度 //ani.CrossFade("Walk"); ani.CrossFadeQueued("Walk",0.3f,QueueMode.PlayNow,PlayMode.StopSameLayer); } if(GUI.Button(new Rect(10,105,100,80),"Attack")) { //动画过度 //只能切换同一层级的动画,如果想播放不同层的动画,就必须先停止所有的动画,即加上两个参数 //ani.CrossFade("Attack"); //播放动画队列 //四个参数:1动画名称 2过渡长度 3队列模式 4播放模式 ani.CrossFadeQueued("Attack",0.3f,QueueMode.PlayNow,PlayMode.StopSameLayer); } if(GUI.Button(new Rect(10,205,100,80),"Damage")) { ani.CrossFadeQueued("Damage",0.3f,QueueMode.PlayNow,PlayMode.StopAll); } } void AttackEvent() { Debug.Log ("Attack Attack Attack"); } }
4.6之前旧版动画系统(Animation),AI