Unity核心6——Animation

2023-10-27

一、动画窗口

​ 通过 Window --> Animation --> Animation 打开 Animation 窗口

​ Animation窗口主要用于在 Unity 内部创建和修改动画,所有在场景中的对象都可以通过 Animation 窗口为其制作动画

​ 原理:

​ 制作动画时:记录在固定时间点对象挂载的脚本的变量变化

​ 播放动画时:将制作动画时记录的数据在固定时间点进行改变,产生动画效果

​ 动画时间轴:

​ 每一个动画文件都有自己的一个生命周期,从动画开始到结束

​ 我们可以在动画时间轴上编辑每一个动画生命周期中变化

​ 动画中的帧:

​ 假设某个动画的帧率为 60 帧每秒,意味着该动画 1 秒钟最多会有 60 次改变机会

​ 每一帧的间隔时间是 1s / 60 ≈ 16.67 毫秒

​ 也就是说 我们最快可以每 16.67 毫秒改变一次对象状态

​ 关键帧:动画在时间轴上的某一个时间节点上处于的状态

  1. 预览模式(开关)
  2. 录制模式(开关),打开后预览模式默认开启
  3. 回到动画开头
  4. 上一个关键帧(快捷键:“,”)
  5. 播放动画(快捷键:“Alt” + “,”)
  6. 下一个关键帧(快捷键:“。”)
  7. 回到动画结尾(快捷键:“Alt” + “。”)
  8. 当前处于第几帧
  9. 按选择筛选
  10. 添加关键帧
  11. 添加事件
  12. 关键帧模式
  13. 曲线模式

二、创建与编辑动画

(一)创建动画

  1. 在场景中选中想要创建动画的对象

  2. 在 Animation 窗口中点击创建

  3. 选择动画文件将要保存到的位置

保存动画文件时,Unity 会帮助我们完成以下操作

  1. 创建一个 Animator Controller(动画控制器或称之为动画状态机)资源(新动画系统)

  2. 将新创建的动画文件添加到 Animator Controller 中

  3. 为动画对象添加 Animator 组件

  4. 为 Animator 组件关联创建的 Animator Controller 文件

(二)编辑动画

​ 创建 Animation 文件后,点击对应的游戏对象,才可以编辑动画界面。在这里切换需要编辑的 Animation 文件

​ 这里可以添加变化属性,也可以任意添加想要在动画中变化的脚本变量

​ 也可以在录制模式下直接选中对象修改其属性,Unity 会自动记录这样的改变

(三)曲线设置

​ 点击 Curves,进入曲线设置。右键一个序列帧,会出现如下的参数:

  1. Delete Keys:删除关键帧
  2. Edit Keys:编辑关键帧
  3. Clamped Auto:切线模式,自动设置切线
  4. Auto:旧版切线模式,和 Clamped Auto 类似,主要用于老动画系统,建议不使用,除非是老动画
  5. Free Smooth:自由设置切线
  6. Flat:切线设置为水平
  7. Broken:单独控制左右曲线切线
  8. Left / Right / Both Tangent:切线的模式
    • Free:自由设置
    • Linear:直线
    • Constant:常量切换
    • Weighted:权重切换

(四)Animation 文件界面参数

​ 点击 Animation 文件,在 Inspector 面板看到如下参数:

  1. Loop Time:是否循环播放
  2. Loop Pose:起点和终点是否无缝衔接
  3. Cycle Offset:循环动画在其他时间开始时的周期偏移

三、老动画系统

(一)老动画系统

​ Unity 中有两套动画系统

  • 新:Mecanim 动画系统——主要用 Animator 组件控制动画
  • 老:Animation 动画系统——主要用 Animation 组件控制动画(Unity4 之前的版本可能会用到)

​ 目前我们为对象在 Animation 窗口创建的动画都会被新动画系统支配

​ 有特殊需求或者针对一些简易动画,才会使用老动画系统

