一、动画的基本概念

1、帧

在古代,一幅字画叫一帧,而在计算机中,每次渲染完毕一幅画面并显示出来,这一幅画就是一帧。

连续切换的帧就形成了动态的画面。每秒刷新帧的次数称为频率,单位是FPS(Frames Per Second,帧/秒),也可以简称为"帧"。传统电影每秒显示24帧就可以保证良好的动态效果。由于游戏与电影显示原理的不同,游戏至少需要30帧才能感到流畅,而要保证良好的视觉体验则最好是60帧。在电子竞技领域中,也会追求更高的帧率,以获得比赛中的优势。

我们普遍希望帧率尽可能稳定,但在游戏运行过程中,设备不一定能维持稳定的帧率。当运算负载较高时,Unity就会降低画面和逻辑的更新次数

2、帧动画

帧动画是最古老、也是最容易理解的一种动画技术。它是事先准备好动画中的每一帧画面,然后依次播放。

优点:简单直接、技术门槛低,美术设计师在一定范围内可以自由发挥

缺点:美术制作的工作量较大,占用的存储空间也大(每一帧都需要完整保存),目前主要用于2D游戏

3、3D骨骼动画

早期的3D动画是由设计师编辑模型各部分的位置、旋转等,直接制作出动作。这有点类似于橡皮泥手工动画,要让人物走路就要不断调整头、身体、手臂、和腿等各个部分的位置,这导致最初的3D动画工作量大,而且很难做出真实的人类动作。

随着技术的发展,出现了"骨骼动画"这一技术。骨骼动画思想简单来说,是将人物模型与一个类似火柴棍组成的骨架绑定在一起,每一段火柴棍(骨骼)关联着模型的一部分,这样只需要移动和旋转骨架,人物就会跟着做出各种动作了。这一技术不仅节省了工作量,而且动作效果也更加自然。

另外,同一套骨骼数据可以应用于体型相近的不同角色模型上这样就可以批量地制作更多的角色。实践中甚至可以将一套骨骼和动画适配到另一套不同的骨骼模型上,这称为"重定向"。

Unity对3D动画、3D骨骼动画君哦与较好的支持,如FBX文件(一种常用的3D模型和动画文件格式)。

在Project窗口中选定FBX文件,,可以在Inspector窗口内看到导入设置,导入设置具有Model(模型)、Rig(骨骼绑定)、Animation(动画)、和Materials(材质)4个选项。其中的Rig选项中,可以选择的动画类型为None(无骨骼)、Legacy(旧版系统)、Generic(通用型)、和Humanoid(人形),目前主要使用后两者。如果是人形骨骼模型,则选择Humaniod,在其他情况下(没有骨骼或不是人形角色)都可以选择Generic选项。Unity对常用的人形骨骼有优化,功能更多,使用也更方便。

4、2D骨骼动画

随着骨骼动画的发展,人们发现2D动画其实也可以借用骨骼动画技术。思路是将2D角色身体的各个部分切割开,做成独立的图片,然后绑定一个2D的"火柴"组成的骨骼,通过调整骨骼,也可以让2D角色活灵活现地动起来。这样可以提高效率和资源利用率。

目前Unity对2D骨骼动画也有较好的支持,可以借助官方扩展包2D Animation直接制作2D骨骼动画,也可以使用更专业的2D骨骼动画软件,如Spine和Dragonbones借助相关插件导入Unity中使用

二、动画融合

3D骨骼动画和2D骨骼动画都有一个共同的特点:动作被抽象画、数据化了,计算机能够表示帧与帧之间的联系,甚至能够计算出两帧之间的过渡状态。动画设计师只需要制定一个动作中的关键几个帧(关键帧),其他的帧(过渡帧)可以利用数学算法进行插值计算(线性插值或其他插值算法)。

以此类推,不仅同一个动作的各个关键帧之间可以自动计算过渡帧,而且不同动作之间也可以计算过渡帧。再进一步,如果动画设计师提供了"慢走"和"快跑"两个动作,甚至还可以通过插值计算出慢跑、中苏跑等更多介于慢跑和快爬之间的动作。这种在不同动作之间自动计算过渡状态的技术称为"动画融合"。

Unity对动画融合有很好的支持,在动画状态机中有专用的融合树(Blend Tree),它支持一个或两个维度的动画融合。"两个维度"指的是两种运动方式,如常用的"转身"和"前进"就是两个维度,利用Blend Tree可以混合出慢走并快速左转,或者快走并慢速右转等不计其数的动作。

⚠️:在帧动画中,每一帧都是相对独立的。帧动画的数据没有抽象画、数据化,就不肯能进行动画融合。因此,如果采用帧动画,就不用考虑动画融合。

三、动画状态机

目前,几乎所有的Unity游戏在制作动画时都要用到动画状态机(Animator),动画状态机目前已经是游戏开发的标准配置。

但是,理论上来说动画状态机并不是必须的。特别是对采用帧动画制作的游戏来说,帧动画本质就是图片的切换,那么只要及时切换图片,自然就能正常播放动画。因此,用脚本直接修改图片也并无不可,比一定非要使用动画状态机。

只是在实际游戏开发中,利用动画状态机可以统一动画制作思路,包括2D动画、3D动画、骨骼动画和动画融合等。因此,Unity逐渐摒弃了其他的动画管理方法而统一用动画状态机组件管理所有动画。

