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

相关文章

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4