Unity Animation 动画相关总结
一、Animator
1.动画渐变
CrossFade是按照动画的自身时间进行混合。如果动画10秒,混合持续时间0.2,会在2秒后混合完成
CrossFadeInFixedTime是按照实际时间进行混合。如果动画10秒,混合持续时间0.2,会在0.2秒后混合完成
使用CrossFade或CrossFadeInFixedTime混合时,如果混合时间大于动画自身长度,动画自身会被滞留在最后一帧,直到混合结束
2.四种类型变量
Int,Float,Bool,Trigger,Trigger比较特殊,它是指触发一次,不需要去设置变量的值;
Animator的SetFloat接口可以设置阻尼,并且4种类型变量只有float是支持阻尼的。
public void SetFloat(int id, float value, float dampTime, float deltaTime);
这个接口需要每帧调用,每次调用后animator对应的param的值为
value = current + (target - current) * deltaTime / (dampTime + deltaTime);
3.各种状态
简单地说,状态机就是角色在某种条件的的行为。每一个状态会有不同的颜色,每一个动画状态都对应一个动作。
每一个动画状态机最少要有“Any State”、“Entry”;
4.动画转换条件解释:
Has Exit Time,是否有打断时间 勾选后要等当前动画播放完后,才会接下一个状态。不勾选的话 就允许动画播放一半时被打断
状态转换里的Has Exit Time就是必须过度的时间,处于这个时间时,是不允许任何对动画的操作的。
Exit Time 动画的打断时间(从哪一帧开始逐渐降低当前动画的权重并切换到下一动画),在这一帧之前是不允许对动画进行操作的;
Fixed Duration 固定持续时间(这其实是一个切换开关,切换是按照秒显示还是按照百分比显示)
Transition Duration 动画切换的过度时间间隔,越小切换的越快,但是不能设置为0,否则会失去连贯性
5.Retarget
Mecanim提供了重新设定目标的功能,如果类人模型的骨骼构造一致就可以直接使用其他模型的动画。
6.Animator视图
的参数需要区分大小写,而且Unity不会自动忽略后面的空格。
7.animator的trigger变量
trigger变量只能赋值,是一种触发变量,触发之后会自动关闭掉,没办法获取当前状态。
比如xxxx.animator.settrigger("Attack");在执行这一句时才是true ,但是执行后马上自动的变为false。适合用在单次动作或者连续不同动作使用,比如三国无双系列的攻击和蓄力攻击。但是如果动画没有执行,只是改变了转换条件Attack的值,那么Attack会一直为true直到动画被执行;比如,如果按下攻击按键后,再按攻击键,它不会再播放动画,但是Attack的值为真。
bool跟trigger不同在于触发之后会一直执行,而且可以获取当前状态。适合用在长时间持续动作,比如行走跑步。
void ResetTrigger(...);
重设该触发参数为False
如果是当前状态播放结束再跳转的话,会用到这个方法,在结束之前可以重置回False;
记录一个unity编辑器使用的问题
编辑器内进行了改动,本地没有反应?
使用unity内的一些图形编辑器如Animation、Animator、Shader Graph等,如果在编辑器内修改了资源未点击保存,那么资源是不会自动保存到本地的,直到退出unity之后会自动保存到文件中;但是如果你使用git不小心修改了一个文件,你会发现根本无法revert,这个时候需要点击保存,保存编辑器内的所有改动到本地文件,然后revert,把改动都丢弃掉;
8.Animator OverrideController
顾名思义,这是一个可以重写基类controller的控制器,可以在create菜单中选择创建;这种控制器可以替换原状态机中动画片段,但不会改变状态机的结构、逻辑和参数;
它继承于RuntimeAnimatorController,可以用于动态的切换控制器内的动画;
参考:https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.html
二、动画压缩方案
以下方案思路主要是截取自《游戏引擎架构》动画系统部分;
1.通道省略
2.量化
3.采样频率及键省略
4.总结
简单的动画压缩主要从三个粒度来压缩
- 关键帧:减少关键帧的数量,这一点unity为我们提供了一些剔除关键帧的接口;
- 每一帧的属性:从第三方插件中导出的动画文件,可能会有一些我们不需要的属性,如人物动画,我们往往不需要scale曲线,这时就可以将该部分剔除掉;
- 属性数据精度:动画文件的精度往往是过高的,在游戏中,往往需要小数点后三四位即可,这一点我们可以提供设置精度的接口来达到降低动画数据文件大小的目的;PS:这里降低的仅仅是磁盘大小,不会降低运行内存大小;
针对动画文件的优化,可以参考:Unity动画文件优化探究
三、Animation
关于旧的animation的踩坑记录
需要手动将资源的m_legacy设置为1,或代码里anim.legacy = true,否则无法使用Animation.AddClip;
之后要根据不同的anim类型来设置wrap mode,循环动画设置为loop,其它设置为clamp forever(该选项会在crossfade切换时一直使用最后一帧做融合)
性能优化
参考:https://www.gameres.com/847715.html
四、骨骼蒙皮
2D骨骼蒙皮动画插件:Spine是什么?
五、Mecanim动画系统
Avatar
Avatar是Mecanim动画系统自带的人形骨骼结构与导入模型文件的骨骼结构的映射关系;
导入带有动画的模型文件后,系统会自动为其生成一个Avatar文件;
骨骼共享规则:从根骨骼开始一一匹配,而且相对应的骨骼的名称必须一样,否则骨骼信息无法传递。
高级主题
根运动(Root Motion):所有引擎的动画系统都会有根运动;
Skinned Mesh Renderer
unity使用Skinned Mesh Renderer组件去渲染骨骼动画,网格的形状会随着骨骼进行改变,而骨骼又由animator驱动;所有的骨骼相连形成一个层级骨架,通过旋转和移动关节来定义动画;
Root Bone,设置动画的根骨骼,网格中所有的骨骼移动相对于该根骨骼;
六、动画重定向
UWA:动画重定向技术分析及其在Unity中的应用
动画重定向是一个动画复用的技术,它使用的是时间换空间的策略,在运行时根据预先计算好的骨骼差异信息,得到目标模型的动画数据;
它主要是为了解决如下问题:
Unity Animation 动画相关总结相关推荐
- Unity快速入门之四 - Unity模型动画相关
最近要给公司的小伙伴做Unity入门,针对几个常用的知识进行快速入门介绍. Unity快速入门之一 3D基础概念.Camera.Canvas RenderMode的几种方式对比_翕翕堂 Unity快速 ...
- Animation动画相关
本文出自http://wangstar.javaeye.com/blog/409115,感觉基础知识归纳得不错,就COPY下来方便查找. 动画效果编程基础--Android Animation ...
- Unity animation动画编辑器快捷键
Ripple快捷键 : R键 2018(包括2018)之前,拖拽选中的关键帧,若想要前方和后方关键帧可以跟随被选中关键帧移动,小按住R键进行拖拽. 2键 2019以后,Unity将此快捷键改为了2和S ...
- Unity Animation动画时间设置
遇到一个需求,需要给角色添加一个翻滚动作,在翻滚同时无敌且可穿越敌人. 目前已有翻滚的动画,是使用Sprite制作的动画剪辑.如何匹配动画时间和脚色无敌时间?做到在翻滚结束时同时结束无敌与无碰撞设置. ...
- 超级强大的SVG SMIL animation动画详解
超级强大的SVG SMIL animation动画详解 本文摘自超级强大的SVG SMIL animation动画详解_Zoomla!逐浪CMS官网 (z01.com),网站看上去有年头了,担心哪天会 ...
- [转]超级强大的SVG SMIL animation动画详解
超级强大的SVG SMIL animation动画详解 本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究. 本文地址:http://www.zhangxinxu.com/word ...
- SVG SMIL animation动画详解----转载
一.SVG SMIL animation概览 1. SMIL是什么? SMIL不是指「水蜜梨」,而是Synchronized Multimedia Integration Language(同步多媒体 ...
- Unity -- Animation(旧版动画组件)和Animator(新版动画器组件)
旧版animation动画器组件 如果想让一个游戏物体具有动画表现的话,我们需要给这个游戏物体挂载动画组件 和音频组件视频组件一样,如果想在游戏对象上播放动画效果的话我们需要挂载一个动画组件,然后再给 ...
- Unity Animation -- 改进动画效果
使用曲线(Curves)改善动画 在上一篇笔记中(Unity Animation -- Overview_亦枫Leonlew的博客-CSDN博客),我们制作了简单的小球弹跳的动画,但这个动画看起来很不 ...
最新文章
- pandas_getdummies()
- SAP RETAIL 根据Merchandise Category Hierarchy Level查询物料清单
- 【ANDROID游戏开发十六】ANDROID GESTURE之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!...
- 动画 java_Java动画程序介绍
- 聊聊Tomcat的架构设计
- 编程方法学11:Gimage
- 草稿 断开式的连接 1127
- 编写一个脚本,用它来操纵QTP的运行
- python 管道游戏_用Python做flybird游戏
- Ubuntu20.04更换软件源
- c++ de-mangle 反编译器命名工具:c++filt
- nvivo三天写论文!可视化操作实战
- 今日恐慌与贪婪指数为14,恐慌程度与昨日持平
- 终于去看了麦兜响当当
- 写一段潮汐调和分析的matlab代码
- Java程序员必备核心知识点整理,建议收藏!
- 30多种磁芯优缺点对比
- activiti java service task 服务任务
- 不要被新媒体营造的焦虑所绑架(咪蒙类账号的不道德)
- Java之Builder模式使用