关于Unity中Mecanim动画的重定向与动画混合
应用
一个RPG游戏,里面有100种怪物,每种怪物其实都差不多的,行走,跳跃,攻击,难道动画师要调100次动画吗?其实不需要
Unity抽象出人形动画系统,用Unity简化版的骨骼来进行统一的管理,只要是使用人形动画系统做的角色动画,可以使用其他角色进行播放,应用到不同的角色里面,这个就是重定向技术。
动画本身是控制骨骼在那里运动,同样的都是人体,其实动作差别并不大,都是行走,这时候就可以由一种动画重定向到不同的角色模型上。
人形动画可以理解为Unity为人物角色而抽象出来的一个动画模板,专门做的这一套动画系统,是为了减轻工作负担。
重定向
1:在人形动画系统中,所有的角色动画都属于unity定义的统一的人形,而我们的角色动画都是征询这个规矩做的,
Avatar文件做好映射,那么如果我们是基于人形而调的骨骼动画,动画师调出了角色A的动画,那么角色B也可以使用这个动画师做好的动画,
他们使用同样的动画和动画控制器,这样简化了动画的工作,解绑了动画师和建模师之间的工作依赖。
2: 传统的动画,每个模型要做一个动画,而人形动画可以解决这个问题。
3: 能够使包体大小变小。
重定向实例
1.创建Unity工程和文件目录,保存场景
2.导入资源文件包body_anim.unitypackage(第57)
3.打开Models文件夹,点击模型Boy,设置Rig---->Animation Tyoe---->Humanoid(人形动画)
4.配置Avatar
5.把模型Boy拖进场景中,会自己挂载一个Animator的组件
6.在res文件夹下创建一个动画控制器Create---->Animator Controller,叫做anim_ctrl,双击打开,可以用鼠标中键按下拖动背景
7.动画控制器配置,将动画文件拖入到Animator窗口,创建一个idle动画状态单元,动画控制器anim_ctrl关联组件Animator的Controller
8.其实到这里已经有用到动画重定向的技术了,就是Assets\Animations\AnisForFight\Boy@Idle这个里面的角色模型和我们实际运行的角色模型Boy是不同的。
9.再导入一个资源文件包girl.unitypackage(第57)
10.把Assets\Models里面的Girl模型拖进场景中,配置Avatar,再把刚才的动画控制器anim_ctrl关联到Girl模型的组件Animator的Controller
11.运行,发现和Boy模型动作一样,重定向完成
12.如果觉得重定向后动作过于夸张,可以使用模型的Muscles & Settings栏,调整骨骼的运动范围的参数,旋转运动的幅度
角色动画的混合
1:游戏开发过程中,有时候会有将两个动画混合成一个动画的需求,比如编写一个边跑边招手的动作,开发好了跑步的动作,和招手的动作,按照传统的方式需要重新再开发一个动作,Unity提供了角色动画的混合,能把两个动画合成一个新的动画;
2:混合动画基于混合动画树完成,混合动画树是 动画状态的其中一种,可以加入到动画状态机,可以看作是混合后新的一个动画;
3: 创建步骤:
(1)创建Blend Tree, Create State---> From New Blend Tree,(它自己实际上也是一个动画状态单元)
(2)双击Blend Tree进入Blend Tree面板,右边属性面板有一个Motion的动画列表
(3)添加要混合的动画到动画列表,可以添加,也可以删除,曲线取两者重叠的那一列就是两个动作混合。
(4)配置混合参数,Threal是阈值,调整曲线。像闹钟一样的标志的那一列是播放时间,越大,播放速度越快。也可以勾选Automate Threshold进行自动配置。
(5)配置好参数后记得要把Parameters面板下面的自动生成的Blend参数的值设置成和Blend Tree子树混合值一样的数值,不然运行时候无效
(6)BlendTree支持子树
动画混合算法
1: 1D混合方式: 最简单的和常用的混合方式,每个被混合的子动画都会被分配一个可以修改的Float的值,开发人员可以修改这个值来改变混合动画的效果,混合结果中比例越大,就越靠近那个动画;
2: 2D Simple Directional混合方式:以两个混合参数作为混合结果的横竖坐标值,混合的动画以正方形的方式混合在面板中。各自的混合比例用正方型外围的圆圈表现出来;每个动画的分布也以颜色的深浅表现出来;白的比例高,黑的比例少
3: 2D Freeform Directional混合方式:每个源动画都有一个放射性的显示面板,颜色越白权重越大。反之越小,可以通过移动源动画点,对现实面板进行调整;白的比例高,黑的比例少
4: 2D Freeform Cartesian混合方式: 源动画相连渐变表示,混合面板中颜色的深浅表示了各自动化的在混合动画中的权重;白的比例高,黑的比例少
关于Unity中Mecanim动画的重定向与动画混合的更多相关文章
- 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器
对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...
- Unity中Mecanim工作流
Mecanim工作流可以被分解为3个主要阶段:1.资源的准备和导入这一阶段由美术师或动画师通过第三方工具来完成,例如Max或Maya.2.角色的建立主要有以下两种方式1)人形角色的建立.Mecanim ...
- unity中多个门的开关动画保持独立性
List<Animation> storeAnimation; public void Awake() { storeAnimation = new List<Animation&g ...
- 动画重定向技术分析和Unity中的应用
http://www.jianshu.com/p/6e9ba1b9c99e 因为一些手游项目需要使用Unity引擎,但在动画部分需要使用重定向技术来实现动画复用,考虑到有些项目开发人员没有过这方面的经 ...
- 动画重定向技术分析及其在Unity中的应用
前言 笔者新的手游项目使用Unity引擎,动画部分要使用重定向技术来实现动画复用.笔者之前在大公司工作的时候对这块了解比较深入,读过Havok引擎在这部分的实现源码,并基于自己的理解,在公司自研的手游 ...
- 关于Unity中新版动画系统的使用
Mecanim动画 1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的 ...
- 骨骼动画的原理及在Unity中的使用
制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...
- 如何在unity中使用龙骨动画
龙骨 龙骨是Egret公司的一个用来做动画的软件,本文分享一下如何在Unity2D中使用龙骨导出的2D动画 导出动画 在龙骨中文件->导出,导出动画数据和纹理到Unity的项目中,如果打包了的话 ...
- 关于Unity中旧版动画系统的使用
Unity在5.X以后,有一个旧版的动画系统和新版的动画系统. 新版的动画系统是使用Unity动画编辑器来调的,调动画和控制动画 旧版的动画系统是用其他的第三方软件调好后导出到一个FBX文件里面,就是 ...
随机推荐
- 基于 Promise 的 HTTP 请求客户端 axios
基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用 功能特性 在浏览器中发送 XMLHttpRequests 请求 在 node.js 中发送 http请求 支持 ...
- K8s 介绍
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. 使用Kubernetes可以: 1. 自动化容器的部署和复制 2. 随时扩展或收缩容器规模 3. 将 ...
- express中的会话存储方式
会话存储需要用的express-session包 app.use(require('express-sessiion')()) express-session接收带有如下选项的配置对象: key;存放 ...
- Adventures in deep learning
转:https://github.com/GKalliatakis/Adventures-in-deep-learning Adventures in deep learning State-of-t ...
- (原创)如何使用boost.asio写一个简单的通信程序(二)
先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...
- 安装pydiction
pydiction用来实现代码补全和语法提示功能.pydiction不能通过apt安装,需要自行下载安装. 在GitHub下载源码,可以使用Git迁出到本地,或者下载zip包自行解压,地址为:http ...
- MyBatis SqlSessionFactory的几种常见创建方式
原文链接:https://blog.csdn.net/jimolangge123/article/details/49228255 MyBatis框架主要是围绕着SqlSessionFactory这个 ...
- Notepad++中支持Markdown
最近在学习Markdown语言的使用,很想在XP主机上使用Markdown的离线编辑器,但MarkdownPad.作业部分的离线客户端都不能再XP上运行,需要.Net 4.5 以上版本,可惜一台老主机 ...
- Python3求英文文档中每个单词出现的次数并排序
[本文出自天外归云的博客园] 题目要求: 1.统计英文文档中每个单词出现的次数. 2.统计结果先按次数降序排序,再按单词首字母降序排序. 3.需要考虑大文件的读取. 我的解法如下: import ch ...
- 为python 添加新功能-dump
一直觉得thinkphp提供的dump函数挺好用的,但是python里面没有,就一直想着写个简单的. dir是我比较常用的一个内置函数了,但是显示效果实在有点受不了,每次我都要从大量的字符串里找到我需 ...