您需要 登录 才可以下载或查看,没有帐号?注册
x
Unity有两种动画混合模式:Transition(转换)和BlendTree(混合树)
Transition(转换):用于在给定时间量内从一个动画状态 (Animation State) 平滑转换为另一个状态。转换指定为动画状态机 (Animation State Machine) 的一部分。如果转换迅速,则通常可从一个运动很好地转换为完全不同的运动。
BlendTree(混合树): 用于允许通过按不同程度组合所有动画的各个部分来平滑混合多个动画。各个运动参与形成最终效果的量使用混合参数进行控制,该参数只是与动画器控制器 (Animator Controller) 关联的数值动画参数之一。
要使混合运动有意义,混合的运动必须具有相似性质和时间。混合树 (Blend Tree) 是动画器控制器 (Animator Controller) 中的特殊状态类型。
Transition与BlendTree区别?
简单来说:
Transition
动画A——————动画B 从动画A平滑的过渡到动画B,其间不能混合成新的动画片段。
动画A——————动画B 可以通过动画A和动画B混合出新的动画片段C,D,E…等等。相当于一个动画合成器。
D C E
Transition与BlendTree各自用在什么地方?
Transition:适合用在运动幅度转换比较大的时候,比如从待机到攻击或技能,游戏中攻击或技能需要快速给予玩家反馈,所以用这个效果会比较好。
BlendTree:适合用在一些相似运动中,最简单常见的就是走和跑,复杂的可用于角色表情。
之前我们配置动作都是做成一个个片段,直接使用Transition转换,最近看了些国外做的案列,他们都使用了Transition和BlendTree两者结合的方法,这样配置出来的动画会很自然流畅。
BlendTree讲解
创建BlendTree:
- 右键单击动动画器控制器窗口上的空白空间。
- 从出现的上下文菜单中选择 创建状态 (Create State) > 从新混合树 (From New Blend Tree)。
- 双击混合树 (Blend Tree) 以进入混合树图 (Blend Tree Graph)。
- 混合类型”(Blend Type) 下拉菜单用于选择不同混合类型:
一维混合(1D)
- 一维混合就是根据单个参数混合子运动。
- 通过单击添加动作文件(Add Motion Field) 将动画片段 (Animation Clip) 添加到混合树中。
- 动画片段阈值可以手动设置,也可以勾选(Automate Thresholds)自动设置
- 红色垂直条指参数 (Parameter) 的值。如果在检视器 (Inspector) 底部的预览 (Preview) 中按播放 (Play) 并在示意图中左右拖动红色条,则可以看到参数的值如何控制不同运动的混合。
- 下图中动画A设定阈值为-1,动画B为0,动画C为1,当红色垂直条移动到0的时候,也就是说动画B的权重是最大的,当前就是播放动画B,当红色垂直条移动到-0.5的时候,动画A和动画B各自的权重为50%这时候就是播放动画A和动画B混合出来的新动画。
6.计算阀值 (Compute Thresholds) 下拉菜单会通过从动画片段 (Animation Clip) 中的根运动获取的数据选择来设置阈值。
可供选择的数据有速度 (speed)、速率 (velocity) x、速率 (velocity) y 或速率 (velocity) z 以及角速度 (angular speed)(以度或弧度为单位)。 如果参数 (parameter) 对应于这些属性之一,则可以使用计算阀值 (Compute Threshold) 下拉菜单计算阈值。
属性 | 功能 | Speed(速度) | 根据各个运动的速度(速率的量级)设置其阈值。 | Velocity X(速率 X) | 根据各个运动的速率 (velocity) x 设置其阈值。 | Velocity Y(速率 Y) | 根据各个运动的速率 (velocity) y 设置其阈值。 | Velocity Z(速率 Z) | 根据各个运动的速率 (velocity) z 设置其阈值。 | Angular Speed (Rad)(角速度(弧度)) | 根据各个运动的角速度(以弧度/秒为单位)设置其阈值。 | Angular Speed (Deg)(角速度(度)) | 根据各个运动的角速度(以度/秒为单位)设置其阈值。 | 例如:一个走路动画,每秒移动1.5个单位,而一个慢跑动作每秒移动2.3个单位,而一个跑动动作每秒移动4个单位。选择下拉列表中的“速度”(Speed)选项可以基于这个值为三个动画配置参数范围。所以你看到参数设置为了3.0,混合了慢跑和跑动动画,并且(临界值)稍微偏向慢跑一些。
例:走跑混合
二维混合(2D)
1.二维混合有三个不同的混合类型,有不同的适合用途。它们之间的差异在于计算各个运动影响力的方式。
二维简单方向 (2D Simple Directional):
- 适用于表示不同方向时,如“向前走”、“向行走”、“向左走”和“向右走”,或是“向上瞄准”、“向下瞄准”、“向左瞄准”和“向右瞄准”。
- 可以选择包括位置 (0, 0) 处的单个运动,如“待机”或“向前瞄准”。
- 在这种类型中,相同方向上不应存在多个运动,如“向前走”和“向前奔跑”。
二维任意方向 (2D Freeform Directional):
- 跟简单方向一样,也在运动表示不同方向时使用。
- 在这种类型中,运动集应始终包括位置 (0, 0) 处的单个运动,如“待机”。
- 在这种类型中,相同方向可以具有多个动作,如“向前走”和“向前奔跑”。
二维任意笛卡尔 (2D Freeform Cartesian):
- 最适用于运动不表示不同方向时。使用任意笛卡尔 (Freeform Cartesian) 时,X 参数和 Y 参数可以表示不同概念,如角速度和线速度。例如包括“向前行走而不转弯”、“向前奔跑而不转弯”、“向前行走并右转”、“向前奔跑并右转”等运动。
二维简单反向
二维任意方向
2.通过单击添加动作文件(Add Motion Field) 将动画片段 (Animation Clip) 添加到混合树中。
3.手动设置各个动作片段在平面上的坐标阈值,也可以选中蓝色的点拖动其位置。
4.拖动红点则可以看到参数值如何控制不同运动的混合。
5.圆形的大小对应其权重的大小,当一个红色点移动到表示运动的蓝色点之一上,则您会看到该运动的圆形会达到其最大半径,此时该动作的权重为100%,其他为0。
6.计算位置 (Compute Positions) 下拉菜单会通过从动画片段 (Animation Clip) 中的根运动获取的数据选择来设置位置。可供选择的数据有速度 (speed)、速率 (velocity) x、速率 (velocity) y 或速率 (velocity) z 以及角速度 (angular speed)(以度或弧度为单位)。如果参数 (parameters) 对应于这些属性之一,则可以使用“计算位置”(Compute Positions)下拉菜单计算“位置 X”(Pos X) 和/或“位置 Y”(Pos Y)。 属性 | 功能 | Velocity XZ(速率 XZ) | 根据各个运动的 velocity.x 设置其“位置 X”(Pos X),并根据其 velocity.z 设置其“位置 Y”(Pos Y)。 | Speed And Angular Speed(速度和角速度) | 根据各个运动的角速度(以弧度/秒为单位)设置其“位置 X”(Pos X),并根据其速度设置其“位置 Y”(Pos Y)。 |
而且可以选择计算位置 (Compute Position) -> X 位置 (X Position From) 和/或 计算位置 (Compute Position) -> Y 位置 (Y Position From) 以便一次仅自动计算其中之一(另一个保持不变),从而进行混合和匹配。
属性 | 功能 | Speed(速度) | 根据各个运动的速度(速率的量级)设置其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。 | Velocity X(速率 X) | 根据各个运动的 velocity.x 设置其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。 | Velocity Y(速率 Y) | 根据各个运动的 velocity.y 设置其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。 | Velocity Z(速率 Z) | 根据各个运动的 velocity.z 设置其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。 | Angular Speed (Rad)(角速度(弧度)) | 根据各个运动的角速度(以弧度/秒为单位)设置其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。 | Angular Speed (Deg)(角速度(度)) | 根据各个运动的角速度(以度/秒为单位)设置其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。 |
例如您的参数对应于侧向速率和向前速率,并且有一个平均速率为 (0, 0, 0) 的空闲动画、一个平均速率为 (0, 0, 1.5) 的行走动画以及两个速率分别为 (-1.5, 0, 0) 和 (1.5, 0, 0) 的扫射动画。
从下拉菜单中选择速率 XZ (Velocity XZ) 选项会根据这些速率的 X 和 Z 坐标设置运动的位置。
例:简单表情
多维混合
多维混合用于更复杂的表情制作,利用多个二维和一维混合树组成。
例:复杂表情
- 每个部位有多个动画片段,只能是动画能到达的最大值和最小值。
- 每个部位为一个单独BlendTree分支
- 所有分支合成最终的混合树,利用各项参数控制各部位动画值,从而混合出N个动画
作者:微元素 小云
|