有时你需要混合播放2个或多个动画
比如你有向左,向前,向右奔跑的动画
但你想要得到稍微向左,向前或向右跑的动画
另外一个常见的例子是:你有行走和奔跑的动画
但你想让角色以这个动画之间的速度移动
Blend Tree可以实现这些功能
创建Blend Tree的方法是 邮件点击 “Animator"视窗的空白处
选择Create State ->From New Blend Tree
状态的"Motion"选项变成了"Blend Tree"而不是之前的单一动画
双击状态可以对"Blend Tree"进行编辑
左上角的导航提示我们正在编辑Blend Tree
左上角的导航提示我们正在编辑"Blend Tree"
点击 "Base Layer"可以退出"Blend Tree"编辑模式
选中"Blend Tree"后 可以在"Inspector"中看到它的属性
首先你注意到"Blend Tree"有名称属性
Blend Tree的名称可以于状态的名称不通
下一个属性是Blend Type
我们先来讲"1D Blend Tree"
一会儿再讲解其他"2D Blend Tree"
"1D Blend Tree"通过单一单参数控制动画的播放
对于之前提到的向左-向右奔跑的例子 它的参数可能是方向或角速度
对于行走-奔跑的例子 它的参数可以是速度
下面是 "Motion"列表
点击这里的"+"按钮 可以添加"Motion"
点击后会提示"Add Motion Field"或"New Blend Tree"选项
选择New Blend Tree会嵌套另一个"Blend Tree"让你可以根据更多的参数来混合动画
但是如果你需要这样做的话 使用"2D Blend Tree"会更方便
所以我们只讲解"Add Motion FIeld"选项
每个Motion栏都代表一个动画
你可以直接拖入动画文件 或是通过后面的圆圈按钮选择文件
或是通过后面的圆圈按钮选择文件
每个"Motion"栏有3个属性
"Threshold"是参数的阀值 表示这个动画混合比例
举个例子 比如你有行走和奔跑的动画
它们的"Threshold"分别为5和10
如果你把速度参数设为10 那么"Blend Tree"只会播放奔跑的动画
如果速度设为7.5 那么行走和奔跑动画会以50/50的比例混合播放
下一个属性是Time Scale"表示动画播放的速率
它跟状态中的Speed参数作用相同
最后一个选项决定动画的左右是否对调(动画镜像)
添加一个"Motion"后 会在Motion在列表上面显示蓝色交叉样式的图表
这张图在标尺上显示每个"Motion"的"Threshold"值
最小值在左边,最大值在右边
你可以通过图表中的红色进度条,预览动画混合的过程
如果你像要改变"Motion"的顺序,可以拖拽它的最左侧
在"Motion"列表下面还有一些属性,帮助你调整"Motion"的属性
通常先把所有需要的"Motion"和对应的动画都添加后再进行设置
如果勾选了"Automate Thresholds"选项
那么所有的Threshold"值将变更为固定的,无法进行修改
如果不勾选它,那我们就可以使用下面2个属性Compute Thresholds 、Adjust Time Scale
Compute Thresholds 会计算每个"Motion"的Threshold
它会根据你选择的Root Motion的属性进行计算
这些属性包括速度,速度X,速度Y,速度Z,角速度(弧度) 角速度(角度)
由于Blend Tree的Threshold"通常会根据这些Root Motion的属性而定
所以这几个属性也经常作为动画参数使用
使用Adjust Time Scale可以让每个动画以均匀速度播放
也就是说每个动画的播放速度都与"Root Motion"的播放速度相同
2D Blend Tree与 1D Blend Tree非常类似
但会根据2个参数来混合播放动画 而不是一个参数
这里有3中类型的2D Blend Tree
其中的2个是根据方向的 它们是2D Simple Directional 和2D Freeform Directional
它在参数不表示方向时使用
2D Simple Directional 在移动动画根据方向参数进行混合时使用
并且要每个方向都有动画,比如有向前走,向后走,向左走等等
2D Freefrom Directional"与它类似 但它不能在同一个方向中包含多个动画
但它不能在一个方向中包含多个动画
比如向前走和向前跑
2D Freefrom Cartesian在参数不表示方向时使用比如速度和角速度
这3个2D Blend Tree的工作方式相同
当你选择好类型后,要指定表示X轴和Y轴的参数
对于Direciton类型 X轴参数可能是速度X
Y轴参数可能是速度Z
对于Freeform Cartesian类型,可选择的更多
当你制定好参数 下一步要添加"Motion"
跟1D Blend Tree一样,可以添加另一个Blend Tree或Motion
与1D Blend Tree不同的是"Motion"的添加顺序不受限制
当你添加好"Motion"后 这张图表会根据每个"Motion"的"Threshold"显示它们的位置
这还是与"1D Blend Tree相同 但因为图标是基于"X/Y Threshold" 两个值的 所以图表是2D的
可以在图表中通过拖拽调整每个"Motion"的位置
或直接给"Threshold"赋值
这与1D Blend Tree中的Compute Thresholds的选项功能相同
但它是根据两个参数计算的
1D Blend Tree使用红色进度条预览动画
而2D Blend Tree通过拖拽红点的位置来预览动画