目前的animation大多使用于前端的部分效果动画,比如界面打开关闭界面的效果。
选中待提添加动画的物体,Window—>Animation(Ctrl+6),弹出下图视图窗口。
注意:如果选中的物体无Animation/Animator组件,会自动添加Animator组件。如使用旧版Animation动画,可先添加Animation组件后再进行此操作。 单击Create按钮,在弹出的对话框中为待新建的Animation动画命名并选择保存路径,单击保存。
保存后Animation视图变为可编辑状态。同时在对应路径会生成Animation文件。
如未在物体添加Animator组件,会自动在物体检视视图添加此组件,并生成同名Animator文件。
通过Add Property添加制作动画
更改不同属性相应的参数,即可制作动画。
在录制状态下,可以通过直接设置更改场景视图或检视视图的属性参数来制作动画。
设置精灵切换时,可以直接将精灵拖拽到对应帧的位置即可。
当前动画名字,下拉可以创建新的Animation动画。
添加事件。
添加关键帧。
Animation | 组件含义 |
---|---|
Animation | 默认动画 |
Animations | 动画(所有动画,size:动画个数,element:第一动画,第二动画。。。。) |
Play Automatically | 自动播放 |
Animate Physics | 动画物理 |
Culling Type | 剔除类型 |
Always Animate | 总是动画化(总是播放动画) |
Based On Renderers | 看不到此物体时,则不播放此物体动画 |
找到此动画,选择Debug属性
legacy选择对勾属性;
wrap Mode 根据自我选择来设置不同类型;
using UnityEngine;
public class Anim1 : MonoBehaviour
{
public Animation Animation;
public void Start()
{
//获取动画组件
Animation = transform.GetComponent<Animation>();
}
public void Update()
{
if (Input.GetKey(KeyCode.A))
Animation.Play();//播放默认动画
if (Input.GetKey(KeyCode.Space))
{ //播放名字为animation2的动画
Animation.Play("animation2");
//到播名字为animation2的动画
Animation["animation2"].time = Animation["animation2"].length;//获取动画长度
Animation["animation2"].speed = -1.0f;
Animation.CrossFade("animation2");
}
}
//动画内部添加的回调函数
public void line()
{
Debug.LogWarning("tyuiop[");
}
}
第一步:点击创建回调函数;
第二步:创建的回调函数移动到动画的位置;
第三步:输入需要回调的函数名字,和输入参数;
**如果有回调函数;回调函数名字必须是绑定动画的GameObject的脚步中的方法 **
// Animation
animation.AddClip(new AnimationClip(), "NewAnimName");
animation.AddClip(new AnimationClip(), "NewAnimName", 1/*首帧*/, 2/*尾帧*/);
animation.AddClip(new AnimationClip(), "NewAnimName", 1, 2, true/*是否应该在最后插入一个额外的帧匹配第一帧?如果你在制作一个循环的动画,那么可以打开这个选项*/);
animation.clip = null; // 默认动画
// 淡入淡出切换动画
animation.CrossFade("AnimName");
animation.CrossFade("AnimName", 1f/*混合时长*/);
animation.CrossFade("AnimName", 1f, PlayMode.StopAll/*立即开始播放重复的动画状态*/);
animation.CrossFade("AnimName", 1f, PlayMode.StopSameLayer/*停止相同动画层级的动画*/);
animation.CrossFadeQueued("AnimName");
animation.CrossFadeQueued("AnimName", 1f/*混合时长*/);
animation.CrossFadeQueued("AnimName", 1f, QueueMode.CompleteOthers/*等待其它动画停止后淡入淡出*/);
animation.CrossFadeQueued("AnimName", 1f, QueueMode.CompleteOthers, PlayMode.StopAll/*立即开始播放重复的动画状态*/);
animation.CrossFadeQueued("AnimName", 1f, QueueMode.CompleteOthers, PlayMode.StopSameLayer/*停止相同动画层级的动画*/);
animation.CrossFadeQueued("AnimName", 1f, QueueMode.PlayNow/*立即开始播放重复的动画状态*/);
animation.CrossFadeQueued("AnimName", 1f, QueueMode.PlayNow, PlayMode.StopAll);
animation.CrossFadeQueued("AnimName", 1f, QueueMode.PlayNow, PlayMode.StopSameLayer);
animation.cullingType = AnimationCullingType.AlwaysAnimate; // 不管在不在视窗内都播放
animation.cullingType = AnimationCullingType.BasedOnRenderers; // 只在渲染该物体时才播放
animation.enabled = false;
animation.GetClip("AnimName");
animation.GetClipCount();
animation.IsPlaying("AnimName");
bool bIsPlaying = animation.isPlaying;
Bounds bounds = animation.localBounds;
animation.Play(PlayMode.StopAll/*停止其它*/); // 播放默认动画
animation.Play(PlayMode.StopSameLayer/*停止相同动画层级的动画*/); // 播放默认动画
animation.Play("AnimName");
animation.Play("AnimName", PlayMode.StopAll/*停止其它*/);
animation.Play("AnimName", PlayMode.StopSameLayer/*停止相同动画层级的动画*/);
animation.playAutomatically = false; // 是否应该在启动时自动开始播放
animation.PlayQueued("AnimName");//动画不能有循环的动画
animation.PlayQueued("AnimName", QueueMode.CompleteOthers/*等待其它动画停止后淡入淡出*/);
animation.PlayQueued("AnimName", QueueMode.PlayNow/*等待其它动画停止后立即开始播放*/);
animation.RemoveClip("AnimName");
animation.Rewind(); // 倒播所有动画
animation.Rewind("AnimName"); // 倒播名为name的动画
animation.SyncLayer(1); // 同步某层中所有动画的播放速度
// 如何处理超出剪辑播放范围的时间
animation.wrapMode = WrapMode.Clamp;/*停在尾帧*/
animation.wrapMode = WrapMode.ClampForever/*停在尾帧并保持播放*/;
animation.wrapMode = WrapMode.Default/*从动画剪辑中读取循环模式(默认是Once)*/;
animation.wrapMode = WrapMode.Loop/*循环播放*/;
animation.wrapMode = WrapMode.Once/*播完停止*/;
animation.wrapMode = WrapMode.PingPong/*往复式循环播放*/;
AnimationState MyAnimationState = animation["AnimName"];
AnimationClip MyAnimationClip = animationState.clip;
AnimationClip MyAnimationClip2 = animation.GetClip("AnimName");
animationState.AddMixingTransform(transform); // 给某个节点及其子节点播放动画 animation["wave_hand"].AddMixingTransform(transform.Find("root/upper_body/left_shoulder"));
animationState.AddMixingTransform(transform, true/*是否影响子节点*/);
animationState.RemoveMixingTransform(transform);
animationState.blendMode = AnimationBlendMode.Additive; // 叠加混合
animationState.blendMode = AnimationBlendMode.Blend; // 混合
animationState.enabled = false;
animationState.layer = 1; // 动画层级高代表权重高
float fLength = animationState.length; // 时长(秒)
animationState.name = "AnimStateName";
animationState.normalizedSpeed = 1f; // 同步播放速度 请用SyncLayer代替
animationState.normalizedTime = 1f; // 把时间标准化为0f ~ 1f
animationState.speed = 1f;
animationState.time = 1f; // 当前时间
animationState.weight = 1f; // 权重
// 结束方式
animationState.wrapMode = WrapMode.Clamp;/*停在尾帧*/
animationState.wrapMode = WrapMode.ClampForever;/*停在尾帧并保持播放*/
animationState.wrapMode = WrapMode.Default;/*从动画剪辑中读取循环模式(默认是Once)*/
animationState.wrapMode = WrapMode.Loop;/*循环播放*/
animationState.wrapMode = WrapMode.Once;/*播完停止*/
animationState.wrapMode = WrapMode.PingPong;/*往复式循环播放*/