Mecanim动画系统
序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统。本文是作为自己的学习来讲解的,
可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻。
一、文件的导入与文件类型的区别:
图1、

图2、

1、上图中的是两种不同的素材,图1的是没有进行动画切割的文件动画模型,而图二是已经切割了的动画模型。
通俗的来讲,就是,切割了的动画模型我们只需要直接用就行了,不用自己手动的去切割动画,
而未切割的偶的动画模型则是所有动画的集合,程序员要根据动画师提供的动画帧数据来进行手动的动画帧切割,比较繁琐。
二、文件导入
选中导入的模型DefaultAvatar,在Inspector面板进行模型的参数相关设置,有三个选项,分别是Model、Rig、Animations三个选项卡
1、Model:设置的是模型导入的参数设置,主要设置的是比例大小的设置,因为每个建模师的所用比例不同,
要根据具体情境进行大小的设置,当然可以在场景中创建一个Cube,一个Cube是1*1*!的,然后进行相对的调整即可。
2、Rig:主要是设置模型的动画类型,然后进行相关的正确映射。

(1)、选中Humanoid类型,然后设置其骨骼映射和肌肉的设置:其中实圈对应的是必须的骨骼,而虚圈不一定要正确匹配。
(2)、当匹配成功会在Scene视图中看到骨骼成了绿色了。
(3)、建议是先让系统进行自动匹配(在Mapping选项中选择Automap),然后在对不匹配的骨骼进行手动的调整,减少工作量。
(4)、在对骨骼进行配置的时候,建议将骨骼定义为T型,方便我们进行调试。
(5)、在Pose选项中,设置为Enforce T-pose,这样就可以方便我们进行调试了。
(6)、骨骼定义好了,再转到肌肉选项,一般肌肉选项这边保持系统默认的即可了。
(7)、然后选择Done完成配置。这时在其动画模型下就会出现一个以Avatar结尾的骨骼映射文件了。

3、Animation:动画设置。
三、模型的配置:
将模型拖到Scene视图中,可以看到,在Inspector面板中可以看到自动添加了Animator属性,
此时里面缺少了动画状态机,Animator Controller,我们可以创建一个状态机,稍后对其进行配置。
四、动画模型的配置:
因为是一个角色,则这里将所有的动画模型采用同一种骨骼映射。
选中骨骼模型,在Inspector面板的Rig面板设置为Humanoid类型的动画,在设置其的骨骼映射为上一步生成以Avatar结尾的。

完成骨骼的配置,接下来就是对动画的帧进行控制,这个需要根据动画师提供的数据进行配置,就不详细叙述了。
五、状态机的配置:
(1)、在状态机中可以设置四种控制动画的过渡参数类型,bool float int trigger,可以根据需求进行设置。
(2)、将角色的动画拖入状态机中即可导入动画,其中Any State代表的是状态机中的所有动画,这个一般用来控制游戏物体的死亡,因为死亡了,则所有的动画都要进行停止了。
(3)、其他的则根据需求进行动画的设置 ,中间通过过渡条件进行状态的切换。
(4)、在状态机中,橙色的代表的是默认动画,当然可以通过自己设置默认动画。灰色代表的是普通动画。
(5)、动画如何实现需要按照需求来进行状态的过渡。可以单击过渡条件,选择什么时候进行过渡。
(6)、设置其Conditions即可,按需求设置。就可以在代码中进行控制参数来进行状态的切换了。
这里给大家提一个坑,当初我学的时候被整懵了
1、【设置Any State过渡到其他的状态的时候,要把Settings -->Can To Self去掉勾选,这样就不能映射到自身了,不然无法正确播放装换后的动画】
2、如果是想通过参数进行控制状态的切换而不用等动画播放完再播放的话,则需要将Has Exit Time取消勾选。

