Animation笔记

创建编辑Animation动画

创建动画

1.在场景中选中想要创建动画的对象
2.在Animation窗囗中点击创建
3.选择动画文件将要保存到的位置

保存动画文件时,unity会帮助我们完成以下操作
1.创建一个 Animator controller(动画控制器或称之为动画状态机)资源(新动画系统)
2.将新创建的动画文件添加到Animator controller中
3.为动画对象添加Animator组件
4.为Animator组件关联创建的Animator controller文件

窗口变化

关键帧模式下编辑动画

手动添加关键帧,添加要改变的量等

录制模式下可以直接在Inspector窗口下改变position等的值,unity会自动在Animation中添加对应的变量以及关键帧,较为方便

曲线模式下编辑动画

动画文件界面参数

Loop Time:是否循环播放动画(在动画结尾时重新开始)

Loop Pose:无缝循环运动

Cycle Offset:循环动画在其他时间开始时的周期偏移

代码控制老动画系统

Unity中有两套动画系统
新:Mecanim动画系统-主要用Animator组件控制动画
老:Animation动画系统一主要用Animation组件控制动画(Unity4之前的版本可能会用到)
目前我们为对象在Animation窗口创建的动画都会被新动画系统支配
有特殊需求或者针对一些简易动画,才会使用老动画系统

老动画系统创建动画要在添加动画之前现在对象上创建Animation组件,这样创建的动画没有状态机文件

Animation参数

Animation:默认播放的动画

Animations:该动画组件可控制的所有动画

Play AutoMatically:是否一开始就自动播放默认动画

Animate Physics:动画是否与物理交互

Culling Type:决定什么时候不播放动画

        Always Animate:始终播放

        Based On Renderers:基于默认动画姿势剔除(比如动画在屏幕外就不播放)

动画文件参数

Default:读取设置得更高的默认重复模式

Once:播放一次就停止

Loop:从头到尾不停循环播放

PingPong:从头到尾从尾到头不停播放

ClampForever:播放结束会停在最后一帧,并且会一直播放最后一帧(相当于状态不停止),表现效果和Once一样,但是逻辑处理上不同

代码控制

    private Animation animation;
    // Start is called before the first frame update
    void Start()
    {
        animation = GetComponent<Animation>();
        
    }

    // Update is called once per frame
    void Update()
    {
        //播放动画
        if(Input.GetKeyDown(KeyCode.W))
        { 
            animation.Play("1");
        }
        if (Input.GetKeyDown(KeyCode.S)){
            animation.Play("2");
        }
        //淡入播放,自动产生过渡效果
        if (Input.GetKeyDown(KeyCode.A))
        {
            animation.CrossFade("3");
        }

        //前一个播放完再播放下一个
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            //animation.PlayQueued("2");

            //含过渡的依次播放
            animation.CrossFadeQueued("2");
        }

        //停止播放
        animation.Stop();

        //是否在播放某动画
        if (animation.IsPlaying("1"))
        {

        }

        //播放模式设置
        animation.wrapMode = WrapMode.Loop;

        //其它(了解即可,新动画系统中会详细讲解)
        //层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)
        //设置层级
        animation["1"].layer = 1;
        //设置权重
        animation["2"].weight = 1;//权重1最高,高的覆盖低的动画
        //混合模式 叠加还是混合
        animation["1"].blendMode = AnimationBlendMode.Additive;
        //设置混组相关骨骼信息
        //animation["1"].AddMixingTransform();//传入transform
    }

动画事件


动画事件主要用于处理 当动画播放到某一时刻想要触发某些逻辑

比如进行伤害检测、发射子弹、特效播放等等

按键在添加关键帧的右边,添加完毕后选中该事件,即可添加函数

    public void AnimationEvent()//可以传入参数,如GameObject,可以在函数中实例化预设体等
    {
        print("动画事件触发");
    }

函数还可以添加参数如GameObject

Animator动画状态机

创建动画状态机

通过场景中的物体创建动画时自动创建

手动创建动画状态机文件

左侧面板:

Layer:动画层级页签,为动画添加更多层级,层级搞得动画播放会覆盖层级低的(实际上要看里面的weight)

Parameters:参数页签,为动画状态机添加控制状态切换的参数

右侧面板:

添加动画

1.自动添加一为对象创建动画后会自动将动画添加到状态机中
2.手动添加1-将动画文件拖入到状态机中(注意:老动画拖入会有警告)
3.手动添加2-右键创建状态,再关联动画

添加切换条件

左侧面板点击参数页签,可以添加四种类型的条件切换变量

点击连线,右侧面板中conditions可以添加对已有的变量的条件判断

若多个条件需要同时满足才能跳转

Trigger条件则是满足一次后就会失效(还原)

Has Exit Time 勾选时当前动画播放完才会切换动画

代码控制动画状态机切换

关键组件Animator

Animator中的API

public class Lesson3 : MonoBehaviour
{
    private Animator animator;
    // Start is called before the first frame update
    void Start()
    {
        animator = this.GetComponent<Animator>();
        //通过状态条件切换动画
        /*        animator.SetFloat("条件变量名", 1.2f);
                animator.SetBool("条件变量名", false);
                animator.SetInteger("条件变量名", 1);
                animator.SetTrigger("条件变量名");*/

        //得到条件变量值
        /*        animator.GetInteger("条件变量名");*/
        //直接切换动画 除非特殊情况不然不使用
        //animator.Play("状态名");
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            animator.SetBool("change", true);
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            animator.SetBool("change", false);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值