理解动画状态机

要理解使用"动画状态机"的必要性,必须思考一个问题:假设有站立、下蹲、走/跑和跳跃4种动画,那如何变成来描述动画状态,以便在不同的动画之间切换?其初步思考结论如下:

  1. 在地面上速度为0时,站立。这是默认动画
  2. 在站立状态下速度大于0,切换为走或跑的动画,根据移动速度帧切换速度。
  3. 在站里状态下跳跃,切换为跳跃动画
  4. 在走/跑状态下跳跃,也切换为跳跃动画
  5. 在跳跃状态下落地,切换为站立动画。如果速度部位0,站立动画会立即切换到走/跑动画
  6. 在站立状态下下蹲,切换为下蹲动画
  7. 在下蹲状态下站立,切换为站立动画

以此类推,逐个分析清楚每一个动画状体及转移条件,就可以得出动画切换的思路。"思路"有一种明显的模式:当前处于某个状态,如果发生某件事,就切换到另一个状态。

这种思路在编程中极其有用,有一个专门的名称——状态机(State Machine)。虽然本文是在动画系统中初次提到状态机,但实际上状态机的应用非常广泛,包括在游戏逻辑框架和AI系统中都经常能用到。大学生第一次了解到通常是在学习计算机网络时。

状体

Unity 动画系统基本概念相关推荐

  1. Unity动画系统详解9:Target Matching是什么?

    摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...

  2. Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  3. VR开发——Unity动画系统(V客it学院技术分享)

    在我们进行VR开发的过程中,免不了需要各种各样的模型动画.那么面对这样的简单动画,我们大可以使用Unity的动画系统来完成整个事情. 前段时间我在博客看见了一篇非常不错的动画系统讲解,今天我就借花献佛 ...

  4. Unity动画系统详解3:如何播放、切换动画?

    摘要:[长文预警,建议先收藏]有了模型和多个动画以后,在Unity中如何控制它们的播放和切换呢?本文带你一站式解析Unity的Animator模块. 洪流学堂,让你快人几步.你好,我是跟着大智学Uni ...

  5. unity 动画系统

    Unity动画系统 Unity动画系统是Unity中非常重要的一部分,它提供了一个强大的框架来实现动画.Unity动画系统可以处理几乎所有的动画需求,从简单的2D动画到复杂的3D动画. Unity动画 ...

  6. Unity动画系统详解10:子状态机是什么?

    摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...

  7. Unity动画系统学习

    Unity动画系统学习 文章目录 Unity动画系统学习 AnimationState 动画状态 Animation Transitions 动画过渡 动画分层和遮罩 动画混合 1D混合 2D混合 动 ...

  8. Unity动画系统详解4:如何用代码控制动画?

    摘要:通过上一篇咱们知道了播放动画需要使用Animator,那么如何用代码控制动画呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统 ...

  9. Unity动画系统常用知识总结

    Unity动画系统常用知识总结 资源导入需要注意的地方 常用的组件 Animator 组件 Avatar Mask 骨骼遮罩 Animator Controller 动画切换 Any State Ha ...

最新文章

  1. 写一个通用数据访问组件
  2. c语言statistics函数,Logistic回归中C-Statistics计算方法
  3. Linux系统下文件与目录操作
  4. HDOJ 2035 人见人爱A^B
  5. SAS安装数据SID文件无效问题的解决
  6. android设备分辨率排行,[图表]主流安卓旗舰手机像素密度排行榜出炉
  7. 谈谈我的感受:VS Code和Code Runner
  8. 一张图回顾Hadoop十年 Hadoop老矣,尚能饭否
  9. 营业执照注册号是不是统一社会信用代码?
  10. DPDK17.05 第一次试用心得与问题记录
  11. 今年上半年消费市场趋势_您今年需要了解的8种趋势
  12. Android 跳转电话、邮件、短信等系统页面
  13. mysql records_MySQL 基本操作 · LYF_Records
  14. 连物联网数据都理不清楚还怎么搞大数据分析?
  15. 计算机应用投稿建议,计算机类核心期刊投稿心得【转】 - 计算机软件及计算机应用 - 电子技术及信息科学 - C......
  16. ( 蚁群算法总结)何涛
  17. Scaling Hyperledger Fabric Using Pipelined Execution and Sparse Peers(提升fabric 6倍性能的文章翻译)
  18. linux shell正则表达式如何匹配域名(包含中文域名)
  19. ubifs mtd分区
  20. 图书资源下载网站收集

热门文章

  1. ngixn 负载均衡
  2. 网贷羊毛党凶猛:17家平台投资转化率仅13%
  3. 2005-2019年全国硕士研究生入学统一考试英语(二)真题 试卷 词频
  4. 微型计算机系统采用总,微型计算机系统采用总线对CPU、存储器设备进行连接。他们主要负责传送的信号是______。...
  5. UniAPP社区项目实战教案
  6. CF667DIV3-F:dp
  7. 设置navigationBar的背景为透明,总结自苹果官方文档
  8. 打开查看linux内核代码,source insight 查看linux内核代码树【转载】
  9. 最大后验估计(map)——转自可乐LL
  10. mongo 创建索引