关于Unity中新版动画系统的使用
Mecanim动画
1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的Mecanim动画系统;
2:Mecanim支持运动重定向(Retargeting)功能,即把动画从一个角色模型应用到另一个角色模型;
3: Mecanim允许使用“肌肉”来控制不同骨骼的运动范围;觉得某个动画太夸张的时候,可以用"肌肉"来限制一下。
4: Mecanim动画系统三要素:
(1)Avatar: 从Mecanim系统的简化人形骨架结构(Unity抽象出来的骨架结构)到用户实际提供的骨架结构的映射(自己模型所对应的骨架结构);只要我们命名比较规范,这个映射是可以自动识别的。
(2)Animator Controller: 动画控制器用来控制动画的播放和过渡条件
(3)Animation Clip: 动画剪辑;
Mecanim动画实例
1.创建Unity工程和文件目录
2.导入资源文件包body_anim.unitypackage(第56)
3.打开Models文件夹,点击模型Boy,设置Rig---->Animation Tyoe---->Humanoid(人形动画)
4.配置Avatar
a: 导入模型后,将模型的动画模式配置成Humanoid模式。
None: 无模式, Legacy: 旧版动画模式, Generic 其他动画模式, Humanoid 人形角色动画模式;
b: 系统将会自动生成模型对应的Avatar文件, 并作为其子对象;展开模型Boy可以看到一个BoyAvatar。
c: 大部分情况下Mecanim都能正确的生成Avatar文件,
Configure这个前面会有一个勾,点击Configue,能查看到
映射情况,如果有错误,点击Configue,手动做好人形骨骼的映射。
点击Configure,Scene视图里面会呈现模型,绿色的一条一条的就是Unity抽象出来的骨架结构。右边Mapping就是映射的结果,没有绿色填充的就是美术没有设计这个骨骼。有红色的点就是没有映射成功的,可以手动拖进去。
d:Mapping: Clear清除映射, AutoMap自动映射;
e 如果骨骼绑定正确,但是角色姿势不对(不是标准的T形),
在Scene中可看到消息“Character not in T-Pose”,解决此问题
可通过Pose->Enforce T-Pose或旋转其它的骨骼。
f:Muscle配置:对于过于夸张的一些动作,比如动画重定向过来的时候,小孩的动画用在大人身上,可以通过对骨骼限定范围来进行调整,让这个骨骼运动在这个范围内,这样,就不用重新制作动画;
(1)点击Muscles & Settings栏
(2)点击要限制的骨骼;
(3)调整骨骼的运动范围的参数,旋转运动的幅度;
g.配置完成后点击Done---->Apply
5.把模型Boy拖进场景中,会自己挂载一个Animator的组件
Controller属性放动画控制器
Avator属性放映射的BoyAvator文件
6.在res文件夹下创建一个动画控制器Create---->Animator Controller,叫做anim_ctrl,双击打开,可以用鼠标中键按下拖动背景
7.动画控制器配置
a:动画控制器anim_ctrl打开:Parameters是动画控制器所带的参数列表,Layers是当前的动画层
b: 动画状态机
(1) 动画状态机必然包含有3个动画状态单元 Any State, Exit, Entry;
(2) 动画状态机可以包含多个动画状态单元;
(3) 还可以包含子动画状态机;
c: 动画状态单元的创建:
在创建之前可以查看这个动画的效果,在Assets\Animations\AnisForFight目录下,点击某一个,再点击Animation栏,下面的播放按钮可以播放。
方法(1): Animator窗口中鼠标右键 在菜单中选择 Create State-->Empty;第一次创建的时候会被设置为默认动画状态并显示为黄色,Entry会直接指向它,
再创建一个就不会是默认状态了显示为灰色,也可以在任意非默认单元上右键 Set As Default来设置默认的动画状态,同时只能有一个默认的动画状态。
方法(2): 将动画文件拖入到Animator窗口,就是直接把Assets\Animations\AnisForFight\Boy@Idle拖进状态机视图中,会自动帮我们关联好Motion
我们创建一个默认的动画状态单元叫idle,关联它的Motion属性,就是在Assets\Animations\AnisForFight\Boy@Idle下的idle文件,这个在面板中展开Boy@Idle才能看到。
再创建一个动画状态单元叫jump,关联它的Motion属性,就是在Assets\Animations\AnisForFight\Boy@JumpLoop下的take 001文件,这个在面板中展开Boy@JumpLoop才能看到。
测试:把jump设置为默认动画状态单元,关联控制器到Animator组件,运行一下,发现模型Boy可以播放动画。
d: 过渡条件连接(从一个动画过渡到另一个动画):
(1)将鼠标放在状态单元上,鼠标右键-->Make Transition,创建动画过渡条件,并再次点击在另一个状态单元上,完成过渡条件连接;
(2)点击两个状态之间的连线,右边是一个过渡的效果,可以点击播放,也可以调整动画的融合效果,可以让第一个动画放完再放第二个,也可以放一半放第二个,可以拖动来调整。
下面是一个过渡条件,默认是没有过渡条件的,也就是会自动跳转,我们可以添加条件。
(3)在状态机左边的Parameters面板,里面的参数可以用来控制条件变量,Mecanim支持过渡参数类型Float, Int, Bool, Trigger,首先要创建一个参数,点击+号,选择int类型,名字叫anim_state,默认值是0
(4)创建好参数后,再点击两个状态之间的连线,点击Conditions下面的+号,添加一个条件,就是以anim_state为条件变量,可以Greater、Less、Equals、Not Equal------>0的时候跳转
(5)通过代码来控制动画跳转,创建一个脚本叫anim_test
打开anim_test
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class anim_test : MonoBehaviour { public Animator anim;//关联可以直接拖Boy模型节点到上面,会自动提取自己的Animator组件,是自己节点获得自己组件的另外一种方法
// Use this for initialization
void Start () {
this.anim.SetInteger("anim_state", );//设置参数anim_state的值为0,我们之前也设置了当它等于0的时候会跳转
//this.anim.SetFloat("anim_state", 1.0f);//其他类型的变量设置 } // Update is called once per frame
void Update () { }
}
8.配置完后运行,由于anim_state=0,又Equals---->0,就会一直播放跳跃的动作,我们可以实时地更改Parameters面板下的参数的值,从而实时运行查看动画的跳转路径。
开发过程中:
动画师调出一个角色动画以后,一个模型通过Avator把它映射成Unity简化版的人形骨骼,创建一个Anim Control,帮我们做好动画跳转的状态机。
Anim Control里面还有Anim State,每个Anim State可以通过过渡条件来进行过渡和控制,通过修改过渡条件的变量Anim State可以达到控制动画的目的。动画条件过渡的时候也可以来控制动画缝合,全部都是由可视化来完成的。
这样子,动画师只要调动画,不用写代码,程序员只要通过开关,设置Anim State的值,就能决定去播放哪些动画和切换动画。
关于Unity中新版动画系统的使用的更多相关文章
- unity 对Animator动画系统的研究
unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...
- 【腾讯GAD暑期训练营游戏程序开发】游戏中的动画系统作业
游戏中的动画系统作业说明文档 一.实现一个动画状态机:至少包含3组大的状态节点
- unity中的动画制作方法
Unity中的动画制作方法 1.DOTween DoTween在5.0版本中已经用到了,到官网下载好插件之后,然后通过在项目中导入头using DG.Tweening;即可. 一些常用的API函数 D ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...
- [原]Unity3D深入浅出 - 新版动画系统(Mecanim)
Mecanim概述: Mecanim是Unity提供第一个丰富而复杂的动画系统,提供了: 针对人形角色的简易的工作流和动画创建能力 Retargeting(运动重定向)功能,即把动画从一个角色模型应用 ...
- 关于Unity中Mecanim动画的重定向与动画混合
应用 一个RPG游戏,里面有100种怪物,每种怪物其实都差不多的,行走,跳跃,攻击,难道动画师要调100次动画吗?其实不需要 Unity抽象出人形动画系统,用Unity简化版的骨骼来进行统一的管理,只 ...
- Unity笔记 英保通 Unity新的动画系统Mecanim
Mecanim动画系统是Unity独一无二.强大灵活的人物动画系统.该系统赋予您的人类和非人类人物令人难以置信的自然流畅的动作,使它们栩栩如生.游戏中角色设计提高到了新的层次,在处理人类动画角色中可以 ...
- 使用代码给Unity中的动画片段绑定回调函数
在制作动作游戏的时候,需要播放许多动画,同时还有个需求,那就是动画播放到一定时间时,给一个回调函数,好做对应的状态变更, 我查了一下,发现如果使用的是unity自带的动画系统,要做到这样的话,需要这样 ...
- Unity3d之Mecanim(新版动画系统)
1,动画系统配置,2,代码控制动画 原文地址:http://blog.csdn.net/dingkun520wy/article/details/51247491 1,动画系统配置 创建Animato ...
随机推荐
- Postman调用WebService,包括头验证部分
Postman调用WebService时,Body中选择Raw,最右端选择XML(txt/xml),然后把某个方法显示在页面的xml拷贝到请求框中即可,如下图: 以下是postman中的设置,
- python(47):range和xrange的区别和联系
range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. 比如: >>> range(5)[0, 1, 2, ...
- 用ubuntu的grpb2引导Remix OS或Phoenix OS
Remix OS游戏版,这里下载:http://youxi.jide.com/ 安装简单.我这里要解决的是安装后用ubunu的grub2菜单去引导它. 方法如下: 进入ubuntu系统里修改其grub ...
- 【转】Unity3D中脚本的执行顺序和编译顺序
支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦 ...
- 【C/C++】C/C++中Static的作用详述
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. ❶先来介绍它的第一条也是最重要的一条:隐藏.当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可 ...
- 【Socket】linux高性能网络服务程序
1.mystery引入 1)高性能的网络服务程序分为单线程重复式网络服务.多进程网络服务 .多线程网络服务.线程池网络服务和IO多路复用网络服务等 2)单线程重复式是最基本的一种TCP服务模式,其实现 ...
- vim复制,粘贴,删除,撤销,替换,光标移动等用法
我接触linux的时候,用的是nano这个文本编辑器,个人觉得他的最大优点就是方便,快速.打开文件,修改文件,到退出都十分的快速,简单.这一点上比vi,vim要强,但是nano不能显示彩色字,不能进行 ...
- LeetCode:Sqrt(x) 解题报告
Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. SOLUTION 1: 参见:二分法总结,以及模 ...
- Web通信
客户在浏览器输入一个有效的url地址开始,浏览器会利用socket向url对应的web服务器发送一个TCP请求,这个请求成功一次就需要来回握三次手才能确定,成功以后,浏览器利用socket TCP连接 ...
- fastjson使用TypeReference示例
package junit.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; imp ...