zl程序教程

您现在的位置是:首页 >  工具

当前栏目

虚幻——动画蓝图、状态机制作人物走跑跳动作

动画状态 机制 动作 人物 蓝图 虚幻
2023-09-11 14:20:51 时间

一、名词解释

序列——一段动作。
混合空间——混合不同的动作。将多个序列排序播放。
动画蓝图——根据状态播放不同的动画。

二、混合空间制作走跑动作

由于走和跑的动作比较连续,并且都是由速度控制,所以要把待机、走、跑这三个动作混合在一起。

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.状态切换的逻辑关系

状态切换时需要用一些变量来控制,这时需要在事件图表中连蓝图来将值输入进变量。