六、状态机设置完毕,就可以通过代码通知其动画的播放了:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controller : MonoBehaviour
{
private Animator animator;
// Use this for initialization
void Start()
{
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
float vertical = Input.GetAxis("Vertical");
float horizontal = Input.GetAxis("Horizontal");
animator.SetFloat("Speed", vertical);
animator.SetFloat("Angular", horizontal);
if (Input.GetKeyDown(KeyCode.Space))
{
animator.SetBool("Dead", true);
}
//print(vertical);
}
}
七、重定向功能:
接下来为大家介绍下重定向功能。其实就是公用一个Animatior Controller而已,只是术语高大上,内容贼逗,哈哈哈。
1、使用另一个动画模型,重复以上的步骤进行骨骼的映射,动画调试等一系列设置。
2、设置新模型上的Animator Controller为上一步创建的,拖进即可,然后再关联脚本即可。
3、然后再场景中就可以通过按键进行控制两个角色的行走了。
八、总结:
在这里Mecanim动画系统就结束了,新手肯定会有很多错误,希望大家可以包容包容。总的来说,
该Mecanim方便了我们设置动画的播放状态,状态机的使用直接大大减少了工作量。
2017-12-17 、00:17:16
Mecanim动画系统的更多相关文章
- Unity3D Mecanim 动画系统骨骼动画问题解决方法
http://7dot9.com/2014/08/16/unity3d-mecanim%E5%8A%A8%E7%94%BB%E7%B3%BB%E7%BB%9F%E9%AA%A8%E9%AA%BC%E5 ...
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...
- Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统
Mecanim简介 Mecanim动画系统是Unity3D4.0开始引入的一套全新的动画系统,主要提供了下面4个方面的功能: 针对人形角色提供一套特殊的工作流. 动画重定向的能力,可以非常方便的把动画 ...
- [Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 这段时间博主将大部分的精力都放在了研究官方演示样例项目上,主要是希望能够从中挖掘出有价值的东 ...
- [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统
大家好.我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...
- 【Unity】第10章 Mecanim动画系统
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 Unity提供了两种动画系统:一种是早期版本提供的旧版(Legacy)动画系统,旧版本(Legacy)以后将逐步被淘汰掉 ...
- 01、Mecanim动画系统
序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统.本文是作为自己的学习来讲解的, 可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻. 一.文件的 ...
- Mecanim动画系统 - 在角色上使用Mask 叠加动画层
http://www.narkii.com/club/thread-305706-1.html 2013-10-9 01:15 上传 下载附件 (78.65 KB) 导读:五分钟了解Mecanim角色 ...
- Spine学习七 - spine动画资源+ Unity Mecanim动画系统
前面已经讲过 Spine自己动画状态机的动画融合,但是万一有哥们就是想要使用Unity的动画系统,那有没有办法呢?答案是肯定的,接下来,就说说如何实现: 1. 在project面板找打你导入的Spin ...
随机推荐
- javascript 可多选的下拉框 multiselect
首先引用一个写的很好的博客http://www.cnblogs.com/landeanfen/p/5013452.html 我使用的是bootstrap-multiselect,实现功能是 选择下拉框 ...
- nodeCZBK-笔记1
[TOC] ****************************** day01 node简介 Node.js是一个让JavaScript运行在服务器端的开发平台. node就是一个js的执行环境 ...
- JavaScript 数组基本操作
简介 数组操作无论是在JavaScript中还是在其他语言中都是很常见.经常会用到的,现在我把JavaScript 数组基本操作整理一下,供大家参考学习.里边包含我自己的见解以及案例,希望能够帮助大家 ...
- 通过Xshell连接CentOS虚拟机
1.通过"setup"配置网络ip(CentOS7不支持setup配置) 2.通过"service network restart"来重启网络服务 3.&quo ...
- [转载] Java集合---HashMap源码剖析
转载自http://www.cnblogs.com/ITtangtang/p/3948406.html 一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射 ...
- 【原创】使用workstation安装Xenserver 6.5+cloudstack 4.10----本地存储模式
1. 背景: 近期由于项目和个人学习得需求,开始接触到Cloudstack,虽然云计算概念在大学刚毕业的时候就已经略有耳闻,但是由于工作原因,也一直没有了解,下班后想自己折腾下cloudstack,便 ...
- Spring Boot中采用Mockito来mock所测试的类的依赖(避免加载spring bean,避免启动服务器)
最近试用了一下Mockito,感觉真的挺方便的.举几个应用实例: 1,需要测试的service中注入的有一个dao,而我并不需要去测试这个dao的逻辑,只需要对service进行测试.这个时候怎么办呢 ...
- PHP strftime()函数输出乱码问题
直接调用strftime() strftime(time_buf, 80, "%a, %e %b %G %T %z", p_stime); 输出为 Îå, 18 12ÔÂ 201 ...
- formData实现图片上传
前言 在 上一篇 已经实现了图片预览,那么如何上传图片呢?有两种思路: 1.将图片转化为dataURL(base64),这样就成为了一串字符串,再传到服务端.不过这样缺点很多,数据量比转换之前增加1/ ...
- Java实现Html转PDF的方法
写在前面 以下路径问题根据项目结构自己修改,以下是我使用spring boot打成jar包的写法. 一.需求背景 在前端编辑器中输入任意的文本,包括css样式变化,保存为html文本.通过Java后台 ...