​ 老动画系统主要用于处理老版本项目和简单的一些自制动画,新项目都不建议大家使用了

​ 关键组件:Animation

​ 注意:在创建动画之前为对象添加 Animation 组件之后再制作动画,这时制作出的动画和之前的动画格式是有区别的,创建动画时 Unity 不会自动生成动画状态机 Animator

​ 同时,创建的动画文件中显示的参数也和之前的不一样

  • Default:读取设置得到更高的默认重复模式
  • Once:播放一次就停止,播放结束
  • Loop:从头到尾不停循环播放
  • PingPong:从头到尾、再从尾到头播放,不断循环
  • ClampForever:播放结束后会停留在最后一帧,并且会一直播放最后一帧,状态不停止,一直在播放动画。表现效果和 Once 一样

(二)参数介绍

  1. Animation:默认播放的动画
  2. Animations:该动画组件可以控制的所有动画
  3. Play Automatically:是否一开始就自动播放默认动画
  4. Animate Physics:动画是否与物理交互
  5. Culling Type:决定什么时候不播放动画
    • Always Animate:始终播放
    • Based On Renderers:基于默认动画姿势剔除

(三)代码控制老动画系统

private Animation animation;

void Update()
{
    // 1.播放动画
    animation.Play("1");
    animation.Play("2");

    // 2.淡入播放,自动产生过渡效果
    //   当你要播放的动画的开始状态 和当前的状态 不一样时 
    //   就会产生过渡效果
    animation.CrossFade("3");

    // 3.前一个播完再播放下一个
    animation.PlayQueued("2");
    animation.CrossFadeQueued("2");

    // 4.停止播放所有动画
    animation.Stop();

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

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

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

(四)动画事件

​ 动画事件主要用于处理,当动画播放到某一时刻想要触发某些逻辑,比如进行伤害检测、发射子弹、特效播放等等

​ 在 Inspector 面板中选择 Function 添加进事件,这里的 Function 需要我们自己在脚本中写方法挂载到对应物体上

四、Animator 窗口

(一)有限状态机(Finite - state machine,FSM)

​ 又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型

​ 有限:表示是有限度的不是无限的

​ 状态:指所拥有的所有状态

​ 举例说明:

​ 假设我们人会做很多个动作,也就是有很多种状态,这些状态包括 站立、走路、跑步、攻击、防守、睡觉等等

​ 我们每天都会在这些状态中切换,而且这些状态虽然多但是是有限的,当达到某种条件时,我们就会在这些状态中进行切换,而且这种切换时随时可能发生的

​ 游戏开发中有很多功能系统都是有限状态机,最典型的状态机系统

​ 动作系统 —— 当满足某个条件切换一个动作,且动作是有限的

​ AI(人工智能)系统 —— 当满足某个条件切换一个状态,且状态时有限的

​ 所以状态机是游戏开发中一个必不可少的概念

(二)动画状态机窗口

​ 创建动画状态机的两种方式:

  • 通过为场景中物体创建动画时自动创建,名称和物体名称一样
  • 手动创建动画状态机文件

  1. Layers:动画层级页签,为动画添加更多的层级,层级高的动画播放会覆盖层级低的

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

  3. 网格化布局区域:

    主要用于编辑状态之前的切换关系

    • 窗口中的每一个矩形表示一个状态
    • 窗口中的每一个箭头表示一个切换条件

    默认三大矩形:

    • 绿色 Entry 矩形:进入状态机流程
    • 红色 Exit 矩形:退出状态机流程
    • Any State:任意状态,代表状态机中的任意状态

    人为添加矩形:

    • 橙色矩形:一开始的默认状态动画,和 Entry 相连表示一开始播放的动画
    • 灰色矩形:自己添加的某一种动作状态

​ 添加动画:

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

​ 添加切换连线:

​ 选择一个状态,右键选择 Make Transition 添加连线,再点击想要连接的状态即可

​ 添加切换条件:

​ 在左侧面板点击参数页签,可以在这里添加 4 种类型的切换条件

​ 设置切换条件:

​ 点击连线,在 Inspector 面板中的 Conditions 添加切换条件,多个条件存在时会进行与操作判断:

五、Animator

(一)参数介绍

  1. Controller:对应的动画控制器(状态机)
  2. Avatar:对应的替身配置信息(3D 模型相关)
  3. Aplly Root Motion:是否启用动画位移更新
  4. Update Mode:更新模式,一般不修改
    • Normal:正常更新
    • Animate Physics:物理更新
    • Unscaled Time:不受时间缩放影响
  5. Culling Mode:裁剪剔除模式
    • Always Animate:始终播放
    • Cull Update Transforms:摄像机没有渲染该物体时,停止位置、IK 的写入
    • Cull Completely:摄像机没有渲染物体时,整个动画被完全禁用

(二)代码控制

​ 我们用代码控制状态机切换主要使用的就是 Animator 提供给我们的 API

​ 我们知道一共有四种切换条件:int、float、bool、trigger,所以对应的 API 也是和这四种类型有关系的

private Animator animator;

// 1.通过状态机条件切换动画
animator.SetFloat("条件名", 1.2f);
animator.SetInteger("条件名", 5);
animator.SetBool("条件名", true);
animator.SetTrigger("条件名");

animator.GetFloat("条件名");
animator.GetInteger("条件名");
animator.GetBool("条件名");

// 2.直接切换动画 除非特殊情况 不然一般不使用
animator.Play("状态名");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity核心6——Animation 的相关文章

  • Bilibili自动签到脚本

    作者 三十三重天 博客 http www zhouhuibo club 通过学习和分享的过程 将自己工作中的问题和技术总结输出 希望菜鸟和老鸟都能通过自己的文章收获新的知识 并付诸实施 脚本介绍 这是一个利用 Linux Crontab G

随机推荐

  • 踩坑修改el-input样式

    修改el input样式
  • PCL 曲面重建 迫松重建

    一 算法原理 迫松重建法是一种基于隐式函数的三角网格重建算法 该方法通过对点云数据进行最优化的插值处理之后来获取近似的曲面 泊松曲面重建 jennychenhit的博客 CSDN博客 泊松曲面重建 迫松曲面重建的过程 1 定义八叉树 使用八
  • 如何修改Microsoft edge浏览器主页?

    目录 原因 1 主页被劫持 2 只是想改主页 解决办法 1 还原 2 更改 原因 1 主页被劫持 你是否因为打开Microsoft edge浏览器没有显示原本的主页 而是显示其它浏览器的主页 比如360浏览器或者其它的浏览器 而且广告也挺多
  • CSS样式如何使用?

    css是专门用来 美化 标签 基础CSS 写简单页面 看懂 学会改 模块 调整和修改 1 快速了解 img src style height 100px div style color red 中国联通 div 2 CSS应用方式 1 在标
  • GIT GUI(git的可视化工具)

    目录 一 前言 二 Git和GitHub通过密钥绑定 三 把本地文件夹进行git初始化 四 通过Git Gui上传文件至GitHub 一 前言 GIT官方网站为了解决部分用户通过命令行对git工具使用时的怨声载道的现象 因此推出了一个GIT
  • mc显示未发现java_mc命令编译一直报错, 提示找不到JavaInfo.jar

    x 我已经在 issues 里搜索 没有重复的issue 环境信息 arthas boot jar 或者 as sh 的版本 3 1 1 Arthas 版本 3 1 1 操作系统版本 Cent7 5 目标进程的JVM版本 JDK8 执行ar
  • Vue 和 React 的对比

    目录 前言 一 vue2 与 react 15 的对比 1 vue2 与 react 15 的相同点 2 vue2 与 react 15 的不同点 1 数据流的不同 2 框架本质不同 3 模板不同 4 组件通信方式不同 5 组合不同功能的方
  • 【c++实战项目】——云备份服务器

    项目介绍 云备份服务器能够通过浏览器将文件上传到服务器上 并且随时可以通过浏览器进行查看并且下载 其中下载的过程支持断点续传 服务器上有热点管理模块 将非热点文件进行压缩存储 节省服务器的磁盘空间 服务器各个模块的功能介绍 配置文件管理模块
  • JAVA 日期工具类(全面,代码可以直接使用)

    这是一个比较全面的时间工具类 可供参考 import cn hutool core date DatePattern import cn hutool core date DateTime import cn hutool core uti
  • VTM新手踩坑

    VTM踩坑实录 1 编码后yuv文件打开异常 2 编码帧数偏少 3 VTM命令行参数 1 编码后yuv文件打开异常 利用ffmpeg播放改文件 命令行 ffplay video size 宽x高 i file name yuv 时出现该画面
  • 入行 AI 训练营限时报名!

    作为码农一枚 近来这一年左右时间里 连续发生了多件事情 使得笔者不得不抬起原本一直低着敲代码的头 看看这个为 AI 狂欢的世界 01 算法 工程和数据 我们不说怎么能够成为XXX 我们先来看看成为XXX之后要做什么事情 而做这些事情 需要什
  • 点击延迟_TWS耳机可以测试延迟啦!“Latency Test”软件详细操作流程

    配备耳机孔的手机越来越少 蓝牙耳机已经成为大势所趋 然而和传统的有线耳机相比 蓝牙耳机始终存在一些硬伤 例如电量 成本以及延迟 延迟这一点 其实一直被很多人所诟病 用蓝牙耳机看视频影音不同步啦 玩音游总是打不到拍子上啦 这些情况都得怪蓝牙耳
  • 移动端 视角移动冲突 解决Input.GetAxis()

    不用它 用 Input GetTouch i detalPosition x
  • 使用xmanager 远程操作linux

    随着互联网的高速发展以及Linux企业应用的成熟 Linux被广泛应用于服务器领域 如何实现Linux的远程管理成为网络管理员的首要任务 我们经常见到的几种最为常用的windows下远程管理Linux服务器的方法 基本上都是利用Secure
  • NPM使用技巧

    NPM使用技巧 前言 技巧 全局模块位置 PowerShell报错 安装模块冲突 NPM介绍 NPM命令 使用方法 基本命令 模块命令 查看模块 运行命令 镜像管理 常用模块 rimraf yarn 前言 本文包含NodeJS中NPM包管理
  • ADO.NET的五个主要对象

    文章目录 Connection Command DataAdapter DataSet DataReader ADO NET中的五个主要对象 Connection Command DataAdapter DataSet DataReader
  • vue+express+websocket+mongodb在线群聊工具

    vue express websocket mongodb在线群聊工具 目录 vue express websocket mongodb在线群聊工具 1 项目概述 2 项目运行 3 项目代码细节 3 1 后端 3 1 1 nodejs连接数
  • (五)逻辑架构

    逻辑架构 1 逻辑架构剖析 1 1 服务器处理客户端请求 1 2 Connectors 1 3 第1层 连接层 1 4 第2层 服务层 1 5 第3层 引擎层 1 6 存储层 1 7 小结 2 SQL执行流程 2 1 MySQL 中的 SQ
  • 我们应该如何使用webstorm呢

    WebStorm2020安装教程 软件名称 WebStorm2020 软件语言 简体中文 软件大小 269 28MB 安装环境 Win10 Win8 Win7 64位下载链接 百度网盘地址 提取码 damd WebStorm是一款JavaS
  • Unity核心6——Animation

    一 动画窗口 通过 Window gt Animation gt Animation 打开 Animation 窗口 Animation窗口主要用于在 Unity 内部创建和修改动画 所有在场景中的对象都可以通过 Animation 窗口为