UnrealEngine蓝图进阶学习笔记(五):生命增减死亡

2023-10-13 09:10

本文主要是介绍UnrealEngine蓝图进阶学习笔记(五):生命增减死亡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次记录(终于)记得启用了Mackdown标题功能,发现四#标题与粗体字大小适用于大标题,五#字体大小相当于粗体适用于小标题,此后一并沿用;

在该节中实现角色及敌人生成并承受伤害的功能,一并实现各角色触发死亡后的事件处理,及增加了回血道具;

一、创建生命值与受害伤害功能
1.创建变量

在角色及敌人蓝图创建变量Health(浮点,值100),MaxHealth,(点亮,浮点,值100)IsDead(布尔)至角色类;分别编辑事件图表初始化生命值;
在这里插入图片描述

2.分别创建函数ReduceHealth在这里插入图片描述
3.编辑事件图表

在这里插入图片描述
此时测试项目将分别显示生命值,且伤害系统正常运行,测试完毕后删除PrintString节点;

二、死亡判定与死亡动画的触发
4.分别编辑人物蓝图的事件图表

在这里插入图片描述

5.分别编辑动画蓝图的事件图表

获取死亡状态并保存至蓝图本地;
在这里插入图片描述

6.人物动画蓝图编辑动画图表

新建死亡状态机并编辑
在这里插入图片描述
注意勾选掉死亡动画的Loop设置
在这里插入图片描述

7.人物动画蓝图编辑状态机转换线

双击以上状态机中转换线的双向箭头
在这里插入图片描述

8.蜘蛛动画图表编辑

此处蜘蛛动画中带有蒙太奇片段指定,故不方便在状态机中加入死亡动画(追踪

攻击动画仍会无条件触发);添在动画图表加BlendPosesByBool节点;右侧拖拽死亡动画(注意勾选掉Loop循环);
在这里插入图片描述
此时测试项目发现角色与蜘蛛死亡后均能触发死亡动画,但也仍可移动与射击;

三、角色与敌人死亡后的初步处理

设置死亡后移动、瞄准、冲刺、射击等功能均禁止使用;

9.编辑死亡状态判断宏

人物蓝图及蜘蛛蓝图中均新建宏IsDeadMacro;
在这里插入图片描述

10.应用该宏

在事件图表中除手柄输入、初始化生命值外模块中均插入宏(包括判断键盘输入模块、开火模块、冲刺模块、判断冲刺射击最大值模块、应用伤害值模块),连接其false引脚;
在这里插入图片描述
在蜘蛛蓝图中仅判断伤害处引用
在这里插入图片描述

11.设置停火状态时的死亡设置

考虑到开火时死亡的状态,将停火节点StopFiringWeapon拖拽至(应用伤害并判断死亡状态模块)设置IsDead变量后;
在这里插入图片描述

12.设置蜘蛛的死亡设置

编辑CanAttack函数,添加死亡状态判断;
在这里插入图片描述
编辑蜘蛛死亡后设置,在(应用伤害并判断死亡状态模块)设置IsDead变量后停止移动并渐变退场且延迟销毁Actor(ReverseFromEnd节点);(可将渐变入场处Play节点改为PlayFromStart节点)
在这里插入图片描述
此时测试项目,玩家死亡后停止一切功能实现(但仍可播放收枪音效),但蜘蛛将继续攻击;蜘蛛死亡后Actor被销毁则不再检测碰撞,玩家可在地图自行移动(不销毁则阻拦地图不可移动);

四、完善死亡后收枪音效逻辑
13.为收枪音效触发设置条件

编辑StopFiringWeapon函数,添加条件分支,添加函数输入引脚PlayStopFiringSound;
在这里插入图片描述
在函数处点击右键,查找所有引用,编辑勾选播放的条件;
在这里插入图片描述
第三处(死亡状态)引用不能简单的勾选,应判断下死亡时是否为开火状态,若为则停火并播放收枪音效,否则不播放;
在这里插入图片描述
此时测试项目角色死亡时收枪音效播放正常,不再有可继续开火收枪的bug;

五、事件分发器的介绍与使用
13.新建事件分发器PlayerDead

所有订阅该派发器的Actor都将跨蓝图接受此派发器发送的消息;拖拽事件分发器至蓝图,选择调用;
在这里插入图片描述

14.绑定事件分发器

创建CastToBP_ShootSpider_player,BindEventToPlayerDead,AddEvent(添加自定义事件)节点;或在CastToBP_ShootSpider_player节点引脚搜索AssignPlayerDead引出后两节点;新建IsPlayerDead变量;
在这里插入图片描述

六、完善敌人使其不再攻击死后的玩家
15.调用玩家死亡状态

人物死亡后蜘蛛继续进行攻击,可选择在蜘蛛蓝图中添加停止攻击蒙太奇的节点,也可选择在动画蓝图中每帧判断条件并停止;此处选择后者解决;在动画蓝图中敌人参照右键搜索GetIsPlayerDead提升成变量;
在这里插入图片描述

16.停止攻击玩家动作

在这里插入图片描述

考虑在攻击蒙太奇播放中玩家死亡的状况,在动作图表中新添加BlendPosesByBool节点;
在这里插入图片描述
此时测试项目,玩家死亡后蜘蛛的攻击动作停止并保持静止;但攻击音效还在继续播放;查找发现此时一直符合蜘蛛攻击的条件,修改蜘蛛的攻击函数,bug解决;
在这里插入图片描述

七、给敌人死亡添加Ragdoll布娃娃效果
17.修改碰撞设置

碰撞预设选中Ragdoll,再选回Custom自定,勾选Visibility;
在这里插入图片描述

18.启用布娃娃效果

