unity旧动画系统之animationClip/animationEvent/animationCurve

animationClip 动画剪辑,用来播放动画;
AnimationEvent 类似于SendMessage让你调用一个脚本函数,这个脚本是动画播放的一部分。动画事件函数支持0参数或一个参数,参数可以是浮点型,字符串,object或AnimationEvent。
animationCurve 生成动画剪辑的曲线的集合,存储关键帧信息。
参考自unity圣典,实际测试过。下面的代码只挑选其中部分方法和属性加以说明。。。。。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimationTest : MonoBehaviour {
    Animation _animation;
    AnimationState _state;
    public AnimationClip clip01;
    public Transform guge;
    AnimationEvent _event;
    // Use this for initialization
    void Start () {
        _animation = GameObject.Find("aaa").GetComponent<Animation>();
    }
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
           //  print("以秒为单位的动画长度:"+_animation.clip.length);
          //  print("被取样关键帧的帧速率:"+_animation.clip.frameRate);
            //定义一个animationEvent
            _event = new AnimationEvent();
            //事件添加到动画播放的具体时间点
            _event.time = 0.2f;
          //动画事件的方法名,注意拥有该方法的脚本必须放在拥有该animation的游戏对象上,不然会报错(没有接收者)
            _event.functionName = "eventTest";
          //给剪辑添加动画事件,注意该动画事件只能持续在播放模式下,直到退出播放模式或者
          //玩家退出。如果想给剪辑添加一个固定的事件,那么请在unity编辑器下添加。
            _animation.clip.AddEvent(_event);
        }

    }
    void eventTest()
    {
        print("animationEvent成功触发");
    }
}
if (Input.GetKeyDown(KeyCode.A))
        {
            _animation.clip.ClearCurves();//从动画剪辑中清除所有动画曲线(移除了该动画所有关键帧)
        }
 if (Input.GetKeyDown(KeyCode.A))
        {
            //直线包括开始时间、开始值、结束时间、结束值
            AnimationCurve curve = AnimationCurve.Linear(0, 1, 2, 3);
            AnimationClip clip = new AnimationClip();
            //默认情况下 clip.legacy是false  直接播放会报错
            clip.legacy = true;
            //设置动画剪辑的动画曲线,如果曲线为null,曲线将被移除;如果曲线属性已经存在,那么曲线将被替换。
            //四个参数含义:
            //1:将该曲线应用到的游戏对象的路径 ,比如"root/spine/leftArm",如果为空,则表示动画剪辑附加的游戏物体。
            //2:要产生动画效果的属性类型
            //3:属性的名字(通常的名称是: “localPosition.x”, “localPosition.y”, “localPosition.z”, “localRotation.x”, 
            //“localRotation.y”“localRotation.z”, “localRotation.w” “localScale.x”, “localScale.y”, “localScale.z”.) 
            //4:动画曲线
            clip.SetCurve("", typeof(Transform), "localPosition.x", curve);
            _animation.AddClip(clip, "test");
            _animation.Play("test");
        }

猜你喜欢

转载自blog.csdn.net/fenglele_fans/article/details/80422270