unity animator event混合树属于哪一层

Posts - 227,
Articles - 0,
Comments - 22
记录自己学习笔记和讨论技术的小窝。
10:05 by 阿诚de窝, ... 阅读,
解决什么问题?
动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画。最好的例子就是Unity4.x自带的示例AngryBots了。
Avatar Mask
下面我们就使用Avatar Mask来实现人物在奔跑中招手的效果。
我们先添加一个人物到场景,同时为其添加一个Animator Controller并设定好跳转条件,如下:
接下来我们添加下面的脚本来控制动画的播放,对了为了不让角色因为播放动画而移动,记得把&Apply Root Motion&取消,方便我们查看动画播放的效果。
添加的脚本如下:
1 using UnityE
2 using System.C
4 public class MaskTest : MonoBehaviour
private Animator _
void Start()
_animator = this.GetComponent&Animator&();
void Update()
if(Input.GetKeyDown(KeyCode.R))
_animator.SetBool("run", true);
if(Input.GetKeyUp(KeyCode.R))
_animator.SetBool("run", false);
AnimatorStateInfo state = _animator.GetCurrentAnimatorStateInfo(0);
if(state.shortNameHash == Animator.StringToHash("Run") && Input.GetKeyDown(KeyCode.J))
_animator.SetTrigger("jump");
接下来我们希望按下空格时人物播放招手动画,但是跑动跳跃的动画不能停止播放。
我们需要添加一个新的Layer来管理招手动画的播放:
同时我们要配置好招手动画,这里的Idle可以不添加任何动画,仅仅表示空就可以了,同时还添加了一个Trigger&wave&表示进入招手动画的条件。
接下来我们设置一下该层,将其权重设置为1:
好了,我们修改一下代码试试看吧:
1 using UnityE
2 using System.C
4 public class MaskTest : MonoBehaviour
private Animator _
void Start()
_animator = this.GetComponent&Animator&();
void Update()
if(Input.GetKeyDown(KeyCode.R))
_animator.SetBool("run", true);
if(Input.GetKeyUp(KeyCode.R))
_animator.SetBool("run", false);
AnimatorStateInfo state = _animator.GetCurrentAnimatorStateInfo(0);
if(state.shortNameHash == Animator.StringToHash("Run") && Input.GetKeyDown(KeyCode.J))
_animator.SetTrigger("jump");
if(Input.GetKeyDown(KeyCode.Space))
_animator.SetTrigger("wave");
运行一下,发现当播放招手动画时其它动画都会停止,该怎么办呢?
答案是我们需要创建一个Avatar Mask来表示我们只希望播放动画的部分,即手部动画播放,其它部分不播放,在Project窗口右击创建一个Avatar Mask文件:
将右手部分以外的区别关闭即可:
这里说一个Transform这个选项,该选项是控制每个骨骼是否参与动画使用的,如果我们的人物有翅膀和尾巴之类的东西就要使用它了。
最后一步我们将这个Avatar Mask拖入Animator Controller的Wave层中即可:
再次运行下游戏,我们需要的效果是不是已经出来了呢。
下面我们来详解一下Layer面板的设置:
动画层的权重,默认的Base Layer必须为1。如果设置为0则当前层的动画不会播放,1则会播放,0-1之间会采用类似融合的情况来播放动画,比如之前的招手的例子,如果设置为0.5则招手动画播放时手部只会抬到脖子附近。
动画遮罩,上方已经详解就不赘述。
动画混合方式:
Override:覆盖,表示当前层的动画会覆盖掉其它层的动画,比如招手播放时右手就不能播放其它的动画了;
Additive:添加,表示当前层的动画的量添加到其它层的动画,比如招手播放时,手部奔跑或站立的甩动也会保留;
开启了该功能后会多出一些选项,如下:
我们可以将该功能看做复制的功能。
Source Layer:指定当前层是哪个层的副本,设定后当前层的状态会和指定层完全一致或完全同步,但是我们可以修改某一个状态的动画。
该功能提供的效果就是两个状态一致的层可以做出一些不同的调整。
Timing:当前层和Souurce层同一个状态使用的动画时间长度不一致时,不勾选复制的层按Source层的时间播放(效果就是复制层动画可能会变快或变慢,Source层动画播放速度不变),勾选则Source层按复制层的时间播放(效果就是Source层动画可能会变快或变慢,复制层动画播放速度不变)。
表示启动IK动画,上一篇文章已经详解就不赘述。1228人阅读
Unity3D教程(84)
Unity技术文章(178)
UDK教学(21)
Unity3D教学(102)
&&&&&动画混合
  状态机之中的状态不仅可以是单个剪辑,也可以是一个混合树。构建和编辑复杂的状态机和混合树,以便完全控制的角色如何运动。Unity编辑器提供强大的工具,用于分割、创建循环和从导入的动画文件中提取轨迹。然后可以把这些动画短片用作一个多层混合树的叶子,或者作为分层状态机中的一种状态。混合树让您只使用几个动画剪辑就能创建各种各样的运动。在混合树编辑器中,您可以定义混合参数并在3D视图中预览混合动画。混合树和动画剪辑一样,可以用作分层状态机中的状态。
  动画工具用于创建多层分层状态机。控制器可以定义任意数量的层。每一层可以使用自己的状态机,也可以与主层共享状态机。层可被覆盖或添加,使用身体遮罩可以定义身体受影响的部分。最后,您可以使用分层状态机把复杂的控制器分解成更小的可重复使用的模块。
  Mecanim的混合树
动画重定向
  将创建的sa_ctl控制器拖到到模型的controller变量中。这样模型就可以播放动作了,也可以将这个控制器拖到给其他模型文件实现动画重定向。
 &&&&注意:此Animator组件中的Apply&Root&Motion选项如果我们勾选了的话,当播放动画时是通过动画运动的幅度来改变角色的Transform的,如果我们不勾选,我们就可以用脚本设定此角色的Tranform。
  如果在Animator中我们勾选了Apply&Root&Motion,我们不必修改角色的Transform,依靠角色的动作本身的设计就能改变角色的Transform。但是如果我们没有勾选它,那我们就只能依靠程序来动态的改变其Transform,就像老式的动画系统一样。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:326232次
积分:5792
积分:5792
排名:第4054名
原创:259篇
转载:36篇
评论:52条
(49)(96)(55)(10)(23)(24)(16)(7)(11)(4)暂没有新消息哦~
&多维混合树与脸部动画
多维混合树与脸部动画
开通极客学院VIP会员,免费观看全部会员课程
最低 21.6 元 / 月
VIP会员尊享特权
观看全部会员课程
720P高清视频下载
已有会员账号,请
视频太卡?试试切换线路
本课时主要介绍了BlendTree动画混合树的概念以及讲解了如何在Inspector检视窗口对混合树进行配置
本课时主要讲解了一维混合树的使用方式,结合实例的方式,用“多层一维混合树”开发了一个人物走跑转弯的混合控制系统
本课时主要讲解了二维混合树的使用方式,结合实例的方式,用“二维混合树”重新开发了一个人物走跑转弯的混合控制系统
本课时主要讲解了Unity5.0所新推出的Direct BlendTree 多维混合树的使用,并且通过创建一个脸部动画控制器的方式,为大家详细讲解了它的作用与用法。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [多维混合树与脸部动画]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [多维混合树与脸部动画]
服务热线:400-678-8266}

我要回帖

更多关于 unity animator 教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信