新建SetRagdollEffect函数;SetSimulatePhysics节点启用模拟物理;AddImpulse(添加冲量)节点提供冲击力(引脚分别为施加目标、冲击力方向、施加骨骼、是否改变速度,改变时忽略质量提供更好的打击效果);GetSocketRotation(获取插槽旋转);GetForWardVector(获取向前向量)节点;
在这里插入图片描述

19.调用该Ragdoll效果

编辑事件图表,添加死亡后行动事件
在这里插入图片描述

八、角色低生命值时的音效播放
20.创建自定义事件LowHealthNotice

将事件节点挂载到节点链上
在这里插入图片描述

21.创建播放音效函数

PlayLowHealthSound函数
在这里插入图片描述

StopLowHealthSound函数:
在这里插入图片描述

22.编辑事件图表

在这里插入图片描述

编辑死亡后事件
在这里插入图片描述

九、加血道具的创建、掉落与拾取

在“Blueprints-Pickups”中新建Actor蓝图BP_HealthTool;选中“Effects-Pick-ups”中十字形道具在蓝图中自动添加为粒子组件并作为根节点;添加Sphere Collision球性胶囊体,z轴上移50;

添加点光源,z轴上移50;颜色改为橙色;衰减半径改为500;

拾取道具功能:仅给主角加血、满血时不拾取、拾取后增加血量、增加拾取声音、销毁道具本身;

22.改变人物蓝图事件图表

将HeahthChange事件放置于Reduce Health函数中 ;
在这里插入图片描述
在这里插入图片描述

23.创建加血函数

新建AddHealth函数
在这里插入图片描述

24.编辑道具蓝图

在这里插入图片描述

25.编辑蜘蛛蓝图

新建SpawnHealthTool函数,提升变量DropFrequercy;节点SpawnActor(From Cast) NONE;
在这里插入图片描述

编辑事件图表
在这里插入图片描述

此时测试项目,蜘蛛死亡后原地生成道具,非满血状态下拾取可加血;

总结:
(1).触发伤害及死亡功能

应用伤害功能通过EventAnyDamage节点应用伤害值并改变生命值起效,判断生命值为0时设为死亡状态,由此条件触发死亡后一系列事件;

在动画蓝图中尝试获取Pawn拥有者->类型转换为Player->设置为玩家类型的参数->引用参数GetIsDead值获取人物实时状态并播放相应动作;再其动画图表中通过Locomotion编辑状态机切换总览(Movement到Dead状态);在具体状态机中则编辑其输出的动画;

编辑状态机间的转换线可为状态切换设置条件;

在动画蓝图的动画图表中,使用BlendPosesByBool(按布尔混合姿势)节点实现以IsDead参数确定输出动画的效果;

(2).蜘蛛死亡事件

蜘蛛死亡后相续触发DeactiveAlMovement节点停止Al的移动,使用ReverseFromEnd节点实现渐变退场的动画,并用DestoryActor节点延迟销毁该Actor;

(3).事件分发器

事件分发器犹如流平台上的频道,对订阅该频道的用户事件分发器将实时跨蓝图通知指定的触发事件,此处用来向蜘蛛通知玩家死亡的事件;

在玩家蓝图中死亡事件中调用PlayerDead分发器;

在蜘蛛蓝图中使用BindEventToPlayerDead(绑定事件到PlayerDead)节点绑定接受玩家死亡的通知,并在事件引脚处新建自定义事件PlayerDead,设置IsPlayerDead变量值;

在蜘蛛蓝图中则通过蜘蛛敌人参照引出GetIsPlayerDead提升成变量以获取角色死亡信息;继而在动画蓝图中由该变量及BlendPosesByBool(按布尔混合姿势)节点实现玩家死亡后停止攻击的效果;

(4).Ragdoll布娃娃效果

布娃娃效果作用于骨骼网络体,使之可收到指定向量力的冲刺展示击退效果;需要在蜘蛛蓝图的视图中编辑碰撞预设,在Ragdoll效果中将Visibility勾选;

SetRagdollEffect函数中实现击退效果,主要使用SetSimulatePhysics节点启用模拟物理;AddImpulse(添加冲量)节点提供冲击力;其中通过获取玩家指定插槽获取方向向量并放大指定倍数来施加冲击力度;

(5).低生命值的音效通知

低生命值时相应音效的触发由自定义事件实现,创建出LowHealthNotice事件后及可在事件图表的节点链中以函数形式挂载使用;具体事件变现则放置于该自定义事件节点后,比如判断生命值大小并通过DoOnce节点单次播放濒死音效,恢复高生命值后重置DoOnce节点以便下次音效的触发;

(6).添加可拾取道具

新建蓝图设置骨骼网络体并在蓝图中赋予胶囊体于光源;

(在事件开始重叠节点链后)实现该道具的效果:

​ 1.仅给主角加血:通过IsPlayer函数判断碰撞体是否为玩家,否则置假;

​ 2.满血时不拾取:转换为玩家类型并get到目前生命值与最大值,相等时True引脚置空;

​ 3.拾取后增加血量:从人物蓝图中拖取AddHealth节点于道具蓝图中实现;

​ 4.增加拾取声音::PlayerSound2D节点生成播放指定音效;

​ 5.销毁道具本身:通过DestoryActor节点实现;

设置该道具的出现场景(蜘蛛死亡后概率掉落):

新建SpawnHealthTool函数,使用分支节点中及随机浮点数与指定小数变量实现概率生成拾取道具的效果;与SpawnActor BP_HealthTool节点与GetActorTransfor节点获取原地位置在原地生成道具;

将该函数挂载与蜘蛛死亡的事件,实现死亡后生成;

这篇关于UnrealEngine蓝图进阶学习笔记(五):生命增减死亡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/202183

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key: