首页 > 代码库 > 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