• Unity Animation、Animator 的使用(超详细)


    1. 添加动画

    选中待提添加动画的物体, 在 Animation 窗口下
    在这里插入图片描述注意:如果选中的物体无Animation/Animator组件,会自动添加Animator组件。
    在这里插入图片描述

    2. Animation

    2.1 制作界面

    在这里插入图片描述
    在这里插入图片描述 预览:启用/禁用场景预览模式。

    在这里插入图片描述 录制:启用/禁用关键帧记录模式。

    在这里插入图片描述 转到动画剪辑开头。

    在这里插入图片描述 转到上一个 keyframe(关键帧)。

    在这里插入图片描述 播放动画剪辑。

    在这里插入图片描述 转到下一个keyframe(关键帧)。

    在这里插入图片描述 转到动画剪辑末尾。

    在这里插入图片描述 当前帧。

    在这里插入图片描述 当前动画名字,下拉可以创建新的Animation动画。

    在这里插入图片描述 样本,每秒/分的帧数。

    在这里插入图片描述 添加关键帧。

    在这里插入图片描述 添加事件。

    在这里插入图片描述 时间轴。

    在这里插入图片描述 控制删除属性或增减键。

    在这里插入图片描述 简报。

    在这里插入图片描述 曲线。

    2.2 制作好的 Animation 动画

    在这里插入图片描述

    Length长度(动画时长)
    Loop Time循环
    Loop Pose循环动作(使循环时头部尾部衔接平滑)
    Cycle Offset平滑度

    2.3 添加和使用事件

    在这里插入图片描述

    public class AnimEvents : MonoBehaviour
    {
    
        private void Start()
        {
            // 创建一个事件
            AnimationEvent evt = new AnimationEvent();
            // 绑定触发事件后要执行的方法名
            evt.functionName = "PrintEvent";
            // 执行方法后要传入的参数
            evt.intParameter = 12345;
            // 设置事件关键帧的位置,当事件过了1.3秒后执行
            evt.time = 0.5f;
            // 设置目标动画剪辑
            AnimationClip clip = this.GetComponent<Animator>().runtimeAnimatorController.animationClips[0];
            // 绑定事件
            clip.AddEvent(evt);
        }
    
        private void TestAniEvent(string param)
        {
            Debug.Log("事件触发,参数是:" + param);
        }
    
        private void PrintEvent(int param)
        {
            Debug.Log(param);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    ==注意:==脚本和 animator 所在的对象所处同一对象

    3. Animator

    3.1 制作界面

    在这里插入图片描述

    3.2 一些参数解释

    1. Solo 和 Mute
      当一个动画有多个后续动画时:
      在这里插入图片描述
      当该动画播放完后优先选择动作列表中最前(或者说最上的)的状态转移
      Solo:当设置了某个 Transitions 为 Solo 时,那么优先选择标记 Solo 的动画转移
      Mute:选择的状态转移被禁用
    2. ** Has Exit Time**
      是否有退出时间。简单理解:开启表示等待当前动画进行完才可进行下一个动画;关闭表示可以立即打断当前动画并播放下一个动画

    3.3 动画参数

    在这里插入图片描述
    在这里插入图片描述
    代码控制:

    public class AnimControl : MonoBehaviour
    {
        private Animator anim;
        private void Start()
        {
            anim = this.GetComponent<Animator>();
        }
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.R))
            {
                anim.SetBool("BoolParams", true);
            }
            if (Input.GetKeyDown(KeyCode.S))
            {
                anim.SetBool("BoolParams", false);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    4. Animator中相关类、属性、API

    4.1 类

    AnimationClip: 动画片段,animation

    属性/方法含义
    length动画长度,单位为秒。(只读)
    frameRate对关键帧进行采样的帧率。(只读)
    length / (1 / frameRate)总帧率
    AddEvent将一个动画事件添加到该剪辑中

    AnimatorStateInfo: 动画状态机状态信息

    属性/方法含义
    fullPathHash该状态的完整路径哈希
    length状态的当前持续时间
    normalizedTime整数部分为状态已循环的次数。小数部分为当前循环的进度百分比 (0-1)
    speed该动画的播放速度。1 表示正常播放速度

    4.2 属性

    属性含义
    speed动画器的播放速度。1 为正常播放速度
    runtimeAnimatorController.animationClips返回所有动画 AnimationClip[]

    4.3 API

    方法名含义
    GetBool返回给定布尔参数的值
    GetFloat返回给定 float 参数的值
    GetInteger返回给定整数参数的值
    SetBool设置给定布尔参数的值
    SetFloat将浮点值发送到动画器以影响过渡
    SetInteger设置给定整数参数的值
    GetCurrentAnimatorClipInfo返回给定层当前状态中所有 AnimatorClipInfo 的数组
    GetCurrentAnimatorClipInfoCount返回当前状态中 AnimatorClipInfo 的数量
    GetCurrentAnimatorStateInfo返回 AnimatorStateInfo,其中包含有关当前状态的信息
    GetNextAnimatorClipInfo返回给定层下一个状态中所有 AnimatorClipInfo 的数组
    GetNextAnimatorClipInfoCount返回下一个状态中 AnimatorClipInfo 的数量
    GetNextAnimatorStateInfo返回 AnimatorStateInfo,其中包含有关下一个状态的信息
    Play播放一个状态

    4.4 几个关键方法

    Animator.Play

    void Play(string stateName, int layer = -1, float normalizedTime = float.NegativeInfinity);
    
    • 1
    Parameters 参数Description 描述
    stateName将要播放的动画状态名字。
    layer动画状态所在的层。
    normalizedTime将要播放动画状态的归一化时间(0-1,时间比例值)。

    5. 动画播放和暂停控制

    1. Animotor

    // 播放
    animator.Play("ani_name");
    // 暂停
    animator.speed = 0;
    // 继续播放
    animator.speed = 1;
    //  重置到起始帧
    animator.Play("ani_name", 0, 0f);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. Animation

    // 播放
    animition.Play("ani_name");
    // 暂停
    animition["ani_name"].speed = 0;
    // 继续播放
    animition["ani_name"].speed = 1;
    // 重置到起始帧
    public void ResetAni(Animation ani, string name)
    {
         AnimationState state = ani[name];
         ani.Play(name);
         state.time = 0;
         ani.Sample();
         state.enabled = false;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    【算法专题】双指针
    Python-入门-推导式
    【ACWing 算法基础】KMP
    方舟生存进化ARK个人服务器搭建教程保姆级
    Linux文件/目录所属组修改
    2024最新面试跳槽,软件测试面试题的整理与解析
    C语言——求1/1-1/2+1/3-......+1/99-1/100的值
    easyexcel和poi版本冲突报错深入解析v2
    数据库定时备份winserver2012篇
    js中==操作符的强制类型转换规则
  • 原文地址:https://blog.csdn.net/weixin_45136016/article/details/132756008