一、名词解释
序列——一段动作。
混合空间——混合不同的动作。将多个序列排序播放。
动画蓝图——根据状态播放不同的动画。
二、混合空间制作走跑动作
由于走和跑的动作比较连续,并且都是由速度控制,所以要把待机、走、跑这三个动作混合在一起。
1.创建混合空间
右键——动画——混合空间1D
选取对应骨骼
改名为“走跑”。
2.制作走跑动作
打开混合空间,在资产详情面板将水平轴名称改为“速度”,最大轴值改为500.
将待机、走、跑动画依次插入到轴中。
按住ctlr拖动就可以看到人物的动作变化。
混合空间就设置完了。
三、动画蓝图
1.创建动画蓝图
右键>动画>动画蓝图
选取对应骨骼。
2.添加状态机
拖拽“输出姿势”的“result”引脚,添加状态机。
3.添加走跑状态
双击状态机,拖拽“entry”添加状态“走跑”
点击“走跑”状态。
走跑姿势的切换是通过人物的速度,所以这里要对输出姿势输入值。
将右侧的混合空间“走跑”拖入并与输出姿势的“result”相连。
拖拽混合空间“走跑”的“速度”引脚,提升为变量“速度”。
接着我们要在事件图表栏中获取人物移动的速度,好将这个值传递给混合空间来控制输出的姿势。
打开事件图表,拖拽“事件蓝图更新动画”的执行引脚新建“?Is Vaild”函数——“尝试获取Pawn拥有者”的返回值与“?Is Vaild”的输入类型相连。
- ?Is Vaild——决定对象是否有效。也就是当玩家不受控制时,便无效。
拖拽“尝试获取Pawn拥有者”返回值新建函数“获取速度”(get velocity)
获取当前玩家的速度。
由于我们走跑混合空间的坐标轴的值是浮点数类型,而获取的速度是向量类型,所以要再转换一下。
拖拽“获取速度”的返回值,新建“向量长度”函数(vecot length)
按住ctrl拖拽“速度”变量与Is Vaild相连,“向量长度”返回值与速度引脚相连。
4.添加待机状态
双击状态机,在entry与走跑状态之间添加一个待机状态。
待机状态与走跑状态相互连接,因为两者需要相互切换。
我们还是通过速度变量来控制。
- 速度>10,切换为走跑状态。
- 速度<10,切换为待机状态。
A.待机—走跑
点击待机到走跑切换按钮。
按ctrl将速度变量拖入
拖拽速度引脚添加“大于”(>)函数,输入值10
大于函数执行引脚与结果函数相连。
B.走跑—待机
点击走跑到待机切换按钮。
按ctrl将速度变量拖入
拖拽速度引脚添加“小于”(<)函数,输入值10
小于函数执行引脚与结果函数相连。
5.添加跳跃状态
跳跃一共有三个状态:起跳、跳起、落下
跳跃与走跑状态的切换是根据人物是否处于“浮空”,因为会有提前取消跳跃的情况,而且这三个状态之间的切换条件都不同,所以不能直接将这三个动作混合,需要创建三个状态。
- 浮空,走跑——跳。
- 不浮空,跳起——落下。
- 播放时间<0.01,落下——走跑;跳——跳起(即播放下一个动作)
A.走跑—跳
点击走跑到跳。
拖拽can enter transition引脚提升为变量,改名为“是否跳跃”。
B.跳——跳起
输入跳动作,新建这个动作的“剩余时间”函数。
拖拽剩余时间返回值,新建小于函数,输入值0.01.
小于函数的执行引脚与结果函数相连。
C.跳起——落下
拖入“是否跳跃”布尔变量,连接“等于”(=)函数。
即为假时切换姿势。
用“不等于”(not Boolean)函数是一样的效果。
D.落下—走跑
落下动作的剩余时间函数,小于0.01时切换状态。
E.获取浮空状态
现在需要回到事件图表,获取人物当前的浮空状态,然后通过是否跳跃变量来控制状态切换。
拖拽“尝试获取Pawn拥有者”返回值,新建“获取移动组件”函数。
拖拽“获取移动组件”返回值,新建“正在掉落”(Is falling)函数
拖入“是否跳跃”变量并与“速度”变量的执行引脚相连,“正在掉落”的返回值与“是否跳跃”相连。
完整逻辑:
动画蓝图需要调整两个部分:状态机、事件图表。
状态机是三层嵌套:
1.状态树(跟行为树类似)
2.该状态动画
3.状态切换的逻辑关系状态切换时需要用一些变量来控制,这时需要在事件图表中连蓝图来将值输入进变量。