Mecanim 动画系统(八)混合树(Blend Tree)

1、混合树

在游戏中,游戏角色有时候并不精确地处在某一个状态中,如站立与行走之间的过渡。状态转换是从一个状态平滑转换为另一个状态的一个过程。而混合,则可以看作有多个动画同时进行。

要使用混合,参与混合的动作必须有相似性质和时间。混合,可以看做一种特殊的状态。

我们可以在动画控制器窗口界面右键->Create State->From New Blend Tree。来创建一个新的混合树,如下图

Mecanim 动画系统(八)混合树(Blend Tree)_第1张图片

刚创建好的混合树是没有内容的,如下:

我们可以双击进入混合树的配置,如下

混合树在4.x版本中有4种类型,分别是1D、2D Simple Directional、2D Freedom Directional、2D Freedom Cartesiam

1D表示由一个参数控制的混合树,2D表示由两个参数控制的混合树。

 

2、1D混合树

要使用1D混合树,需要将Blend Type选择为1D。

初始的Parameter是空的,我们需要在动画控制器界面添加参数,然后再在Parameter中选择相应的参数。

我们进行一个行走(walk)和跑步(run)这两个动作的混合,假定一个参数speed。小于1之前是行走,大于1是跑步,设置如下。

首先建立一个Float类型参数,并在监视器面板上选择这个参数,如下

Mecanim 动画系统(八)混合树(Blend Tree)_第2张图片

在Motion中,我们添加两个动画,并拖动对应的两个动画进来,分别是walk和run。

Mecanim 动画系统(八)混合树(Blend Tree)_第3张图片

每个Motion中都有动画片段、阈值和速度这几个参数。

如果勾选上Automate Thresholds(自动阈值),则Motion上的阈值是由系统设置的。

如果我们需要手动阈值,则需要取消勾选Automate Thresholds。

Adjust Time Scale(调整时间比例)可以调整偏度的速度。有均匀速度 (Homogeneous Speed) 和 重设时间比例(Reset Time Scale)两个选项。

当取消勾选Automate Thresholds后,将出来新的选项Compute Thresholds(计算阈值)。

可供选择的数据有速度 (speed)、速率 (velocity) x、速率 (velocity) y 或速率 (velocity) z 以及角速度 (angular speed)(以度或弧度为单位)。如果参数 (parameter) 对应于这些属性之一,则可以使用计算阀值 (Compute Threshold) 下拉菜单计算阈值。

配置好的1个1D混合树如下所示:

Mecanim 动画系统(八)混合树(Blend Tree)_第4张图片

类似的,可以给再加上其他动画,通过阈值来控制动画的混合情况。

 

3、2D混合树

2D混合树有三种不同的类型,它们之间的差异在于计算各个运动影响力的方式。

二维简单方向 (2D Simple Directional)
最适用于运动表示不同方向时,如“向前行走”、“向后行走”、“向左行走”和“向右行走”或是“向上瞄准”、“向下瞄准”、“向左瞄准”和“向右瞄准”。可以选择包括位置 (0, 0) 处的单个运动,如“空闲”或“笔直瞄准”。在简单方向 (Simple Directional) 类型中,相同方向上不应存在多个运动,如“向前行走”和“向前奔跑”。


二维任意方向 (2D Freeform Directional)
此混合类型也在运动表示不同方向时使用,但是可以在相同方向上具有多个运动,例如“向前行走”和“向前奔跑”。在任意方向 (Freeform Directional) 类型中,运动集应始终包括位置 (0, 0) 处的单个运动,如“空闲”。


二维任意笛卡尔 (2D Freeform Cartesian)

最适用于运动不表示不同方向时。使用任意笛卡尔 (Freeform Cartesian) 时,X 参数和 Y 参数可以表示不同概念,如角速度和线速度。示例包括“向前行走而不转弯”、“向前奔跑而不转弯”、“向前行走并右转”、“向前奔跑并右转”等运动。

 

一个典型的2D混合树有x和y两个参数。其中,x代表left和right之间的分量。y代表run和back之间的分量。如下图

Mecanim 动画系统(八)混合树(Blend Tree)_第5张图片

监视器界面如下

Mecanim 动画系统(八)混合树(Blend Tree)_第6张图片

红色点表示两个参数的值,蓝色点表示某个动作的值。红色点越靠近某个蓝色点,说明对应动作的权重越高。

通过设置不同的x和y可以使动作在5个动作之间的某几个动作进行混合,表现出更好的效果。当然,前提是动作能够支持。

你可能感兴趣的:(游戏编程,Unity-Mecanim)