当前位置:网站首页>虚幻——动画蓝图、状态机制作人物走跑跳动作
虚幻——动画蓝图、状态机制作人物走跑跳动作
2022-07-02 06:35:00 【乔安鱼】
一、名词解释
序列——一段动作。
混合空间——混合不同的动作。将多个序列排序播放。
动画蓝图——根据状态播放不同的动画。
二、混合空间制作走跑动作
由于走和跑的动作比较连续,并且都是由速度控制,所以要把待机、走、跑这三个动作混合在一起。
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.状态切换的逻辑关系状态切换时需要用一些变量来控制,这时需要在事件图表中连蓝图来将值输入进变量。
边栏推荐
- MySQL default transaction isolation level and row lock
- How to install PHP in CentOS
- 三相并网逆变器PI控制——离网模式
- Who is better for Beijing software development? How to find someone to develop system software
- Required request body is missing:(跨域问题)
- YOLO物体识别,生成数据用到的工具
- Memories of a chat
- 高考那些事
- 逆变器simulink模型——处理器在环测试(PIL)
- C语言之最小数
猜你喜欢
2837xd代码生成模块学习(1)——GPIO模块
2837xd 代码生成——补充(2)
QT QLabel样式设置
保存视频 opencv::VideoWriter
Supplier selection and prequalification of Oracle project management system
2837xd 代码生成——总结篇
Record the interesting process of using Xray for the first time
Pool de connexion redis personnalisé
三相逆变器离网控制——PR控制
2837xd 代码生成——StateFlow(4)
随机推荐
Navicat remote connection MySQL reports an error 1045 - access denied for user 'root' @ '222.173.220.236' (using password: yes)
在SQL注入中,为什么union联合查询,id必须等于0
Bugkuctf-web16 (backup is a good habit)
Read Day6 30 minutes before going to bed every day_ Day6_ Date_ Calendar_ LocalDate_ TimeStamp_ LocalTime
Record personal understanding and experience of game console configuration
逆变器simulink模型——处理器在环测试(PIL)
Methods of classfile
大学生四六级作文模板(自创版,成功跨过六级)
Pool de connexion redis personnalisé
Junit4运行mvn test 测试套件升级方案
Read 30 minutes before going to bed every day_ day4_ Files
道阻且长,行则将至
2837xd code generation - Supplement (3)
C语言之判断直角三角形
Difference between redis serialization genericjackson2jsonredisserializer and jackson2jsonredisserializer
2837xd 代码生成——补充(2)
C language strawberry
Memories of a chat
Personal experience & blog status
Vs+qt set application icon