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");
}